{"openapi":"3.1.0","info":{"title":"Agent Verification Utility","version":"0.2.1","description":"A deterministic, x402-paid JSON evidence verification service for external agents. The service attests that declared checks were executed; it does not attest real-world truth.","license":{"name":"UNLICENSED"}},"servers":[{"url":"/","description":"Relative to the current deployment origin"}],"tags":[{"name":"purchase","description":"Quote and paid verification operations"},{"name":"discovery","description":"Machine-readable service discovery"},{"name":"operations","description":"Availability and operational status"},{"name":"mcp","description":"Stateless MCP Streamable HTTP transport"}],"security":[],"paths":{"/":{"get":{"operationId":"getLandingPage","summary":"Get the human- and agent-readable service index","tags":["discovery"],"responses":{"200":{"description":"Lightweight service index","content":{"text/html":{"schema":{"type":"string"}},"text/markdown":{"schema":{"type":"string"},"description":"Returned when text/markdown is the preferred Accept media type."}}},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/quote":{"post":{"operationId":"quoteVerifyEvidence","summary":"Validate a request and quote deterministic verification","description":"Free preflight. A quote is returned only when the request is executable and the conservative contribution-margin policy passes.","tags":["purchase"],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyEvidenceRequest"}}}},"responses":{"200":{"description":"Profitable, executable quote","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/verify-evidence":{"post":{"operationId":"verifyEvidence","summary":"Purchase and execute deterministic evidence verification","description":"Send the exact request bound to an unexpired quote. The first valid unpaid call returns x402 v2 HTTP 402 requirements. Retry with PAYMENT-SIGNATURE after the agent approves the price.","tags":["purchase"],"parameters":[{"$ref":"#/components/parameters/QuoteId"},{"$ref":"#/components/parameters/PaymentSignature"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyEvidenceRequest"}}}},"responses":{"200":{"description":"Verification executed and x402 payment settled","headers":{"PAYMENT-RESPONSE":{"required":true,"description":"Base64-encoded x402 v2 settlement response and enabled extensions.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyEvidenceResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"402":{"description":"Valid request requires x402 payment","headers":{"PAYMENT-REQUIRED":{"required":true,"description":"Base64-encoded x402 v2 PaymentRequired document.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/health":{"get":{"operationId":"getHealth","summary":"Get service liveness and availability","tags":["operations"],"responses":{"200":{"description":"Service is available or degraded","headers":{"Cache-Control":{"schema":{"type":"string","const":"no-store"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"description":"Kill switch or maintenance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}}}},"/stats":{"get":{"operationId":"getPublicStats","summary":"Get privacy-safe service activity and readiness metrics","tags":["operations"],"responses":{"200":{"description":"Aggregate service metrics without payer or evidence data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicStats"}}}},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/agent.json":{"get":{"operationId":"getAgentManifest","summary":"Get the product-specific agent service manifest","tags":["discovery"],"responses":{"200":{"description":"Agent service manifest","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentManifest"}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/.well-known/x402":{"get":{"operationId":"getX402Manifest","summary":"Get the self-hosted x402 convenience manifest","description":"This convenience URL is not represented as a universal x402 discovery standard. Bazaar metadata in the live 402 is the ecosystem discovery mechanism.","tags":["discovery"],"responses":{"200":{"description":"x402 resource metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402Manifest"}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/.well-known/api-catalog":{"get":{"operationId":"getApiCatalog","summary":"Get the RFC 9727 API catalog","tags":["discovery"],"responses":{"200":{"description":"RFC 9727 Linkset catalog for automated API discovery","headers":{"Link":{"schema":{"type":"string"},"description":"api-catalog link relation"}},"content":{"application/linkset+json":{"schema":{"type":"object","required":["linkset"],"properties":{"linkset":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":true}}}}}}}}}},"/.well-known/ai-catalog.json":{"get":{"operationId":"getAiCatalog","summary":"Discover the current experimental MCP Server Card","description":"AI Catalog 1.0 document for domain-level MCP server-card discovery.","tags":["discovery"],"responses":{"200":{"description":"AI Catalog","headers":{"ETag":{"schema":{"type":"string"},"description":"Strong SHA-256 entity tag; If-None-Match is supported."}},"content":{"application/ai-catalog+json":{"schema":{"type":"object","required":["specVersion","entries"],"properties":{"specVersion":{"type":"string","const":"1.0"},"entries":{"type":"array","minItems":1,"items":{"type":"object","required":["identifier","type","url"],"properties":{"identifier":{"type":"string","format":"uri"},"type":{"type":"string","const":"application/mcp-server-card+json"},"url":{"type":"string","format":"uri"}}}}}}}}},"304":{"description":"Not modified"}}}},"/mcp/server-card":{"get":{"operationId":"getCurrentMcpServerCard","summary":"Get the current experimental MCP Server Card","description":"Publishes the experimental MCP Server Card v1 document next to the Streamable HTTP endpoint. Tool inventory remains authoritative at runtime through tools/list.","tags":["discovery","mcp"],"responses":{"200":{"description":"Experimental MCP Server Card","headers":{"ETag":{"schema":{"type":"string"},"description":"Strong SHA-256 entity tag; If-None-Match is supported."}},"content":{"application/mcp-server-card+json":{"schema":{"type":"object","required":["$schema","name","description","version","remotes"],"properties":{"$schema":{"type":"string","const":"https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json"},"name":{"type":"string","const":"dev.kgninja/agent-verification-utility"},"title":{"type":"string"},"description":{"type":"string","maxLength":100},"version":{"type":"string"},"websiteUrl":{"type":"string","format":"uri"},"icons":{"type":"array","items":{"type":"object","additionalProperties":true}},"remotes":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":true}},"_meta":{"type":"object","additionalProperties":true}},"additionalProperties":true}}}},"304":{"description":"Not modified"}}}},"/.well-known/mcp/server-card.json":{"get":{"operationId":"getAgentReadinessMcpServerCard","summary":"Get the Cloudflare Agent Readiness MCP card","description":"Compatibility document using the earlier MCP card shape recommended by Cloudflare Agent Readiness. New clients should discover /mcp/server-card through /.well-known/ai-catalog.json.","tags":["discovery"],"responses":{"200":{"description":"Draft MCP Server Card","content":{"application/json":{"schema":{"type":"object","required":["$schema","version","protocolVersion","serverInfo","transport","authentication","tools"],"properties":{"$schema":{"type":"string","format":"uri"},"version":{"type":"string"},"protocolVersion":{"type":"string"},"serverInfo":{"type":"object","additionalProperties":true},"transport":{"type":"object","additionalProperties":true},"authentication":{"type":"object","additionalProperties":true},"tools":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}}}}},"/.well-known/mcp.json":{"get":{"operationId":"getMcpServerCardCompatibilityAlias","summary":"Get the draft MCP Server Card compatibility alias","description":"Returns the same card as /.well-known/mcp/server-card.json for clients following Cloudflare's managed MCP server examples.","tags":["discovery"],"responses":{"200":{"description":"Draft MCP Server Card","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/.well-known/agent-skills/index.json":{"get":{"operationId":"getAgentSkillsIndex","summary":"Discover published Agent Skills","description":"Draft Cloudflare Agent Skills Discovery v0.2.0 index with SHA-256 artifact integrity.","tags":["discovery"],"responses":{"200":{"description":"Agent Skills discovery index","content":{"application/json":{"schema":{"type":"object","required":["$schema","skills"],"properties":{"$schema":{"type":"string","format":"uri"},"skills":{"type":"array","items":{"type":"object","required":["name","type","description","url","digest"],"properties":{"name":{"type":"string"},"type":{"type":"string","const":"skill-md"},"description":{"type":"string"},"url":{"type":"string","format":"uri"},"digest":{"type":"string","pattern":"^sha256:[a-f0-9]{64}$"}}}}}}}}}}}},"/.well-known/agent-skills/verify-json-evidence/SKILL.md":{"get":{"operationId":"getVerifyJsonEvidenceSkill","summary":"Get the verify-json-evidence Agent Skill","tags":["discovery"],"responses":{"200":{"description":"Agent Skills-compatible Markdown instructions","content":{"text/markdown":{"schema":{"type":"string"}}}}}}},"/.well-known/jwks.json":{"get":{"operationId":"getEvidenceJwks","summary":"Get public keys for verification evidence","tags":["discovery"],"responses":{"200":{"description":"JSON Web Key Set containing active public evidence keys","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Jwks"}}}}}}},"/llms.txt":{"get":{"operationId":"getLlmsIndex","summary":"Get the compact LLM-oriented service index","tags":["discovery"],"responses":{"200":{"description":"Compact Markdown service index","content":{"text/markdown":{"schema":{"type":"string"}}}}}}},"/llms-full.txt":{"get":{"operationId":"getLlmsFullIndex","summary":"Get complete LLM-oriented usage guidance","tags":["discovery"],"responses":{"200":{"description":"Detailed Markdown service instructions","content":{"text/markdown":{"schema":{"type":"string"}}}}}}},"/index.md":{"get":{"operationId":"getMarkdownServiceGuide","summary":"Get the canonical Markdown service guide","tags":["discovery"],"responses":{"200":{"description":"Detailed Markdown service instructions","content":{"text/markdown":{"schema":{"type":"string"}}}}}}},"/icon.svg":{"get":{"operationId":"getServiceIcon","summary":"Get the service icon referenced by the MCP Server Card","tags":["discovery"],"responses":{"200":{"description":"SVG service icon","content":{"image/svg+xml":{"schema":{"type":"string"}}}}}}},"/robots.txt":{"get":{"operationId":"getRobots","summary":"Get crawler access policy and discovery hints","tags":["discovery"],"responses":{"200":{"description":"Crawler policy","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/sitemap.xml":{"get":{"operationId":"getSitemap","summary":"Get the public service discovery sitemap","tags":["discovery"],"responses":{"200":{"description":"XML sitemap for public machine-readable entry points","content":{"application/xml":{"schema":{"type":"string"}}}}}}},"/openapi.json":{"get":{"operationId":"getOpenApi","summary":"Get this OpenAPI document","tags":["discovery"],"responses":{"200":{"description":"OpenAPI 3.1 JSON","content":{"application/json":{"schema":{"type":"object"}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/mcp":{"post":{"operationId":"mcpStreamableHttp","summary":"Stateless MCP SDK v2 Streamable HTTP endpoint","description":"Exposes three free discovery/quote tools and the paid verify_evidence tool. The paid MCP tool uses x402 metadata and shares the audited POST /verify-evidence settlement and D1 ledger path.","tags":["mcp"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"MCP protocol response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}},"text/event-stream":{"schema":{"type":"string"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Unavailable"}}}}},"components":{"parameters":{"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":true,"description":"Stable key for one logical quote request. Reusing it with a different request hash returns 409.","schema":{"type":"string","minLength":16,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$"}},"QuoteId":{"name":"X-Quote-ID","in":"header","required":true,"schema":{"type":"string","pattern":"^qte_[A-Za-z0-9_-]+$"}},"PaymentSignature":{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"description":"Base64-encoded x402 v2 payment payload, supplied on the paid retry.","schema":{"type":"string"}}},"schemas":{"VerifyEvidenceRequest":{"type":"object","additionalProperties":false,"required":["client_request_id","evidence","assertions"],"properties":{"client_request_id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9._:-]+$"},"evidence":{"$ref":"#/components/schemas/InlineJsonEvidence"},"assertions":{"type":"array","minItems":1,"maxItems":16,"items":{"$ref":"#/components/schemas/Assertion"}}}},"InlineJsonEvidence":{"type":"object","additionalProperties":false,"required":["media_type","content_base64"],"properties":{"media_type":{"type":"string","const":"application/json"},"content_base64":{"type":"string","contentEncoding":"base64","contentMediaType":"application/json","maxLength":87384,"description":"Strict Base64. Decoded UTF-8 JSON must be between 1 byte and 65536 bytes."}}},"Assertion":{"oneOf":[{"$ref":"#/components/schemas/Sha256EqualsAssertion"},{"$ref":"#/components/schemas/JsonPointerExistsAssertion"},{"$ref":"#/components/schemas/JsonPointerEqualsAssertion"},{"$ref":"#/components/schemas/JsonTypeIsAssertion"}],"discriminator":{"propertyName":"op"}},"Sha256EqualsAssertion":{"type":"object","additionalProperties":false,"required":["op","expected_hex"],"properties":{"op":{"type":"string","const":"sha256_equals"},"expected_hex":{"type":"string","pattern":"^[a-f0-9]{64}$"}}},"JsonPointerExistsAssertion":{"type":"object","additionalProperties":false,"required":["op","path"],"properties":{"op":{"type":"string","const":"json_pointer_exists"},"path":{"$ref":"#/components/schemas/JsonPointer"}}},"JsonPointerEqualsAssertion":{"type":"object","additionalProperties":false,"required":["op","path","expected"],"properties":{"op":{"type":"string","const":"json_pointer_equals"},"path":{"$ref":"#/components/schemas/JsonPointer"},"expected":{"description":"Any JSON value. Equality is deterministic structural JSON equality."}}},"JsonTypeIsAssertion":{"type":"object","additionalProperties":false,"required":["op","path","expected_type"],"properties":{"op":{"type":"string","const":"json_type_is"},"path":{"$ref":"#/components/schemas/JsonPointer"},"expected_type":{"type":"string","enum":["null","boolean","number","string","array","object"]}}},"JsonPointer":{"type":"string","maxLength":512,"description":"RFC 6901 JSON Pointer; the empty string addresses the whole document."},"QuoteResponse":{"type":"object","additionalProperties":false,"required":["quote_id","request_id","request_hash","product","price","expires_at","economic_guard","purchase"],"properties":{"quote_id":{"type":"string","pattern":"^qte_"},"request_id":{"type":"string","pattern":"^req_"},"request_hash":{"$ref":"#/components/schemas/Sha256Digest"},"product":{"type":"string","const":"verify-evidence/det-json-v1"},"price":{"$ref":"#/components/schemas/Price"},"expires_at":{"type":"string","format":"date-time"},"economic_guard":{"type":"object","additionalProperties":false,"required":["decision","contribution_margin_lower_bound_microusd"],"properties":{"decision":{"type":"string","const":"accept"},"contribution_margin_lower_bound_microusd":{"type":"integer","minimum":1}}},"purchase":{"type":"object","additionalProperties":false,"required":["method","url","quote_header"],"properties":{"method":{"type":"string","const":"POST"},"url":{"type":"string","format":"uri"},"quote_header":{"type":"string","const":"X-Quote-ID"}}}}},"Price":{"type":"object","additionalProperties":false,"required":["amount","asset","symbol","decimals","network"],"properties":{"amount":{"type":"string","pattern":"^[0-9]+$","examples":["10000"]},"asset":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"symbol":{"type":"string","const":"USDC"},"decimals":{"type":"integer","const":6},"network":{"type":"string","enum":["eip155:84532","eip155:8453"]}}},"VerifyEvidenceResponse":{"type":"object","additionalProperties":false,"required":["transaction_id","quote_id","request_hash","verification","evidence","receipt"],"properties":{"transaction_id":{"type":"string","pattern":"^txn_"},"quote_id":{"type":"string","pattern":"^qte_"},"request_hash":{"$ref":"#/components/schemas/Sha256Digest"},"verification":{"$ref":"#/components/schemas/VerificationResult"},"evidence":{"$ref":"#/components/schemas/SignedEvidence"},"receipt":{"$ref":"#/components/schemas/DeliveryReceipt"}}},"VerificationResult":{"type":"object","additionalProperties":false,"required":["outcome","algorithm_version","checks","executed_at"],"properties":{"outcome":{"type":"string","enum":["pass","fail"]},"algorithm_version":{"type":"string","const":"det-json-v1"},"checks":{"type":"array","minItems":1,"maxItems":16,"items":{"type":"object","additionalProperties":false,"required":["index","op","passed"],"properties":{"index":{"type":"integer","minimum":0,"maximum":15},"op":{"type":"string","enum":["sha256_equals","json_pointer_exists","json_pointer_equals","json_type_is"]},"passed":{"type":"boolean"},"code":{"type":"string"}}}},"executed_at":{"type":"string","format":"date-time"}}},"SignedEvidence":{"type":"object","additionalProperties":false,"required":["evidence_id","signed_payload_b64url","signature"],"properties":{"evidence_id":{"type":"string","pattern":"^evd_"},"signed_payload_b64url":{"type":"string","pattern":"^[A-Za-z0-9_-]+$"},"signature":{"type":"object","additionalProperties":false,"required":["alg","kid","value_b64url"],"properties":{"alg":{"type":"string","const":"Ed25519"},"kid":{"type":"string","format":"uri-reference"},"value_b64url":{"type":"string","pattern":"^[A-Za-z0-9_-]+$"}}}}},"DeliveryReceipt":{"type":"object","additionalProperties":false,"required":["receipt_id","delivery","price_paid_microusd","variable_cost_upper_bound_microusd","contribution_margin_lower_bound_microusd","cost_basis"],"properties":{"receipt_id":{"type":"string","pattern":"^rcpt_"},"delivery":{"type":"string","const":"completed"},"price_paid_microusd":{"type":"integer","minimum":1},"variable_cost_upper_bound_microusd":{"type":"integer","minimum":0},"contribution_margin_lower_bound_microusd":{"type":"integer"},"cost_basis":{"type":"string","enum":["conservative_upper_bound","reconciled"]}}},"X402PaymentRequired":{"type":"object","description":"Wire schema is generated by the pinned x402 v2 SDK. Unknown extension keys must be preserved.","required":["x402Version","error","resource","accepts","extensions"],"properties":{"x402Version":{"type":"integer","const":2},"error":{"type":"string"},"resource":{"type":"object","required":["url","description","mimeType","serviceName","tags","iconUrl"],"properties":{"url":{"type":"string","format":"uri"},"description":{"type":"string"},"mimeType":{"type":"string","const":"application/json"},"serviceName":{"type":"string","const":"Agent Verification Utility"},"tags":{"type":"array","items":{"type":"string"}},"iconUrl":{"type":"string","format":"uri"}},"additionalProperties":false},"accepts":{"type":"array","minItems":1,"items":{"$ref":"#/components/schemas/X402PaymentRequirement"}},"extensions":{"type":"object","additionalProperties":true}},"additionalProperties":false},"X402PaymentRequirement":{"type":"object","required":["scheme","network","amount","asset","payTo","maxTimeoutSeconds"],"properties":{"scheme":{"type":"string","const":"exact"},"network":{"type":"string","enum":["eip155:84532","eip155:8453"]},"amount":{"type":"string","const":"10000"},"asset":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"payTo":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"maxTimeoutSeconds":{"type":"integer","minimum":1},"extra":{"type":"object","additionalProperties":true}},"additionalProperties":false},"HealthResponse":{"type":"object","additionalProperties":false,"required":["status","service","version","checks","time"],"properties":{"status":{"type":"string","enum":["ok","degraded","maintenance"]},"service":{"type":"string","const":"agent-verification-utility"},"version":{"type":"string"},"checks":{"type":"object","additionalProperties":false,"required":["deploy_enabled","runtime_enabled","payments_enabled","cost_basis_fresh"],"properties":{"deploy_enabled":{"type":"boolean"},"runtime_enabled":{"type":"boolean"},"payments_enabled":{"type":"boolean"},"cost_basis_fresh":{"type":"boolean"}}},"time":{"type":"string","format":"date-time"}}},"PublicStats":{"type":"object","additionalProperties":false,"required":["schema_version","service","version","availability","payment","operator_identity","activity","operations","generated_at"],"properties":{"schema_version":{"type":"string","const":"agent-economy/public-stats/1.0"},"service":{"type":"string","const":"agent-verification-utility"},"version":{"type":"string"},"availability":{"type":"string","enum":["available","degraded"]},"payment":{"type":"object","additionalProperties":true},"operator_identity":{"type":"object","additionalProperties":true},"activity":{"type":"object","additionalProperties":true},"operations":{"type":"object","additionalProperties":true},"generated_at":{"type":"string","format":"date-time"}}},"Jwks":{"type":"object","additionalProperties":false,"required":["keys"],"properties":{"keys":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["kty","crv","x","alg","use","key_ops","kid"],"properties":{"kty":{"type":"string","const":"OKP"},"crv":{"type":"string","const":"Ed25519"},"x":{"type":"string"},"alg":{"type":"string","const":"EdDSA"},"use":{"type":"string","const":"sig"},"key_ops":{"type":"array","items":{"type":"string","const":"verify"}},"kid":{"type":"string","format":"uri-reference"}}}}}},"AgentManifest":{"type":"object","required":["schema_version","id","name","availability","capabilities","endpoints","protocols","operator_identity","payment","payment_mode","simulation_notice","verification_keys","constraints","trust_boundaries"],"properties":{"schema_version":{"type":"string","const":"agent-economy/1.0"},"id":{"type":"string","const":"agent-verification-utility"},"name":{"type":"string"},"description":{"type":"string"},"availability":{"type":"string","enum":["available","degraded","disabled"]},"capabilities":{"type":"array","items":{"type":"string"}},"endpoints":{"type":"object","additionalProperties":{"type":"string","format":"uri"}},"protocols":{"type":"object","additionalProperties":true},"operator_identity":{"type":"object","additionalProperties":true},"payment":{"$ref":"#/components/schemas/Price"},"payment_mode":{"type":"string","enum":["mock","x402","disabled"]},"simulation_notice":{"type":["string","null"]},"verification_keys":{"type":"array","items":{"$ref":"#/components/schemas/VerificationKey"}},"constraints":{"type":"object","additionalProperties":true},"trust_boundaries":{"type":"object","additionalProperties":{"type":"string"}}},"additionalProperties":true},"VerificationKey":{"type":"object","required":["kid","alg","publicKeyJwk","not_before"],"properties":{"kid":{"type":"string"},"alg":{"type":"string","const":"Ed25519"},"publicKeyJwk":{"type":"object","required":["kty","crv","x"],"properties":{"kty":{"type":"string","const":"OKP"},"crv":{"type":"string","const":"Ed25519"},"x":{"type":"string"},"alg":{"type":"string","const":"EdDSA"},"use":{"type":"string","const":"sig"},"key_ops":{"type":"array","items":{"type":"string","const":"verify"}}},"additionalProperties":false},"not_before":{"type":"string","format":"date-time"},"not_after":{"type":"string","format":"date-time"}}},"X402Manifest":{"type":"object","required":["x402Version","payment_mode","simulation","simulation_notice","resources"],"properties":{"x402Version":{"type":"integer","const":2},"payment_mode":{"type":"string","enum":["mock","x402","disabled"]},"simulation":{"type":"boolean"},"simulation_notice":{"type":["string","null"]},"resources":{"type":"array","minItems":1,"items":{"type":"object","required":["resource","method","accepts"],"properties":{"resource":{"type":"string","format":"uri"},"method":{"type":"string","const":"POST"},"accepts":{"type":"array","items":{"$ref":"#/components/schemas/X402PaymentRequirement"}},"extensions":{"type":"object","additionalProperties":true}}}}}},"Sha256Digest":{"type":"string","pattern":"^sha256:[a-f0-9]{64}$"},"ErrorResponse":{"type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"object","additionalProperties":false,"required":["code","message","request_id","retryable"],"properties":{"code":{"type":"string","pattern":"^[A-Z0-9_]+$"},"message":{"type":"string"},"request_id":{"type":"string"},"retryable":{"type":"boolean"},"details":{"type":"object","additionalProperties":true}}}}}},"responses":{"BadRequest":{"description":"Malformed request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Conflict":{"description":"Idempotency, quote, payment identifier, or profitability conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"PayloadTooLarge":{"description":"Evidence or request body exceeds v1 limits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Unprocessable":{"description":"Syntactically valid but unsupported or non-executable verification request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"RateLimited":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Unavailable":{"description":"Kill switch, maintenance, budget exhaustion, facilitator outage, or unavailable cost basis","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}