{"components":{"securitySchemes":{"bearerAuth":{"description":"A publisher's API key, created in Developer settings.","scheme":"bearer","type":"http"}}},"info":{"contact":{"url":"https://x-protocols.com/docs"},"description":"Verified, machine-readable business records. Every answer carries a coverage status, a freshness contract and an Ed25519 signature. When a question cannot be answered from what a publisher actually published, the API returns not_covered rather than guessing — a refusal is information, not an error.","title":"X-Protocols","version":"1"},"openapi":"3.1.0","paths":{"/b/{publisher}":{"get":{"description":"Server-rendered HTML, no JavaScript required. Send Accept: application/json to get the same content as JSON.","responses":{"200":{"description":"Success. For query calls, a coverage status of resolved, needs_context or not_covered."},"404":{"description":"Unknown publisher, or the publisher has not proved domain control."},"429":{"description":"Rate limited; honour Retry-After."}},"summary":"The publisher's public page","tags":["Public data"]}},"/b/{publisher}/dump.jsonl":{"get":{"description":"Every published record, one JSON object per line. The cheapest way to ingest a publisher wholesale.","responses":{"200":{"description":"Success. For query calls, a coverage status of resolved, needs_context or not_covered."},"404":{"description":"Unknown publisher, or the publisher has not proved domain control."},"429":{"description":"Rate limited; honour Retry-After."}},"summary":"Bulk export","tags":["Public data"]}},"/b/{publisher}/llms.txt":{"get":{"description":"A markdown index written for models: what this publisher publishes, which questions need context, every endpoint, and how to verify any of it.","responses":{"200":{"description":"Success. For query calls, a coverage status of resolved, needs_context or not_covered."},"404":{"description":"Unknown publisher, or the publisher has not proved domain control."},"429":{"description":"Rate limited; honour Retry-After."}},"summary":"Model-oriented index","tags":["Public data"]}},"/b/{publisher}/sitemap.xml":{"get":{"description":"One URL per published record.","responses":{"200":{"description":"Success. For query calls, a coverage status of resolved, needs_context or not_covered."},"404":{"description":"Unknown publisher, or the publisher has not proved domain control."},"429":{"description":"Rate limited; honour Retry-After."}},"summary":"Sitemap for this publisher","tags":["Public data"]}},"/b/{publisher}/verify":{"get":{"description":"Human-readable proof behind the trust badge.","responses":{"200":{"description":"Success. For query calls, a coverage status of resolved, needs_context or not_covered."},"404":{"description":"Unknown publisher, or the publisher has not proved domain control."},"429":{"description":"Rate limited; honour Retry-After."}},"summary":"What was verified, and when","tags":["Public data"]}},"/b/{publisher}/{type}/{id}":{"get":{"description":"A permanent URL per record. Accept: application/json works here too.","responses":{"200":{"description":"Success. For query calls, a coverage status of resolved, needs_context or not_covered."},"404":{"description":"Unknown publisher, or the publisher has not proved domain control."},"429":{"description":"Rate limited; honour Retry-After."}},"summary":"One record","tags":["Public data"]}},"/healthz":{"get":{"description":"200 when the process is up.","responses":{"200":{"description":"Success. For query calls, a coverage status of resolved, needs_context or not_covered."},"404":{"description":"Unknown publisher, or the publisher has not proved domain control."},"429":{"description":"Rate limited; honour Retry-After."}},"summary":"Liveness","tags":["Operations"]}},"/ingest/{stream}":{"post":{"description":"HMAC-SHA256 over \"{timestamp}.{body}\" in X-KC-Signature, with X-KC-Timestamp. Identify the publisher with X-KC-Publisher. Idempotent per idempotency key. For publishers without a developer there is a pull alternative: publish an XML feed and register its URL instead — see /docs/live-data-feed.","responses":{"200":{"description":"Success. For query calls, a coverage status of resolved, needs_context or not_covered."},"404":{"description":"Unknown publisher, or the publisher has not proved domain control."},"429":{"description":"Rate limited; honour Retry-After."}},"summary":"Push live data (stock, prices, free slots)","tags":["Live data"]}},"/llms.txt":{"get":{"description":"Every publisher, and how to read them.","responses":{"200":{"description":"Success. For query calls, a coverage status of resolved, needs_context or not_covered."},"404":{"description":"Unknown publisher, or the publisher has not proved domain control."},"429":{"description":"Rate limited; honour Retry-After."}},"summary":"Platform-wide model index","tags":["Public data"]}},"/mcp":{"post":{"description":"Identical to the above. Use this form when a publisher is reached on its own hostname rather than a /t/{publisher} path.","responses":{"200":{"description":"Success. For query calls, a coverage status of resolved, needs_context or not_covered."},"401":{"description":"Missing or invalid API key."},"402":{"description":"Plan does not include this capability, or quota exhausted."},"404":{"description":"Unknown publisher, or the publisher has not proved domain control."},"429":{"description":"Rate limited; honour Retry-After."}},"security":[{"bearerAuth":[]}],"summary":"Same, with the publisher taken from the Host header","tags":["Query"]}},"/readyz":{"get":{"description":"200 when dependencies (database, engine, Redis) are reachable.","responses":{"200":{"description":"Success. For query calls, a coverage status of resolved, needs_context or not_covered."},"404":{"description":"Unknown publisher, or the publisher has not proved domain control."},"429":{"description":"Rate limited; honour Retry-After."}},"summary":"Readiness","tags":["Operations"]}},"/sitemap.xml":{"get":{"description":"Index of every publisher's sitemap.","responses":{"200":{"description":"Success. For query calls, a coverage status of resolved, needs_context or not_covered."},"404":{"description":"Unknown publisher, or the publisher has not proved domain control."},"429":{"description":"Rate limited; honour Retry-After."}},"summary":"Platform sitemap","tags":["Public data"]}},"/t/{publisher}/.well-known/ucp":{"get":{"description":"Public and unauthenticated by the protocol's own requirement.","responses":{"200":{"description":"Success. For query calls, a coverage status of resolved, needs_context or not_covered."},"404":{"description":"Unknown publisher, or the publisher has not proved domain control."},"429":{"description":"Rate limited; honour Retry-After."}},"summary":"UCP business profile","tags":["Syndication"]}},"/t/{publisher}/.well-known/x-protocol/jwks.json":{"get":{"description":"Every key this publisher has ever signed with, active first. Retired keys stay published so an envelope signed months ago stays verifiable after a rotation. Match on the kid in the envelope, never on position.","responses":{"200":{"description":"Success. For query calls, a coverage status of resolved, needs_context or not_covered."},"404":{"description":"Unknown publisher, or the publisher has not proved domain control."},"429":{"description":"Rate limited; honour Retry-After."}},"summary":"Public signing keys","tags":["Discovery"]}},"/t/{publisher}/.well-known/x-protocol/manifest.json":{"get":{"description":"What data this publisher offers, in which formats, where the endpoints are, how authenticity is checked and when the data was last updated.","responses":{"200":{"description":"Success. For query calls, a coverage status of resolved, needs_context or not_covered."},"404":{"description":"Unknown publisher, or the publisher has not proved domain control."},"429":{"description":"Rate limited; honour Retry-After."}},"summary":"The AI manifest","tags":["Discovery"]}},"/t/{publisher}/.well-known/x-protocol/registry.json":{"get":{"description":"The discovery document: identity, available tools, protocol version, and links to every other document here.","responses":{"200":{"description":"Success. For query calls, a coverage status of resolved, needs_context or not_covered."},"404":{"description":"Unknown publisher, or the publisher has not proved domain control."},"429":{"description":"Rate limited; honour Retry-After."}},"summary":"What this publisher is and can be asked","tags":["Discovery"]}},"/t/{publisher}/.well-known/x-protocol/revocations.json":{"get":{"description":"An empty list is a positive assertion: nothing you hold was withdrawn. For a publisher that does not exist this returns 404, never an empty list, so you can tell the two apart.","responses":{"200":{"description":"Success. For query calls, a coverage status of resolved, needs_context or not_covered."},"404":{"description":"Unknown publisher, or the publisher has not proved domain control."},"429":{"description":"Rate limited; honour Retry-After."}},"summary":"Withdrawn records","tags":["Discovery"]}},"/t/{publisher}/mcp":{"post":{"description":"MCP over Streamable HTTP, JSON-RPC 2.0. Call tools/list to see what this publisher offers, then tools/call. Every answer carries a coverage status, a freshness contract and an Ed25519 signature. When a question cannot be answered from published records the response says not_covered rather than guessing.","responses":{"200":{"description":"Success. For query calls, a coverage status of resolved, needs_context or not_covered."},"401":{"description":"Missing or invalid API key."},"402":{"description":"Plan does not include this capability, or quota exhausted."},"404":{"description":"Unknown publisher, or the publisher has not proved domain control."},"429":{"description":"Rate limited; honour Retry-After."}},"security":[{"bearerAuth":[]}],"summary":"Ask this publisher a question","tags":["Query"]}},"/t/{publisher}/syndication/acp/header.json":{"get":{"description":"Feed-level metadata for the above.","responses":{"200":{"description":"Success. For query calls, a coverage status of resolved, needs_context or not_covered."},"404":{"description":"Unknown publisher, or the publisher has not proved domain control."},"429":{"description":"Rate limited; honour Retry-After."}},"summary":"ACP feed metadata","tags":["Syndication"]}},"/t/{publisher}/syndication/acp/products.jsonl":{"get":{"description":"OpenAI/Stripe Agentic Commerce Protocol shape, one Product per line. ETag and gzip supported. Publishers who sell nothing return 404 not_syndicated, which is correct rather than an error.","responses":{"200":{"description":"Success. For query calls, a coverage status of resolved, needs_context or not_covered."},"404":{"description":"Unknown publisher, or the publisher has not proved domain control."},"429":{"description":"Rate limited; honour Retry-After."}},"summary":"ACP product feed","tags":["Syndication"]}},"/t/{publisher}/ucp/v1/products":{"get":{"description":"Never cached; answers from live data where the publisher publishes it.","responses":{"200":{"description":"Success. For query calls, a coverage status of resolved, needs_context or not_covered."},"404":{"description":"Unknown publisher, or the publisher has not proved domain control."},"429":{"description":"Rate limited; honour Retry-After."}},"summary":"UCP live catalogue search","tags":["Syndication"]}}},"servers":[{"url":"https://x-protocols.com"}],"tags":[{"name":"Discovery"},{"name":"Live data"},{"name":"Operations"},{"name":"Public data"},{"name":"Query"},{"name":"Syndication"}]}
