{"openapi":"3.1.0","info":{"title":"FinalSentry Browser Evidence","version":"0.3.0"},"servers":[{"url":"https://finalsentry-payment-gateway.smarterlistai.workers.dev"}],"paths":{"/api/browser-intro":{"post":{"summary":"Intro Quick: one public page, desktop/mobile browser evidence, 0.01 USDC","description":"One introductory report per wallet; 100 introductory reports globally including previous intro purchases. Reservations count until resolved. POST url and optional readonly mode, receive 402, then retry the identical body with PAYMENT-SIGNATURE. No payer or signed quote step on this endpoint. Ineligible or exhausted attempts return 409 without settlement; never upgrade price automatically. No login, security audit or live purchasing.","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.01"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Public HTTPS page you own or may test."},"mode":{"type":"string","enum":["readonly"],"default":"readonly"},"journey":{"type":"array","maxItems":0,"items":{"type":"object"}}}},"example":{"url":"https://example.com/"}}}},"responses":{"200":{"description":"Settled saved report; identical replay recovers without recharge"},"202":{"description":"Pending; retain and retry identical authorization"},"402":{"description":"10000 atomic Base USDC"},"409":{"description":"Introductory eligibility/capacity exhausted or changed request; no new settlement"},"503":{"description":"Unavailable; retain any unresolved authorization"}}}},"/api/browser-status":{"get":{"summary":"Check browser activation without spending","responses":{"200":{"description":"Configured state, exact price and scope; live validation status"}}}},"/api/browser-scan":{"post":{"summary":"FinalSentry website release verification: desktop/mobile Quick, multi-page Acceptance and configured-staging Journey","x-payment-info":{"protocols":["x402"],"price":{"mode":"dynamic","currency":"USD","min":"0.01","max":"0.999"}},"description":"GET, HEAD and empty unsigned POST probes advertise payment requirements only; they never execute a report. Purchase with POST. Standard Quick is 0.099 USDC. Eligible intro is 0.01 USDC for one completed report per wallet, subject to a global 100-report allocation; previous introductory purchases count. First POST the unsigned input with payer to obtain a signed quote and canonical request. Sign the returned x402 terms and resend that canonical request unchanged. Requires a connected browser provider; check /api/browser-status for availability. Failed runs are not settled; live purchases are blocked.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["url"],"description":"Quick defaults to readonly and at most eight expect steps. Acceptance requires unique same-origin pages, pages[0] equal to url, and unique assertions whose page indexes exist. Journey requires owner-configured staging, sandbox mode, an interaction and a final expect step; never use a live checkout. With payer, obtain a quote first and reuse the returned canonical request unchanged.","properties":{"package":{"type":"string","enum":["quick","acceptance","journey"]},"url":{"type":"string","format":"uri","description":"Public HTTP(S) URL; private, local and credential-bearing URLs are rejected."},"mode":{"type":"string","enum":["readonly","sandbox"],"default":"readonly"},"pages":{"type":"array","minItems":1,"maxItems":3,"uniqueItems":true,"items":{"type":"string","format":"uri"}},"requirements":{"type":"array","minItems":1,"maxItems":10,"items":{"type":"object","additionalProperties":false,"required":["id","page","text"],"properties":{"id":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,50}$"},"page":{"type":"integer","minimum":0,"maximum":2},"selector":{"type":"string","minLength":1,"maxLength":200,"default":"body"},"text":{"type":"string","minLength":1,"maxLength":200}}}},"journey":{"type":"array","maxItems":10,"items":{"type":"object","additionalProperties":false,"required":["action","selector"],"properties":{"action":{"type":"string","enum":["fill","click","expect"]},"selector":{"type":"string","minLength":1,"maxLength":200},"value":{"type":"string","maxLength":200},"text":{"type":"string","maxLength":200}},"allOf":[{"if":{"properties":{"action":{"const":"fill"}}},"then":{"required":["value"]}}]}},"payer":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"Unsigned quote request only; omit from the canonical paid retry."},"quote":{"type":"string","description":"Server-signed quote. Use the returned canonical request unchanged."}},"allOf":[{"if":{"required":["package"],"properties":{"package":{"const":"acceptance"}}},"then":{"required":["pages","requirements"],"properties":{"mode":{"const":"readonly"},"journey":{"maxItems":0}}},"else":{"not":{"anyOf":[{"required":["pages"]},{"required":["requirements"]}]}}},{"if":{"required":["package"],"properties":{"package":{"const":"journey"}}},"then":{"required":["mode","journey"],"properties":{"mode":{"const":"sandbox"},"journey":{"minItems":2}}},"else":{"properties":{"journey":{"maxItems":8}}}},{"if":{"properties":{"mode":{"const":"readonly"}},"required":["mode"]},"then":{"properties":{"journey":{"items":{"properties":{"action":{"const":"expect"}}}}}}}]},"examples":{"quick":{"value":{"url":"https://example.com/","mode":"readonly"}},"acceptance":{"value":{"package":"acceptance","url":"https://example.com/","mode":"readonly","pages":["https://example.com/"],"requirements":[{"id":"heading","page":0,"selector":"h1","text":"Example Domain"}]}}}}}},"parameters":[{"in":"header","name":"PAYMENT-SIGNATURE","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Confirmed settlement and saved browser report; replay returns original result"},"202":{"description":"Settlement pending; retry identical authorization"},"400":{"description":"Invalid request or sandbox not authorized"},"402":{"description":"Quick 99000 or eligible intro 10000, Acceptance 299000, or configured-staging Journey 999000 atomic native USDC; payer-specific responses include signed quote and canonical request"},"409":{"description":"Authorization already used, failed audit, changed request, expired quote or intro allocation unavailable; never silently charge a higher price"},"502":{"description":"Browser run failed, payment not settled"},"503":{"description":"Missing browser connection or unresolved service outcome; retain any existing authorization"}}}},"/api/paid-scan":{"post":{"summary":"Original 2 USDC HTML-only validation route","description":"Kept for the completed payment tester. No browser execution.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}}}}}},"responses":{"200":{"description":"Saved HTML-only report"},"402":{"description":"Original 2000000 atomic USDC challenge"}}}}}}