{"extensions":{"bazaar":{"schema":{"properties":{"input":{"properties":{"calldata":{"default":"0x","description":"Hex calldata; '0x' for a native transfer","type":"string"},"chain_id":{"default":8453,"description":"Chain id (optional, default 8453 = Base)","type":"integer"},"intent":{"description":"Declared agent intent \u2014 enables the Jev 3-in-1 intent-match diagnostic","type":"string"},"nonce":{"description":"Optional ERC-3009 bytes32 nonce (0x + 64 hex) the caller intends to spend; when present the signed verdict is nonce-bound and opens against exactly one settlement","pattern":"^0x[0-9a-fA-F]{64}$","type":"string"},"to":{"description":"Target address (0x + 40 hex)","pattern":"^0x[0-9a-fA-F]{40}$","type":"string"},"value":{"description":"Wei sent (optional, default 0)","minimum":0,"type":"integer"}},"required":["to"],"type":"object"},"output":{"properties":{"binding":{"description":"Signed. {kind: 'nonce-bound', nonce: '0x\u202664'} when the caller supplied the ERC-3009 nonce \u2014 verdict then opens against exactly one settlement, never a second identical payment. {kind: 'shape-bound'} otherwise \u2014 never upgradeable to a per-payment claim.","properties":{"kind":{"enum":["nonce-bound","shape-bound"],"type":"string"},"nonce":{"type":"string"}},"type":"object"},"chain_id":{"description":"Signed: chain the verdict is valid on (anti cross-chain replay)","type":"integer"},"checks_failed":{"description":"Layers that could not run (goplus, ofac_blocklist, jev_semantic)","items":{"type":"string"},"type":"array"},"evaluation_status":{"description":"not-measured means a required trust layer could not run (see checks_failed); a BLOCK with not-measured is gate conservatism, not evidence of danger, and must not count as a negative signal about the agent","enum":["measured","not-measured"],"type":"string"},"latency_ms":{"type":"number"},"layers":{"description":"Per-layer evidence (GoPlus risk, OFAC, Jev semantics, deterministic checks) \u2014 unsigned advisory detail","type":"object"},"limits":{"description":"Signed: what this verdict does and does not show","items":{"type":"string"},"type":"array"},"reasons":{"items":{"type":"string"},"type":"array"},"signature":{"description":"Ed25519 signature over the canonical digest of the signed payload (verdict, to, function, value, reasons, timestamp, chain_id, binding, evaluation_status, checks_failed, limits)","type":"string"},"timestamp":{"description":"Signed issue time, unix seconds. Ordering rule: a verdict counts as pre-flight only when strictly before the settlement block timestamp; equal does not count.","type":"integer"},"value":{"description":"Signed: wei in the payment shape","type":"integer"},"verdict":{"enum":["SAFE","CAUTION","BLOCK"],"type":"string"},"verify_key":{"description":"Hex Ed25519 verify key (also at /health)","type":"string"}},"type":"object"}},"type":"object"}}},"info":{"contact":{"email":"subcento@pm.me","name":"Subcento \u2014 operated by Alterfield","url":"https://subcento.alterfield.com"},"description":"Verifies an on-chain transaction BEFORE an AI agent signs it. Four layers: GoPlus address risk, OFAC blocklist, Jev (TypeSafe AI) semantic calldata analysis, deterministic checks. Ed25519-signed verdict. Fail-closed: unreachable trust layers => BLOCK, never a false SAFE. v1.2: every verdict carries a binding (nonce-bound opens against exactly one settlement, shape-bound never upgrades), an evaluation_status (measured | not-measured, so a blind BLOCK is never read as evidence of danger), and signed limits.","title":"Subcento \u2014 Pre-flight Transaction Verifier for AI Agents","version":"1.3.0","x-guidance":"Call POST /check before signing any Base/EVM transaction. Unpaid calls return HTTP 402 with a Payment-Required (x402 v2) header: pay exactly 0.002 USDC on Base mainnet (eip155:8453, scheme exact, maxTimeout 60s) via facilitator https://facilitator.goplausible.xyz, then retry the identical request with the X-PAYMENT header. Include 'intent' to get the 3-in-1 semantic diagnostic (drainer probability, risk level, intent-match). Treat BLOCK as final; CAUTION deserves a human or a smaller probe. Free routes: /, /health, /llms.txt, /openapi.json, /favicon.ico \u2014 never pay for discovery. To make a verdict citable as a pre-settlement precondition, send the ERC-3009 nonce you intend to spend in the request: the signed verdict then binds to it and opens against exactly one settlement. A BLOCK whose evaluation_status is not-measured means the verifier was blind, not that you are guilty. For market context, POST /regime (0.0001 USDC) returns a signed market-stress verdict: deterministic cross-asset seismograph score + Jev regime label (calm|volatile|stress|crisis) + 48h escalation noul. Default body {} is fine; {\"live_jev\": true} refreshes the Jev classification at request time."},"openapi":"3.1.0","paths":{"/":{"get":{"responses":{"200":{"description":"Discovery JSON"}},"security":[],"summary":"Machine-readable discovery card"}},"/check":{"post":{"requestBody":{"content":{"application/json":{"schema":{"properties":{"calldata":{"default":"0x","description":"Hex calldata; '0x' for a native transfer","type":"string"},"chain_id":{"default":8453,"description":"Chain id (optional, default 8453 = Base)","type":"integer"},"intent":{"description":"Declared agent intent \u2014 enables the Jev 3-in-1 intent-match diagnostic","type":"string"},"nonce":{"description":"Optional ERC-3009 bytes32 nonce (0x + 64 hex) the caller intends to spend; when present the signed verdict is nonce-bound and opens against exactly one settlement","pattern":"^0x[0-9a-fA-F]{64}$","type":"string"},"to":{"description":"Target address (0x + 40 hex)","pattern":"^0x[0-9a-fA-F]{40}$","type":"string"},"value":{"description":"Wei sent (optional, default 0)","minimum":0,"type":"integer"}},"required":["to"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"binding":{"description":"Signed. {kind: 'nonce-bound', nonce: '0x\u202664'} when the caller supplied the ERC-3009 nonce \u2014 verdict then opens against exactly one settlement, never a second identical payment. {kind: 'shape-bound'} otherwise \u2014 never upgradeable to a per-payment claim.","properties":{"kind":{"enum":["nonce-bound","shape-bound"],"type":"string"},"nonce":{"type":"string"}},"type":"object"},"chain_id":{"description":"Signed: chain the verdict is valid on (anti cross-chain replay)","type":"integer"},"checks_failed":{"description":"Layers that could not run (goplus, ofac_blocklist, jev_semantic)","items":{"type":"string"},"type":"array"},"evaluation_status":{"description":"not-measured means a required trust layer could not run (see checks_failed); a BLOCK with not-measured is gate conservatism, not evidence of danger, and must not count as a negative signal about the agent","enum":["measured","not-measured"],"type":"string"},"latency_ms":{"type":"number"},"layers":{"description":"Per-layer evidence (GoPlus risk, OFAC, Jev semantics, deterministic checks) \u2014 unsigned advisory detail","type":"object"},"limits":{"description":"Signed: what this verdict does and does not show","items":{"type":"string"},"type":"array"},"reasons":{"items":{"type":"string"},"type":"array"},"signature":{"description":"Ed25519 signature over the canonical digest of the signed payload (verdict, to, function, value, reasons, timestamp, chain_id, binding, evaluation_status, checks_failed, limits)","type":"string"},"timestamp":{"description":"Signed issue time, unix seconds. Ordering rule: a verdict counts as pre-flight only when strictly before the settlement block timestamp; equal does not count.","type":"integer"},"value":{"description":"Signed: wei in the payment shape","type":"integer"},"verdict":{"enum":["SAFE","CAUTION","BLOCK"],"type":"string"},"verify_key":{"description":"Hex Ed25519 verify key (also at /health)","type":"string"}},"type":"object"}}},"description":"Signed verdict"},"400":{"description":"Bad request (after payment)"},"402":{"description":"Payment Required"}},"summary":"Pre-flight transaction verification (paid)","x-payment-info":{"price":{"amount":"0.002","currency":"USD","mode":"fixed"},"protocols":[{"x402":{}}]}}},"/health":{"get":{"responses":{"200":{"description":"ok"}},"security":[],"summary":"Liveness + verify_key"}},"/llms.txt":{"get":{"responses":{"200":{"description":"text/plain"}},"security":[],"summary":"Plain-text guide for LLM crawlers"}},"/regime":{"post":{"requestBody":{"content":{"application/json":{"schema":{"properties":{"live_jev":{"default":false,"description":"Refresh the Jev regime classification at request time (~300ms, default false)","type":"boolean"}},"type":"object"}}},"required":false},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"age_seconds":{"description":"Freshness of the snapshot at verdict time (<1800 guaranteed)","type":"integer"},"btc_exchange_spread_pct":{"description":"Max BTC price divergence across exchanges","type":["number","null"]},"components":{"description":"Per-engine scores (fx, crypto, btc_disp, equities, rates, vix, fng)","type":"object"},"escalade_48h":{"description":"Jev noul: probability stress escalates within 48h","type":["number","null"]},"evaluation_status":{"enum":["measured","not-measured"],"type":"string"},"jev_regime":{"enum":["calm","volatile","stress","crisis",null],"type":["string","null"]},"latency_ms":{"type":"number"},"limits":{"items":{"type":"string"},"type":"array"},"market_verdict":{"enum":["SAFE","CAUTION","BLOCK"],"type":"string"},"score_global":{"description":"Deterministic cross-asset stress score 0-100","type":"number"},"signature":{"description":"Ed25519 over the canonical regime digest","type":"string"},"snapshot_ts":{"description":"UTC capture time of the underlying seismograph snapshot","type":"string"},"timestamp":{"type":"integer"},"verify_key":{"type":"string"},"zone":{"description":"calme | tendu | alarme","type":"string"}},"type":"object"}}},"description":"Signed regime verdict"},"402":{"description":"Payment Required"},"503":{"description":"Snapshot unavailable"}},"summary":"Signed market-stress verdict (paid, 0.0001 USDC)","x-payment-info":{"price":{"amount":"0.0001","currency":"USD","mode":"fixed"},"protocols":[{"x402":{}}]}}}}}
