{"openapi":"3.1.0","info":{"title":"nohumans.directory API","version":"1.0.0","description":"Machine-readable registry of paid (x402) APIs and datasets with probe verification, paid delivery verification with on-chain proof, and reputation scoring. Agents check it before spending money. Field semantics in full: https://nohumans.directory/llms.txt","contact":{"email":"hello@nohumans.directory"},"license":{"name":"CC-BY-4.0 (directory data)","identifier":"CC-BY-4.0"},"x-guidance":"Free discovery: GET /v1/discover?q= to find paid x402 services by need, GET /v1/listings/{id} for the full record, GET /v1/resolve?url= when you already hold an endpoint URL. Paid routes (x402 v2, USDC on Base): GET /v1/listings/{id}/verdict $0.005; GET /v1/listings/{id}/purchases $0.01; POST /v1/listings/{id}/verify-now $2 / $5 (listing owners only); GET /v1/demand/clusters $0.25; GET /v1/demand/report $2. Every fact the verdict folds in is free on the listing record. Prefer the MCP server at /mcp if your framework speaks it."},"servers":[{"url":"https://api.nohumans.directory"},{"url":"https://nohumans.directory"}],"x-mcp":{"endpoint":"https://api.nohumans.directory/mcp","transport":"streamable-http","tools":["find_paid_service","get_service_details","resolve_endpoint","what_agents_are_asking_for"]},"paths":{"/v1/discover":{"get":{"summary":"Search listings (verified ranked first, then score, then price)","parameters":[{"name":"q","in":"query","schema":{"type":"string"},"description":"Semantic query — describe the actual need in words; improves the directory's demand data"},{"name":"category","in":"query","schema":{"type":"string"},"example":"data.fx"},{"name":"max_price","in":"query","schema":{"type":"number"}},{"name":"min_score","in":"query","schema":{"type":"number","minimum":0,"maximum":1}},{"name":"limit","in":"query","schema":{"type":"integer","maximum":50,"default":10}}],"responses":{"200":{"description":"Ranked results","content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"},"results":{"type":"array","items":{"$ref":"#/components/schemas/ListingSummary"}}}}}}}},"security":[]}},"/v1/listings/{id}":{"get":{"summary":"Full listing record (schemas, reputation, observed 402 terms, paid verification)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Listing detail","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListingDetail"}}}},"404":{"description":"Not found or delisted"}},"security":[]},"patch":{"summary":"Edit listing metadata (never resets verification)","security":[{"claimToken":[]},{"bearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Updated"},"401":{"description":"Teaching 401: names the claim flow"}}},"delete":{"summary":"Self-serve delist (same auth as PATCH)","security":[{"claimToken":[]},{"bearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Delisted"},"401":{"description":"Unauthorized"}}}},"/v1/listings/{id}/history":{"get":{"summary":"Every real status change for one listing, with reasons","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Transition log"}},"security":[]}},"/v1/listings":{"get":{"summary":"Enumerate listings (stable order, paginated) — not ranked search","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","maximum":200,"default":50}},{"name":"offset","in":"query","schema":{"type":"integer","default":0}},{"name":"status","in":"query","schema":{"type":"string","enum":["verified","unverified","failing","delisted","all"]},"description":"Defaults to active (verified, unverified, failing)"}],"responses":{"200":{"description":"total, count, limit, offset, next_offset, results"}},"security":[]},"post":{"summary":"Submit a listing (lands unverified; first probe within about two minutes). Free for the first 5 per registered domain, then $0.25 USDC per new listing (x402)","description":"Submitting is free for the first 5 listings per registered domain (api.example.com and www.example.com both count as example.com; on shared hosts such as vercel.app or workers.dev, each app's or account's own subdomain counts as its domain). Each further new listing costs $0.25 USDC on Base (since 2026-09-28; $0.50 before), paid over x402 on the same POST: over the allowance, an unpaid POST answers 402 with the terms, and the paid retry returns 201. The submission is validated before any charge, so a rejected submission is never charged. Edits, claims, an endpoint that is already listed, and re-listing an endpoint that was listed before are free. Listings already in the directory count toward the five and never pay. The fee buys the entry, never a status, a score or a place in the order. Since 2026-09-25.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","description","endpoint_url","category","price_amount"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"endpoint_url":{"type":"string","format":"uri","description":"https only; private IPs rejected"},"category":{"type":"string"},"price_amount":{"type":"number","minimum":0},"price_currency":{"type":"string","default":"USDC"},"chains":{"type":"array","items":{"type":"string"},"default":["base"]},"request_schema":{"type":"object"},"response_schema":{"type":"object"},"sample_query":{"type":"string","description":"Free/cheap probe URL; must not equal endpoint_url"},"submitter_email":{"type":"string"}}}}}},"responses":{"201":{"description":"Created. SAVE claim_token — shown once; it is the edit credential (x-claim-token, x-edit-token, or Authorization: Bearer)."},"400":{"description":"Validation failure, reason stated"},"402":{"description":"Submission fee due: this registered domain already has 5+ submitted listings. PaymentRequired (x402 v2, $0.25 USDC on Base) in the PAYMENT-REQUIRED header and the body; retry the same POST with payment and receive the 201. Also returned, uncharged and with an error field, if a paid submission cannot be created."},"409":{"description":"endpoint_already_listed"}},"security":[]}},"/v1/resolve":{"get":{"summary":"Pre-spend check of a URL you already hold: the full record, or not listed","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","format":"uri"}}],"responses":{"200":{"description":"match: active | delisted | not_listed (not_listed means never checked here, NOT unsafe)","content":{"application/json":{"schema":{"type":"object","properties":{"match":{"type":"string","enum":["active","delisted","not_listed"]},"detail":{"$ref":"#/components/schemas/ListingDetail"}}}}}}},"security":[]}},"/v1/attestations/{id}":{"get":{"summary":"Signed record behind a paid verdict's verification.attestation (free)","description":"Compact JWS (EdDSA/Ed25519, key at /.well-known/jwks.json) over { listing_id, endpoint_url, issued_at, verification, subject, valid_until }, JCS-canonical. x402 WG draft verifier schema, PR #6.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9a-f]{32}$"}}],"responses":{"200":{"description":"{ id, listing_id, alg, key_url, jws, payload, issued_at, valid_until, expired }"},"404":{"description":"No such record"}},"security":[]}},"/v1/stats":{"get":{"summary":"Public statistics with stated bases (paid verification outcome map included)","responses":{"200":{"description":"See llms.txt for field semantics"}},"security":[]}},"/v1/demand":{"get":{"summary":"What agents search this directory for, aggregated (free tier: complete but delayed)","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":1000,"default":100},"description":"Page size for top_needs. Without limit/offset the whole feed is returned (first page only once it exceeds 5 MB)."},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"default":0},"description":"Start of the page in rank order; each page says next_offset."}],"description":"Every search hitting the directory over a 30-day window, with three exclusions published rather than applied silently: catalogue enumeration (queries under 5 characters), sellers checking their own rank (clients that also edit listings — counted separately as self_monitoring_searches), and a floor: a term appears once at least 1 distinct non-seller client IP asked it. The window ends a week behind live while the paid tier is on sale (a day when it is not; delay_hours and window_ends_at in the response say which); the free tier is the same shape and the same exclusions as the paid one over a window that has already closed, never a trimmed live feed. Client IPs are a ceiling on independent demand, never a count of buyers.","responses":{"200":{"description":"window_days, delay_hours, window_ends_at, covered_days, policy_epoch, coverage_note, withheld {identifying_terms, manually_withheld, seller_only_terms, single_searcher_terms_published}, k_anonymity_floor, total_queries, distinct_client_ips, top_needs (lookups of a named listing excluded; each with catalogue_status and catalogue_top: the listings our own search returned for the term; not_checked_yet means not searched, not nothing found), top_category_filters, named_listing_lookups (searches for one listed service by its own name, asked almost only by clients that searched nothing else; listed apart, not demand), named_listing_lookup_rule, scripted_rotation (terms asked by many client IPs almost all of which searched only once in the window: one caller on rotating addresses; listed apart, not demand), scripted_rotation_rule, note"}},"security":[]}},"/v1/demand/clusters":{"get":{"summary":"Demand clusters, current window, grouped by meaning ($0.25 USDC on Base, x402)","description":"The same demand data without the free tier's week of delay (rebuilt every 15 minutes; generated_at says when) and with queries grouped by meaning rather than exact wording. Paid over x402 on Base. On sale since 2026-09-13 at $0.25 USDC on Base. The privacy floor is identical on both sides of the paywall — money buys currency and the clustering, never raw queries, client identifiers, or anything per-client. A cluster that cannot clear the floor is reported as a count of what was withheld.","responses":{"402":{"description":"Payment required. PaymentRequired object in the PAYMENT-REQUIRED header and the body, identical. Amount 250000 atomic USDC."},"403":{"description":"paid_tier_not_live — returned only if the tier is taken offline. Free aggregate tier: GET /v1/demand"},"503":{"description":"demand_snapshot_not_built_yet / demand_snapshot_stale / demand_snapshot_incomplete — the stored copy is missing, older than 45 minutes, or more than 5% of its searches are not grouped yet; nothing is offered for sale and no payment is taken. Retry-After is set."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.250000"},"protocols":[{"x402":{}}],"offers":[{"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","amount":"250000","payTo":"0xA733875f2F7E8A2817040B5c60B63Ae07D58a1d6","maxTimeoutSeconds":60}]}}},"/v1/demand/report":{"get":{"summary":"Demand report for people: every current need, grouped, with the verified listings that answer it today ($2 USDC on Base, x402)","description":"Bought from https://nohumans.directory/state/demand with a browser wallet (gasless EIP-3009 authorization). Same data rules as /v1/demand/clusters. Rebuilt every 15 minutes (generated_at). answered_now is the directory's own search for the need, re-run about once a day for the 1,000 highest-ranked needs (answered_now.checked_at); null for a need not checked yet.","responses":{"200":{"description":"report, edition, generated_at, window, totals, privacy, how_to_read, needs[{need, asked_as, client_ips, searches, seller_self_checks, results_when_asked, categories, answered_now}], named_listing_lookups[{term, searches, client_ips, share_asking_only_this_service}]"},"402":{"description":"Payment required. PaymentRequired object in the PAYMENT-REQUIRED header and the body, identical. Amount 2000000 atomic USDC."},"503":{"description":"demand_snapshot_not_built_yet / demand_snapshot_stale / demand_snapshot_incomplete — the stored copy is missing, older than 45 minutes, or more than 5% of its searches are not grouped yet; nothing is offered for sale and no payment is taken. Retry-After is set."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"2.000000"},"protocols":[{"x402":{}}],"offers":[{"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","amount":"2000000","payTo":"0xA733875f2F7E8A2817040B5c60B63Ae07D58a1d6","maxTimeoutSeconds":60}]}}},"/v1/changes":{"get":{"summary":"Status-change feed (CC-BY-4.0). Poll with ?since=","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","maximum":500,"default":500}},{"name":"since","in":"query","schema":{"type":"integer","description":"unix seconds"}}],"responses":{"200":{"description":"Changes newest-first with reason vocabulary in note"}},"security":[]}},"/v1/reports":{"post":{"summary":"Report a real paid call's outcome (payment + payer signature required)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["listing_id","ok","tx_hash","payer_signature"],"properties":{"listing_id":{"type":"string"},"ok":{"type":"boolean"},"tx_hash":{"type":"string","description":"Your payment's tx on Base"},"payer_signature":{"type":"string","description":"EIP-191 personal_sign over the canonical message the API echoes back (message_to_sign) on incomplete attempts"},"detail":{"type":"string","maxLength":500}}}}}},"responses":{"201":{"description":"Recorded; counts toward ranking only at 3+ distinct third-party payers"},"400":{"description":"Validation failure with message_to_sign when signature is the gap"},"429":{"description":"Rate limited"}},"security":[]}},"/state.json":{"get":{"summary":"Report index: every dated report with its title, published date and JSON twin (CC-BY-4.0)","responses":{"200":{"description":"document, html, reports[{path, url, title, published, twin, kind}]"}},"security":[]}},"/methodology.json":{"get":{"summary":"The rules as data, generated from the constants the directory runs on","responses":{"200":{"description":"probe_tiers, status_rules, pass_rate_24h, sweep_timeout_guard, verdict, paid_routes, sections"}},"security":[]}},"/state/paid-verification.json":{"get":{"summary":"Dated paid-delivery census report, machine-readable twin (CC-BY-4.0)","responses":{"200":{"description":"Frozen census figures + live block"}},"security":[]}},"/state/the-ledger.json":{"get":{"summary":"30d USDC payments on Base to every listed seller, from our own index; x402-signed vs plain vs other; daily series (CC-BY-4.0, computed live)","responses":{"200":{"description":"totals, shape (sampled), daily[], not_seen[]"}},"security":[]}},"/v1/listings/{id}/claim":{"get":{"summary":"Claim flow explained (read-only; issues nothing — since 2026-08-30)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"origin_status, challenge_active, next, instructions"},"404":{"description":"Not found or delisted"}},"security":[]},"post":{"summary":"Verify proof-of-control against the active challenge; on success returns the private edit token once","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email"],"properties":{"email":{"type":"string"}}}}}},"responses":{"200":{"description":"ok, origin: claimed, edit_token (send as x-claim-token)"},"403":{"description":"proof_not_found"},"409":{"description":"no_challenge — request one first"},"429":{"description":"Rate limited"}},"security":[]}},"/v1/listings/{id}/claim/challenge":{"post":{"summary":"Mint a proof-of-control challenge token (valid 24h; never a credential; previous challenge stays valid 24h)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"token, valid_for_seconds, instructions"},"429":{"description":"50 per hour per IP"}},"security":[]}},"/v1/listings/{id}/verdict":{"get":{"operationId":"getVerdict","summary":"Pre-spend verdict for one listing (paid, x402, $0.005 USDC on Base).","description":"Returns pay / caution / avoid with printed reasons, built from probe history, payTo age and stability, our own paid-delivery outcome, and the verb that produced the 402. Unpaid requests receive 402 with PaymentRequired in the PAYMENT-REQUIRED header and the body. Rule: https://nohumans.directory/methodology#verdict","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Listing id as returned by /v1/discover or /v1/listings.","example":"9a8bf56d-2fc"}],"responses":{"200":{"description":"Verdict (after settlement; PAYMENT-RESPONSE header carries the receipt).","content":{"application/json":{"schema":{"type":"object","properties":{"listing_id":{"type":"string"},"endpoint_url":{"type":"string"},"verdict":{"type":"string","enum":["pay","caution","avoid"]},"reasons":{"type":"array","items":{"type":"string"}},"self_referential":{"type":"boolean","description":"nohumans.directory operates this endpoint; the verdict is not independent and never better than caution"},"as_of":{"type":"integer"},"status":{"type":"string"},"verified_via":{"type":["string","null"]},"probe":{"type":"object"},"payto":{"type":"object"},"onchain_30d":{"type":"object"},"paid_verification":{"type":"object"},"price":{"type":"object"},"rule":{"type":"string"},"verification":{"type":["object","null"],"description":"x402 WG draft verifier object (PR #6); our verdict is the recommendation citing it"},"verification_schema":{"type":"object"},"verification_note":{"type":"string"}},"required":["listing_id","verdict","reasons","as_of","rule"]}}}},"402":{"description":"Payment required. PaymentRequired object in the PAYMENT-REQUIRED header and the body, identical. Also returned, with an `error` field and without settlement, when a payment header is present but the listing id is unknown — an unknown id is never charged."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}],"offers":[{"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","amount":"5000","payTo":"0xA733875f2F7E8A2817040B5c60B63Ae07D58a1d6","maxTimeoutSeconds":60}]}}},"/v1/listings/{id}/purchases":{"get":{"operationId":"getPurchaseHistory","summary":"Purchase history for one listing (paid, x402, $0.01 USDC on Base).","description":"Every real USDC purchase the directory has made of this listing, oldest first — outcome, live quote vs listed price, settlement tx on Base, JSON/schema validity, freshness, normalised body hash — plus the consecutive-pair deltas (delivery held/regressed/recovered, price held/moved with quote_delta_usdc, body same/changed/no_hash). The verdict is a rule applied to this series; this is the series. Unpaid call answers 402 with terms in the PAYMENT-REQUIRED header and the body. Rule: https://nohumans.directory/methodology#purchases","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Listing id as returned by /v1/discover or /v1/listings.","example":"0b1cb988-58c"}],"responses":{"200":{"description":"Paid. { listing_id, endpoint_url, status, as_of, summary, purchases[], pairs[], basis, rule }"},"402":{"description":"Payment required. PaymentRequired object in the PAYMENT-REQUIRED header and the body, identical. Amount 10000 atomic USDC. A paid request for an unknown id answers 402 with error listing_not_found, never charged."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}],"offers":[{"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","amount":"10000","payTo":"0xA733875f2F7E8A2817040B5c60B63Ae07D58a1d6","maxTimeoutSeconds":60}]}}},"/v1/listings/{id}/verify-now":{"get":{"operationId":"verifyNowQuote","summary":"Read the paid-verification price for one listing (402 with x402 terms; ?plan=single|pack).","description":"Two plans, both only for listings quoting up to $0.50 per call: single — one real purchase within 24 hours, $2 USDC on Base; pack — three real purchases inside 30 days, the first within 24 hours, the other two at times the directory chooses, $5. Choose with ?plan=; omitted means single. Sold only to the listing's owner: the PAID request must carry the seller's claim token in x-claim-token (401 otherwise); the unpaid request answers an ordinary 402 and anyone may read the price. Every purchase is graded exactly as a wave and published on the record whatever it finds — settlement tx, delivery outcome, failure reason, and the paid-depth rung (paid_verified → 2x → held → Nwk, or failed_rebuy if the endpoint stops delivering). What money buys: WHEN the purchases happen. What it never buys: the outcome, the rung, status, score, verdict, or rank. A failure caused by the directory's own client does not count against the plan and is re-run. One open plan per listing at a time. Fulfilment is manual in this phase; runs happen on weekdays. Rule: https://nohumans.directory/methodology#verify-now","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"example":"9a8bf56d-2fc"},{"name":"plan","in":"query","required":false,"schema":{"type":"string","enum":["single","pack"],"default":"single"},"description":"single: one purchase, $2. pack: three purchases in 30 days, $5."}],"responses":{"200":{"description":"Queued. { listing_id, plan, purchases, purchases_done, status: 'queued', request_id, promise: 'first purchase within 24 hours', fee_usdc, record, rule }. The settlement tx is in the PAYMENT-RESPONSE header. Progress: GET this URL with ?view=status and your x-claim-token header (owner only)."},"400":{"description":"unknown_plan — ?plan must be single or pack (the body lists both with prices); or quote_above_plan_cap — the listing quotes above $0.50/call; write to hello@nohumans.directory."},"401":{"description":"claim_token_required or claim_token_invalid — the paid request must carry the listing owner's claim token in x-claim-token. The body links the claim flow."},"402":{"description":"Payment required. PaymentRequired object in the PAYMENT-REQUIRED header and the body, identical. Amount is the plan price: 2000000 (single) or 5000000 (pack) atomic USDC."},"409":{"description":"plan_in_progress — this listing already has purchases pending; the body shows purchases_done of purchases_total."}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"2.000000","max":"5.000000","note":"single ($2, one purchase) or pack ($5, three purchases in 30 days); listings up to $0.50/call"},"protocols":[{"x402":{}}],"offers":[{"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","amount":"2000000","payTo":"0xA733875f2F7E8A2817040B5c60B63Ae07D58a1d6","maxTimeoutSeconds":60},{"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","amount":"5000000","payTo":"0xA733875f2F7E8A2817040B5c60B63Ae07D58a1d6","maxTimeoutSeconds":60}]}},"post":{"operationId":"verifyNow","summary":"Buy paid verification for a listing you own: single ($2, one purchase) or pack ($5, three purchases in 30 days). Listings up to $0.50/call only. Requires x-claim-token.","description":"Two plans, both only for listings quoting up to $0.50 per call: single — one real purchase within 24 hours, $2 USDC on Base; pack — three real purchases inside 30 days, the first within 24 hours, the other two at times the directory chooses, $5. Choose with ?plan=; omitted means single. Sold only to the listing's owner: the PAID request must carry the seller's claim token in x-claim-token (401 otherwise); the unpaid request answers an ordinary 402 and anyone may read the price. Every purchase is graded exactly as a wave and published on the record whatever it finds — settlement tx, delivery outcome, failure reason, and the paid-depth rung (paid_verified → 2x → held → Nwk, or failed_rebuy if the endpoint stops delivering). What money buys: WHEN the purchases happen. What it never buys: the outcome, the rung, status, score, verdict, or rank. A failure caused by the directory's own client does not count against the plan and is re-run. One open plan per listing at a time. Fulfilment is manual in this phase; runs happen on weekdays. Rule: https://nohumans.directory/methodology#verify-now","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"example":"9a8bf56d-2fc"},{"name":"plan","in":"query","required":false,"schema":{"type":"string","enum":["single","pack"],"default":"single"},"description":"single: one purchase, $2. pack: three purchases in 30 days, $5."}],"responses":{"200":{"description":"Queued. { listing_id, plan, purchases, purchases_done, status: 'queued', request_id, promise: 'first purchase within 24 hours', fee_usdc, record, rule }. The settlement tx is in the PAYMENT-RESPONSE header. Progress: GET this URL with ?view=status and your x-claim-token header (owner only)."},"400":{"description":"unknown_plan — ?plan must be single or pack (the body lists both with prices); or quote_above_plan_cap — the listing quotes above $0.50/call; write to hello@nohumans.directory."},"401":{"description":"claim_token_required or claim_token_invalid — the paid request must carry the listing owner's claim token in x-claim-token. The body links the claim flow."},"402":{"description":"Payment required. PaymentRequired object in the PAYMENT-REQUIRED header and the body, identical. Amount is the plan price: 2000000 (single) or 5000000 (pack) atomic USDC."},"409":{"description":"plan_in_progress — this listing already has purchases pending; the body shows purchases_done of purchases_total."}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"2.000000","max":"5.000000","note":"single ($2, one purchase) or pack ($5, three purchases in 30 days); listings up to $0.50/call"},"protocols":[{"x402":{}}],"offers":[{"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","amount":"2000000","payTo":"0xA733875f2F7E8A2817040B5c60B63Ae07D58a1d6","maxTimeoutSeconds":60},{"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","amount":"5000000","payTo":"0xA733875f2F7E8A2817040B5c60B63Ae07D58a1d6","maxTimeoutSeconds":60}]}}}},"components":{"securitySchemes":{"claimToken":{"type":"apiKey","in":"header","name":"x-claim-token","description":"Returned once at submission or via the claim flow; x-edit-token accepted as alias"},"bearer":{"type":"http","scheme":"bearer","description":"Same claim token as Authorization: Bearer"}},"schemas":{"ListingSummary":{"type":"object","additionalProperties":true,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"endpoint_url":{"type":"string"},"category":{"type":"string"},"kind":{"type":"string","enum":["api","agent"]},"price_amount":{"type":"number"},"price_currency":{"type":"string"},"chains":{"type":"array","items":{"type":"string"},"description":"Networks you can PAY on, as declared by the seller. Not the data or chains the service covers; observed_network is what the live 402 named."},"status":{"type":"string","enum":["verified","unverified","failing"]},"status_changed_at":{"type":"integer"},"has_sample":{"type":"boolean"},"onchain_scope":{"type":["string","null"],"description":"What the on-chain figures describe, in words: this listing's own payTo, or a wallet shared by N listings. Read before quoting them."},"probes_passed":{"type":["integer","null"]},"probes_failed":{"type":["integer","null"]},"paid_verified_at":{"type":["integer","null"],"description":"Latest delivered purchase by our scout (unix seconds); paid_verified_at_iso is the same instant as ISO 8601. One purchase is not a continuing guarantee."},"x402_version":{"type":["integer","null"]},"onchain_unique_payers_30d":{"type":["integer","null"],"description":"Distinct wallets that sent USDC to this listing's payTo on Base in the window, from our own index (since 2026-08-29). CEILING on customer count — every incoming USDC transfer counts; operator self-funding inflates it; see onchain_shape"},"onchain_tx_count_30d":{"type":["integer","null"]},"onchain_volume_usd_30d":{"type":["number","null"]},"onchain_checked_at":{"type":["integer","null"],"description":"Last successful read; null = read before 2026-08-28 (time not retained)"},"onchain_source":{"type":["string","null"],"enum":["index",null],"description":"'index' = our own Base USDC index, no ceiling; null = legacy third-party read (150-item cap possible)"},"onchain_count_capped":{"type":"boolean","description":"Legacy rows only: tx_count is a floor"},"onchain_payto_shared_listings":{"type":["integer","null"],"description":"Active listings declaring the same payTo — figures belong to the address; never sum across listings"},"onchain_daily":{"type":["array","null"],"items":{"type":"object","properties":{"day":{"type":"string"},"tx":{"type":"integer"},"payers":{"type":"integer"},"usd":{"type":"number"}}},"description":"Per-UTC-day series, today + 30 prior days (index rows only). A 30d sum hides cliffs."},"onchain_shape":{"type":["object","null"],"properties":{"sample_n":{"type":"integer"},"eip3009":{"type":"integer"},"plain":{"type":"integer"},"other":{"type":"integer"},"sampled_at":{"type":"integer"}},"description":"25 most recent payments classified by calldata: eip3009 = transferWithAuthorization (x402 exact scheme); plain = ordinary transfer(); other = unclassified. USDC inflow is not x402 revenue; this tells them apart"},"score":{"type":["number","null"]},"probe_count":{"type":"integer","description":"Every counted probe, passes AND failures; see probes_passed."},"p50_latency_ms":{"type":["number","null"],"description":"Median over the last 7 days, timeouts included; null under 5 probes. A running average before 2026-09-24."},"p95_latency_ms":{"type":["number","null"]},"last_probed_at":{"type":["integer","null"]},"paid_verified":{"type":"boolean"},"paid_verification_latest":{"type":["object","null"],"description":"The MOST RECENT settled purchase, whatever it found — delivered true or false, with the failure reason and tx hash. paid_verification above reports the latest SUCCESS and may be older; read both. A record that can only improve is a claim, not a record.","properties":{"at":{"type":"integer"},"delivered":{"type":"boolean"},"tx_hash":{"type":"string"},"amount_usdc":{"type":"number"},"failure_reason":{"type":["string","null"]},"note":{"type":"string"}}},"payto_sentinel":{"type":"boolean","description":"The endpoint's live challenge names a burn address (zero/dead) that cannot receive funds. A payment sent as instructed is destroyed and nothing is delivered. Independent of status: such a listing can pass every protocol check and still be unpayable. Read payto_note."},"payto_unstable":{"type":"boolean","description":"The endpoint served several different payment addresses across recent checks; there is no stable destination to trust. Verify the address in the challenge you receive immediately before paying."},"payto_note":{"type":["string","null"],"description":"Plain-language warning when payto_sentinel or payto_unstable is set; null otherwise."},"paid_depth":{"type":"object","description":"How much paid evidence stands behind this listing, as a rung earned by delivering when bought: none, paid_verified (once), 2x (twice, >=48h apart), held (twice, across a seller-caused change), Nwk (across N>=3 weeks), failed_rebuy (delivered, then failed the latest purchase). Money never buys a rung.","properties":{"rung":{"type":"string"},"deliveries":{"type":"integer"},"span_weeks":{"type":"integer"},"first_ok_at":{"type":["integer","null"]},"last_ok_at":{"type":["integer","null"]},"last_attempt_ok":{"type":["integer","null"]},"through_change":{"type":"boolean"}}},"evidence_tier":{"type":"string","enum":["payer_reported","paid_verified","probe_verified","probe_only","unproven"]},"evidence_note":{"type":"string"},"verdict_age_seconds":{"type":["integer","null"]},"payment_protocols":{"type":"array","items":{"type":"string","enum":["x402","mpp"]},"description":"Protocols the endpoint's own 402 offered on our unpaid probes (since 2026-09-26). Paid verification and on-chain figures cover x402 on Base only."},"mpp_methods":{"type":["array","null"],"items":{"type":"string"},"description":"MPP (WWW-Authenticate: Payment) methods as the endpoint names them; the record adds mpp_offers and mpp_note."}}},"ListingDetail":{"type":"object","additionalProperties":true,"description":"ListingSummary fields plus request_schema/response_schema, sample_query, origin, paid_verification with tx proof, observed 402 terms"}}},"x-discovery":{"version":"2026-09-03"}}