Agent Verification Utility API

REST contract for the Agent Verification Utility: a free precheck (POST /validate-request) that binds a verification request and an explicit spend policy into an unsigned receipt, a free quote (POST /quote, Idempotency-Key required), and the paid execution route (POST /verify-evidence) that answers HTTP 402 with an x402 v2 PaymentRequired document and, on the paid retry, returns the deterministic result, Ed25519-signed evidence, a delivery receipt and a fulfillment proof. The remaining operations are discovery and operations surfaces — agent manifest, x402 manifest, RFC 9727 API catalog, AI catalog, MCP server card and registry document, Agent Skills index, JWKS, health, public stats, revenue goal — plus optional 15-minute anonymous agent registration. 44 operations, 47 component schemas, OpenAPI 3.1.0, served at https://agent-economy.kgninja.dev/openapi.json with servers[] "/" (relative to the deployment origin).

Operations 44

GET / Get the human- and agent-readable service index #
GET /auth.md Get agent registration, anonymous-access, and x402 guidance #
POST /agent/register Provision an optional anonymous agent registration #
GET /agent/registration Inspect the caller's anonymous registration claim #
GET /.well-known/agent-card.json Get the A2A 1.0 Agent Card #
POST /a2a Use the A2A 1.0 JSON-RPC interface #
GET /.well-known/openapi.json Get the OpenAPI document from a well-known alias #
GET /server.json Get the official MCP Registry publication document #
GET /mcp/server.json Get the MCP Registry publication document beside the MCP endpoint #
GET /.well-known/mcp-registry-auth Get the optional MCP Registry HTTP domain-ownership proof #
GET /docs/deterministic-json-verification Read the deterministic JSON verification guide #
GET /docs/reproducible-x402-receipts Read the x402 receipt and signed-evidence guide #
GET /docs/mcp-x402-interoperability Read the MCP and x402 interoperability guide #
GET /docs/security-and-trust Read the security, privacy, and trust-boundary guide #
GET /faq Read machine-indexable answers about scope, payment, and trust #
GET /webmcp.js Get the feature-detected browser WebMCP bridge #
GET /12ffcf699b4a1cecdfe4f30a0bc795705169b8c87d475a49.txt Get the IndexNow host-ownership key #
GET /verification-recipes.json Get deterministic verification use-case recipes #
GET /.well-known/verification-recipes.json Get verification recipes from the well-known alias #
POST /validate-request Validate a verification request for free without executing it #
POST /quote Validate a request and quote deterministic verification #
POST /verify-evidence Purchase and execute deterministic evidence verification #
GET /health Get service liveness and availability #
GET /stats Get privacy-safe service activity and readiness metrics #
GET /goal Get the active revenue goal and next improvement #
GET /.well-known/revenue-goal.json Get the revenue goal status from a well-known alias #
GET /agent.json Get the product-specific agent service manifest #
GET /.well-known/x402 Get the self-hosted x402 convenience manifest #
GET /.well-known/api-catalog Get the RFC 9727 API catalog #
GET /.well-known/ai-catalog.json Discover the service and its decision-support entry points #
GET /mcp/server-card Get the current experimental MCP Server Card #
GET /.well-known/mcp/server-card.json Get the Cloudflare Agent Readiness MCP card #
GET /.well-known/mcp.json Get the draft MCP Server Card compatibility alias #
GET /.well-known/agent-skills/index.json Discover published Agent Skills #
GET /.well-known/agent-skills/verify-json-evidence/SKILL.md Get the verify-json-evidence Agent Skill #
GET /.well-known/jwks.json Get public keys for verification evidence #
GET /llms.txt Get the compact LLM-oriented service index #
GET /llms-full.txt Get complete LLM-oriented usage guidance #
GET /index.md Get the canonical Markdown service guide #
GET /icon.svg Get the service icon referenced by the MCP Server Card #
GET /robots.txt Get crawler access policy and discovery hints #
GET /sitemap.xml Get the public service discovery sitemap #
GET /openapi.json Get this OpenAPI document #
POST /mcp Stateless MCP SDK v2 Streamable HTTP endpoint #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/agent-verification-utility-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

