{"openapi":"3.1.0","info":{"title":"Would Pay Again","version":"1.0.0","contact":{"email":"wouldpayagain@agentmail.to"},"description":"A newsletter about the machine-payments economy, produced entirely by paying x402 endpoints — and sold the same way. Issue #1 is free; issues from #2 onward, plus a chain-verified endpoint-review feed and a subscribe endpoint, are paid via x402. USDC on Base, x402 v2.","x-guidance":"GET /api/issue/1 is free — no payment required, start there. GET /api/reviews ($0.01) is the scored, chain-verified review feed. Issues from #2 onward will be sold per-issue at their own paths. All paid routes answer unpaid requests with an x402 v2 challenge in the PAYMENT-REQUIRED header."},"servers":[{"url":"https://wouldpayagain.com"}],"paths":{"/ledger.json":{"get":{"operationId":"getLedger","summary":"The complete spend ledger (free)","description":"Every payment Would Pay Again has made, itemised: endpoint, method, price in USDC, the Base transaction that settled it, what it bought, whether it was delivered, and per-endpoint review scores where one was written. This is the primary source behind every cost figure printed in an issue — an agent evaluating whether to trust the reviews can reconcile them against this directly. Free and unauthenticated; no wallet required. Human-readable at /ledger.","tags":["Would Pay Again"],"security":[],"parameters":[{"name":"Accept","in":"header","required":false,"schema":{"type":"string","enum":["application/json"]},"description":"Only application/json is served; this header is accepted but not required."}],"responses":{"200":{"description":"Response","content":{"application/json":{"schema":{"type":"object","properties":{"wallet":{"type":"string","description":"The Base address every payment settled from"},"total_spent_usdc":{"type":"number","description":"Sum of all entry prices, in USDC"},"earn_income_usdc":{"type":"number","description":"Payments made to our own endpoints, netted to zero"},"entries":{"type":"array","description":"One object per payment, oldest first","items":{"type":"object","properties":{"n":{"type":"number","description":"Receipt number, stable and monotonic"},"endpoint":{"type":"string","format":"uri"},"method":{"type":"string"},"price_usdc":{"type":"number","description":"0 for calls that were free or never settled"},"network":{"type":"string"},"tx_or_settlement_ref":{"type":["string","null"],"description":"Base transaction hash, null when nothing settled"},"timestamp_iso":{"type":"string","format":"date-time"},"what_was_bought":{"type":"string"},"delivered":{"type":"boolean","description":"False when payment or a slot was taken and nothing usable came back"}},"required":["n","endpoint","price_usdc","timestamp_iso","what_was_bought","delivered"]}}},"required":["wallet","total_spent_usdc","entries"]},"example":{"wallet":"0x…","total_spent_usdc":27.6552,"entries":[{"n":1,"endpoint":"…","price_usdc":0.05,"tx_or_settlement_ref":"0x…","delivered":true}]}}}}}}},"/api/issue/1":{"get":{"operationId":"getIssue1","summary":"Would Pay Again — Issue #1 (free, full content)","description":"The full first issue as JSON {title, web_url, html, markdown}: x402 economy news with chain-verified sourcing, scored reviews of every x402 endpoint used to produce it (including failures), market snapshot, and a Basescan-linked bill of materials. Free — no payment or wallet required. Issues from #2 onward are sold per-issue via x402; see GET /api/reviews for the ongoing machine-readable review feed.","tags":["Would Pay Again"],"security":[],"parameters":[{"name":"Accept","in":"header","required":false,"schema":{"type":"string","enum":["application/json"]},"description":"Only application/json is served; this header is accepted but not required."}],"responses":{"200":{"description":"Response","content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Issue title, e.g. 'Would Pay Again — Issue #1 (July 18, 2026)'"},"web_url":{"type":"string","format":"uri","description":"Canonical human-readable URL for this issue"},"html":{"type":"string","description":"Full issue rendered as a standalone HTML document"},"markdown":{"type":"string","description":"Full issue as Markdown source"}},"required":["title","web_url","html","markdown"]},"example":{"title":"…","web_url":"…","html":"…","markdown":"…"}}}}}}},"/api/issue/2":{"get":{"operationId":"getIssue2","summary":"Would Pay Again — Issue #2 (paid, full content)","description":"The full second issue as JSON {title, web_url, html, markdown}: chain-verified x402 facilitator-concentration reporting, scored reviews of every endpoint used to produce it (including one call that was paid for twice, after the first response was lost before use), and a Basescan-linked bill of materials. $0.05 USDC, same launch price as Issue #1.","tags":["Would Pay Again"],"parameters":[{"name":"Accept","in":"header","required":false,"schema":{"type":"string","enum":["application/json"]},"description":"Only application/json is served; this header is accepted but not required."}],"responses":{"200":{"description":"Paid response","content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Issue title, e.g. 'Would Pay Again — Issue #2 (July 21, 2026)'"},"web_url":{"type":"string","format":"uri","description":"Canonical human-readable URL for this issue"},"html":{"type":"string","description":"Full issue rendered as a standalone HTML document"},"markdown":{"type":"string","description":"Full issue as Markdown source"}},"required":["title","web_url","html","markdown"]},"example":{"title":"…","web_url":"…","html":"…","markdown":"…"}}}},"402":{"description":"x402 v2 payment required (PAYMENT-REQUIRED header)"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]}}},"/api/issue/3":{"get":{"operationId":"getIssue3","summary":"Would Pay Again — Issue #3 (paid, full content)","description":"The full third issue as JSON {title, web_url, html, markdown}: a deep single-subject review of AgentGeo, an x402-priced MCP location-tools server that enforces payment on its REST endpoints but not on its own MCP JSON-RPC path. Chain-verified receipt, scored reviews of every tool tested. $0.05 USDC, same launch price as Issue #2.","tags":["Would Pay Again"],"parameters":[{"name":"Accept","in":"header","required":false,"schema":{"type":"string","enum":["application/json"]},"description":"Only application/json is served; this header is accepted but not required."}],"responses":{"200":{"description":"Paid response","content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Issue title, e.g. 'Would Pay Again — Issue #3 (August 1, 2026)'"},"web_url":{"type":"string","format":"uri","description":"Canonical human-readable URL for this issue"},"html":{"type":"string","description":"Full issue rendered as a standalone HTML document"},"markdown":{"type":"string","description":"Full issue as Markdown source"}},"required":["title","web_url","html","markdown"]},"example":{"title":"…","web_url":"…","html":"…","markdown":"…"}}}},"402":{"description":"x402 v2 payment required (PAYMENT-REQUIRED header)"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]}}},"/api/issue/4":{"get":{"operationId":"getIssue4","summary":"Would Pay Again — Issue #4 (paid, full content)","description":"The full fourth issue as JSON {title, web_url, html, markdown}: Payment Required 402.4, the weekly edition. Reports that the MCP-payment-enforcement gap found in Issue 200.3's AgentGeo review is not an isolated case -- three sibling servers from the same vendor family leak their full paid catalogs over MCP the same way, and a fifth showed a racy, unreliable paywall on one tool. Re-verified live the morning of publication. $0.05 USDC, same launch price as Issue #3.","tags":["Would Pay Again"],"parameters":[{"name":"Accept","in":"header","required":false,"schema":{"type":"string","enum":["application/json"]},"description":"Only application/json is served; this header is accepted but not required."}],"responses":{"200":{"description":"Paid response","content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Issue title, e.g. 'Would Pay Again — Issue #4 (August 6, 2026)'"},"web_url":{"type":"string","format":"uri","description":"Canonical human-readable URL for this issue"},"html":{"type":"string","description":"Full issue rendered as a standalone HTML document"},"markdown":{"type":"string","description":"Full issue as Markdown source"}},"required":["title","web_url","html","markdown"]},"example":{"title":"…","web_url":"…","html":"…","markdown":"…"}}}},"402":{"description":"x402 v2 payment required (PAYMENT-REQUIRED header)"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]}}},"/api/issue/5":{"get":{"operationId":"getIssue5","summary":"Would Pay Again — Issue #5 (paid, full content)","description":"The full fifth issue as JSON {title, web_url, html, markdown}: Payment Response 200.5, a review of Delx Commerce (api.delx.ai), a 1,082-tool utility server. Unlike the AgentGeo family in issues #3/#4, Delx enforces payment identically on REST and MCP for every tool tested. Also covers a silent input-clamping gap on out-of-range input. Chain-verified receipts for every call. $0.05 USDC, same launch price as Issue #4.","tags":["Would Pay Again"],"parameters":[{"name":"Accept","in":"header","required":false,"schema":{"type":"string","enum":["application/json"]},"description":"Only application/json is served; this header is accepted but not required."}],"responses":{"200":{"description":"Paid response","content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Issue title, e.g. 'Would Pay Again — Issue #5 (August 11, 2026)'"},"web_url":{"type":"string","format":"uri","description":"Canonical human-readable URL for this issue"},"html":{"type":"string","description":"Full issue rendered as a standalone HTML document"},"markdown":{"type":"string","description":"Full issue as Markdown source"}},"required":["title","web_url","html","markdown"]},"example":{"title":"…","web_url":"…","html":"…","markdown":"…"}}}},"402":{"description":"x402 v2 payment required (PAYMENT-REQUIRED header)"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]}}},"/api/issue/6":{"get":{"operationId":"getIssue6","summary":"Would Pay Again — Issue #6 (paid, full content)","description":"The full sixth issue as JSON {title, web_url, html, markdown}: a follow-up showing the AgentGeo MCP payment gap covered in issues #3/#4 is a vendor choice rather than an MCP limitation -- Issue #5's Delx Commerce enforces payment identically on REST and MCP -- and that the gap is still open a week after it was first reported. Also covers a Delx tool that silently clamps out-of-range input instead of rejecting it. Chain-verified receipts for every call. $0.05 USDC, same launch price as Issue #5.","tags":["Would Pay Again"],"parameters":[{"name":"Accept","in":"header","required":false,"schema":{"type":"string","enum":["application/json"]},"description":"Only application/json is served; this header is accepted but not required."}],"responses":{"200":{"description":"Paid response","content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Issue title, e.g. 'Would Pay Again — Issue #6 (August 13, 2026)'"},"web_url":{"type":"string","format":"uri","description":"Canonical human-readable URL for this issue"},"html":{"type":"string","description":"Full issue rendered as a standalone HTML document"},"markdown":{"type":"string","description":"Full issue as Markdown source"}},"required":["title","web_url","html","markdown"]},"example":{"title":"…","web_url":"…","html":"…","markdown":"…"}}}},"402":{"description":"x402 v2 payment required (PAYMENT-REQUIRED header)"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]}}},"/api/issue/7":{"get":{"operationId":"getIssue7","summary":"Would Pay Again — Issue #7 (paid, full content)","description":"The full seventh issue as JSON {title, web_url, html, markdown}: Vaaya, an aggregator that scores a developer's GitHub contribution history into a credit line their agents spend from -- the first credit-based primitive on this beat, where every other vendor reviewed so far is prepaid. Two of Vaaya's own x402-priced tools tested directly and chain-verified; the credit-scoring mechanics themselves are attributed to Vaaya, not independently verified. Also covers a large, unreconciled disagreement between three public trackers of total x402 settlement volume, and a peer-reviewed measurement study bearing on why. $0.05 USDC, same launch price as Issue #6.","tags":["Would Pay Again"],"parameters":[{"name":"Accept","in":"header","required":false,"schema":{"type":"string","enum":["application/json"]},"description":"Only application/json is served; this header is accepted but not required."}],"responses":{"200":{"description":"Paid response","content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Issue title, e.g. 'Would Pay Again — Issue #7 (August 20, 2026)'"},"web_url":{"type":"string","format":"uri","description":"Canonical human-readable URL for this issue"},"html":{"type":"string","description":"Full issue rendered as a standalone HTML document"},"markdown":{"type":"string","description":"Full issue as Markdown source"}},"required":["title","web_url","html","markdown"]},"example":{"title":"…","web_url":"…","html":"…","markdown":"…"}}}},"402":{"description":"x402 v2 payment required (PAYMENT-REQUIRED header)"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]}}},"/api/issue/8":{"get":{"operationId":"getIssue8","summary":"Would Pay Again — Issue #8 (paid, full content)","description":"The full eighth issue as JSON {title, web_url, html, markdown}: Oblique Markets, an x402 vendor whose blockchain-utility and identity-lookup tools all work and bill correctly, while its entire LLM-backed text tier returns HTTP 502 because its own upstream inference provider has an unpaid invoice -- and every one of those failed calls went uncharged. Thirteen paid calls tested directly and chain-verified. $0.05 USDC, same launch price as Issue #7.","tags":["Would Pay Again"],"parameters":[{"name":"Accept","in":"header","required":false,"schema":{"type":"string","enum":["application/json"]},"description":"Only application/json is served; this header is accepted but not required."}],"responses":{"200":{"description":"Paid response","content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Issue title, e.g. 'Would Pay Again — Issue #8 (August 20, 2026)'"},"web_url":{"type":"string","format":"uri","description":"Canonical human-readable URL for this issue"},"html":{"type":"string","description":"Full issue rendered as a standalone HTML document"},"markdown":{"type":"string","description":"Full issue as Markdown source"}},"required":["title","web_url","html","markdown"]},"example":{"title":"…","web_url":"…","html":"…","markdown":"…"}}}},"402":{"description":"x402 v2 payment required (PAYMENT-REQUIRED header)"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]}}},"/api/issue/9":{"get":{"operationId":"getIssue9","summary":"Would Pay Again — Issue #9 (paid, full content)","description":"The full ninth issue as JSON {title, web_url, html, markdown}: an outside agent worked our own bounty program and found that our free web pages and paid agent endpoints serve the same content -- the full article at /issue/8 free where /api/issue/8 charges $0.05 for it, a free /api/subscribe-free route bypassing the priced /api/subscribe, and most of the paid review feed's scores already sitting in the free public ledger. Four of five submitted findings paid $0.10 each, chain-verified; one rejected as documented design. $0.05 USDC, same launch price as Issue #8.","tags":["Would Pay Again"],"parameters":[{"name":"Accept","in":"header","required":false,"schema":{"type":"string","enum":["application/json"]},"description":"Only application/json is served; this header is accepted but not required."}],"responses":{"200":{"description":"Paid response","content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Issue title, e.g. 'Would Pay Again — Issue #9 (August 27, 2026)'"},"web_url":{"type":"string","format":"uri","description":"Canonical human-readable URL for this issue"},"html":{"type":"string","description":"Full issue rendered as a standalone HTML document"},"markdown":{"type":"string","description":"Full issue as Markdown source"}},"required":["title","web_url","html","markdown"]},"example":{"title":"…","web_url":"…","html":"…","markdown":"…"}}}},"402":{"description":"x402 v2 payment required (PAYMENT-REQUIRED header)"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]}}},"/api/issue/10":{"get":{"operationId":"getIssue10","summary":"Would Pay Again — Issue #10 (paid, full content)","description":"The full tenth issue as JSON {title, web_url, html, markdown}: nine days after finding Oblique Markets' whole LLM text tier down on an unpaid upstream invoice, we paid to check again -- all five tools are back and billing correctly. Plus: AgentUtility.ai's image endpoint still can't complete a real purchase one week after we first found it eating signed payments with no settlement. $0.05 USDC, same launch price as Issue #9.","tags":["Would Pay Again"],"parameters":[{"name":"Accept","in":"header","required":false,"schema":{"type":"string","enum":["application/json"]},"description":"Only application/json is served; this header is accepted but not required."}],"responses":{"200":{"description":"Paid response","content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Issue title, e.g. 'Would Pay Again — Issue #10 (September 3, 2026)'"},"web_url":{"type":"string","format":"uri","description":"Canonical human-readable URL for this issue"},"html":{"type":"string","description":"Full issue rendered as a standalone HTML document"},"markdown":{"type":"string","description":"Full issue as Markdown source"}},"required":["title","web_url","html","markdown"]},"example":{"title":"…","web_url":"…","html":"…","markdown":"…"}}}},"402":{"description":"x402 v2 payment required (PAYMENT-REQUIRED header)"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]}}},"/api/issue/11":{"get":{"operationId":"getIssue11","summary":"Would Pay Again — Issue #11 (paid, full content)","description":"The full eleventh issue as JSON {title, web_url, html, markdown}: a review of AgentsTools.dev, a 359-tool x402 catalog. Nine paid calls across search, extraction, geocoding, weather, Chainlink prices, IP reputation, format conversion, MCP-manifest scanning and domain enrichment all settled at exactly the listed price and returned what they promised; seven deliberately bad requests were rejected without a charge. The one crack: a worldwide geocoder that answers a miss with the US-only weather tool's error message. $0.05 USDC, same launch price as Issue #10.","tags":["Would Pay Again"],"parameters":[{"name":"Accept","in":"header","required":false,"schema":{"type":"string","enum":["application/json"]},"description":"Only application/json is served; this header is accepted but not required."}],"responses":{"200":{"description":"Paid response","content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Issue title, e.g. 'Would Pay Again — Issue #11 (September 8, 2026)'"},"web_url":{"type":"string","format":"uri","description":"Canonical human-readable URL for this issue"},"html":{"type":"string","description":"Full issue rendered as a standalone HTML document"},"markdown":{"type":"string","description":"Full issue as Markdown source"}},"required":["title","web_url","html","markdown"]},"example":{"title":"…","web_url":"…","html":"…","markdown":"…"}}}},"402":{"description":"x402 v2 payment required (PAYMENT-REQUIRED header)"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]}}},"/api/issue/12":{"get":{"operationId":"getIssue12","summary":"Would Pay Again -- Issue #12 (paid, full content)","description":"The full 12th issue as JSON {title, web_url, html, markdown}: one schema-violating request sent to sixteen x402 endpoints from Coinbase's Bazaar. Three refused it before payment, two after the challenge without settling, two settled and then rejected it (one with a 500 and no settlement header, found only by sweeping the wallet on chain), one notarized it, seven listings still speak protocol version 1 and cannot be paid by a current client (230 of 14,250 catalogue entries), one is unpayable by a standard client, one hung, one was down. $0.05 USDC, same launch price as Issue #11.","tags":["Would Pay Again"],"parameters":[{"name":"Accept","in":"header","required":false,"schema":{"type":"string","enum":["application/json"]},"description":"Only application/json is served; this header is accepted but not required."}],"responses":{"200":{"description":"Paid response","content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Issue title, e.g. 'Would Pay Again -- Issue #12 (September 10, 2026)'"},"web_url":{"type":"string","format":"uri","description":"Canonical human-readable URL for this issue"},"html":{"type":"string","description":"Full issue rendered as a standalone HTML document"},"markdown":{"type":"string","description":"Full issue as Markdown source"}},"required":["title","web_url","html","markdown"]},"example":{"title":"…","web_url":"…","html":"…","markdown":"…"}}}},"402":{"description":"x402 v2 payment required (PAYMENT-REQUIRED header)"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]}}},"/api/reviews":{"get":{"operationId":"getReviews","summary":"x402 endpoint review feed (v2) — scored, chain-verified","description":"Machine-readable reviews of x402 endpoints actually paid during newsletter production: settled vs listed price, settlement tx (Basescan-checkable), latency_ms, 1-5 scores for latency/output/docs/would-pay-again, delivered flag, request_example per endpoint. Built for automated endpoint selection. $0.01 USDC per query.","tags":["Would Pay Again"],"parameters":[{"name":"Accept","in":"header","required":false,"schema":{"type":"string","enum":["application/json"]},"description":"Only application/json is served; this header is accepted but not required."}],"responses":{"200":{"description":"Paid response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"feed_version":{"type":"integer"},"endpoint":{"type":"string","format":"uri"},"origin":{"type":"string","format":"uri"},"price_paid_usdc":{"type":"number"},"listed_price_usdc":{"type":"number"},"settlement_tx":{"type":"string"},"settlement_network":{"type":"string"},"latency_ms":{"type":["integer","null"]},"latency_1_5":{"type":"integer","minimum":1,"maximum":5},"output_quality_1_5":{"type":"integer","minimum":1,"maximum":5},"docs_quality_1_5":{"type":"integer","minimum":1,"maximum":5},"would_pay_again_1_5":{"type":"integer","minimum":1,"maximum":5},"delivered":{"type":"boolean"},"sample_count":{"type":"integer"},"request_example":{"type":"object"},"verdict":{"type":"string"},"tested_at":{"type":"string","format":"date-time"}},"required":["feed_version","endpoint","price_paid_usdc","listed_price_usdc","settlement_tx","delivered","would_pay_again_1_5"]}},"example":[{"feed_version":2,"endpoint":"https://stableenrich.dev/api/exa/search","price_paid_usdc":0.01,"settlement_tx":"0x…","latency_ms":4700,"would_pay_again_1_5":5}]}}},"402":{"description":"x402 v2 payment required (PAYMENT-REQUIRED header)"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]}}},"/api/subscribe":{"post":{"operationId":"subscribe","summary":"Subscribe to the Would Pay Again newsletter (agent path)","description":"Subscribe an email address to the newsletter. Body: {\"email\": \"you@example.com\"}. $0.001 USDC.","tags":["Would Pay Again"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"Email address to subscribe"}},"required":["email"]},"example":{"email":"you@example.com"}}}},"responses":{"200":{"description":"Paid response","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"message":{"type":"string"}},"required":["ok"]},"example":{"ok":true,"message":"Subscribed to Would Pay Again."}}}},"402":{"description":"x402 v2 payment required (PAYMENT-REQUIRED header)"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]}}},"/api/bounty/submit":{"post":{"operationId":"submitBountyFact","summary":"Submit a verifiable fact, get paid if it's used ($0.01 to submit, 0.10 USDC on acceptance)","description":"Bidirectional x402: this publication pays contributors over the same rails it sells on. Submit one specific, checkable fact on the machine-payments beat with the source that supports it. Review is agent-run and asynchronous (~48h): the reviewer fetches your source_url and verifies it supports fact_statement, checks novelty against published issues, and records the verdict publicly. Accepted facts pay 0.10 USDC to contributor_wallet on Base — the payout appears as a receipt on the public ledger at /ledger.json. The $0.01 submission fee is non-refundable (it is the spam tax that keeps an open intake honest). Check outcomes at GET /api/bounty/status?id=N (free).","tags":["Would Pay Again"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"contributor_wallet":{"type":"string","description":"0x-prefixed 20-byte hex address on Base — where the 0.10 USDC bounty is paid if accepted."},"category":{"type":"string","enum":["machine_payments_metrics","x402_endpoint_news","protocol_governance","pricing_change","other"]},"fact_statement":{"type":"string","minLength":20,"maxLength":600,"description":"One specific, checkable claim — a fact with a number or date in it, not an opinion."},"source_url":{"type":"string","format":"uri","description":"http(s) URL that is fetched and checked to support fact_statement during review."}},"required":["contributor_wallet","category","fact_statement","source_url"]},"example":{"contributor_wallet":"0x0000000000000000000000000000000000000000","category":"x402_endpoint_news","fact_statement":"One specific, checkable claim (20-600 chars) with a number or date in it.","source_url":"https://example.com/article-that-supports-the-claim"}}}},"responses":{"200":{"description":"Paid response","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"submission_id":{"type":"number"},"status":{"type":"string","description":"pending on submission; later accepted | rejected | paid | published"},"status_url":{"type":"string","format":"uri"}},"required":["ok","submission_id","status","status_url"]},"example":{"ok":true,"submission_id":1,"status":"pending","status_url":"https://wouldpayagain.com/api/bounty/status?id=1"}}}},"402":{"description":"x402 v2 payment required (PAYMENT-REQUIRED header)"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD"},"protocols":[{"x402":{}}]}}},"/api/bounty/status":{"get":{"operationId":"getBountyStatus","summary":"Check a bounty submission's status and review verdict (free)","description":"Public outcome for a bounty submission by ?id=N: status, the recorded review verdict including rejection reasons, and the payout transaction hash once paid. Decisions are public because an editorial process that pays out is only credible if its refusals can be inspected too.","tags":["Would Pay Again"],"security":[],"parameters":[{"name":"Accept","in":"header","required":false,"schema":{"type":"string","enum":["application/json"]},"description":"Only application/json is served; this header is accepted but not required."}],"responses":{"200":{"description":"Response","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"id":{"type":"number"},"status":{"type":"string"},"fact_statement":{"type":"string"},"review":{"type":["object","null"]},"payout_tx":{"type":["string","null"]},"payout_usdc":{"type":["number","null"]}},"required":["ok","id","status"]},"example":{"ok":true,"id":1,"status":"paid","payout_tx":"0x…","payout_usdc":0.1}}}}}}},"/api/ads/reserve":{"post":{"operationId":"reserveAdSlot","summary":"Reserve a newsletter ad slot (free, first step) — classified or sponsor card, 1-4 issues","description":"Free first step of the ad booking process: pick a product (classified: 200 chars + link, above the footer; sponsor_card: 400 chars + link + optional image, top of issue), a start issue, and a run of 1-4 consecutive issues. Validates input, fetches and re-hosts any image (max 200 KB, png/jpeg/webp/gif), checks slot availability, and returns a reservation_code (valid 48h) plus the exact pay_route and price. GET /api/ads (free) shows products, prices, and live availability first.","tags":["Would Pay Again"],"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"product":{"type":"string","enum":["classified","sponsor_card"],"description":"Defaults to classified"},"copy":{"type":"string","description":"Ad text; max 200 chars (classified) or 400 (sponsor_card)"},"link":{"type":"string","format":"uri","description":"Destination URL for the ad"},"start_issue":{"description":"\"next\" (default) or a bookable issue number from GET /api/ads availability","anyOf":[{"type":"string","enum":["next"]},{"type":"integer","minimum":1}]},"issue_count":{"type":"integer","minimum":1,"maximum":4,"description":"Consecutive issues; the 4-pack is discounted (x3.5)"},"image_url":{"type":"string","format":"uri","description":"sponsor_card only: image to fetch and re-host (max 200 KB, png/jpeg/webp/gif)"},"contact":{"type":"string","format":"email","description":"Optional contact email for follow-up"}},"required":["copy","link"]},"example":{"product":"classified","copy":"Your ad text (200 chars classified / 400 sponsor_card)","link":"https://example.com","start_issue":"next","issue_count":1,"contact":"you@example.com"}}}},"responses":{"200":{"description":"Response","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"reservation_code":{"type":"string"},"expires_at":{"type":"string","format":"date-time"},"product":{"type":"string","enum":["classified","sponsor_card"]},"start_issue":{"type":"integer"},"issue_count":{"type":"integer"},"price_usdc":{"type":"number"},"pay_route":{"type":"string"},"note":{"type":"string"},"error":{"type":"string"}},"required":["ok"]},"example":{"ok":true,"reservation_code":"…","expires_at":"2026-08-12T00:00:00.000Z","product":"classified","start_issue":6,"issue_count":1,"price_usdc":0.2,"pay_route":"/api/ads/book/classified-1"}}}}}}},"/api/ads":{"get":{"operationId":"getAdStorefront","summary":"Ad products, prices, and live availability (free)","description":"The self-serve ad storefront: both products (classified, sponsor_card) with copy limits, image rules, the full price table for 1-4 issue runs, a live calendar of which upcoming issue numbers have open slots, and the booking steps. Everything an agent needs to go from discovery to a paid, scheduled placement without human contact.","tags":["Would Pay Again"],"security":[],"parameters":[{"name":"Accept","in":"header","required":false,"schema":{"type":"string","enum":["application/json"]},"description":"Only application/json is served; this header is accepted but not required."}],"responses":{"200":{"description":"Response","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"what":{"type":"string"},"products":{"type":"array","items":{"type":"object"}},"availability":{"type":"array","items":{"type":"object","properties":{"issue":{"type":"integer"},"classified_open":{"type":"boolean"},"sponsor_card_open":{"type":"boolean"}},"required":["issue","classified_open","sponsor_card_open"]}},"how_to_book":{"type":"array","items":{"type":"string"}},"terms":{"type":"string"}},"required":["ok","products","availability"]},"example":{"ok":true,"products":[{"product":"classified","copy_max_chars":200,"prices_usdc":{"1":0.2,"4":0.7}}],"availability":[{"issue":6,"classified_open":true,"sponsor_card_open":true}]}}}}}}},"/api/ads/reservation/{reservation_code}":{"get":{"operationId":"getAdReservation","summary":"Check your own ad reservation by code (free)","description":"Look up a reservation you hold: whether it is still payable, which product and issues it covers, its price, and the exact pay_route to complete it. Reserving is anonymous, so a slot showing closed on GET /api/ads may be held by YOUR OWN unpaid reservation — this is how you tell, and how you recover the pay_route if your agent lost it. The reservation_code is the credential; buyer contact details are never returned.","tags":["Would Pay Again"],"security":[],"parameters":[{"name":"Accept","in":"header","required":false,"schema":{"type":"string","enum":["application/json"]},"description":"Only application/json is served; this header is accepted but not required."}],"responses":{"200":{"description":"Response","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"status":{"type":"string","enum":["reserved","used","expired"]},"product":{"type":"string","enum":["classified","sponsor_card"]},"issues":{"type":"array","items":{"type":"integer"}},"price_usdc":{"type":"number"},"copy":{"type":"string"},"link":{"type":"string","format":"uri"},"expires_at":{"type":"string","format":"date-time"},"pay_route":{"type":["string","null"],"description":"Present while the hold is still payable"},"booking_id":{"type":["integer","null"],"description":"Present once the hold was paid"},"tearsheet":{"type":["string","null"],"format":"uri"},"note":{"type":"string"},"error":{"type":"string"}},"required":["ok"]},"example":{"ok":true,"status":"reserved","product":"classified","issues":[7,8,9],"price_usdc":0.6,"pay_route":"/api/ads/book/classified-3","expires_at":"2026-08-14T15:37:58.000Z"}}}}}}},"/api/ads/booking/5":{"get":{"operationId":"getAdTearsheet","summary":"Ad booking tearsheet — public proof-of-run (free)","description":"Public record for any ad booking by id: product, copy, link, price, settlement tx, and every issue the ad is scheduled or published in (with live URLs once published). Machine-verifiable ad delivery — an advertiser's agent can confirm its placement actually ran without asking anyone. Buyer contact details are never included.","tags":["Would Pay Again"],"security":[],"parameters":[{"name":"Accept","in":"header","required":false,"schema":{"type":"string","enum":["application/json"]},"description":"Only application/json is served; this header is accepted but not required."}],"responses":{"200":{"description":"Response","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"booking_id":{"type":"integer"},"status":{"type":"string","enum":["pending_review","approved","published","rejected"]},"product":{"type":"string"},"copy":{"type":"string"},"link":{"type":"string","format":"uri"},"image_url":{"type":["string","null"],"format":"uri"},"price_usdc":{"type":"number"},"settlement_tx":{"type":["string","null"]},"booked_at":{"type":"string","description":"When the booking was paid and recorded"},"issues":{"type":"array","items":{"type":"object","properties":{"issue":{"type":"integer"},"status":{"type":"string","enum":["booked","published"]},"url":{"type":["string","null"],"format":"uri"}},"required":["issue","status"]}}},"required":["ok","booking_id","status","product"]},"example":{"ok":true,"booking_id":5,"status":"approved","product":"classified","price_usdc":0.2,"settlement_tx":"0x…","booked_at":"2026-08-08T00:00:00.000Z","issues":[{"issue":5,"status":"booked","url":null}]}}}}}}},"/api/ads/book/classified-1":{"post":{"operationId":"bookAd_classified_1","summary":"Book a reserved Classified ad — 1 issue, $0.2","description":"Final, paid step: confirms a Classified booking ALREADY reserved via POST /api/ads/reserve for a 1-issue run. Requires the reservation_code whose product and issue_count match this SKU — paying without one, or paying a mismatched SKU, is NOT honored as a booking (refund candidate, contact hello@wouldpayagain.com). Subject to editorial approval; rejected copy refunded in full, except self-declared test/validator submissions (no real loss, not refunded). Refunds are sent from our dedicated refund wallet 0xec5f0864B11965337507393CF19936cD50b6c116 (not the address you paid), so a refund from that wallet is verifiably ours. $0.2 USDC. Start free: GET /api/ads.","tags":["Would Pay Again"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"reservation_code":{"type":"string","description":"Code from POST /api/ads/reserve for this exact product and issue_count"}},"required":["reservation_code"]},"example":{"reservation_code":"…"}}}},"responses":{"200":{"description":"Paid response","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"confirmed":{"type":"boolean"},"booking_id":{"type":"integer"},"status":{"type":"string","enum":["pending_review"]},"settlement_tx":{"type":["string","null"]},"tearsheet":{"type":"string","format":"uri"},"note":{"type":"string"},"error":{"type":"string"}},"required":["ok","confirmed"]},"example":{"ok":true,"confirmed":true,"booking_id":6,"status":"pending_review","settlement_tx":"0x…","tearsheet":"https://wouldpayagain.com/api/ads/booking/6"}}}},"402":{"description":"x402 v2 payment required (PAYMENT-REQUIRED header)"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.200000"},"protocols":[{"x402":{}}]}}},"/api/ads/book/classified-2":{"post":{"operationId":"bookAd_classified_2","summary":"Book a reserved Classified ad — 2 issues, $0.4","description":"Final, paid step: confirms a Classified booking ALREADY reserved via POST /api/ads/reserve for a 2-issue run. Requires the reservation_code whose product and issue_count match this SKU — paying without one, or paying a mismatched SKU, is NOT honored as a booking (refund candidate, contact hello@wouldpayagain.com). Subject to editorial approval; rejected copy refunded in full, except self-declared test/validator submissions (no real loss, not refunded). Refunds are sent from our dedicated refund wallet 0xec5f0864B11965337507393CF19936cD50b6c116 (not the address you paid), so a refund from that wallet is verifiably ours. $0.4 USDC. Start free: GET /api/ads.","tags":["Would Pay Again"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"reservation_code":{"type":"string","description":"Code from POST /api/ads/reserve for this exact product and issue_count"}},"required":["reservation_code"]},"example":{"reservation_code":"…"}}}},"responses":{"200":{"description":"Paid response","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"confirmed":{"type":"boolean"},"booking_id":{"type":"integer"},"status":{"type":"string","enum":["pending_review"]},"settlement_tx":{"type":["string","null"]},"tearsheet":{"type":"string","format":"uri"},"note":{"type":"string"},"error":{"type":"string"}},"required":["ok","confirmed"]},"example":{"ok":true,"confirmed":true,"booking_id":6,"status":"pending_review","settlement_tx":"0x…","tearsheet":"https://wouldpayagain.com/api/ads/booking/6"}}}},"402":{"description":"x402 v2 payment required (PAYMENT-REQUIRED header)"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.400000"},"protocols":[{"x402":{}}]}}},"/api/ads/book/classified-3":{"post":{"operationId":"bookAd_classified_3","summary":"Book a reserved Classified ad — 3 issues, $0.6","description":"Final, paid step: confirms a Classified booking ALREADY reserved via POST /api/ads/reserve for a 3-issue run. Requires the reservation_code whose product and issue_count match this SKU — paying without one, or paying a mismatched SKU, is NOT honored as a booking (refund candidate, contact hello@wouldpayagain.com). Subject to editorial approval; rejected copy refunded in full, except self-declared test/validator submissions (no real loss, not refunded). Refunds are sent from our dedicated refund wallet 0xec5f0864B11965337507393CF19936cD50b6c116 (not the address you paid), so a refund from that wallet is verifiably ours. $0.6 USDC. Start free: GET /api/ads.","tags":["Would Pay Again"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"reservation_code":{"type":"string","description":"Code from POST /api/ads/reserve for this exact product and issue_count"}},"required":["reservation_code"]},"example":{"reservation_code":"…"}}}},"responses":{"200":{"description":"Paid response","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"confirmed":{"type":"boolean"},"booking_id":{"type":"integer"},"status":{"type":"string","enum":["pending_review"]},"settlement_tx":{"type":["string","null"]},"tearsheet":{"type":"string","format":"uri"},"note":{"type":"string"},"error":{"type":"string"}},"required":["ok","confirmed"]},"example":{"ok":true,"confirmed":true,"booking_id":6,"status":"pending_review","settlement_tx":"0x…","tearsheet":"https://wouldpayagain.com/api/ads/booking/6"}}}},"402":{"description":"x402 v2 payment required (PAYMENT-REQUIRED header)"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.600000"},"protocols":[{"x402":{}}]}}},"/api/ads/book/classified-4":{"post":{"operationId":"bookAd_classified_4","summary":"Book a reserved Classified ad — 4 issues, $0.7","description":"Final, paid step: confirms a Classified booking ALREADY reserved via POST /api/ads/reserve for a 4-issue run. Requires the reservation_code whose product and issue_count match this SKU — paying without one, or paying a mismatched SKU, is NOT honored as a booking (refund candidate, contact hello@wouldpayagain.com). Subject to editorial approval; rejected copy refunded in full, except self-declared test/validator submissions (no real loss, not refunded). Refunds are sent from our dedicated refund wallet 0xec5f0864B11965337507393CF19936cD50b6c116 (not the address you paid), so a refund from that wallet is verifiably ours. $0.7 USDC. Start free: GET /api/ads.","tags":["Would Pay Again"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"reservation_code":{"type":"string","description":"Code from POST /api/ads/reserve for this exact product and issue_count"}},"required":["reservation_code"]},"example":{"reservation_code":"…"}}}},"responses":{"200":{"description":"Paid response","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"confirmed":{"type":"boolean"},"booking_id":{"type":"integer"},"status":{"type":"string","enum":["pending_review"]},"settlement_tx":{"type":["string","null"]},"tearsheet":{"type":"string","format":"uri"},"note":{"type":"string"},"error":{"type":"string"}},"required":["ok","confirmed"]},"example":{"ok":true,"confirmed":true,"booking_id":6,"status":"pending_review","settlement_tx":"0x…","tearsheet":"https://wouldpayagain.com/api/ads/booking/6"}}}},"402":{"description":"x402 v2 payment required (PAYMENT-REQUIRED header)"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.700000"},"protocols":[{"x402":{}}]}}},"/api/ads/book/sponsor-1":{"post":{"operationId":"bookAd_sponsor_1","summary":"Book a reserved Sponsor card ad — 1 issue, $0.5","description":"Final, paid step: confirms a Sponsor card booking ALREADY reserved via POST /api/ads/reserve for a 1-issue run. Requires the reservation_code whose product and issue_count match this SKU — paying without one, or paying a mismatched SKU, is NOT honored as a booking (refund candidate, contact hello@wouldpayagain.com). Subject to editorial approval; rejected copy refunded in full, except self-declared test/validator submissions (no real loss, not refunded). Refunds are sent from our dedicated refund wallet 0xec5f0864B11965337507393CF19936cD50b6c116 (not the address you paid), so a refund from that wallet is verifiably ours. $0.5 USDC. Start free: GET /api/ads.","tags":["Would Pay Again"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"reservation_code":{"type":"string","description":"Code from POST /api/ads/reserve for this exact product and issue_count"}},"required":["reservation_code"]},"example":{"reservation_code":"…"}}}},"responses":{"200":{"description":"Paid response","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"confirmed":{"type":"boolean"},"booking_id":{"type":"integer"},"status":{"type":"string","enum":["pending_review"]},"settlement_tx":{"type":["string","null"]},"tearsheet":{"type":"string","format":"uri"},"note":{"type":"string"},"error":{"type":"string"}},"required":["ok","confirmed"]},"example":{"ok":true,"confirmed":true,"booking_id":6,"status":"pending_review","settlement_tx":"0x…","tearsheet":"https://wouldpayagain.com/api/ads/booking/6"}}}},"402":{"description":"x402 v2 payment required (PAYMENT-REQUIRED header)"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.500000"},"protocols":[{"x402":{}}]}}},"/api/ads/book/sponsor-2":{"post":{"operationId":"bookAd_sponsor_2","summary":"Book a reserved Sponsor card ad — 2 issues, $1","description":"Final, paid step: confirms a Sponsor card booking ALREADY reserved via POST /api/ads/reserve for a 2-issue run. Requires the reservation_code whose product and issue_count match this SKU — paying without one, or paying a mismatched SKU, is NOT honored as a booking (refund candidate, contact hello@wouldpayagain.com). Subject to editorial approval; rejected copy refunded in full, except self-declared test/validator submissions (no real loss, not refunded). Refunds are sent from our dedicated refund wallet 0xec5f0864B11965337507393CF19936cD50b6c116 (not the address you paid), so a refund from that wallet is verifiably ours. $1 USDC. Start free: GET /api/ads.","tags":["Would Pay Again"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"reservation_code":{"type":"string","description":"Code from POST /api/ads/reserve for this exact product and issue_count"}},"required":["reservation_code"]},"example":{"reservation_code":"…"}}}},"responses":{"200":{"description":"Paid response","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"confirmed":{"type":"boolean"},"booking_id":{"type":"integer"},"status":{"type":"string","enum":["pending_review"]},"settlement_tx":{"type":["string","null"]},"tearsheet":{"type":"string","format":"uri"},"note":{"type":"string"},"error":{"type":"string"}},"required":["ok","confirmed"]},"example":{"ok":true,"confirmed":true,"booking_id":6,"status":"pending_review","settlement_tx":"0x…","tearsheet":"https://wouldpayagain.com/api/ads/booking/6"}}}},"402":{"description":"x402 v2 payment required (PAYMENT-REQUIRED header)"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"1.000000"},"protocols":[{"x402":{}}]}}},"/api/ads/book/sponsor-3":{"post":{"operationId":"bookAd_sponsor_3","summary":"Book a reserved Sponsor card ad — 3 issues, $1.5","description":"Final, paid step: confirms a Sponsor card booking ALREADY reserved via POST /api/ads/reserve for a 3-issue run. Requires the reservation_code whose product and issue_count match this SKU — paying without one, or paying a mismatched SKU, is NOT honored as a booking (refund candidate, contact hello@wouldpayagain.com). Subject to editorial approval; rejected copy refunded in full, except self-declared test/validator submissions (no real loss, not refunded). Refunds are sent from our dedicated refund wallet 0xec5f0864B11965337507393CF19936cD50b6c116 (not the address you paid), so a refund from that wallet is verifiably ours. $1.5 USDC. Start free: GET /api/ads.","tags":["Would Pay Again"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"reservation_code":{"type":"string","description":"Code from POST /api/ads/reserve for this exact product and issue_count"}},"required":["reservation_code"]},"example":{"reservation_code":"…"}}}},"responses":{"200":{"description":"Paid response","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"confirmed":{"type":"boolean"},"booking_id":{"type":"integer"},"status":{"type":"string","enum":["pending_review"]},"settlement_tx":{"type":["string","null"]},"tearsheet":{"type":"string","format":"uri"},"note":{"type":"string"},"error":{"type":"string"}},"required":["ok","confirmed"]},"example":{"ok":true,"confirmed":true,"booking_id":6,"status":"pending_review","settlement_tx":"0x…","tearsheet":"https://wouldpayagain.com/api/ads/booking/6"}}}},"402":{"description":"x402 v2 payment required (PAYMENT-REQUIRED header)"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"1.500000"},"protocols":[{"x402":{}}]}}},"/api/ads/book/sponsor-4":{"post":{"operationId":"bookAd_sponsor_4","summary":"Book a reserved Sponsor card ad — 4 issues, $1.75","description":"Final, paid step: confirms a Sponsor card booking ALREADY reserved via POST /api/ads/reserve for a 4-issue run. Requires the reservation_code whose product and issue_count match this SKU — paying without one, or paying a mismatched SKU, is NOT honored as a booking (refund candidate, contact hello@wouldpayagain.com). Subject to editorial approval; rejected copy refunded in full, except self-declared test/validator submissions (no real loss, not refunded). Refunds are sent from our dedicated refund wallet 0xec5f0864B11965337507393CF19936cD50b6c116 (not the address you paid), so a refund from that wallet is verifiably ours. $1.75 USDC. Start free: GET /api/ads.","tags":["Would Pay Again"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"reservation_code":{"type":"string","description":"Code from POST /api/ads/reserve for this exact product and issue_count"}},"required":["reservation_code"]},"example":{"reservation_code":"…"}}}},"responses":{"200":{"description":"Paid response","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"confirmed":{"type":"boolean"},"booking_id":{"type":"integer"},"status":{"type":"string","enum":["pending_review"]},"settlement_tx":{"type":["string","null"]},"tearsheet":{"type":"string","format":"uri"},"note":{"type":"string"},"error":{"type":"string"}},"required":["ok","confirmed"]},"example":{"ok":true,"confirmed":true,"booking_id":6,"status":"pending_review","settlement_tx":"0x…","tearsheet":"https://wouldpayagain.com/api/ads/booking/6"}}}},"402":{"description":"x402 v2 payment required (PAYMENT-REQUIRED header)"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"1.750000"},"protocols":[{"x402":{}}]}}},"/api/sponsor/inquire":{"post":{"operationId":"inquireSponsoredReview","summary":"Start a sponsored-review inquiry (free, first step)","description":"Free first step of the sponsored-review process: submit your x402-paid endpoint or MCP server for consideration. Does NOT reserve a slot or take payment. Returns a reference_id -- poll GET /api/sponsor/status with it to see if you've been approved. Only pay POST /api/sponsor/request once approved and you have a confirmation_code.","tags":["Would Pay Again"],"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"subject_name":{"type":"string","description":"Name of the endpoint or MCP server"},"subject_url":{"type":"string","format":"uri","description":"Where we can discover/call the subject"},"subject_type":{"type":"string","enum":["endpoint","mcp_server"]},"contact":{"type":"string","format":"email","description":"Contact for scheduling/follow-up"},"notes":{"type":"string","maxLength":500,"description":"Optional additional context"}},"required":["subject_name","subject_url","subject_type","contact"]},"example":{"subject_name":"Example MCP Server","subject_url":"https://example.com/mcp","subject_type":"mcp_server","contact":"you@example.com","notes":"Optional context, up to 500 characters"}}}},"responses":{"200":{"description":"Response","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"reference_id":{"type":"string"},"status":{"type":"string","enum":["pending_review"]},"note":{"type":"string"}},"required":["ok","reference_id","status"]},"example":{"ok":true,"reference_id":"a1b2c3d4e5f6a7b8","status":"pending_review"}}}}}}},"/api/sponsor/status":{"get":{"operationId":"getSponsorStatus","summary":"Check a sponsored-review inquiry's status (free)","description":"Poll for the outcome of a sponsored-review inquiry by reference_id (from POST /api/sponsor/inquire). Returns a confirmation_code only while status is 'approved' and unpaid -- use it in POST /api/sponsor/request to confirm and pay.","tags":["Would Pay Again"],"security":[],"parameters":[{"name":"Accept","in":"header","required":false,"schema":{"type":"string","enum":["application/json"]},"description":"Only application/json is served; this header is accepted but not required."}],"responses":{"200":{"description":"Response","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"reference_id":{"type":"string"},"subject_name":{"type":"string"},"status":{"type":"string","enum":["pending_review","approved","declined","paid_confirmed","paid_unconfirmed","expired"]},"confirmation_code":{"type":"string"},"price_usdc":{"type":"number"},"expires_at":{"type":"string","format":"date-time"},"decline_reason":{"type":"string"}},"required":["ok","reference_id","status"]},"example":{"ok":true,"reference_id":"a1b2c3d4e5f6a7b8","subject_name":"Example MCP Server","status":"approved","confirmation_code":"…","price_usdc":25,"expires_at":"2026-08-10T00:00:00.000Z"}}}}}}},"/api/sponsor/request":{"post":{"operationId":"confirmSponsoredReview","summary":"Confirm and pay for an approved sponsored review","description":"Final, paid step of the sponsored-review process -- confirms and pays for a slot ALREADY approved via POST /api/sponsor/inquire and Publisher review. Requires a valid, unexpired, unused confirmation_code from GET /api/sponsor/status. Paying without a valid code is NOT honored as a sponsorship (refund candidate, contact hello@wouldpayagain.com). $25.00 USDC floor price.","tags":["Would Pay Again"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"confirmation_code":{"type":"string","description":"Code from an approved GET /api/sponsor/status response"}},"required":["confirmation_code"]},"example":{"confirmation_code":"…"}}}},"responses":{"200":{"description":"Paid response","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"confirmed":{"type":"boolean"},"request_id":{"type":"integer"},"status":{"type":"string","enum":["paid_confirmed"]},"settlement_tx":{"type":["string","null"]},"note":{"type":"string"},"error":{"type":"string"}},"required":["ok","confirmed"]},"example":{"ok":true,"confirmed":true,"request_id":1,"status":"paid_confirmed","settlement_tx":"0x…"}}}},"402":{"description":"x402 v2 payment required (PAYMENT-REQUIRED header)"}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"25.000000"},"protocols":[{"x402":{}}]}}}}}