{"openapi":"3.1.0","info":{"title":"Proofwire: verification-as-a-service for agents","version":"1.0.0","description":"Close the loop on your own work with one paid call that returns a verdict plus Ed25519-signed, falsifiable evidence (verify signatures with GET /v1/keys). GET /v1/verify/http checks a URL is alive (redirect chain, TLS, latency, body hash). GET /v1/verify/dns resolves records and parses SPF/DMARC/DKIM. Email: POST /v1/verify/email/inbox issues a seed address; send mail to it, then GET /v1/verify/email?inbox=&token= returns delivery plus SPF/DKIM/DMARC alignment and raw headers (polls inside the paid window are free). Webhooks: POST /v1/verify/webhook arms a tripwire URL; register it upstream, then poll GET /v1/verify/webhook/{id}?token= for free. GET /v1/verify/page renders a page in a real browser, asserts a selector/text, and returns a screenshot URL. Failed work is never settled.","x-guidance":"Close the loop on your own work with one paid call that returns a verdict plus Ed25519-signed, falsifiable evidence (verify signatures with GET /v1/keys). GET /v1/verify/http checks a URL is alive (redirect chain, TLS, latency, body hash). GET /v1/verify/dns resolves records and parses SPF/DMARC/DKIM. Email: POST /v1/verify/email/inbox issues a seed address; send mail to it, then GET /v1/verify/email?inbox=&token= returns delivery plus SPF/DKIM/DMARC alignment and raw headers (polls inside the paid window are free). Webhooks: POST /v1/verify/webhook arms a tripwire URL; register it upstream, then poll GET /v1/verify/webhook/{id}?token= for free. GET /v1/verify/page renders a page in a real browser, asserts a selector/text, and returns a screenshot URL. Failed work is never settled.","contact":{"name":"reverse.captcha","url":"https://reversecaptcha.fun"}},"servers":[{"url":"https://verify.reversecaptcha.fun"}],"paths":{"/v1/verify/http":{"get":{"operationId":"verifyHttp","summary":"Is this URL alive? Real fetch with redirect chain, TLS, latency and body hash, returned as signed evidence.","description":"Is this URL alive? Real fetch with redirect chain, TLS, latency and body hash, returned as signed evidence.","tags":["Proofwire: verification-as-a-service for agents"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"},"example":{"verdict":"pass","reason":"status 200","evidence":{"final_url":"https://example.com/","final_status":200,"redirect_chain":[],"tls":{"valid":true}},"signature":{"alg":"Ed25519"}}}}},"402":{"description":"Payment Required"}},"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","format":"uri"}},{"name":"expect_status","in":"query","required":false,"schema":{"type":"string"}},{"name":"include_hash","in":"query","required":false,"schema":{"type":"string"}}]}},"/v1/verify/dns":{"get":{"operationId":"verifyDns","summary":"Resolved A/AAAA/CNAME/MX/TXT/NS/CAA from public resolvers with parsed SPF, DMARC and DKIM, for setup verification.","description":"Resolved A/AAAA/CNAME/MX/TXT/NS/CAA from public resolvers with parsed SPF, DMARC and DKIM, for setup verification.","tags":["Proofwire: verification-as-a-service for agents"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.002000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"},"example":{"verdict":"pass","reason":"found \"v=spf1\"","evidence":{"records":{"TXT":["v=spf1 -all"]},"email":{"spf":{"found":true},"dmarc":{"found":true}}}}}}},"402":{"description":"Payment Required"}},"parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string"}},{"name":"type","in":"query","required":false,"schema":{"type":"string"}},{"name":"selector","in":"query","required":false,"schema":{"type":"string"}},{"name":"expect","in":"query","required":false,"schema":{"type":"string"}}]}},"/v1/verify/email/inbox":{"post":{"operationId":"emailInbox","summary":"Issue a fresh seed inbox on the catch-all domain. Give the address to whatever sends the mail, then call verify/email.","description":"Issue a fresh seed inbox on the catch-all domain. Give the address to whatever sends the mail, then call verify/email.","tags":["Proofwire: verification-as-a-service for agents"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"},"example":{"verdict":"issued","inbox":"check-7f3a1b2c","address":"check-7f3a1b2c@inbox.example","token":"inb_...","expires_at":"2026-01-01T00:00:00Z"}}}},"402":{"description":"Payment Required"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ttl_hours":{"type":"number","maximum":72}}}}}}}},"/v1/verify/email":{"get":{"operationId":"verifyEmail","summary":"Did the message actually arrive? Watches a seed inbox for a window (polls inside it are free) and returns delivery plus SPF/DKIM/DMARC alignment and raw headers.","description":"Did the message actually arrive? Watches a seed inbox for a window (polls inside it are free) and returns delivery plus SPF/DKIM/DMARC alignment and raw headers.","tags":["Proofwire: verification-as-a-service for agents"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"},"example":{"verdict":"delivered","evidence":{"message":{"received_at":"2026-01-01T00:00:00Z","authentication":{"spf":{"result":"pass"},"dkim":[{"result":"pass","aligned":true}],"dmarc":{"result":"pass"}},"raw_headers":"Received: ..."}}}}}},"402":{"description":"Payment Required"}},"parameters":[{"name":"inbox","in":"query","required":true,"schema":{"type":"string"}},{"name":"token","in":"query","required":true,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string"}},{"name":"match_subject","in":"query","required":false,"schema":{"type":"string"}},{"name":"window","in":"query","required":false,"schema":{"type":"string"}},{"name":"wait","in":"query","required":false,"schema":{"type":"string"}}]}},"/v1/verify/webhook":{"post":{"operationId":"verifyWebhook","summary":"Arm a one-time tripwire URL that records every hit (payload, headers, source IP) for a window of up to an hour; polls are free. Also works as a cron heartbeat with expect_by.","description":"Arm a one-time tripwire URL that records every hit (payload, headers, source IP) for a window of up to an hour; polls are free. Also works as a cron heartbeat with expect_by.","tags":["Proofwire: verification-as-a-service for agents"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"},"example":{"verdict":"armed","id":"hk_...","hook_url":"https://verify.example/hook/hk_...","watch_token":"wt_...","expires_at":"2026-01-01T00:05:00Z"}}}},"402":{"description":"Payment Required"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"window_seconds":{"type":"number","minimum":60,"maximum":3600},"label":{"type":"string"},"expect_by_seconds":{"type":"number"}}}}}}}},"/v1/verify/page":{"get":{"operationId":"verifyPage","summary":"Does the page really show it? Full browser render (JS, network), waits, asserts a selector and/or text, returns extracted text, console errors and a screenshot URL.","description":"Does the page really show it? Full browser render (JS, network), waits, asserts a selector and/or text, returns extracted text, console errors and a screenshot URL.","tags":["Proofwire: verification-as-a-service for agents"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"},"example":{"verdict":"pass","evidence":{"title":"Example Domain","extracted_text":"This domain is for use in documentation examples...","console_errors":[],"screenshot_url":"https://verify.example/evidence/....png?exp=...&sig=..."}}}}},"402":{"description":"Payment Required"}},"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","format":"uri"}},{"name":"expect_selector","in":"query","required":false,"schema":{"type":"string"}},{"name":"expect_text","in":"query","required":false,"schema":{"type":"string"}},{"name":"wait","in":"query","required":false,"schema":{"type":"string"}},{"name":"full_page","in":"query","required":false,"schema":{"type":"string"}},{"name":"viewport","in":"query","required":false,"schema":{"type":"string"}}]}}}}