kgninja-dev-openapi.json Raw ↑
{"openapi":"3.1.0","info":{"title":"Agent Verification Utility","version":"0.4.3","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":"decision-support","description":"Free use-case selection and request validation before payment"},{"name":"discovery","description":"Machine-readable service discovery"},{"name":"operations","description":"Availability and operational status"},{"name":"registration","description":"Optional anonymous, short-lived agent registration"},{"name":"goals","description":"Goal-driven revenue measurement and improvement recommendations"},{"name":"mcp","description":"Stateless MCP Streamable HTTP transport"},{"name":"a2a","description":"Synchronous A2A 1.0 JSON-RPC quote preparation"}],"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"}}}},"/auth.md":{"get":{"operationId":"getAuthenticationGuide","summary":"Get agent registration, anonymous-access, and x402 guidance","description":"Explains optional anonymous registration, credential inspection, anonymous service access, per-request x402 authorization, and why OAuth metadata is not published.","tags":["discovery","registration","purchase"],"responses":{"200":{"description":"Markdown access and payment-authorization guide","content":{"text/markdown":{"schema":{"type":"string"}}}}}}},"/agent/register":{"post":{"operationId":"registerAnonymousAgent","summary":"Provision an optional anonymous agent registration","description":"Issues a signed service-local bearer receipt valid for 15 minutes. Registration is optional, grants no application access, and does not authorize or replace x402 payment.","tags":["registration"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false},"example":{}}}},"responses":{"201":{"description":"Short-lived anonymous registration receipt","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["schema_version","registration_id","agent_id","identity_type","credential_type","token_type","credential","scope","issued_at","expires_at","claim_uri","access"],"properties":{"schema_version":{"type":"string","const":"agent-economy/anonymous-registration/1.0"},"registration_id":{"type":"string"},"agent_id":{"type":"string"},"identity_type":{"type":"string","const":"anonymous"},"credential_type":{"type":"string","const":"urn:kgninja:params:agent-credential:anonymous-registration-receipt"},"token_type":{"type":"string","const":"Bearer"},"credential":{"type":"string","readOnly":true},"scope":{"type":"string","const":"registration:read"},"issued_at":{"type":"string","format":"date-time"},"expires_at":{"type":"string","format":"date-time"},"claim_uri":{"type":"string","format":"uri"},"access":{"type":"object","additionalProperties":false,"required":["registration_required_for_free_operations","registration_required_for_paid_execution","paid_execution_authorization"],"properties":{"registration_required_for_free_operations":{"type":"boolean","const":false},"registration_required_for_paid_execution":{"type":"boolean","const":false},"paid_execution_authorization":{"type":"string","const":"x402"}}}}}}}},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"415":{"description":"Content-Type must be application/json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/agent/registration":{"get":{"operationId":"getAnonymousAgentRegistration","summary":"Inspect the caller's anonymous registration claim","description":"Validates the short-lived receipt supplied as Authorization: Bearer. The claim confirms only service-local registration and grants neither application access nor payment authorization.","tags":["registration"],"security":[{"agentRegistration":[]}],"responses":{"200":{"description":"Active anonymous registration claim","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["schema_version","active","registration_id","agent_id","identity_type","credential_type","scope","issued_at","expires_at","grants"],"properties":{"schema_version":{"type":"string","const":"agent-economy/anonymous-registration-claim/1.0"},"active":{"type":"boolean","const":true},"registration_id":{"type":"string"},"agent_id":{"type":"string"},"identity_type":{"type":"string","const":"anonymous"},"credential_type":{"type":"string","const":"urn:kgninja:params:agent-credential:anonymous-registration-receipt"},"scope":{"type":"string","const":"registration:read"},"issued_at":{"type":"string","format":"date-time"},"expires_at":{"type":"string","format":"date-time"},"grants":{"type":"object","additionalProperties":false,"required":["application_access","payment_authorization"],"properties":{"application_access":{"type":"boolean","const":false},"payment_authorization":{"type":"boolean","const":false}}}}}}}},"401":{"description":"Missing, invalid, or expired registration receipt","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/.well-known/agent-card.json":{"get":{"operationId":"getA2aAgentCard","summary":"Get the A2A 1.0 Agent Card","description":"Advertises the synchronous JSON-RPC interface and its bounded quote-preparation skill.","tags":["discovery","a2a"],"responses":{"200":{"description":"A2A Agent Card","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/a2a":{"post":{"operationId":"sendA2aMessage","summary":"Use the A2A 1.0 JSON-RPC interface","description":"Implements A2A 1.0 SendMessage for idempotent quote preparation. The message must contain one application/json data part with idempotency_key and intent; intent includes the unchanged request and spend policy plus the digest returned by the free precheck. The returned agent message contains a bound quote and purchase instructions; it does not execute paid work. Because this adapter never creates A2A Tasks, ListTasks returns an empty collection while GetTask and CancelTask return TaskNotFoundError. Streaming, push notifications, and extended cards return their capability-specific A2A errors.","tags":["a2a","purchase"],"parameters":[{"name":"A2A-Version","in":"header","required":true,"schema":{"type":"string","const":"1.0"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"JSON-RPC result or error","headers":{"A2A-Version":{"required":true,"schema":{"type":"string","const":"1.0"}}},"content":{"application/json":{"schema":{"type":"object"}}}},"405":{"description":"Only POST is supported"}}}},"/.well-known/openapi.json":{"get":{"operationId":"getWellKnownOpenApi","summary":"Get the OpenAPI document from a well-known alias","tags":["discovery"],"responses":{"200":{"description":"The same OpenAPI 3.1 document as /openapi.json","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/server.json":{"get":{"operationId":"getMcpRegistryServer","summary":"Get the official MCP Registry publication document","description":"Remote-server metadata using the official MCP Registry server.json schema. The publication namespace is derived from the configured public domain.","tags":["discovery","mcp"],"responses":{"200":{"description":"MCP Registry remote server document","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/mcp/server.json":{"get":{"operationId":"getMcpRegistryServerAlias","summary":"Get the MCP Registry publication document beside the MCP endpoint","tags":["discovery","mcp"],"responses":{"200":{"description":"The same MCP Registry document as /server.json","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/.well-known/mcp-registry-auth":{"get":{"operationId":"getMcpRegistryHttpProof","summary":"Get the optional MCP Registry HTTP domain-ownership proof","description":"Returns 404 until an operator generates a registry key and deploys its public proof. Private key material is never served.","tags":["discovery","mcp"],"responses":{"200":{"description":"MCP Registry public proof record","content":{"text/plain":{"schema":{"type":"string"}}}},"404":{"description":"Registry proof is not configured"}}}},"/docs/deterministic-json-verification":{"get":{"operationId":"getDeterministicVerificationGuide","summary":"Read the deterministic JSON verification guide","tags":["discovery"],"responses":{"200":{"$ref":"#/components/responses/KnowledgeDocument"}}}},"/docs/reproducible-x402-receipts":{"get":{"operationId":"getReproducibleReceiptGuide","summary":"Read the x402 receipt and signed-evidence guide","tags":["discovery"],"responses":{"200":{"$ref":"#/components/responses/KnowledgeDocument"}}}},"/docs/mcp-x402-interoperability":{"get":{"operationId":"getMcpX402InteroperabilityGuide","summary":"Read the MCP and x402 interoperability guide","tags":["discovery","mcp"],"responses":{"200":{"$ref":"#/components/responses/KnowledgeDocument"}}}},"/docs/security-and-trust":{"get":{"operationId":"getSecurityTrustGuide","summary":"Read the security, privacy, and trust-boundary guide","tags":["discovery"],"responses":{"200":{"$ref":"#/components/responses/KnowledgeDocument"}}}},"/faq":{"get":{"operationId":"getFrequentlyAskedQuestions","summary":"Read machine-indexable answers about scope, payment, and trust","tags":["discovery"],"responses":{"200":{"$ref":"#/components/responses/KnowledgeDocument"}}}},"/webmcp.js":{"get":{"operationId":"getWebMcpBridge","summary":"Get the feature-detected browser WebMCP bridge","tags":["discovery","mcp"],"responses":{"200":{"description":"Same-origin JavaScript bridge from WebMCP to the live MCP endpoint","content":{"text/javascript":{"schema":{"type":"string"}}}}}}},"/12ffcf699b4a1cecdfe4f30a0bc795705169b8c87d475a49.txt":{"get":{"operationId":"getIndexNowOwnershipKey","summary":"Get the IndexNow host-ownership key","tags":["discovery"],"responses":{"200":{"description":"Public key used by IndexNow participants to verify URL-submission ownership","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/verification-recipes.json":{"get":{"operationId":"getVerificationRecipes","summary":"Get deterministic verification use-case recipes","description":"Explains when to use or avoid the utility, the risk each recipe reduces, its limitations, a free precheck, the paid execution path, and result interpretation. Recipe checks operate only over supplied bytes and perform no on-chain lookup.","tags":["decision-support","discovery"],"responses":{"200":{"description":"Stable versioned verification recipe document","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerificationRecipes"}}}},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/.well-known/verification-recipes.json":{"get":{"operationId":"getWellKnownVerificationRecipes","summary":"Get verification recipes from the well-known alias","description":"Returns HTTP 200 with the same JSON document as /verification-recipes.json; it is not a redirect.","tags":["decision-support","discovery"],"responses":{"200":{"description":"The same verification recipe document as /verification-recipes.json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerificationRecipes"}}}},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/validate-request":{"post":{"operationId":"validateVerificationRequest","summary":"Validate a verification request for free without executing it","description":"Checks the verification request and an explicit spend policy containing the maximum atomic price, network, asset, payee, and policy version. It returns an unsigned precheck receipt binding those constraints to the canonical request and evidence hashes. The live x402 manifest and D1 runtime price are not fetched; the paid path recomputes the precheck and refuses stale or incompatible terms before any quote, payment, D1 write, or Verification Core call. This endpoint performs no external fetch, creates no quote, transaction, or payment, executes no assertion, returns no signed evidence, and retains or logs no raw evidence.","tags":["decision-support"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerificationPrecheckIntent"}}}},"responses":{"200":{"description":"Request is structurally valid and supported; verification was not executed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreeRequestValidation"}}}},"400":{"description":"Invalid or unsupported input with a machine-readable reason code","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreeRequestValidationFailure"}}}},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/quote":{"post":{"operationId":"quoteVerifyEvidence","summary":"Validate a request and quote deterministic verification","description":"Free quote preparation after a successful precheck. The request, spend policy, and precheck receipt digest are recomputed and matched before any D1 write. A quote is returned only when discovery still matches the precheck, the runtime price is within the agent's cap, and the conservative contribution-margin policy passes.","tags":["purchase"],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaidVerificationIntent"}}}},"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":"POST the paid intent produced from a successful free precheck. Without X-Quote-ID, the service creates a quote bound to the precheck digest, request and evidence hashes, price cap, policy version, payment terms, and expiry before returning HTTP 402. With X-Quote-ID, the identical intent must match the bound quote. Empty or raw-request POSTs are refused before quote creation. A paid retry is accepted only when discovery survived into the paid call and the x402 payload contains the same binding digest.","tags":["purchase"],"parameters":[{"$ref":"#/components/parameters/QuoteId"},{"$ref":"#/components/parameters/PaymentSignature"}],"requestBody":{"required":true,"description":"The unchanged request and spend policy plus precheck_receipt_digest returned by POST /validate-request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaidVerificationIntent"}}}},"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"}}}},"/goal":{"get":{"operationId":"getRevenueGoalStatus","summary":"Get the active revenue goal and next improvement","description":"Returns privacy-safe funnel metrics, conservative contribution margin, goal progress, and the next bounded improvement recommendation. Reading this resource never changes price, spends funds, or sends messages.","tags":["goals","operations"],"responses":{"200":{"description":"Active goal status or not_configured","headers":{"Cache-Control":{"schema":{"type":"string","const":"no-store"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevenueGoalStatus"}}}},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/.well-known/revenue-goal.json":{"get":{"operationId":"getWellKnownRevenueGoalStatus","summary":"Get the revenue goal status from a well-known alias","tags":["goals","discovery"],"responses":{"200":{"description":"The same goal status document as /goal","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevenueGoalStatus"}}}}}}},"/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 service and its decision-support entry points","description":"AI Catalog 1.0 document for domain-level MCP server-card discovery, including a namespaced vendor extension for verification recipes and the free precheck.","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"},"extensions":{"type":"object","properties":{"dev.kgninja.decisionSupport":{"type":"object","additionalProperties":false,"required":["verificationRecipesUrl","freePrecheckUrl","freePrecheckMethod","paidExecutionAutomatic"],"properties":{"verificationRecipesUrl":{"type":"string","format":"uri"},"freePrecheckUrl":{"type":"string","format":"uri"},"freePrecheckMethod":{"type":"string","const":"POST"},"paidExecutionAutomatic":{"type":"boolean","const":false}}}}}}}}}}}}},"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 free discovery, revenue-goal, and quote tools plus 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":{"securitySchemes":{"agentRegistration":{"type":"http","scheme":"bearer","bearerFormat":"signed anonymous registration receipt","description":"Optional 15-minute service-local receipt used only to inspect its own registration claim. It grants no API access and does not authorize payment."}},"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":false,"description":"Quote bound to the paid intent by /quote. Omit only when submitting a complete paid intent for direct quote creation; a paid retry identifies the generated bound quote from the signed payment payload.","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"}}}},"VerificationSpendPolicy":{"type":"object","additionalProperties":false,"required":["policy_version","max_amount_atomic","network","asset","pay_to"],"properties":{"policy_version":{"type":"string","const":"agent-economy/precheck-policy/2.0"},"max_amount_atomic":{"type":"string","maxLength":16,"pattern":"^[1-9][0-9]*$","description":"Client-authorized maximum price in atomic USDC units. It must fit in the JavaScript safe-integer range."},"network":{"type":"string","enum":["eip155:84532","eip155:8453"]},"asset":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"pay_to":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}}},"VerificationPrecheckIntent":{"type":"object","additionalProperties":false,"required":["request","spend_policy"],"properties":{"request":{"$ref":"#/components/schemas/VerifyEvidenceRequest"},"spend_policy":{"$ref":"#/components/schemas/VerificationSpendPolicy"}}},"PaidVerificationIntent":{"type":"object","additionalProperties":false,"required":["request","spend_policy","precheck_receipt_digest"],"properties":{"request":{"$ref":"#/components/schemas/VerifyEvidenceRequest"},"spend_policy":{"$ref":"#/components/schemas/VerificationSpendPolicy"},"precheck_receipt_digest":{"$ref":"#/components/schemas/Sha256Digest"}}},"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":"

# --- truncated at 32 KB (71 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/kgninja-dev/refs/heads/main/openapi/kgninja-dev-openapi.json