{"openapi":"3.1.0","info":{"title":"VEA — Verified Execution Agent","version":"1.0.0","summary":"Pre-flight firewall and post-execution attestation for AI-agent transactions.","description":"Two calls. /verify runs BEFORE signing: allow or deny plus an Ed25519-signed receipt. /attest runs AFTER execution: did the chain do exactly what was declared? Non-custodial — VEA holds no keys and never executes. Paid per call over x402; the documented samples under /samples are free and use the same engine.","contact":{"name":"Alice Spark","url":"https://www.okx.ai/agents/6358"},"license":{"name":"MIT"}},"servers":[{"url":"https://vea-x402.onrender.com"}],"paths":{"/verify":{"post":{"summary":"Verify an intent before signing (paid)","description":"Unpaid requests return HTTP 402 with an x402 challenge in the PAYMENT-REQUIRED header and a readable body.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["intent"],"properties":{"intent":{"type":"object","required":["action","chain","rationale"],"properties":{"id":{"type":"string","description":"Optional caller-side id; generated if absent."},"action":{"type":"string","enum":["transfer","contractCall"]},"chain":{"type":"string","example":"base"},"to":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","example":"25"},"token":{"type":"string"},"rationale":{"type":"string","description":"Why the agent wants this. REQUIRED and never invented for you: an intent with no stated reason is refused, because a reason is what the calldata is checked against."},"params":{"type":"object","properties":{"calldata":{"type":"string","pattern":"^0x[0-9a-fA-F]*$"}}}}}}}}}},"responses":{"200":{"description":"Verdict plus signed receipt","content":{"application/json":{"schema":{"type":"object","properties":{"decision":{"type":"string","enum":["PASS","BLOCK"]},"confidence":{"type":"number"},"reasons":{"type":"array","items":{"type":"string"}},"receipt":{"type":"object"},"billing":{"type":"object"}}}}}},"402":{"description":"Payment required — x402 challenge"}}}},"/attest":{"post":{"summary":"Compare declared intent against what the chain actually did (paid)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["intent","execution"],"properties":{"intent":{"type":"object","required":["action","chain","rationale"],"properties":{"id":{"type":"string","description":"Optional caller-side id; generated if absent."},"action":{"type":"string","enum":["transfer","contractCall"]},"chain":{"type":"string","example":"base"},"to":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","example":"25"},"token":{"type":"string"},"rationale":{"type":"string","description":"Why the agent wants this. REQUIRED and never invented for you: an intent with no stated reason is refused, because a reason is what the calldata is checked against."},"params":{"type":"object","properties":{"calldata":{"type":"string","pattern":"^0x[0-9a-fA-F]*$"}}}}},"execution":{"type":"object","required":["txHash","status"],"properties":{"txHash":{"type":"string"},"status":{"type":"string","enum":["success","failed"]},"to":{"type":"string"},"valueOrAmount":{"type":"string"},"calldata":{"type":"string"}}}}}}}},"responses":{"200":{"description":"EXECUTED_AS_INTENDED or DEVIATION_DETECTED, every deviation named"},"402":{"description":"Payment required — x402 challenge"}}}},"/samples":{"get":{"summary":"Documented sample intents (FREE, same engine)"}},"/samples/{id}":{"get":{"summary":"Run one documented sample (FREE)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/receipts/verify":{"post":{"summary":"Verify a receipt signature (FREE)","description":"You do not need this endpoint at all: the Ed25519 signature can be checked offline against attestorPubKey. Not trusting us is the intended usage."}},"/ledger":{"get":{"summary":"Public decision ledger (FREE)"}},"/health":{"get":{"summary":"Service state, network, broadcaster (FREE)"}},"/pricing":{"get":{"summary":"Price, what a call costs to serve, and why (FREE)"}}}}