{"openapi":"3.1.0","info":{"title":"BlueFox Edge","description":"BlueFox Edge verifies the claims AI agents act on - brand, pricing, policy, financial, compliance-status, and product-spec checks against maintained reference data - so a decision can be checked, not trusted. Keyed verification checks mint a signed reliance receipt: a portable, offline-checkable record that the check happened and what it returned. Auth: `Authorization: Bearer <key>`; priced endpoints also accept keyless x402 per-request payment (the HTTP 402 response states exact terms). Canonical API base: https://api.bluefoxedge.ai (the apex host bluefoxedge.ai serves the same API; its root redirects to the website www.bluefoxedge.ai). Start at /llms.txt, /getting-started, and /.well-known/x402.\n\nPath dialects: most operations are served both under `/v1` (canonical) and at an unversioned compatibility alias with identical behavior. Generate clients against the `/v1` operations. Unversioned twins are marked `deprecated: true` and carry `x-canonical-path` pointing at their canonical form — deprecated signals dialect preference, and the aliases keep serving. Codegen note: a generator configured to skip deprecated operations will omit the unversioned aliases from its client — generate against `/v1` (every aliased operation exists there). Operations without a twin exist at their only published path and are not deprecated.","termsOfService":"https://www.bluefoxedge.ai/terms","contact":{"name":"BlueFox Edge Support","email":"support@bluefoxedge.ai"},"version":"2.0.0","x-canonical-prefix":"/v1"},"paths":{"/.well-known/agent.json":{"get":{"tags":["A2A"],"summary":"Serve the A2A agent card","description":"A2A Agent Card — how other agents discover BlueFox Edge's capabilities.\n\nThe A2A protocol requires this exact body shape (no envelope wrapping) at\nthis well-known path. The ``jwks`` pointer and the payment object reflect\nthe live configuration at request time.\n\nNORMATIVE: the ``jwks`` address served here IS the out-of-band pin — this card\nis fetched over TLS from the service host, not carried inside the artifact being\nchecked. A verifier MUST NOT take a key-set address from inside a receipt it is\nchecking: a receipt's ``jwks_url`` sits outside the signature, so a forged\nreceipt can name the forger's own key set. Pin\nhttps://api.bluefoxedge.ai/.well-known/jwks.json out of band.","operationId":"agent_card__well_known_agent_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/A2AAgentCard"}}}}}}},"/accuracy":{"get":{"tags":["Accuracy","Accuracy"],"summary":"List the latest validated accuracy cell for every dimension","description":"List every dimension's latest-validated accuracy cell (registry publish set).\n\nHonest empty list until a dimension validates.","operationId":"list_accuracy_accuracy_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccuracyListEnvelope"}}}}},"x-canonical-path":"/v1/accuracy","deprecated":true}},"/accuracy/{dimension}":{"get":{"tags":["Accuracy","Accuracy"],"summary":"Get the latest validated accuracy cell for one dimension","description":"The latest VALIDATED accuracy cell for a dimension.\n\nA valid-but-unmeasured dimension returns a first-class honest\n``no_validated_measurement`` response (HTTP 200, never a fabricated cell). A\ndimension id that does not match the dimension-id grammar (``[a-z0-9._-]+``)\nis a malformed request (400).","operationId":"get_accuracy_accuracy__dimension__get","parameters":[{"name":"dimension","in":"path","required":true,"schema":{"type":"string","title":"Dimension"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccuracyCellEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-canonical-path":"/v1/accuracy/{dimension}","deprecated":true}},"/advisor/recommend":{"post":{"tags":["Advisor","Advisor"],"summary":"Get ranked MCP server recommendations","description":"Get ranked MCP server recommendations based on requirements.","operationId":"advisor_recommend_advisor_recommend_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdvisorRequirements"}}}},"x-canonical-path":"/v1/advisor/recommend","deprecated":true}},"/advisor/compare":{"get":{"tags":["Advisor","Advisor"],"summary":"Compare MCP servers side by side","description":"Compare 2-5 MCP servers side by side.","operationId":"advisor_compare_advisor_compare_get","parameters":[{"name":"entities","in":"query","required":true,"schema":{"type":"string","description":"Comma-separated entity IDs (2-5)","title":"Entities"},"description":"Comma-separated entity IDs (2-5)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdvisorCompareEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/advisor/compare","deprecated":true}},"/advisor/categories":{"get":{"tags":["Advisor","Advisor"],"summary":"List advisor categories with entity counts","description":"List available categories with entity counts and data readiness.","operationId":"advisor_categories_advisor_categories_get","parameters":[{"name":"protocol","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Protocol"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdvisorCategoriesEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/advisor/categories","deprecated":true}},"/advisor/feedback":{"post":{"tags":["Advisor","Advisor"],"summary":"Record feedback on a recommendation","description":"Record feedback on a recommendation.","operationId":"advisor_feedback_advisor_feedback_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdvisorFeedbackRequest"}}}},"x-canonical-path":"/v1/advisor/feedback","deprecated":true}},"/agents/register":{"post":{"tags":["Agent"],"summary":"Register a new agent and receive its token","description":"Registers a new agent and returns its agent id with a one-time agent token.\n\nOnly a hash of the token is stored; the plaintext value appears once in this\nresponse. Registrations are limited to 10 per IP per hour.","operationId":"register_agent_agents_register_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler.","title":"Idempotency-Key"},"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRegisterRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_AgentRegisterResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"agent_id":"ag_a1b2c3d4e5f6","agent_token":"bfa_live_<example-redacted>","name":"example-agent","created_at":"2026-05-24T12:34:56.789Z","latency_ms":73},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":false,"with-idempotency-key":true,"x-canonical-path":"/v1/agents/register","deprecated":true}},"/agents/{agent_id}/trust-score":{"get":{"tags":["Agent"],"summary":"Fetch an agent's trust score by id","description":"Auth required (enforced by middleware). Returns full trust score with components.\n\nMay be re-exposed as a public endpoint in a future release.","operationId":"get_trust_score_agents__agent_id__trust_score_get","parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_TrustScoreResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"agent_id":"ag_a1b2c3d4e5f6","agent_name":"example-agent","trust_score":0.84,"trust_tier":"trusted","components":{"accuracy_rate":{"value":0.91,"weight":0.35,"contribution":31.9},"consistency":{"value":0.78,"weight":0.2,"contribution":15.6},"volume_factor":{"value":0.85,"weight":0.15,"contribution":12.8},"recency":{"value":1.0,"weight":0.15,"contribution":15.0},"brand_diversity":{"value":0.6,"weight":0.15,"contribution":9.0}},"domain_scores":{"brand":{"score":91,"checks":1098,"accuracy":0.91},"pricing":{"score":88,"checks":87,"accuracy":0.88},"policy":{"score":80,"checks":62,"accuracy":0.8}},"verification_summary":{"total_checks":1247,"last_30_days":312,"unique_brands":18,"active_since":"2025-11-12T08:00:00Z","last_check":"2026-05-24T12:34:56.789Z","accurate_claims":284,"inaccurate_claims":14,"partially_accurate_claims":8,"unverifiable_claims":6},"last_calculated":"2026-05-24T12:34:56.789Z","latency_ms":31,"method":{"method_version":"agent-trust-score/v1","formula":"trust_score = clamp(int(sum(weight_i * signal_i * 100) + preflight_bonus), 0, 100) / 100","weights":{"accuracy_rate":0.35,"consistency":0.2,"volume_factor":0.15,"recency":0.15,"brand_diversity":0.15},"input_signals":["accuracy_rate","consistency","volume_factor","recency","brand_diversity","preflight_bonus"],"re_derivation":"Recompute from `components`: raw = sum over signals of (weight_i * value_i * 100) + preflight_bonus; then trust_score = clamp(int(raw), 0, 100) / 100. Each components[k].contribution is that term rounded to 1 decimal for display; the exact score uses the unrounded terms. A recomputable signal the account re-runs and bears reliance for (B3/SAS-142); Edge does not determine the agent's standing."},"non_claims":["recomputable-signal-not-edge-determination","requesting-account-bears-reliance-sas142","not-a-public-grade","no-authority-over-agent-standing","account-scoped-disclosed-method","not-a-compliance-signoff-or-accreditation"],"edge_role":"evidence-layer"},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Agent not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/agents/{agent_id}/trust-score","deprecated":true}},"/agents/trust-scores/batch":{"post":{"tags":["Agent"],"summary":"Fetch trust scores for up to 50 agents","description":"Batch trust score lookup. Auth required (via middleware).","operationId":"batch_trust_scores_agents_trust_scores_batch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchTrustRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BatchTrustScoreResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"results":[{"agent_id":"ag_a1b2c3d4e5f6","agent_name":"example-agent","trust_score":0.84,"trust_tier":"trusted","total_checks":1247,"last_calculated":"2026-05-24T12:34:56.789Z","non_claims":["recomputable-signal-not-edge-determination","not-a-public-grade"],"edge_role":"evidence-layer"},{"agent_id":"ag_0123456789ab","agent_name":"second-agent","trust_score":0.42,"trust_tier":"developing","total_checks":304,"last_calculated":"2026-05-24T12:34:56.789Z","non_claims":["recomputable-signal-not-edge-determination","not-a-public-grade"],"edge_role":"evidence-layer"}],"count":2,"latency_ms":58},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}],"x-canonical-path":"/v1/agents/trust-scores/batch","deprecated":true}},"/v1/reputation/self":{"get":{"tags":["Agent Reputation","Agent Reputation"],"summary":"Check your agent's own reputation score","description":"Check your agent's behavioral reputation score.\n\nAuthenticate with your agent token (the ``bfa_live_*`` token from\n``POST /agents/register``). Returns a multi-dimensional reliability\nassessment based on query patterns, verification usage, rate\ncompliance, and interaction history.","operationId":"get_self_reputation_v1_reputation_self_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_SelfReputationResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"agent_id":"ag_a1b2c3d4e5f6","reputation_score":0.79,"tier":"trusted","confidence":0.88,"dimensions":{"query_consistency":0.83,"verification_usage":0.91,"rate_compliance":0.97,"data_freshness_pref":0.74,"attribution_integrity":0.85},"history":{"first_seen":"2025-11-12T08:00:00Z","total_interactions":3421,"active_days":184,"last_active":"2026-05-24T12:34:56.789Z"},"tier_criteria":{"current_tier":"trusted","next_tier":"verified","next_tier_requirements":"Sustain reputation_score >= 0.85 for 30 consecutive days."},"computed_at":"2026-05-24T12:34:56.789Z","latency_ms":24},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true}},"/api-keys":{"post":{"tags":["API Keys"],"summary":"Create an API key via self-serve signup","description":"Create a free API key.\n\n**This step requires a human browser and cannot be completed unattended.** The bot-challenge token the request body carries is issued only to a person who completes the challenge on the hosted form at https://api.bluefoxedge.ai/get-key — a program has no way to mint one. There is no machine-to-machine enrolment path on this endpoint.\n\nA request with no valid challenge token is refused with HTTP 422 and the error code `TURNSTILE_FAILED`. That refusal names the step a caller must take in its `next_action` field, points at the form in `hint_url`, and carries a `request_id` equal to the response's `X-Request-Id` header, so the reference a caller quotes to support matches the server's own log. The challenge-token field is declared optional in the request schema only so this refusal can stay typed and machine-readable; a client that omits it is refused, never enrolled.\n\nOn success the response carries the key value exactly once, with no-store cache headers. Where email verification is enabled, the key is created in `pending` status and must be activated from the emailed link before it will authenticate: until then `GET /v1/api-keys` reports it with `is_active: false`.\n\n**Creating a key forms a contract.** The request must carry `accept_terms: true`, accepting the Terms of Service (https://www.bluefoxedge.ai/terms) and acknowledging the Privacy Policy (https://www.bluefoxedge.ai/privacy). A request that omits the field or sends `false` is refused with HTTP 422 and the error code `TERMS_NOT_ACCEPTED`; no key is created. On success the accepted version and the acceptance timestamp are stored with the key and returned in the response's `terms_accepted` object. The version in force is April 1, 2026.","operationId":"create_api_key_api_keys_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler.","title":"Idempotency-Key"},"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApiKeyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Browser request from a non-allowed origin (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-canonical-path":"/v1/api-keys","deprecated":true},"get":{"tags":["API Keys"],"summary":"List the API keys for your email","description":"List API keys — requires auth, only returns keys for the caller's email.","operationId":"list_api_keys_api_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyListEnvelope"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/api-keys","deprecated":true}},"/api-keys/verify":{"post":{"tags":["API Keys"],"summary":"Activate an API key via its email link","description":"Activate an API key using the single-use slug from its verification email.\n\nThe slug arrives in the request body, sent by the activation page after it\nreads the slug from the URL fragment. Only a hash of the slug is stored, so\nthe plaintext slug never rests in the database, and concurrent activations\nof one slug are serialized by a row-level lock so a key activates exactly\nonce. Re-clicking an already-used link succeeds without consuming budget.","operationId":"verify_api_key_api_keys_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyApiKeyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Browser request from a non-allowed origin (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-canonical-path":"/v1/api-keys/verify","deprecated":true}},"/api-keys/{key_id}":{"delete":{"tags":["API Keys"],"summary":"Revoke one of your own API keys","description":"Revoke an API key — requires auth, only allows revoking own keys.","operationId":"revoke_api_key_api_keys__key_id__delete","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The key exists but belongs to another account (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/api-keys/{key_id}","deprecated":true}},"/agents/{agent_id}/audit-log":{"get":{"tags":["Audit"],"summary":"List an agent's verification audit log entries","description":"Paginated audit log for an agent. Auth required (enforced by middleware).","operationId":"get_audit_log_agents__agent_id__audit_log_get","parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}},{"name":"endpoint","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Endpoint"}},{"name":"brand","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand"}},{"name":"verdict","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verdict"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From"}},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditLogEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/agents/{agent_id}/audit-log","deprecated":true}},"/agents/{agent_id}/audit-log/summary":{"get":{"tags":["Audit"],"summary":"Summarize an agent's verification checks by endpoint, verdict, and brand","description":"Audit summary with breakdowns by endpoint, verdict, and brand. Auth required (enforced by middleware).","operationId":"get_audit_summary_agents__agent_id__audit_log_summary_get","parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}},{"name":"period","in":"query","required":false,"schema":{"type":"string","default":"last_30_days","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditSummaryEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/agents/{agent_id}/audit-log/summary","deprecated":true}},"/v1/auth/help":{"get":{"tags":["Auth","Auth"],"summary":"Describe how to authenticate against the API","description":"How to authenticate against BlueFox Edge. Public, no auth required.","operationId":"auth_help_v1_auth_help_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthHelpResponse"}}}}}}},"/brand/{slug}/availability":{"get":{"tags":["Availability"],"summary":"Get a brand's recorded geographic availability","description":"Fetches the recorded geographic availability for a brand. Returns\nshipping and per-region availability flags, covered countries, any\nrestrictions note, and the last-verified timestamp. Public; no key\nrequired.","operationId":"get_brand_availability_brand__slug__availability_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandAvailabilityEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-canonical-path":"/v1/brand/{slug}/availability","deprecated":true}},"/brand/{slug}/promotions":{"get":{"tags":["Availability"],"summary":"List a brand's recorded active promotions","description":"Lists the active promotions recorded for a brand. Returns each\npromotion's name, type, discount, code, conditions, and validity window,\nwith staleness flags and a freshness warning when the data is more than 14\ndays old. Public; no key required.","operationId":"get_brand_promotions_brand__slug__promotions_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandPromotionsEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-canonical-path":"/v1/brand/{slug}/promotions","deprecated":true}},"/billing/checkout":{"post":{"tags":["Billing"],"summary":"Create a Stripe checkout session for an upgrade","description":"Create Stripe checkout session for plan upgrade.","operationId":"billing_checkout_billing_checkout_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler.","title":"Idempotency-Key"},"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Request Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-canonical-path":"/v1/billing/checkout","deprecated":true}},"/billing/webhook":{"post":{"tags":["Billing"],"summary":"Process Stripe webhook events idempotently","description":"Handle Stripe webhook events with hybrid idempotency.\n\nDedup flow (Redis-primary, DB-fallback):\n1. Verify signature + extract event\n2. Check Redis for prior processing (fast path)\n3. If Redis unavailable → 503 (fail-closed, CRITICAL tier)\n4. If Redis hit → duplicate_skipped\n5. If Redis miss → check DB table (durable fallback for Redis-flush scenario)\n6. If DB hit → duplicate_skipped\n7. If DB read error → 503 (fail-closed)\n8. If both miss → process, record in DB (atomic with business logic), then Redis","operationId":"billing_webhook_billing_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Stripe webhook event payload, verified against the `stripe-signature` request header. Shape is defined by Stripe.","additionalProperties":true}}}},"x-canonical-path":"/v1/billing/webhook","deprecated":true}},"/billing/status":{"get":{"tags":["Billing"],"summary":"Fetch the calling key's billing plan and usage","description":"Return current billing plan for the authenticated key.","operationId":"billing_status_billing_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/billing/status","deprecated":true}},"/billing/usage":{"get":{"tags":["Billing"],"summary":"Fetch your usage against the daily cap","description":"Return the authenticated caller's own usage against their daily cap.\n\nCustomer-Bearer scope — reports the calling key's plan, daily limit, calls\nconsumed today, remaining headroom, and the next reset boundary. ``calls_today``\nis billing-true: the durable DB counter plus the live, not-yet-flushed Redis\ndelta (usage is batched in Redis and flushed to the DB asynchronously).\n\nServed at both ``/billing/usage`` and ``/v1/billing/usage`` (the billing\nrouter is mounted at root and under ``/v1``).","operationId":"billing_usage_billing_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BillingUsageResponse_"}}}},"401":{"description":"API key required","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/billing/usage","deprecated":true}},"/billing/plans":{"get":{"tags":["Billing"],"summary":"List available billing plans","description":"List available billing plans, with both meters named per plan.\n\nBallot ⑧(d) — this docstring is published as the OpenAPI description, so the\nsentence reaches a machine reader here rather than only on a web page:\n\nTwo meters, one bill. ``daily_limit`` is the API-call allowance the monthly\nsubscription buys. ``signed_mints_per_utc_day`` is the separate per-mint\nentitlement, and it is ``null`` on every plan the mint cap does not meter —\nthose plans' mints are included in the subscription. Paid plans include\nsigned mints — your plan's daily call limit is the only meter. Only the\nfree tier is mint-capped; a free key's next mint the same UTC day is\npayable per request via x402 (HTTP 402) on the doors listed at\n/.well-known/x402, or by upgrading.\n\n``monthly_price`` is an amount in ``currency`` (USD), billed monthly.","operationId":"list_plans_billing_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"x-canonical-path":"/v1/billing/plans","deprecated":true}},"/brands":{"get":{"tags":["Brand"],"summary":"List brands available in the reference catalog","description":"Lists brands in the reference catalog, ordered by name, with keyset\npagination (server default limit 50) and optional substring search via q.\nReturns each brand's slug, name, category, and website; pass all=true to\nreceive the full list without paging.","operationId":"list_brands_brands_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":200,"minimum":1},{"type":"null"}],"description":"Max brands per page (1-200; server default 50). Pass ?all=true to bypass paging and receive the full list (admin/batch use).","title":"Limit"},"description":"Max brands per page (1-200; server default 50). Pass ?all=true to bypass paging and receive the full list (admin/batch use)."},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque keyset cursor from a prior page's meta.pagination.cursor. Bound to the q value at issue time — do not change q between pages.","title":"Cursor"},"description":"Opaque keyset cursor from a prior page's meta.pagination.cursor. Bound to the q value at issue time — do not change q between pages."},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Substring search on name and slug, with BRAND_ALIASES resolution (e.g. q=facebook matches the meta brand).","title":"Q"},"description":"Substring search on name and slug, with BRAND_ALIASES resolution (e.g. q=facebook matches the meta brand)."},{"name":"all","in":"query","required":false,"schema":{"type":"boolean","description":"Set all=true to bypass paging and return the full ordered list (admin/batch use). Incompatible with cursor and limit.","default":false,"title":"All"},"description":"Set all=true to bypass paging and return the full ordered list (admin/batch use). Incompatible with cursor and limit."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_list_BrandSummary__"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":[{"slug":"example-brand","name":"Example Brand","category":"consumer-electronics","website":"https://example.com"},{"slug":"second-brand","name":"Second Brand","category":"consumer-electronics","website":"https://example.com"}],"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"x-canonical-path":"/v1/brands","deprecated":true}},"/brand/check":{"post":{"tags":["Brand"],"summary":"Verify brand claims against the reference record","description":"Verifies one or more claims about a brand against its reference record.\nReturns a recorded verdict, confidence tier, and evidence for each claim,\nand mints a reliance receipt per claim (surfaced as receipt_id). Requires a Bearer API key or per-request x402 payment; keyless-paid calls return no durable receipt. Priced: requests without a key or payment receive HTTP 402\nquoting exact per-request terms (x402).","operationId":"brand_check_brand_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BrandCheckResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"brand":"example-brand","results":[{"claim":"Example Brand sells the X100 phone.","verdict":"verified","confidence":0.94,"confidence_tier":"high","evidence":"Product catalog lists 'X100' in current lineup.","method":"rule_match","receipt_id":"01JZAXPYQ4W9GT2C6M8R5H7K3D"},{"claim":"Example Brand lets customers return an unworn X100 within 60 days.","verdict":"unverifiable","confidence":0.0,"confidence_tier":"low","evidence":"Rule engine could not determine verdict","method":"rule_match","receipt_id":"01JZAXPYQ4W9GT2C6M8R5H7K3E","next_action":"retry_with_depth_auto","hint":"This claim missed the deterministic rule set. Retry this route with depth:'auto' to engage LLM verification of the same claim, or POST /verify/claim to verify against a URL you supply. Paraphrases often miss: the rule tier fuzzy-matches your claim text against stored brand data.","hint_url":"https://api.bluefoxedge.ai/getting-started"}],"brand_definition_version":12,"verified_at":"2026-05-24T12:34:56.789Z","latency_ms":142,"depth_used":"fast"},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Brand not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Verification unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":false,"security":[{"ApiKeyAuth":[]},{}],"x-canonical-path":"/v1/brand/check","deprecated":true}},"/brand/{slug}/definition":{"get":{"tags":["Brand"],"summary":"Get a brand's compiled reference record","description":"Fetches the compiled brand definition that verification checks read as\nreference data. Returns the brand's description, positioning, policies,\npricing, and messaging fields with version and compile timestamp. Public;\nno key required.","operationId":"get_brand_definition_brand__slug__definition_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BrandDefinitionResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"slug":"example-brand","name":"Example Brand","category":"consumer-electronics","website":"https://example.com","description":"Premium consumer-electronics manufacturer.","positioning":{"tone":"premium","audience":"prosumer"},"policies":{"return_window_days":30},"pricing":{"flagship_msrp_usd":999},"messaging":{"taglines":["Built to last."]},"compiled_at":"2026-05-24T12:34:56.789Z","source":"compiled","version":12,"latency_ms":47},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Brand not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"x-canonical-path":"/v1/brand/{slug}/definition","deprecated":true}},"/api/clusters":{"get":{"tags":["Clusters"],"summary":"List brand clusters with aggregate scores","description":"Lists brand clusters computed from the similarity index, sortable by\nsize, purity, or trust. Returns each cluster's size, dominant vertical,\npurity, average trust score, average sentiment, and top three brands.\nPublic; no key required.","operationId":"list_clusters_api_clusters_get","parameters":[{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","pattern":"^(size|purity|trust)$","default":"size","title":"Sort By"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClusterListEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-canonical-path":"/v1/api/clusters","deprecated":true}},"/api/clusters/{cluster_id}":{"get":{"tags":["Clusters"],"summary":"Get one cluster's brands and aggregate stats","description":"Fetches the detail record for one brand cluster. Returns the cluster's\nsize, verticals, purity, average trust score, sentiment, and\nrecommendation rate, plus every member brand with its recorded scores.\nPublic; no key required.","operationId":"get_cluster_api_clusters__cluster_id__get","parameters":[{"name":"cluster_id","in":"path","required":true,"schema":{"type":"integer","title":"Cluster Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClusterDetailEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-canonical-path":"/v1/api/clusters/{cluster_id}","deprecated":true}},"/api/brands/{brand_id}/peer-group":{"get":{"tags":["Clusters"],"summary":"Compare a brand against its cluster peers","description":"Places a brand within its cluster peer group. Returns the brand's\nrecorded scores, its rank and deltas against cluster averages, outlier\nflags for dimensions beyond 1.5 standard deviations, and the list of peer\nbrands. Public; no key required.","operationId":"get_peer_group_api_brands__brand_id__peer_group_get","parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","title":"Brand Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PeerGroupEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-canonical-path":"/v1/api/brands/{brand_id}/peer-group","deprecated":true}},"/competitive/check":{"post":{"tags":["Competitive"],"summary":"Verify competitive claims against reference data","description":"Verifies competitive claims about brands against reference data.\nReturns a recorded verdict, confidence tier, and evidence for each claim,\nwith optional sentiment analysis. Requires a Bearer API key or per-request x402 payment. Priced:\nrequests without a key or payment receive HTTP 402 quoting exact\nper-request terms (x402).","operationId":"competitive_check_competitive_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompetitiveCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_CompetitiveCheckResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"results":[{"claim":"Example Brand's X100 outperforms competitors in battery life.","verdict":"verified","confidence":0.91,"confidence_tier":"high","evidence":"Third-party benchmark publication ranks X100 first in battery-life category.","method":"rule_match"}],"verified_at":"2026-05-24T12:34:56.789Z","latency_ms":274,"depth_used":"auto"},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Verification unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}],"x-canonical-path":"/v1/competitive/check","deprecated":true}},"/compliance/check":{"post":{"tags":["Compliance"],"summary":"Verify claims about a brand's regulatory status","description":"Verifies claims about a brand's regulatory status against reference\ndata. Returns a recorded verdict, confidence tier, and evidence for each\nclaim, and mints a reliance receipt per claim. Requires a Bearer API key or per-request x402 payment; keyless-paid calls return no durable receipt.\nPriced: requests without a key or payment receive HTTP 402 quoting exact\nper-request terms (x402).","operationId":"compliance_check_compliance_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComplianceCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_ComplianceCheckResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"brand":"example-brand","results":[{"claim":"Example Brand devices comply with FCC Part 15.","verdict":"verified","confidence":0.91,"confidence_tier":"high","evidence":"FCC ID lookup returns active certification on flagship SKUs.","method":"rule_match"}],"compliance_records":14,"verified_at":"2026-05-24T12:34:56.789Z","latency_ms":201,"depth_used":"auto"},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Brand not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Verification unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}],"x-canonical-path":"/v1/compliance/check","deprecated":true}},"/consent/check":{"post":{"tags":["Consent"],"summary":"Check a consent document against a registered schema","description":"Validates the caller's consent-metadata document against a schema version\nregistered for their account (JSON Schema Draft 2020-12) and returns the\nrecorded verdict with any validation errors. Mints a signed receipt binding\nthe document and the schema by digest; the document itself is never stored.\nRequires a Bearer API key.","operationId":"consent_check_consent_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsentCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_ConsentCheckResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"verdict":"conformant","errors":[],"error_count":0,"schema_slug":"support-purposes","schema_version":3,"schema_digest":"sha256:0000000000000000000000000000000000000000000000000000000000000000","payload_digest":"sha256:1111111111111111111111111111111111111111111111111111111111111111","method":"consent_schema_conformance","validator_draft":"2020-12","receipt_id":"01JEXAMPLE0000000000000000","disclosure":"Deterministic schema-conformance check; a signed reliance record references schema and document by digest — never a legal opinion on consent validity.","checked_at":"2026-05-24T12:34:56.789Z","latency_ms":4},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Consent schema not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Registry integrity check failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/consent/check","deprecated":true}},"/consent/schemas":{"post":{"tags":["Consent"],"summary":"Register a new consent schema version","description":"Registers a new immutable version of a consent schema under the caller's\naccount and returns the stored row with its digest. Versions are append-only;\nexisting versions are never modified. Requires a Bearer API key.","operationId":"consent_schema_register_consent_schemas_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsentSchemaCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_ConsentSchemaCreateResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Concurrent registration for this slug","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Schema not registrable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/consent/schemas","deprecated":true},"get":{"tags":["Consent"],"summary":"List your registered consent schema versions","description":"Lists the consent schema versions registered under the caller's account,\noptionally filtered by slug. Requires a Bearer API key.","operationId":"consent_schema_list_consent_schemas_get","parameters":[{"name":"slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_ConsentSchemaListResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/consent/schemas","deprecated":true}},"/brand/{slug}/contact":{"get":{"tags":["Contact"],"summary":"Fetch recorded contact information for a brand","description":"Public endpoint — no auth required. Returns brand contact information.","operationId":"get_brand_contact_brand__slug__contact_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandContactEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-canonical-path":"/v1/brand/{slug}/contact","deprecated":true}},"/contracts":{"post":{"tags":["Contracts"],"summary":"Declare a behavior contract for this account","description":"Declares a golden-suite behavior contract for the caller's account; the\nregistry is append-only, so re-declaring a slug mints a new version rather\nthan updating. Returns the stored contract record with its version, case\nand dimension counts, and content digest. Requires a Bearer API key.","operationId":"contract_declare_contracts_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContractDeclareRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BehaviorContractCreateResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Concurrent declaration for this slug","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Contract not declarable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/contracts","deprecated":true},"get":{"tags":["Contracts"],"summary":"List this account's declared behavior contracts","description":"Lists the caller's declared behavior contracts with keyset pagination\n(default limit 100) and an optional slug filter, re-verifying each row's\ncontent digest before serving. Returns each contract record's slug,\nversion, case and dimension counts, and content digest. Requires a Bearer\nAPI key.","operationId":"contract_list_contracts_get","parameters":[{"name":"slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Page size (keyset pagination)","default":100,"title":"Limit"},"description":"Page size (keyset pagination)"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor from a prior page's meta.pagination.cursor. Bound to the slug-filter context at issue time — keep the filter constant across pages (the /brands cursor contract).","title":"Cursor"},"description":"Opaque cursor from a prior page's meta.pagination.cursor. Bound to the slug-filter context at issue time — keep the filter constant across pages (the /brands cursor contract)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BehaviorContractListResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/contracts","deprecated":true}},"/contracts/{slug}":{"get":{"tags":["Contracts"],"summary":"Get one declared behavior contract by slug","description":"Fetches one of the caller's declared behavior contracts by slug (the\nlatest active version unless version is given), re-verifying its content\ndigest before serving. Returns the contract record with its cases and\ncontent digest. Requires a Bearer API key.","operationId":"contract_detail_contracts__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"version","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BehaviorContractDetailResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Contract not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Registry integrity check failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/contracts/{slug}","deprecated":true}},"/customs/check":{"post":{"tags":["Customs"],"summary":"Check N-model agreement on HS/HTS codes for a shipment","description":"Runs the declared model set over one shipment description and records whether\ntheir HS/HTS code assignments agree under the declared consensus policy; the\nverdict states agreement (unanimous, majority, or unresolved), never correctness.\nReturns the recorded verdict with the full declared policy scope and mints a\nsigned reliance receipt; the submitted description is never stored. Requires a Bearer API key or per-request x402 payment; keyless-paid calls return no durable receipt.\nPriced: requests without a key or payment receive HTTP 402 quoting exact per-request terms (x402).","operationId":"customs_check_customs_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomsCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_CustomsCheckResponse_"}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Consensus fan-out unavailable — fail-closed, retry later","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}],"x-canonical-path":"/v1/customs/check","deprecated":true}},"/egress/gate":{"post":{"tags":["Egress Gate"],"summary":"Gate an egress payload on the pinned PHI detector","description":"Checks the submitted payload with the pinned, versioned PHI detector and answers\nproceed only when the detector flagged nothing in its declared classes; otherwise it\nanswers block with per-class reasons, and a detector that cannot run halts the gate\nwith HTTP 503. Returns the recorded decision and verdict with the detector's\ndisclosed scope and mints a signed reliance receipt binding the payload by digest;\nthe submitted content is never stored. Requires a Bearer API key or per-request x402 payment; keyless-paid calls return no durable receipt.\nPriced: requests without a key or payment receive HTTP 402 quoting exact per-request terms (x402).","operationId":"egress_gate_egress_gate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EgressGateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_EgressGateResponse_"}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Request body over the declared 1 MiB cap — only enforced when Content-Length is present; chunked requests fall back to the 10,000-char content cap (422)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error (content never echoed)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Detector unavailable — fail-closed, the gate halts; retry later","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}],"x-canonical-path":"/v1/egress/gate","deprecated":true}},"/errors":{"get":{"tags":["Errors"],"summary":"List every registered error problem type","description":"List every registered problem type (the error ``type`` URI registry).","operationId":"list_problem_types_errors_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemTypeListEnvelope"}}}}},"x-canonical-path":"/v1/errors","deprecated":true}},"/errors/{slug}":{"get":{"tags":["Errors"],"summary":"Fetch one registered problem type by slug","description":"One registered problem type by its URL slug.\n\nAn unknown slug is an honest 404, never a stub — a ``type`` URI Edge has\nactually emitted always resolves here.","operationId":"get_problem_type_errors__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemTypeEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-canonical-path":"/v1/errors/{slug}","deprecated":true}},"/fallbacks":{"post":{"tags":["Fallbacks"],"summary":"Declare a named fallback for this account","description":"Declares a named fallback bound to the caller's pinned behavior\nreference and declared contract; the registry is append-only, so\nre-declaring a slug mints a new version rather than updating. Returns the\nstored declaration with its version and content digest. Requires a Bearer\nAPI key.","operationId":"fallback_declare_fallbacks_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FallbackDeclareRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BehaviorFallbackCreateResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Concurrent declaration for this slug","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Declaration not admissible","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/fallbacks","deprecated":true},"get":{"tags":["Fallbacks"],"summary":"List this account's fallback declarations","description":"Lists the caller's fallback declarations with keyset pagination\n(default limit 100) and an optional slug filter, re-verifying each row's\ncontent digest before serving. Returns each declaration's slug, version,\nkind, bindings, cadence, triggers, and content digest. Requires a Bearer\nAPI key.","operationId":"fallback_list_fallbacks_get","parameters":[{"name":"slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Page size (keyset pagination)","default":100,"title":"Limit"},"description":"Page size (keyset pagination)"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor from a prior page's meta.pagination.cursor. Bound to the slug-filter context at issue time — keep the filter constant across pages (the /brands cursor contract).","title":"Cursor"},"description":"Opaque cursor from a prior page's meta.pagination.cursor. Bound to the slug-filter context at issue time — keep the filter constant across pages (the /brands cursor contract)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BehaviorFallbackListResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Invalid page cursor","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Registry integrity check failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/fallbacks","deprecated":true}},"/fallbacks/{slug}":{"get":{"tags":["Fallbacks"],"summary":"Get one fallback declaration by slug","description":"Fetches one of the caller's fallback declarations by slug (the latest\nactive version unless version is given), re-verifying its content digest\nbefore serving. Returns the declaration's bindings, cadence, triggers,\nsubject, and content digest. Requires a Bearer API key.","operationId":"fallback_detail_fallbacks__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"version","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BehaviorFallbackDetailResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Fallback not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Registry integrity check failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/fallbacks/{slug}","deprecated":true}},"/financial/check":{"post":{"tags":["Financial"],"summary":"Verify financial claims against EDGAR-grounded facts","description":"Verify a financial claim against structured, EDGAR-grounded financial facts.\n\nNumeric claims are evaluated by the relation they assert: an equality/approximation claim\n(\"revenue is $416B\", \"about $400B\") is banded ±5%/20% against the canonical figure, while a\nrelational-threshold claim (\"revenue exceeds $50B\", \"at least $400B\", \"under $500B\") is\nevaluated as the bound it states — satisfied or not — never as a distance from a\npoint-estimate.\n\nOwned (persistable) callers: each result stages a signed reliance receipt; its ULID rides\n`results[].receipt_id` (and `meta.receipt` on single-claim requests) and resolves at\nGET /receipts/{receipt_id}. Anonymous and x402-no-key callers: no durable receipt is\nwritten (persist gate); `receipt_id` is null, and this sentence is the why.\n\nThe deterministic comparison record lives in exactly two homes — the response-side figures\nride each result's `financial_data`, and the recompute basis rides the receipt's\n`details.comparison` (an AssertedFact with `asserted_by=\"as-observed-by-Edge\"`), where its\n`value` takes one of two shapes by claim kind:\n- equality/approx: `{fact_type, claimed, canonical, outcome, direction, delta_pct, method}`\n- threshold: `{fact_type, claimed, canonical, operator, satisfied, method}` (`operator` in\n  `gt|gte|lt|lte`; no `delta_pct` — an equality distance is meaningless for a bound)","operationId":"financial_check_financial_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FinancialCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_FinancialCheckResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"brand":"example-brand","ticker":"EXMP","results":[{"claim":"Example Brand reported Q4 2025 revenue of $1.2B.","verdict":"verified","confidence":0.91,"confidence_tier":"high","evidence":"10-K filing dated 2026-02-15 lists $1.2B Q4 revenue.","method":"rule_match","receipt_id":"01JZAXQF8B2D4E6G8H0J2K4M6P"}],"facts_count":23,"verified_at":"2026-05-24T12:34:56.789Z","latency_ms":312,"depth_used":"llm_only"},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z","receipt":{"receipt_id":"01JZAXQF8B2D4E6G8H0J2K4M6P","location":"/receipts/01JZAXQF8B2D4E6G8H0J2K4M6P"}},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Brand not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Verification unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}],"x-canonical-path":"/v1/financial/check","deprecated":true}},"/freshness/check":{"post":{"tags":["Freshness"],"summary":"Check submitted text for stale information","description":"Checks the submitted text for stale or outdated information. Returns an\noverall freshness score, counts of fresh, stale, and unknown sources,\nper-source results, and a stored check id. Requires a Bearer API key or per-request x402 payment.\nPriced: requests without a key or payment receive HTTP 402 quoting exact\nper-request terms (x402).","operationId":"freshness_check_freshness_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreshnessCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_FreshnessCheckResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"overall_freshness":0.82,"sources_checked":3,"sources_fresh":2,"sources_stale":1,"sources_unknown":0,"results":[{"url":"https://example.com/2025-report","age_days":95,"freshness_tier":"fresh"},{"url":"https://example.com/2018-archive","age_days":2730,"freshness_tier":"stale"}],"latency_ms":168,"depth_used":"auto","check_id":"fresh_01HX5K3JNZ8A2F4M7P9Q1R3S5T"},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Verification unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}],"x-canonical-path":"/v1/freshness/check","deprecated":true}},"/graph/entity/{entity_id}":{"get":{"tags":["Graph","Graph"],"summary":"Get recorded observations for a graph entity","description":"Get observations for an entity.","operationId":"get_entity_observations_graph_entity__entity_id__get","parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","title":"Entity Id"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Since"}},{"name":"view","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(all|latest)$"},{"type":"null"}],"default":"all","title":"View"}},{"name":"include_superseded","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Superseded"}},{"name":"protocol","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Protocol"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GraphEntityObservationsEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/graph/entity/{entity_id}","deprecated":true}},"/graph/search":{"get":{"tags":["Graph","Graph"],"summary":"Search graph entities by observation criteria","description":"Search entities by observation criteria and flags.","operationId":"search_entities_graph_search_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"}},{"name":"schema_conformant","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Schema Conformant"}},{"name":"dependencies_clean","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Dependencies Clean"}},{"name":"actively_maintained","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Actively Maintained"}},{"name":"credentials_safe","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Credentials Safe"}},{"name":"scope_contained","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Scope Contained"}},{"name":"registry","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registry"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"protocol","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Protocol"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GraphSearchEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/graph/search","deprecated":true}},"/graph/entities":{"get":{"tags":["Graph","Graph"],"summary":"List tracked entities with latest scan summaries","description":"List all tracked entities with latest scan summary.","operationId":"list_entities_graph_entities_get","parameters":[{"name":"registry","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registry"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"cadence","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cadence"}},{"name":"protocol","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Protocol"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","pattern":"^(name|last_scanned|created)$","default":"last_scanned","title":"Sort"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GraphEntityListEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/graph/entities","deprecated":true}},"/notarize/hash":{"post":{"tags":["Notarize","Notarize"],"summary":"Notarize a sha256 digest and mint a signed receipt","description":"Mint one ed25519-signed reliance receipt for the presented digest, in-request.\n\nThe response carries the COMPLETE signed envelope: verify it offline against\n`/.well-known/jwks.json` with zero further contact (`verdict` is the act-word\n`\"notarized\"` — a presentation record, never a content judgment).\n\nPAYMENT BINDING (x402-paid mints only): the signed envelope carries a `payment`\nblock — `payer`, `tx_hash`, `network` (CAIP-2), `amount` (atomic units of\n`asset`), `asset` (token contract), `asserts: \"settlement-at-broadcast\"`. The\nbinding asserts settlement-at-broadcast at mint time, not chain finality —\nfinality composes via the chain itself. The block sits INSIDE the signed bytes:\nthe payment and the proof are one artifact, and editing either breaks the\nsignature. Mints bought with an API key carry no `payment` block (nothing was\npaid at this door), and neither does a mint whose transfer we could not confirm\n— the block's PRESENCE means the transfer was read off the chain, never merely\nreported to us.\n\nHOW TO CHECK THE PAYMENT YOURSELF, precisely: fetch `tx_hash` and look for the\nERC-20 `Transfer` log emitted by the `asset` contract, from `payer`, to the\nquoted payTo, for exactly `amount`. Do NOT conclude anything from the\ntransaction's own status field: the transfer is submitted inside a Multicall3\n`aggregate3` entry with `allowFailure` set, so a transaction in which the\ntransfer reverted still reports success. Also note that `payer` never appears\nas the transaction's sender — a facilitator relayer submits and pays the gas —\nso auditing a wallet's sent-transaction list for this payment returns a false\nnegative every time.\n\nNORMATIVE: the `verify.jwks_url` returned below is a convenience pointer, and a\nverifier MUST NOT follow the `jwks_url` carried inside a receipt it is checking —\nthe field sits outside the signature, so a forged receipt can name the forger's\nown key set. Pin the key set out of band at\nhttps://api.bluefoxedge.ai/.well-known/jwks.json.","operationId":"notarize_hash_notarize_hash_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotarizeHashRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_NotarizeHashResponse_"}}}},"401":{"description":"No API key and no x402 payment","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"409":{"description":"X-Request-Id names a receipt still staged for async mint — retry after the drain or with a fresh id","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Hash/meta shape or caps violation; or meta supplied while the storage tier cannot persist it verbatim","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Signing unavailable — fail-closed, no row persisted, never an unsigned success (R9)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}],"x-canonical-path":"/v1/notarize/hash","deprecated":true}},"/brand/{slug}/hours":{"get":{"tags":["Hours"],"summary":"Get a brand's recorded business hours","description":"Public endpoint — no auth required. Returns brand hours and operating status.","operationId":"get_brand_hours_brand__slug__hours_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandHoursEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-canonical-path":"/v1/brand/{slug}/hours","deprecated":true}},"/terms":{"get":{"tags":["Legal"],"summary":"Serve the Terms of Service page","description":"Serves the Terms of Service as an HTML page. Pass ?format=json to\nreceive the same content as a JSON envelope.","operationId":"terms_of_service_terms_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}},"x-canonical-path":"/v1/terms","deprecated":true}},"/privacy":{"get":{"tags":["Legal"],"summary":"Serve the Privacy Policy page","description":"Serves the Privacy Policy as an HTML page. Pass ?format=json to\nreceive the same content as a JSON envelope.","operationId":"privacy_policy_privacy_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}},"x-canonical-path":"/v1/privacy","deprecated":true}},"/security-policy":{"get":{"tags":["Legal"],"summary":"Serve the security disclosure policy page","description":"The security disclosure policy named by security.txt's Policy: field.\nPublic by design, no auth required.","operationId":"security_policy_security_policy_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}},"x-canonical-path":"/v1/security-policy","deprecated":true}},"/getting-started":{"get":{"tags":["Legal"],"summary":"Serve the getting started guide","description":"Serves the getting started guide as an HTML page. The x402 payment\nexample values are stamped from the live payment configuration at\nrequest time.","operationId":"getting_started_getting_started_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}},"x-canonical-path":"/v1/getting-started","deprecated":true}},"/verify_receipt.py":{"get":{"tags":["Legal"],"summary":"Serve the offline receipt verifier script","description":"The offline receipt verifier, byte-identical to the /getting-started\nstep-4 snippet and the site's learn pages, served plain so a fetched copy\nruns verbatim. Public by design.","operationId":"serve_verify_receipt_script_verify_receipt_py_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"x-canonical-path":"/v1/verify_receipt.py","deprecated":true}},"/verify_receipt.py.sha256":{"get":{"tags":["Legal"],"summary":"Serve the SHA-256 checksum of verify_receipt.py","description":"Checksum of the served /verify_receipt.py bytes, computed from the same\nmodule constant the route serves — the pair cannot drift. Public by design.","operationId":"serve_verify_receipt_checksum_verify_receipt_py_sha256_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"x-canonical-path":"/v1/verify_receipt.py.sha256","deprecated":true}},"/v1/me":{"get":{"tags":["Account","Account"],"summary":"Report this credential's status, both meters, and their reset instants","description":"The status of the credential you are calling with: whether it is active, which plan it is on, how much of each allowance you have spent, what each allowance is, and when each resets. Two meters are reported because two exist and they are counted separately — API calls and signed receipt mints. Every figure is read from the live limiters at request time.\n\nThis call is free and unmetered: it consumes neither allowance and is served even when one is exhausted, so learning your quota never costs you any of it.","operationId":"me_v1_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeEnvelope"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/methodology":{"get":{"tags":["Methodology","Methodology"],"summary":"List every published methodology document","description":"List every published methodology document (version + slug + absolute URL).","operationId":"list_methodology_methodology_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MethodologyListEnvelope"}}}}},"x-canonical-path":"/v1/methodology","deprecated":true}},"/methodology/{slug}":{"get":{"tags":["Methodology","Methodology"],"summary":"Get one published methodology document by slug","description":"One published methodology document by its URL slug.\n\nAn unknown/absent version is an honest 404 (\"no such methodology\"), never a\nfabricated stub — consistent with the never-a-dead/fabricated-URL contract the\naccuracy cell's ``methodology_url`` relies on.","operationId":"get_methodology_methodology__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MethodologyDocEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-canonical-path":"/v1/methodology/{slug}","deprecated":true}},"/brand/{slug}/monitor":{"get":{"tags":["Monitor"],"summary":"Get a brand's recorded health snapshot","description":"Fetches the brand's recorded health snapshot computed from AI model\ninteractions. Returns the health score and tier, sentiment and\nrecommendation figures with trends, mention count, model agreement and\nclaim accuracy rates, and any alerts; brands without monitor data receive\nan unmonitored placeholder. Public; no key required.","operationId":"get_brand_monitor_brand__slug__monitor_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandMonitorEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-canonical-path":"/v1/brand/{slug}/monitor","deprecated":true}},"/brand/{slug}/monitor/narratives":{"get":{"tags":["Monitor"],"summary":"List recorded narratives for a brand","description":"Lists narratives recorded for the brand, ordered by frequency (default\nlimit 20). Returns each narrative's text, frequency, sentiment, model\ncount, trend, and sample claims. Public; no key required.","operationId":"get_brand_narratives_brand__slug__monitor_narratives_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandNarrativesEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-canonical-path":"/v1/brand/{slug}/monitor/narratives","deprecated":true}},"/brand/{slug}/monitor/models":{"get":{"tags":["Monitor"],"summary":"Get per-model metrics recorded for a brand","description":"Fetches the per-model metrics recorded for the brand. Returns each\nmodel's sentiment, recommendation rate, and mention count, plus the\ncross-model mean sentiment and any divergent models. Public; no key\nrequired.","operationId":"get_brand_models_brand__slug__monitor_models_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandModelsEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-canonical-path":"/v1/brand/{slug}/monitor/models","deprecated":true}},"/brand/{slug}/monitor/recommendations":{"get":{"tags":["Monitor"],"summary":"Get recorded recommendation rates by category","description":"Fetches the recommendation rates recorded for the brand by category.\nReturns each category's rate, 30-day trend, and top-competitor comparison.\nPublic; no key required.","operationId":"get_brand_recommendations_brand__slug__monitor_recommendations_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandRecommendationsEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-canonical-path":"/v1/brand/{slug}/monitor/recommendations","deprecated":true}},"/brand/{slug}/monitor/competitive":{"get":{"tags":["Monitor"],"summary":"Compare a brand's recorded health against competitors","description":"Compares the brand's recorded health data against the named competitor\nslugs. Returns the brand's health score and tier, each competitor's health\nsnapshot, and up to 20 recorded competitive claims linking the brands.\nPublic; no key required.","operationId":"get_competitive_radar_brand__slug__monitor_competitive_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"competitors","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated competitor slugs","default":"","title":"Competitors"},"description":"Comma-separated competitor slugs"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompetitiveRadarEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-canonical-path":"/v1/brand/{slug}/monitor/competitive","deprecated":true}},"/brand/{slug}/monitor/claims":{"post":{"tags":["Monitor"],"summary":"Register claims to track for a brand","description":"Registers one or more claims to track for the brand. Returns the\ncreated tracking records with their ids and expected verdicts. Requires a Bearer API key or per-request x402 payment. Priced: requests without a key or payment receive HTTP 402\nquoting exact per-request terms (x402).","operationId":"track_claims_brand__slug__monitor_claims_post","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler.","title":"Idempotency-Key"},"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"401":{"description":"Authorization credentials malformed or refused (RFC 9457 Problem Details; `WWW-Authenticate` per RFC 6750). A request with no credentials receives 402 while the payment wall is active.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]},{}],"x-canonical-path":"/v1/brand/{slug}/monitor/claims","deprecated":true},"get":{"tags":["Monitor"],"summary":"List tracked claims for a brand","description":"Lists the claims tracked for the brand, newest first. Returns each\nclaim's text, expected verdict, recorded accuracy counts, common errors,\nand last-checked time. Requires a Bearer API key.","operationId":"get_tracked_claims_brand__slug__monitor_claims_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrackedClaimsEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/brand/{slug}/monitor/claims","deprecated":true}},"/brand/{slug}/monitor/insights":{"get":{"tags":["Monitor"],"summary":"Get generated insights from a brand's monitor data","description":"Generates prioritized insights from the brand's recorded monitor data,\ncached for 24 hours. Returns a list of insights with recommendations plus\na summary of the underlying health record. Public; no key required.","operationId":"get_brand_insights_brand__slug__monitor_insights_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorInsightsEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-canonical-path":"/v1/brand/{slug}/monitor/insights","deprecated":true}},"/brand/{slug}/monitor/subscribe":{"post":{"tags":["Monitor"],"summary":"Create a webhook subscription for monitor alerts","description":"Creates a webhook subscription that dispatches brand monitor alerts to\na public HTTPS URL. Returns the subscription id with its recorded\nconditions, frequency, and competitor list. Requires a Bearer API key or per-request x402 payment.\nPriced: requests without a key or payment receive HTTP 402 quoting exact\nper-request terms (x402).","operationId":"subscribe_monitor_brand__slug__monitor_subscribe_post","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler.","title":"Idempotency-Key"},"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"401":{"description":"Authorization credentials malformed or refused (RFC 9457 Problem Details; `WWW-Authenticate` per RFC 6750). A request with no credentials receives 402 while the payment wall is active.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]},{}],"x-canonical-path":"/v1/brand/{slug}/monitor/subscribe","deprecated":true}},"/brand/{slug}/monitor/subscribe/{sub_id}":{"delete":{"tags":["Monitor"],"summary":"Delete a brand monitor subscription","description":"Deletes the identified monitor subscription for the brand. Returns a\ndeletion confirmation with the subscription id. Requires a Bearer API key.","operationId":"unsubscribe_monitor_brand__slug__monitor_subscribe__sub_id__delete","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"sub_id","in":"path","required":true,"schema":{"type":"string","title":"Sub Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/brand/{slug}/monitor/subscribe/{sub_id}","deprecated":true}},"/brand/{slug}/monitor/subscriptions":{"get":{"tags":["Monitor"],"summary":"List active monitor subscriptions for a brand","description":"Lists the brand's active monitor subscriptions. Returns each\nsubscription's id, webhook URL, conditions, frequency, competitors, and\nlast dispatch time. Requires a Bearer API key.","operationId":"list_subscriptions_brand__slug__monitor_subscriptions_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorSubscriptionsEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/brand/{slug}/monitor/subscriptions","deprecated":true}},"/v1/ops":{"get":{"tags":["Edge Ops","Edge Ops"],"summary":"List metadata for all ops feeds","description":"Feed index — metadata for all 6 feeds.","operationId":"feed_index_v1_ops_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpsFeedIndexEnvelope"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/ops/events/{event_id}":{"get":{"tags":["Edge Ops","Edge Ops"],"summary":"Fetch a single ops event by id","description":"Get a single event by ID.","operationId":"get_single_event_v1_ops_events__event_id__get","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpsEventSingleEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/ops/webhooks":{"get":{"tags":["Edge Ops","Edge Ops"],"summary":"List your ops webhook subscriptions","description":"List caller's webhooks.","operationId":"list_webhooks_v1_ops_webhooks_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpsWebhookListEnvelope"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]},"post":{"tags":["Edge Ops","Edge Ops"],"summary":"Create an ops webhook subscription","description":"Create a webhook subscription (Pro+ only).","operationId":"create_webhook_v1_ops_webhooks_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpsWebhookCreateRequest"}}}}}},"/v1/ops/{feed}":{"get":{"tags":["Edge Ops","Edge Ops"],"summary":"List events for one ops feed","description":"Events for a feed with cursor pagination and tier filtering.","operationId":"get_feed_events_v1_ops__feed__get","parameters":[{"name":"feed","in":"path","required":true,"schema":{"type":"string","title":"Feed"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO timestamp filter","title":"Since"},"description":"ISO timestamp filter"},{"name":"priority","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"P1, P2, P3, or comma-separated","title":"Priority"},"description":"P1, P2, P3, or comma-separated"},{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pagination cursor","title":"Cursor"},"description":"Pagination cursor"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpsFeedEventsEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/ops/webhooks/{webhook_id}":{"delete":{"tags":["Edge Ops","Edge Ops"],"summary":"Delete one of your ops webhooks","description":"Delete a webhook (ownership check).","operationId":"delete_webhook_v1_ops_webhooks__webhook_id__delete","parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","title":"Webhook Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/ops/webhooks/{webhook_id}/test":{"post":{"tags":["Edge Ops","Edge Ops"],"summary":"Send a test event to a webhook","description":"Send a test event to a webhook.","operationId":"test_webhook_v1_ops_webhooks__webhook_id__test_post","parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","title":"Webhook Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/pii/check":{"post":{"tags":["PII"],"summary":"Check submitted content for PII with the pinned detector","description":"Runs the pinned, versioned PII detector over the submitted content and records\nwhether any of its declared detection classes appear (verdict pii_absent or\npii_detected). Returns the recorded verdict with per-class counts and the detector's\ndisclosed scope and mints a signed reliance receipt binding the content by digest;\nthe submitted content is never stored. Requires a Bearer API key or per-request x402 payment; keyless-paid calls return no durable receipt.\nPriced: requests without a key or payment receive HTTP 402 quoting exact per-request terms (x402).","operationId":"pii_check_pii_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PIICheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_PIICheckResponse_"}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Detector unavailable — fail-closed, retry later","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}],"x-canonical-path":"/v1/pii/check","deprecated":true}},"/policy/check":{"post":{"tags":["Policy"],"summary":"Verify claims against a brand's stored policies","description":"Verifies claims against the brand's stored policy data. Returns a\nrecorded verdict, confidence tier, and evidence for each claim, and mints\na reliance receipt per claim. Requires a Bearer API key or per-request x402 payment; keyless-paid calls return no durable receipt. Priced: requests\nwithout a key or payment receive HTTP 402 quoting exact per-request terms\n(x402).","operationId":"policy_check_policy_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_PolicyCheckResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"brand":"example-brand","depth":"auto","results":[{"claim":"Brand offers a 30-day return window.","verdict":"verified","confidence":0.91,"confidence_tier":"high","evidence":"Brand's published policy explicitly states a 30-day return window.","method":"rule_match"}],"policies_count":7,"verified_at":"2026-05-24T12:34:56.789Z","latency_ms":188,"depth_used":"rule_only"},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Brand not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Verification unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}],"x-canonical-path":"/v1/policy/check","deprecated":true}},"/verify/pre-transaction":{"post":{"tags":["Pre-Transaction"],"summary":"Run multiple verification checks before a commerce transaction","description":"Run comprehensive pre-transaction trust verification.","operationId":"pre_transaction_verify_verify_pre_transaction_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreTransactionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/verify/pre-transaction","deprecated":true}},"/test/preflight":{"post":{"tags":["Preflight"],"summary":"Run a preflight check on an agent response","description":"Runs preflight validation over a submitted agent response, optionally against a\nquery and brand, at fast or standard depth. Returns the check results with a pass\nor fail verdict and mints a signed reliance receipt recording the verdict and\noverall score. Requires a Bearer API key or per-request x402 payment; keyless-paid calls return no durable receipt.\nPriced: requests without a key or payment receive HTTP 402 quoting exact per-request terms (x402).","operationId":"preflight_check_test_preflight_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreflightRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_PreflightCheckResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"overall_score":0.88,"dimensions":{"factual_accuracy":0.92,"brand_alignment":0.85,"compliance":0.9,"tone":0.87},"flags":[],"recommendation":"send","verified_claims":[{"claim":"X100 has 8GB RAM","verdict":"verified","confidence":0.97}],"latency_ms":423,"depth_used":"standard","pass":true},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}],"x-canonical-path":"/v1/test/preflight","deprecated":true}},"/test/preflight/batch":{"post":{"tags":["Preflight"],"summary":"Run preflight checks on up to 20 agent responses","description":"Runs the preflight check over each item in a batch of up to 20 submitted\nresponses at a shared depth. Returns per-item results with pass and fail counts\nand mints one signed reliance receipt per item. Requires a Bearer API key or per-request x402 payment; keyless-paid calls return no durable receipt.\nPriced: requests without a key or payment receive HTTP 402 quoting exact per-request terms (x402).","operationId":"preflight_batch_test_preflight_batch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreflightBatchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_PreflightBatchResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"results":[{"overall_score":0.88,"pass":true,"flags":[]},{"overall_score":0.41,"pass":false,"flags":["off_brand_tone"]}],"total":2,"passed":1,"failed":1,"latency_ms":891,"depth_used":"standard"},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}],"x-canonical-path":"/v1/test/preflight/batch","deprecated":true}},"/price/check":{"post":{"tags":["Price"],"summary":"Verify price claims against recorded product prices","description":"Verifies price claims for a brand against recorded product prices.\nReturns a recorded verdict, confidence tier, evidence, and price data for\neach claim, plus a staleness flag when the price data is more than 7 days\nold. Requires a Bearer API key or per-request x402 payment. Priced: requests without a key or payment\nreceive HTTP 402 quoting exact per-request terms (x402).","operationId":"price_check_price_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"401":{"description":"Authorization credentials malformed or refused (RFC 9457 Problem Details; `WWW-Authenticate` per RFC 6750). A request with no credentials receives 402 while the payment wall is active.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]},{}],"x-canonical-path":"/v1/price/check","deprecated":true}},"/brand/{slug}/profile":{"get":{"tags":["Profile"],"summary":"Get a brand's composite profile","description":"Assembles a composite profile for a brand from its definition,\npolicies, tracked prices, financial facts, and protocol support, cached\nfor 1 hour. Returns display fields, policy and pricing summaries,\nfinancials, agent compatibility flags, and a definition completeness\nscore. Public; no key required.","operationId":"get_brand_profile_brand__slug__profile_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandProfileEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-canonical-path":"/v1/brand/{slug}/profile","deprecated":true}},"/brands/profiles":{"get":{"tags":["Profile"],"summary":"List brand profile summaries","description":"Lists brand profile summaries, ordered by name, with keyset pagination\n(server default limit 50) and optional substring search via q. Returns\neach brand's slug, name, category, policy and product counts, and\ncompleteness score; pass all=true to receive the full list without\npaging.","operationId":"list_brand_profiles_brands_profiles_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":200,"minimum":1},{"type":"null"}],"description":"Max brand profiles per page (1-200; server default 50). Pass ?all=true to bypass paging and receive the full list (admin/batch use).","title":"Limit"},"description":"Max brand profiles per page (1-200; server default 50). Pass ?all=true to bypass paging and receive the full list (admin/batch use)."},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque keyset cursor from a prior page's meta.pagination.cursor. Bound to the q value at issue time — do not change q between pages.","title":"Cursor"},"description":"Opaque keyset cursor from a prior page's meta.pagination.cursor. Bound to the q value at issue time — do not change q between pages."},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Substring search on name and slug, with BRAND_ALIASES resolution (e.g. q=facebook matches the meta brand).","title":"Q"},"description":"Substring search on name and slug, with BRAND_ALIASES resolution (e.g. q=facebook matches the meta brand)."},{"name":"all","in":"query","required":false,"schema":{"type":"boolean","description":"Set all=true to bypass paging and return the full ordered list (admin/batch use). Incompatible with cursor and limit.","default":false,"title":"All"},"description":"Set all=true to bypass paging and return the full ordered list (admin/batch use). Incompatible with cursor and limit."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandProfileListEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-canonical-path":"/v1/brands/profiles","deprecated":true}},"/v1/verify/protocol-claim":{"post":{"tags":["Protocol Verification"],"summary":"Verify protocol-published policy claims against Edge reference data","description":"Verify policy claims published through commerce protocols against\nBlueFox Edge's reference data.","operationId":"verify_protocol_claim_v1_verify_protocol_claim_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProtocolClaimRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/receipts":{"get":{"tags":["Receipts"],"summary":"List your own receipts, newest first","description":"List the caller's own receipts, newest first. Caller-scoped; bounded page size.\n\n``?request_id=`` resolves a past response to its receipt (F-9 pair). MINTED rows only:\na receipt still staged for materialization matches nothing here until the writer\ndrains it — follow ``meta.receipt.location`` for staged-state visibility.","operationId":"list_receipts_receipts_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"1-indexed page","default":1,"title":"Page"},"description":"1-indexed page"},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Page size (max 200)","default":50,"title":"Per Page"},"description":"Page size (max 200)"},{"name":"request_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":128},{"type":"null"}],"description":"Return only the receipt minted for this request_id (the id every response carries in data/meta and the X-Request-Id header). Unique per receipt, so at most one row matches; covers batch items, which each mint their own request_id.","title":"Request Id"},"description":"Return only the receipt minted for this request_id (the id every response carries in data/meta and the X-Request-Id header). Unique per receipt, so at most one row matches; covers batch items, which each mint their own request_id."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReceiptListEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/receipts","deprecated":true}},"/receipts/export":{"get":{"tags":["Receipts"],"summary":"Export your receipts as an evidence bundle","description":"Export the caller's own receipts as a self-contained, offline-verifiable evidence\nbundle (chain-ordered, oldest first). Caller-scoped: a cross-account or unknown\n``anchor`` → 404 IDENTICALLY to a nonexistent id (no enumeration oracle). Read-only.","operationId":"export_receipts_receipts_export_get","parameters":[{"name":"anchor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"receipt_id to anchor the segment at (default: the oldest surviving receipt in the caller's chain)","title":"Anchor"},"description":"receipt_id to anchor the segment at (default: the oldest surviving receipt in the caller's chain)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max receipts in this segment (chain-ordered)","default":1000,"title":"Limit"},"description":"Max receipts in this segment (chain-ordered)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReceiptExportEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/receipts/export","deprecated":true}},"/receipts/{receipt_id}":{"get":{"tags":["Receipts"],"summary":"Fetch one of your receipts by id","description":"Read one of the caller's own receipts (full envelope). Cross-account id → 404.\n\nA receipt that is staged but not yet drained into the store answers 202 with a\nretry hint instead of 404 (F-9 pair) — the ``meta.receipt.location`` pointer is\nrecognized from the moment it is issued.","operationId":"get_receipt_receipts__receipt_id__get","parameters":[{"name":"receipt_id","in":"path","required":true,"schema":{"type":"string","title":"Receipt Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReceiptReadEnvelope"}}}},"202":{"description":"Receipt staged, not yet materialized — retry after retry_after_seconds","headers":{"Retry-After":{"description":"Suggested poll delay in integer seconds (the drain cadence)","schema":{"type":"integer"}},"Cache-Control":{"description":"Always 'no-store' — the staged representation is transient","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReceiptStagedEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/receipts/{receipt_id}","deprecated":true}},"/receipts/{receipt_id}/verify":{"post":{"tags":["Receipts"],"summary":"Check the byte integrity of a receipt","description":"Pure byte-integrity check of one of the caller's own receipts. Cross-account id → 404\n(denied identically to a read — no enumeration oracle). No network, no verdict re-run.","operationId":"verify_receipt_receipts__receipt_id__verify_post","parameters":[{"name":"receipt_id","in":"path","required":true,"schema":{"type":"string","title":"Receipt Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReceiptVerifyEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/receipts/{receipt_id}/verify","deprecated":true}},"/receipts/{receipt_id}/recompute":{"post":{"tags":["Receipts"],"summary":"Re-run a receipt's recorded verdict process","description":"Re-run the receipt's recorded verdict process over its RETAINED inputs\nunder its PINNED model/prompt, and report\n``match | drift | infeasible`` (verdict-compared, not digest-compared).\n\nCaller-scoped: a cross-account or unknown id → 404 IDENTICALLY (no enumeration oracle).\nNever 500s: a genuine failure degrades to a reported ``infeasible`` (reason ``recompute_error``),\nnever a server error. ``drift`` and ``infeasible`` are reported honestly and are never\nmassaged toward ``match``.","operationId":"post_recompute_receipts__receipt_id__recompute_post","parameters":[{"name":"receipt_id","in":"path","required":true,"schema":{"type":"string","title":"Receipt Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecomputeEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/receipts/{receipt_id}/recompute","deprecated":true}},"/receipts/{receipt_id}/hold":{"post":{"tags":["Receipts"],"summary":"Place a legal hold on a receipt","description":"Place a legal hold on one of the caller's own receipts. Idempotent; cross-account\nor unknown id → 404 IDENTICALLY (no enumeration oracle). While held, the receipt\nsurvives retention purging and pins the chain suffix behind it.","operationId":"set_legal_hold_receipts__receipt_id__hold_post","parameters":[{"name":"receipt_id","in":"path","required":true,"schema":{"type":"string","title":"Receipt Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReceiptHoldEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/receipts/{receipt_id}/hold","deprecated":true},"delete":{"tags":["Receipts"],"summary":"Release a legal hold on a receipt","description":"Release a legal hold on one of the caller's own receipts. Idempotent; cross-account\nor unknown id → 404 IDENTICALLY. The receipt re-enters the normal retention policy.","operationId":"release_legal_hold_receipts__receipt_id__hold_delete","parameters":[{"name":"receipt_id","in":"path","required":true,"schema":{"type":"string","title":"Receipt Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReceiptHoldEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/receipts/{receipt_id}/hold","deprecated":true}},"/references":{"post":{"tags":["References"],"summary":"Pin a behavior reference snapshot for this account","description":"Pins an immutable behavior reference snapshot for the caller's account;\nthe registry is append-only, so re-pinning a slug mints a new version\nrather than updating. Returns the stored reference record with its\nversion, case and dimension counts, and content digest. Requires a Bearer\nAPI key.","operationId":"reference_pin_references_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferencePinRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BehaviorReferenceCreateResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Concurrent pin for this slug","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Reference not pinnable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/references","deprecated":true},"get":{"tags":["References"],"summary":"List this account's pinned behavior references","description":"Lists the caller's pinned behavior references with keyset pagination\n(default limit 100) and an optional slug filter, re-verifying each row's\ncontent digest before serving. Returns each reference record's slug,\nversion, case and dimension counts, and content digest. Requires a Bearer\nAPI key.","operationId":"reference_list_references_get","parameters":[{"name":"slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Page size (keyset pagination)","default":100,"title":"Limit"},"description":"Page size (keyset pagination)"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor from a prior page's meta.pagination.cursor. Bound to the slug-filter context at issue time — keep the filter constant across pages (the /brands cursor contract).","title":"Cursor"},"description":"Opaque cursor from a prior page's meta.pagination.cursor. Bound to the slug-filter context at issue time — keep the filter constant across pages (the /brands cursor contract)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BehaviorReferenceListResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/references","deprecated":true}},"/references/{slug}":{"get":{"tags":["References"],"summary":"Get one pinned behavior reference by slug","description":"Fetches one of the caller's pinned behavior references by slug (the\nlatest active version unless version is given), re-verifying its content\ndigest before serving. Returns the reference record with its subject,\ncases, and content digest. Requires a Bearer API key.","operationId":"reference_detail_references__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"version","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BehaviorReferenceDetailResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Reference not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Registry integrity check failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/references/{slug}","deprecated":true}},"/verify/run":{"post":{"tags":["Run Conformance"],"summary":"Verify harness run evidence against its card contract","description":"Recomputes every per-check outcome from the submitted exit codes and artifact\ndigests and rolls them up into a run-level conformance verdict against the card\ncontract; the verdict states conformance to the contract, never the quality or\ncorrectness of the work. Returns the recorded verdict envelope and mints a signed\nreliance receipt. Requires a Bearer API key.","operationId":"verify_run_verify_run_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunConformanceRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_HonestyEnvelope_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"x-honesty":{"mode":"verdict-primary","expression":"attestable","dimensions":["run.executable_check","run.artifact_conformance","run.pins_recorded","run.telemetry_integrity"],"envelope_version":"1.0.0","declared_set_hash":"4fdc38d86929435dbe3a144d4fde089acb775440949f14d041701a378953fbd5"},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/verify/run","deprecated":true}},"/safety/check":{"post":{"tags":["Safety"],"summary":"Check content against GARM brand safety categories","description":"Classifies the submitted content against the GARM brand safety categories,\noptionally scoped to a brand, at the requested depth. Returns the classification\nresults with an overall risk reading and mints a signed reliance receipt recording\nthe safe or unsafe verdict. Requires a Bearer API key or per-request x402 payment; keyless-paid calls return no durable receipt.\nPriced: requests without a key or payment receive HTTP 402 quoting exact per-request terms (x402).","operationId":"safety_check_safety_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SafetyCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_SafetyCheckResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"overall_safe":true,"overall_risk":"low","garm_results":{"adult_sexual":{"safe":true,"score":0.02},"hate_speech":{"safe":true,"score":0.01},"violence":{"safe":true,"score":0.03}},"floor_violations":[],"context_fit":{"brand_aligned":true,"tone_match":"neutral"},"recommendation":"publish","latency_ms":87},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}],"x-canonical-path":"/v1/safety/check","deprecated":true}},"/safety/check/batch":{"post":{"tags":["Safety"],"summary":"Run GARM safety checks on up to 20 items","description":"Classifies each item in a batch of up to 20 against the GARM brand safety\ncategories. Returns per-item results with safe and unsafe counts and mints one\nsigned reliance receipt per item. Requires a Bearer API key or per-request x402 payment; keyless-paid calls return no durable receipt.\nPriced: requests without a key or payment receive HTTP 402 quoting exact per-request terms (x402).","operationId":"safety_check_batch_safety_check_batch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchSafetyCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_SafetyCheckBatchResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"results":[{"content_preview":"Example marketing copy item 1...","brand":"example-brand","overall_safe":true,"overall_risk":"low","garm_results":{}},{"content_preview":"Example marketing copy item 2...","brand":"example-brand","overall_safe":false,"overall_risk":"medium","garm_results":{}}],"summary":{"total":2,"safe":1,"unsafe":1,"floor_violations":0},"latency_ms":162},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}],"x-canonical-path":"/v1/safety/check/batch","deprecated":true}},"/scanner/submit":{"post":{"tags":["Scanner","Scanner"],"summary":"Submit an MCP server for scanning","description":"Submit an MCP server for on-demand scanning.","operationId":"submit_scan_scanner_submit_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler.","title":"Idempotency-Key"},"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"MCP server submission for on-demand scanning.","properties":{"url":{"type":"string","description":"Source URL of the MCP server (required)"},"registry":{"type":"string","description":"Source registry (inferred from `url` when omitted)"},"transport":{"type":"string","description":"Declared transport"},"name":{"type":"string","description":"Display name"},"protocol":{"type":"string","description":"Protocol family (default `mcp`)"},"cadence":{"type":"string","description":"Re-scan cadence (default `weekly`)"},"callback_url":{"type":"string","description":"Webhook to notify when the scan completes"}},"required":["url"]}}}},"x-canonical-path":"/v1/scanner/submit","deprecated":true}},"/scanner/status/{scan_id}":{"get":{"tags":["Scanner","Scanner"],"summary":"Get a scan's status and progress","description":"Get scan status and progress.","operationId":"get_scan_status_scanner_status__scan_id__get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScannerScanStatusEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/scanner/status/{scan_id}","deprecated":true}},"/sentiment/check":{"post":{"tags":["Sentiment"],"summary":"Analyze sentiment for a batch of texts","description":"Analyzes sentiment for a batch of up to 50 texts. Returns a sentiment\nlabel and score for each text, plus details of the model used. Requires a Bearer API key or per-request x402 payment.\nPriced: requests without a key or payment receive HTTP 402 quoting exact per-request terms (x402).","operationId":"sentiment_check_sentiment_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SentimentRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_SentimentCheckResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"results":[{"text":"The X100 is fantastic.","sentiment":"positive","score":0.96},{"text":"Battery life is mediocre.","sentiment":"negative","score":0.78}],"latency_ms":124,"model_name":"twitter-roberta-base-sentiment-latest","model_loaded":true},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}],"x-canonical-path":"/v1/sentiment/check","deprecated":true}},"/api/brands/{brand_id}/similar":{"get":{"tags":["Similarity"],"summary":"List brands similar to a given brand","description":"Lists the brands most similar to a given brand from precomputed\nsimilarity matrices, filterable by dimension and minimum score (default\nlimit 10). Returns each similar brand's composite and per-dimension\nscores, shared-cluster flag, and similarity drivers, plus a cluster\nsummary. Public; no key required.","operationId":"get_similar_brands_api_brands__brand_id__similar_get","parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","title":"Brand Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":10,"title":"Limit"}},{"name":"dimensions","in":"query","required":false,"schema":{"type":"string","pattern":"^(all|score|semantic|behavior)$","default":"all","title":"Dimensions"}},{"name":"min_score","in":"query","required":false,"schema":{"type":"number","maximum":1.0,"minimum":0.0,"default":0.0,"title":"Min Score"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimilarBrandsEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-canonical-path":"/v1/api/brands/{brand_id}/similar","deprecated":true}},"/spec/check":{"post":{"tags":["Spec"],"summary":"Verify a product specification claim for a brand","description":"Verifies a single product specification claim for a brand against\nreference data. Returns the recorded verdict with confidence tier,\nevidence, method, and any matched specification data. Requires a Bearer API key or per-request x402 payment. Priced: requests without a key or payment receive HTTP 402\nquoting exact per-request terms (x402).","operationId":"spec_check_spec_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpecCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_SpecCheckResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"brand":"example-brand","claim":"X100 has 8GB of RAM.","verdict":"verified","confidence":0.97,"confidence_tier":"high","evidence":"Manufacturer spec sheet lists 8GB LPDDR5 on X100.","method":"rule_match","spec_data":{"ram_gb":8,"ram_type":"LPDDR5"},"verified_at":"2026-05-24T12:34:56.789Z","latency_ms":96,"depth_used":"rule_only"},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Brand not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Verification unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}],"x-canonical-path":"/v1/spec/check","deprecated":true}},"/subprocessors/check":{"post":{"tags":["Subprocessors"],"summary":"Check observed subprocessors against a disclosed set","description":"Compares the subprocessor identifiers Edge observed for the calling API key\nover the stated window, plus any caller-asserted identifiers, against the\ncaller's pinned disclosed set. Mints a signed receipt recording the verdict\nand returns the recorded verdict with the comparison details. Requires a\nBearer API key.","operationId":"subprocessors_check_subprocessors_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubprocessorCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_SubprocessorCheckResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Subprocessor disclosure not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Registry or observation store unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/subprocessors/check","deprecated":true}},"/subprocessors/disclosures":{"post":{"tags":["Subprocessors"],"summary":"Register a new subprocessor disclosure version","description":"Registers a new immutable version of a subprocessor disclosure under the\ncaller's account and returns the stored row with its identifier digest.\nVersions are append-only; existing versions are never modified. Requires a\nBearer API key.","operationId":"subprocessor_disclosure_register_subprocessors_disclosures_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubprocessorDisclosureCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_SubprocessorDisclosureCreateResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Concurrent registration for this slug","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Disclosure not registrable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/subprocessors/disclosures","deprecated":true},"get":{"tags":["Subprocessors"],"summary":"List your registered subprocessor disclosures","description":"Lists the subprocessor disclosure versions registered under the caller's\naccount, optionally filtered by slug. Requires a Bearer API key.","operationId":"subprocessor_disclosure_list_subprocessors_disclosures_get","parameters":[{"name":"slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_SubprocessorDisclosureListResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/subprocessors/disclosures","deprecated":true}},"/v1/transparency/checkpoint":{"get":{"tags":["Transparency"],"summary":"Fetch the latest transparency checkpoint per log","description":"Latest checkpoint per log + inventory + cadence config. Public read;\nwhile the inclusion path is dark it 404s with the same code/status/type as\nits siblings and its own sentence (chair word ③).","operationId":"transparency_checkpoint_v1_transparency_checkpoint_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/transparency/consistency":{"get":{"tags":["Transparency"],"summary":"Fetch a consistency proof between published sizes","description":"RFC 6962 consistency proof between two PUBLISHED checkpoint sizes, with\nthe two signed checkpoint notes it runs between carried beside it\n(``from_note`` / ``to_note``) so both ends bind to the published log key and\nthe answer rests on signed bytes rather than on our unsigned numbers.\nEvery non-servable ask returns the one identical 404 (no enumeration\nsurface); ``from == to`` is the defined trivial case (200, empty path).\nRunnable checker for both notes plus the proof between them, standard\nlibrary only: GET /verify_consistency.py (pin it with its .sha256).","operationId":"transparency_consistency_v1_transparency_consistency_get","parameters":[{"name":"log_id","in":"query","required":true,"schema":{"type":"string","description":"Internal log selector (1:1 with the C2SP origin)","title":"Log Id"},"description":"Internal log selector (1:1 with the C2SP origin)"},{"name":"from","in":"query","required":true,"schema":{"type":"integer","minimum":1,"title":"From"}},{"name":"to","in":"query","required":true,"schema":{"type":"integer","minimum":1,"title":"To"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/transparency/checkpoints":{"get":{"tags":["Transparency"],"summary":"Fetch the signed checkpoint at one published tree size","description":"The signed checkpoint at ONE published size — DP97, round-5 finding H-35.\n\nRound 5: \"no historical signed checkpoint is obtainable\", so the ``from`` end\nof any consistency proof was unbindable — a holder could check the arithmetic\nback to last month's size but last month's root was still only our word.\n\nThis is a READ, not a backfill, and that is the only reason it exists: the\ncheckpoint store is append-only by construction (a truncating writer is a\nnamed anti-requirement of the signer, OB-6 section 4), so every\ncheckpoint this log has ever signed is already on disk. One indexed row, no\nproof generated, nothing recomputed. Had it needed new storage or a backfill\nthis endpoint would not be here and a runway memo would be, per the seat's\nword.\n\nNO PER-IP CAP, deliberately, and the reasoning is the house's own: caps guard\nthe proof GENERATORS, which are O(n) per call\n(app/spine/inclusion/merkle_log's complexity note). This is one primary-key-\nshaped read of immutable published data, so it is priced like\n/v1/transparency/checkpoint — which carries no cap for the same reason —\nrather than like its two neighbours. It also opens no enumeration surface that\nthe consistency endpoint has not opened already: which sizes are published is\na fact a transparency log is SUPPOSED to make discoverable, and probing this\nendpoint learns exactly what probing that one learns.\n\nPublished sizes are immutable, so the answer is cacheable.","operationId":"transparency_checkpoint_at_size_v1_transparency_checkpoints_get","parameters":[{"name":"log_id","in":"query","required":true,"schema":{"type":"string","description":"Internal log selector (1:1 with the C2SP origin)","title":"Log Id"},"description":"Internal log selector (1:1 with the C2SP origin)"},{"name":"size","in":"query","required":true,"schema":{"type":"integer","minimum":1,"description":"A PUBLISHED tree size. Sizes this log has published are exactly the ones /v1/transparency/consistency will serve a proof between; any other size is answered 404, which is a statement about what we published and not about what exists.","title":"Size"},"description":"A PUBLISHED tree size. Sizes this log has published are exactly the ones /v1/transparency/consistency will serve a proof between; any other size is answered 404, which is a statement about what we published and not about what exists."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/transparency/inclusion":{"get":{"tags":["Transparency"],"summary":"Fetch an inclusion proof for one receipt's log entry","description":"Per-leaf inclusion proof against the LATEST published checkpoint only\n(one lookup, no caller-chosen size matrix — historical sizes compose via\n/v1/transparency/consistency, and a proof is a statement about a moment:\nthe tree is append-only, so it never expires, it only gets older than the\nnewest checkpoint). Lookup takes either receipt-derived key: ``chain_self``\n(durable, preferred) or ``receipt_id`` (resolved server-side; see the module\ndocstring for what that widening costs). Refusals: feature-dark, unknown\nlog, well-formed-but-unmatched, and an unresolvable receipt id are ONE\nopaque 404 body, now phrased as an answer about THIS log's entries and its\ncoverage window (H-38). Malformed ``chain_self`` stays the deliberate\nexception (400, distinct code) because a client-side defect is not a fact\nabout our interior; supplying NEITHER key is the same class (400, its own\ncode) rather than the house 422, whose sentence would name a request body\nthis endpoint does not have (H-41's class). ``pending`` is a 200, not an\nerror — the leaf exists; nothing signed covers it yet. Every response is\n``Cache-Control: no-store``: the answer is a function of a caller-supplied\nsecret-shaped value and the current tree.","operationId":"transparency_inclusion_v1_transparency_inclusion_get","parameters":[{"name":"log_id","in":"query","required":true,"schema":{"type":"string","description":"Internal log selector (1:1 with the C2SP origin)","title":"Log Id"},"description":"Internal log selector (1:1 with the C2SP origin)"},{"name":"chain_self","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The leaf pre-image — the receipt's chain_self, 'sha256:' + 64 lower-case hex, verbatim. Possession is the fence: the value is receipt-derived and unpublished, so presenting it is what opens the read. This is the DURABLE key: it works for as long as the entry is in the log, which is forever. Supply this or receipt_id; if you supply both, this one is used and receipt_id is only echoed back.","title":"Chain Self"},"description":"The leaf pre-image — the receipt's chain_self, 'sha256:' + 64 lower-case hex, verbatim. Possession is the fence: the value is receipt-derived and unpublished, so presenting it is what opens the read. This is the DURABLE key: it works for as long as the entry is in the log, which is forever. Supply this or receipt_id; if you supply both, this one is used and receipt_id is only echoed back."},{"name":"receipt_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The receipt's id, as an alternative lookup key — resolved server-side to that receipt's chain_self. Convenience, not the durable key: resolution needs the receipt row to still be inside its retention window, while its log entry is permanent, so an old receipt id can stop resolving for an entry that is still provably in the log. Prefer chain_self when you have it. Echoed back either way; when chain_self is also supplied this value is never checked.","title":"Receipt Id"},"description":"The receipt's id, as an alternative lookup key — resolved server-side to that receipt's chain_self. Convenience, not the durable key: resolution needs the receipt row to still be inside its retention window, while its log entry is permanent, so an old receipt id can stop resolving for an entry that is still provably in the log. Prefer chain_self when you have it. Echoed back either way; when chain_self is also supplied this value is never checked."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/verify/package":{"post":{"tags":["Verification"],"summary":"Verify a software package for registry, vulnerability, and typosquat findings","description":"Verify a software package — registry + vulnerability + typosquat.","operationId":"verify_package_endpoint_verify_package_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler.","title":"Idempotency-Key"},"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_EvidenceBundle_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"primitive":"package","primitive_version":"1.1.0","request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","verdict":"accurate","confidence":"high","confidence_score":0.93,"sources":[{"url":"https://www.npmjs.com/package/example-package","fetch_timestamp":"2026-05-24T12:34:56.789Z","source_bytes_digest":"sha256:a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8","extracted_text_hash":"sha256:a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8","hash_alg":"sha256","extraction_method":"registry_api","extraction_quality":"good","relevant_text":"Package published 2026-04-15 by trusted publisher."}],"rationale":"Package metadata matches the registry record; publisher in trusted set.","timestamp":"2026-05-24T12:34:56.789Z","latency_ms":218,"model_used":"claude-sonnet-4-6","cost_usd":0.0042,"details":{"package_name":"example-package","version":"1.2.3","registry":"npm"}},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"Upstream verification failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":false,"with-idempotency-key":true,"security":[{"ApiKeyAuth":[]},{}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PackageVerifyRequest"}}}},"x-canonical-path":"/v1/verify/package","deprecated":true}},"/verify/package/batch":{"post":{"tags":["Verification"],"summary":"Verify up to 20 software packages in one batch","description":"Batch package verification — up to 20 items.","operationId":"verify_package_batch_endpoint_verify_package_batch_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler.","title":"Idempotency-Key"},"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BatchVerifyResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"batch_id":"bat_01HX5K3JNZ8A2F4M","items_submitted":2,"items_succeeded":2,"items_failed":0,"results":[{"primitive":"package","primitive_version":"1.1.0","request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","verdict":"accurate","confidence":"high","confidence_score":0.93,"sources":[{"url":"https://example.com/source","fetch_timestamp":"2026-05-24T12:34:56.789Z","source_bytes_digest":"sha256:a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8","extracted_text_hash":"sha256:a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8","hash_alg":"sha256","extraction_method":"trafilatura","extraction_quality":"good","relevant_text":"Independent source corroborating the claim."}],"rationale":"Multiple independent sources confirmed the claim.","timestamp":"2026-05-24T12:34:56.789Z","latency_ms":218,"model_used":"claude-sonnet-4-6","cost_usd":0.0042,"details":{}},{"primitive":"package","primitive_version":"1.1.0","request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","verdict":"unverifiable","confidence":"low","confidence_score":0.41,"sources":[],"rationale":"Source could not be fetched within the timeout window.","timestamp":"2026-05-24T12:34:56.789Z","latency_ms":218,"model_used":"claude-sonnet-4-6","cost_usd":0.0042,"details":{}}],"total_cost_usd":0.0084,"total_latency_ms":412,"timestamp":"2026-05-24T12:34:56.789Z"},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":false,"with-idempotency-key":true,"security":[{"ApiKeyAuth":[]},{}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Batch of package targets (1–20). Items are validated individually: an invalid item becomes a per-item error row in the 200 response, not a request-level 422.","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/PackageVerifyRequest"},"minItems":1,"maxItems":20}},"required":["items"]}}}},"x-canonical-path":"/v1/verify/package/batch","deprecated":true}},"/verify/tool":{"post":{"tags":["Verification"],"summary":"Verify a tool or MCP server via three-stage probe","description":"Verify a tool/MCP server — three-stage probe + schema comparison.","operationId":"verify_tool_endpoint_verify_tool_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler.","title":"Idempotency-Key"},"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_HonestyEnvelope_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"envelope_version":"1.0.0","target":{"requested":"registry:example-mcp","resolved":"https://mcp.example.com/api","kind":"mcp-server"},"expression":"attestable","as_of":{"response":"2026-06-12T18:00:00Z","observed":"2026-06-12T17:59:59Z"},"formula_version":"tool-verify/1.0.0","probe":{"method":"mcp_jsonrpc","stages_run":["HEAD","GET:content-type","initialize","tools/list"],"duration_ms":128},"declared_set_hash":"3386034982d91521295017719a87036f1492b6dd9d3a33cc22a43a3ba038b508","posture":"consistent","dimensions":[{"dimension":"tool.liveness","status":"match","advertised":"reachable MCP endpoint claimed","observed":"mcp_jsonrpc","evidence":[{"stages_run":["HEAD","GET:content-type","initialize","tools/list"],"method":"mcp_jsonrpc"}]},{"dimension":"tool.identity","status":"match","advertised":{"name":"example-mcp","version":"0.4.1"},"observed":{"name":"example-mcp","version":"0.4.1","protocolVersion":"2024-11-05"}},{"dimension":"tool.capability_inventory","status":"match","advertised":["example-tool"],"observed":["example-tool"]},{"dimension":"tool.schema_fidelity","status":"match","advertised":"declared inputSchema per tool","observed":"live inputSchema per tool","evidence":[{"per_tool":[{"name":"example-tool","match":"exact"}]}]},{"dimension":"tool.auth_posture","status":"match","advertised":{"auth_expected":false},"observed":{"gated":false}}],"abstentions":[],"fail_clean":true,"non_claims":["no-quality-score","no-safety-judgment","no-external-truth-claim","match-means-observed-equals-advertised","no-fitness-for-purpose-claim"]},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":false,"with-idempotency-key":true,"x-honesty":{"mode":"verdict-primary","expression":"attestable","dimensions":["tool.liveness","tool.identity","tool.capability_inventory","tool.schema_fidelity","tool.auth_posture"],"envelope_version":"1.0.0","declared_set_hash":"3386034982d91521295017719a87036f1492b6dd9d3a33cc22a43a3ba038b508"},"security":[{"ApiKeyAuth":[]},{}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolVerifyInput"}}}},"x-canonical-path":"/v1/verify/tool","deprecated":true}},"/verify/tool/batch":{"post":{"tags":["Verification"],"summary":"Verify up to 20 tool or MCP servers per batch","description":"Batch verify up to 20 tool/MCP servers.","operationId":"verify_tool_batch_endpoint_verify_tool_batch_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler.","title":"Idempotency-Key"},"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BatchVerifyResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"batch_id":"bat_01HX5K3JNZ8A2F4M","items_submitted":2,"items_succeeded":2,"items_failed":0,"results":[{"envelope_version":"1.0.0","target":{"requested":"registry:example-mcp","resolved":"https://mcp.example.com/api","kind":"mcp-server"},"expression":"attestable","as_of":{"response":"2026-06-12T18:00:00Z","observed":"2026-06-12T17:59:59Z"},"formula_version":"tool-verify/1.0.0","probe":{"method":"mcp_jsonrpc","stages_run":["HEAD","GET:content-type","initialize","tools/list"],"duration_ms":128},"declared_set_hash":"3386034982d91521295017719a87036f1492b6dd9d3a33cc22a43a3ba038b508","posture":"consistent","dimensions":[{"dimension":"tool.liveness","status":"match","advertised":"reachable MCP endpoint claimed","observed":"mcp_jsonrpc","evidence":[{"stages_run":["HEAD","GET:content-type","initialize","tools/list"],"method":"mcp_jsonrpc"}]},{"dimension":"tool.identity","status":"match","advertised":{"name":"example-mcp","version":"0.4.1"},"observed":{"name":"example-mcp","version":"0.4.1","protocolVersion":"2024-11-05"}},{"dimension":"tool.capability_inventory","status":"match","advertised":["example-tool"],"observed":["example-tool"]},{"dimension":"tool.schema_fidelity","status":"match","advertised":"declared inputSchema per tool","observed":"live inputSchema per tool","evidence":[{"per_tool":[{"name":"example-tool","match":"exact"}]}]},{"dimension":"tool.auth_posture","status":"match","advertised":{"auth_expected":false},"observed":{"gated":false}}],"abstentions":[],"fail_clean":true,"non_claims":["no-quality-score","no-safety-judgment","no-external-truth-claim","match-means-observed-equals-advertised","no-fitness-for-purpose-claim"]},{"envelope_version":"1.0.0","target":{"requested":"https://down.example.com/mcp","resolved":"https://down.example.com/mcp","kind":"mcp-server"},"expression":"attestable","as_of":{"response":"2026-06-12T18:00:00Z"},"formula_version":"tool-verify/1.0.0","probe":{"method":"head_request","stages_run":["HEAD"],"duration_ms":21},"declared_set_hash":"3386034982d91521295017719a87036f1492b6dd9d3a33cc22a43a3ba038b508","posture":"unverified","dimensions":[{"dimension":"tool.liveness","status":"unverified","advertised":"reachable MCP endpoint claimed","observed":"head_request","reason":"unreachable","reason_class":"inability"},{"dimension":"tool.identity","status":"unverified","reason":"unreachable","reason_class":"inability"},{"dimension":"tool.capability_inventory","status":"unverified","reason":"unreachable","reason_class":"inability"},{"dimension":"tool.schema_fidelity","status":"unverified","reason":"unreachable","reason_class":"inability"},{"dimension":"tool.auth_posture","status":"unverified","reason":"unreachable","reason_class":"inability"}],"abstentions":[{"dimension":"tool.liveness","reason":"unreachable","reason_class":"inability"},{"dimension":"tool.identity","reason":"unreachable","reason_class":"inability"},{"dimension":"tool.capability_inventory","reason":"unreachable","reason_class":"inability"},{"dimension":"tool.schema_fidelity","reason":"unreachable","reason_class":"inability"},{"dimension":"tool.auth_posture","reason":"unreachable","reason_class":"inability"}],"fail_clean":true,"non_claims":["no-quality-score","no-safety-judgment","no-external-truth-claim","match-means-observed-equals-advertised","no-fitness-for-purpose-claim"]}],"total_cost_usd":0.0,"total_latency_ms":149,"timestamp":"2026-05-24T12:34:56.789Z"},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":false,"with-idempotency-key":true,"x-honesty":{"mode":"verdict-primary","expression":"attestable","dimensions":["tool.liveness","tool.identity","tool.capability_inventory","tool.schema_fidelity","tool.auth_posture"],"envelope_version":"1.0.0","declared_set_hash":"3386034982d91521295017719a87036f1492b6dd9d3a33cc22a43a3ba038b508"},"security":[{"ApiKeyAuth":[]},{}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Batch of tool targets (1–20). Items are validated individually: an invalid item becomes a per-item error row in the 200 response, not a request-level 422.","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ToolVerifyInput"},"minItems":1,"maxItems":20}},"required":["items"]}}}},"x-canonical-path":"/v1/verify/tool/batch","deprecated":true}},"/verify/citation":{"post":{"tags":["Verification"],"summary":"Verify a source URL contains the claimed information","description":"Verify whether a source URL contains the claimed information.","operationId":"verify_citation_endpoint_verify_citation_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler.","title":"Idempotency-Key"},"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_EvidenceBundle_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"primitive":"citation","primitive_version":"1.1.0","request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","verdict":"accurate","confidence":"high","confidence_score":0.93,"sources":[{"url":"https://example.com/source-article","fetch_timestamp":"2026-05-24T12:34:56.789Z","source_bytes_digest":"sha256:a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8","extracted_text_hash":"sha256:a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8","hash_alg":"sha256","extraction_method":"trafilatura","extraction_quality":"good","relevant_text":"The cited passage appears verbatim in the source."}],"rationale":"Source URL resolved and content matches cited excerpt.","timestamp":"2026-05-24T12:34:56.789Z","latency_ms":218,"model_used":"claude-sonnet-4-6","cost_usd":0.0042,"details":{"cited_url":"https://example.com/source-article","author":"Example Author"}},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"Upstream verification failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":false,"with-idempotency-key":true,"security":[{"ApiKeyAuth":[]},{}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CitationVerifyRequest"}}}},"x-canonical-path":"/v1/verify/citation","deprecated":true}},"/verify/citation/batch":{"post":{"tags":["Verification"],"summary":"Verify up to 20 citations in one batch","description":"Batch citation verification — up to 20 items.","operationId":"verify_citation_batch_endpoint_verify_citation_batch_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler.","title":"Idempotency-Key"},"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BatchVerifyResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"batch_id":"bat_01HX5K3JNZ8A2F4M","items_submitted":2,"items_succeeded":2,"items_failed":0,"results":[{"primitive":"citation","primitive_version":"1.1.0","request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","verdict":"accurate","confidence":"high","confidence_score":0.93,"sources":[{"url":"https://example.com/source","fetch_timestamp":"2026-05-24T12:34:56.789Z","source_bytes_digest":"sha256:a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8","extracted_text_hash":"sha256:a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8","hash_alg":"sha256","extraction_method":"trafilatura","extraction_quality":"good","relevant_text":"Independent source corroborating the claim."}],"rationale":"Multiple independent sources confirmed the claim.","timestamp":"2026-05-24T12:34:56.789Z","latency_ms":218,"model_used":"claude-sonnet-4-6","cost_usd":0.0042,"details":{}},{"primitive":"citation","primitive_version":"1.1.0","request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","verdict":"unverifiable","confidence":"low","confidence_score":0.41,"sources":[],"rationale":"Source could not be fetched within the timeout window.","timestamp":"2026-05-24T12:34:56.789Z","latency_ms":218,"model_used":"claude-sonnet-4-6","cost_usd":0.0042,"details":{}}],"total_cost_usd":0.0084,"total_latency_ms":412,"timestamp":"2026-05-24T12:34:56.789Z"},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":false,"with-idempotency-key":true,"security":[{"ApiKeyAuth":[]},{}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Batch of citations (1–20).","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/CitationVerifyRequest"},"minItems":1,"maxItems":20}},"required":["items"]}}}},"x-canonical-path":"/v1/verify/citation/batch","deprecated":true}},"/verify/claim":{"post":{"tags":["Verification"],"summary":"Verify a factual claim against its cited sources","description":"Verify a factual claim against 1-5 source URLs.\n\nReturns an EvidenceBundle with verdict (supported/refuted/neutral/insufficient_evidence),\nconfidence (high/medium/low), per-source results, and cost tracking.\n\nFor persisting callers, meta.receipt points at the durable reliance receipt; the\npointer is issued at staging time, so the location becomes readable once the\nreceipt writer drains (typically within seconds).","operationId":"verify_claim_endpoint_verify_claim_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler.","title":"Idempotency-Key"},"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_EvidenceBundle_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"primitive":"claim","primitive_version":"1.1.0","request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","verdict":"accurate","confidence":"high","confidence_score":0.93,"sources":[{"url":"https://example.com/source","fetch_timestamp":"2026-05-24T12:34:56.789Z","source_bytes_digest":"sha256:a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8","extracted_text_hash":"sha256:a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8","hash_alg":"sha256","extraction_method":"trafilatura","extraction_quality":"good","relevant_text":"Independent source corroborating the claim."}],"rationale":"Two independent sources corroborate the claim.","timestamp":"2026-05-24T12:34:56.789Z","latency_ms":218,"model_used":"claude-sonnet-4-6","cost_usd":0.0042,"details":{"claim_text":"Example claim under verification."}},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":false,"with-idempotency-key":true,"security":[{"ApiKeyAuth":[]},{}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimVerifyRequest"}}}},"x-canonical-path":"/v1/verify/claim","deprecated":true}},"/verify/claim/batch":{"post":{"tags":["Verification"],"summary":"Verify up to 20 factual claims in one batch","description":"Batch claim verification — up to 20 items.","operationId":"verify_claim_batch_endpoint_verify_claim_batch_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler.","title":"Idempotency-Key"},"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BatchVerifyResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"batch_id":"bat_01HX5K3JNZ8A2F4M","items_submitted":2,"items_succeeded":2,"items_failed":0,"results":[{"primitive":"claim","primitive_version":"1.1.0","request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","verdict":"accurate","confidence":"high","confidence_score":0.93,"sources":[{"url":"https://example.com/source","fetch_timestamp":"2026-05-24T12:34:56.789Z","source_bytes_digest":"sha256:a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8","extracted_text_hash":"sha256:a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8","hash_alg":"sha256","extraction_method":"trafilatura","extraction_quality":"good","relevant_text":"Independent source corroborating the claim."}],"rationale":"Multiple independent sources confirmed the claim.","timestamp":"2026-05-24T12:34:56.789Z","latency_ms":218,"model_used":"claude-sonnet-4-6","cost_usd":0.0042,"details":{}},{"primitive":"claim","primitive_version":"1.1.0","request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","verdict":"unverifiable","confidence":"low","confidence_score":0.41,"sources":[],"rationale":"Source could not be fetched within the timeout window.","timestamp":"2026-05-24T12:34:56.789Z","latency_ms":218,"model_used":"claude-sonnet-4-6","cost_usd":0.0042,"details":{}}],"total_cost_usd":0.0084,"total_latency_ms":412,"timestamp":"2026-05-24T12:34:56.789Z"},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":false,"with-idempotency-key":true,"security":[{"ApiKeyAuth":[]},{}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimBatchRequest"}}}},"x-canonical-path":"/v1/verify/claim/batch","deprecated":true}},"/verify/cutover":{"post":{"tags":["Cutover"],"summary":"Verify a dated cutover exercise against its declared binding","description":"Accepts a caller-captured cutover exercise dated by exercised_at, resolves the\ndeclared fallback's own contract and reference binding, and computes the\ndifferential between the captured behavior and the pinned reference; the date is\nrecorded as dated evidence, never as a validity claim. Returns the recorded\nverdict with per-dimension results, writes an append-only run row, and mints a\nsigned reliance receipt. Requires a Bearer API key.","operationId":"verify_cutover_verify_cutover_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CutoverRunRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_CutoverRunResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Fallback, contract, or reference not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Registry integrity check failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/verify/cutover","deprecated":true}},"/verify/parity":{"post":{"tags":["Parity"],"summary":"Verify a declared fallback's captured behavior against its pinned reference","description":"Resolves the declared fallback's own contract and reference binding and computes\nthe differential between the caller-captured fallback behavior and the pinned\nproduction reference; Edge never runs the fallback itself. Returns the recorded\nverdict with per-dimension match, divergent, and unverified results, writes an\nappend-only run row, and mints a signed reliance receipt. Requires a Bearer API\nkey.","operationId":"verify_parity_verify_parity_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParityRunRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_ParityRunResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Fallback, contract, or reference not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Registry integrity check failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/verify/parity","deprecated":true}},"/v1/verify/quick":{"post":{"tags":["Verify Quick"],"summary":"Submit an MCP server for a quick verification scan","description":"Submit an MCP server for quick verification scan.\n\nPublic endpoint — no API key required. Rate-limited to 10/hour/IP.\nReturns cached results if target was scanned within the last hour.","operationId":"quick_verify_submit_v1_verify_quick_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_QuickVerifySubmitResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"scan_id":"qsc_01HX5K3JNZ8A2F4M7P9Q1R3S5T","entity_id":"ent_01HX5K3JNZ8A2F4M7P9Q1R3S5T","status":"queued","poll_url":"/v1/verify/quick/qsc_01HX5K3JNZ8A2F4M7P9Q1R3S5T","cached":false,"message":"Scan queued; poll for status.","estimated_duration_seconds":90},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":false,"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuickVerifyRequest"}}}}}},"/v1/verify/quick/{scan_id}":{"get":{"tags":["Verify Quick"],"summary":"Poll a quick verification scan for status and results","description":"Poll scan status. Returns formatted results when complete.","operationId":"quick_verify_status_v1_verify_quick__scan_id__get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_QuickVerifyStatusResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"scan_id":"qsc_01HX5K3JNZ8A2F4M7P9Q1R3S5T","entity_id":"ent_01HX5K3JNZ8A2F4M7P9Q1R3S5T","status":"completed","modules_completed":["metadata","trust","safety","freshness"],"modules_pending":[],"poll_url":"/v1/verify/quick/qsc_01HX5K3JNZ8A2F4M7P9Q1R3S5T","entity_name":"example-package","scanned_at":"2026-05-24T12:34:56.789Z","duration_ms":8742,"cached":false,"findings":[{"module":"trust","severity":"info","message":"Publisher in trusted set."}],"summary":{"safe":true,"overall_risk":"low","trust_score":0.91},"entity_url":"https://api.bluefoxedge.ai/entities/ent_01HX5K3JNZ8A2F4M7P9Q1R3S5T"},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Scan not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true}},"/verify.sh":{"get":{"tags":["Verify Quick"],"summary":"Serve the verify.sh scanner shell script","description":"Serve the verify.sh shell script.","operationId":"serve_verify_script_verify_sh_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/verify.sh.sha256":{"get":{"tags":["Verify Quick"],"summary":"Serve the SHA-256 checksum of verify.sh","description":"Serve the SHA-256 checksum of verify.sh.","operationId":"serve_verify_checksum_verify_sh_sha256_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/verify_inclusion.py":{"get":{"tags":["Verify Quick"],"summary":"Serve the verify_inclusion.py transparency-log proof checker","description":"The runnable checker for a transparency-log inclusion proof: it\nrecomputes your leaf from the pre-image the proof names, walks the audit\npath to the root inside the signed checkpoint note, and verifies that note\nagainst the log key pinned in the script's own source. Standard library\nonly. Pipe the inclusion response in on stdin; exit 0 means proved, and\nevery other outcome is one sentence on stderr. The log signs checkpoints\nwith a different key than it signs receipts with, and the script says so.","operationId":"serve_verify_inclusion_script_verify_inclusion_py_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/verify_inclusion.py.sha256":{"get":{"tags":["Verify Quick"],"summary":"Serve the SHA-256 checksum of verify_inclusion.py","description":"The SHA-256 of the bytes the checker route serves, in the two-space\nformat `shasum -a 256 -c -` consumes, so you can pin the script before you\nrun it.","operationId":"serve_verify_inclusion_checksum_verify_inclusion_py_sha256_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/verify_consistency.py":{"get":{"tags":["Verify Quick"],"summary":"Serve the verify_consistency.py transparency-log consistency checker","description":"The runnable checker for a transparency-log consistency proof: it\nverifies BOTH signed checkpoint notes against the log key pinned in the\nscript's own source, then recomputes the RFC 6962 walk between them and\nrequires it to land on the roots inside those notes — so the answer rests on\nsigned bytes at both ends rather than on the unsigned numbers beside them.\nStandard library only. Pipe the consistency response in on stdin, or supply\ncheckpoint notes you saved yourself with --from-note / --to-note; exit 0\nmeans the newer tree contains the older one unchanged, and every other\noutcome is one sentence on stderr.","operationId":"serve_verify_consistency_script_verify_consistency_py_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/verify_consistency.py.sha256":{"get":{"tags":["Verify Quick"],"summary":"Serve the SHA-256 checksum of verify_consistency.py","description":"The SHA-256 of the bytes the consistency-checker route serves, in the\ntwo-space format `shasum -a 256 -c -` consumes, so you can pin the script\nbefore you run it.","operationId":"serve_verify_consistency_checksum_verify_consistency_py_sha256_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/verify-mcp":{"get":{"tags":["Verify Quick"],"summary":"Serve the MCP scanner landing page","description":"Minimal landing page for the one-liner scanner.\n\nMoved from /verify to /verify-mcp so the bare /verify path is owned\nby the signup-flow email-verification page. The CLI one-liner that users\nactually execute targets /verify.sh (preserved), not this landing page —\nso this is a docs-only move with no script-level breakage.","operationId":"verify_landing_page_verify_mcp_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/verify/regression":{"post":{"tags":["Regression"],"summary":"Verify one candidate against its declared contract and pinned reference","description":"Computes the deterministic differential between one submitted candidate's\nobservations and the caller's pinned reference under the caller's own declared\ncontract. Returns the recorded verdict with per-dimension deltas and typed\nabstentions, writes an append-only run row, and mints a signed reliance receipt.\nRequires a Bearer API key.","operationId":"verify_regression_verify_regression_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegressionRunRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_RegressionRunResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Contract or reference not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Registry integrity check failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/verify/regression","deprecated":true}},"/v1/accuracy":{"get":{"tags":["Accuracy","Accuracy"],"summary":"List the latest validated accuracy cell for every dimension","description":"List every dimension's latest-validated accuracy cell (registry publish set).\n\nHonest empty list until a dimension validates.","operationId":"list_accuracy_v1_accuracy_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccuracyListEnvelope"}}}}}}},"/v1/accuracy/{dimension}":{"get":{"tags":["Accuracy","Accuracy"],"summary":"Get the latest validated accuracy cell for one dimension","description":"The latest VALIDATED accuracy cell for a dimension.\n\nA valid-but-unmeasured dimension returns a first-class honest\n``no_validated_measurement`` response (HTTP 200, never a fabricated cell). A\ndimension id that does not match the dimension-id grammar (``[a-z0-9._-]+``)\nis a malformed request (400).","operationId":"get_accuracy_v1_accuracy__dimension__get","parameters":[{"name":"dimension","in":"path","required":true,"schema":{"type":"string","title":"Dimension"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccuracyCellEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/advisor/recommend":{"post":{"tags":["Advisor","Advisor"],"summary":"Get ranked MCP server recommendations","description":"Get ranked MCP server recommendations based on requirements.","operationId":"advisor_recommend_v1_advisor_recommend_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdvisorRequirements"}}}}}},"/v1/advisor/compare":{"get":{"tags":["Advisor","Advisor"],"summary":"Compare MCP servers side by side","description":"Compare 2-5 MCP servers side by side.","operationId":"advisor_compare_v1_advisor_compare_get","parameters":[{"name":"entities","in":"query","required":true,"schema":{"type":"string","description":"Comma-separated entity IDs (2-5)","title":"Entities"},"description":"Comma-separated entity IDs (2-5)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdvisorCompareEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/advisor/categories":{"get":{"tags":["Advisor","Advisor"],"summary":"List advisor categories with entity counts","description":"List available categories with entity counts and data readiness.","operationId":"advisor_categories_v1_advisor_categories_get","parameters":[{"name":"protocol","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Protocol"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdvisorCategoriesEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/advisor/feedback":{"post":{"tags":["Advisor","Advisor"],"summary":"Record feedback on a recommendation","description":"Record feedback on a recommendation.","operationId":"advisor_feedback_v1_advisor_feedback_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdvisorFeedbackRequest"}}}}}},"/v1/agents/register":{"post":{"tags":["Agent"],"summary":"Register a new agent and receive its token","description":"Registers a new agent and returns its agent id with a one-time agent token.\n\nOnly a hash of the token is stored; the plaintext value appears once in this\nresponse. Registrations are limited to 10 per IP per hour.","operationId":"register_agent_v1_agents_register_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler.","title":"Idempotency-Key"},"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRegisterRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_AgentRegisterResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"agent_id":"ag_a1b2c3d4e5f6","agent_token":"bfa_live_<example-redacted>","name":"example-agent","created_at":"2026-05-24T12:34:56.789Z","latency_ms":73},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":false,"with-idempotency-key":true}},"/v1/agents/{agent_id}/trust-score":{"get":{"tags":["Agent"],"summary":"Fetch an agent's trust score by id","description":"Auth required (enforced by middleware). Returns full trust score with components.\n\nMay be re-exposed as a public endpoint in a future release.","operationId":"get_trust_score_v1_agents__agent_id__trust_score_get","parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_TrustScoreResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"agent_id":"ag_a1b2c3d4e5f6","agent_name":"example-agent","trust_score":0.84,"trust_tier":"trusted","components":{"accuracy_rate":{"value":0.91,"weight":0.35,"contribution":31.9},"consistency":{"value":0.78,"weight":0.2,"contribution":15.6},"volume_factor":{"value":0.85,"weight":0.15,"contribution":12.8},"recency":{"value":1.0,"weight":0.15,"contribution":15.0},"brand_diversity":{"value":0.6,"weight":0.15,"contribution":9.0}},"domain_scores":{"brand":{"score":91,"checks":1098,"accuracy":0.91},"pricing":{"score":88,"checks":87,"accuracy":0.88},"policy":{"score":80,"checks":62,"accuracy":0.8}},"verification_summary":{"total_checks":1247,"last_30_days":312,"unique_brands":18,"active_since":"2025-11-12T08:00:00Z","last_check":"2026-05-24T12:34:56.789Z","accurate_claims":284,"inaccurate_claims":14,"partially_accurate_claims":8,"unverifiable_claims":6},"last_calculated":"2026-05-24T12:34:56.789Z","latency_ms":31,"method":{"method_version":"agent-trust-score/v1","formula":"trust_score = clamp(int(sum(weight_i * signal_i * 100) + preflight_bonus), 0, 100) / 100","weights":{"accuracy_rate":0.35,"consistency":0.2,"volume_factor":0.15,"recency":0.15,"brand_diversity":0.15},"input_signals":["accuracy_rate","consistency","volume_factor","recency","brand_diversity","preflight_bonus"],"re_derivation":"Recompute from `components`: raw = sum over signals of (weight_i * value_i * 100) + preflight_bonus; then trust_score = clamp(int(raw), 0, 100) / 100. Each components[k].contribution is that term rounded to 1 decimal for display; the exact score uses the unrounded terms. A recomputable signal the account re-runs and bears reliance for (B3/SAS-142); Edge does not determine the agent's standing."},"non_claims":["recomputable-signal-not-edge-determination","requesting-account-bears-reliance-sas142","not-a-public-grade","no-authority-over-agent-standing","account-scoped-disclosed-method","not-a-compliance-signoff-or-accreditation"],"edge_role":"evidence-layer"},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Agent not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]}]}},"/v1/agents/trust-scores/batch":{"post":{"tags":["Agent"],"summary":"Fetch trust scores for up to 50 agents","description":"Batch trust score lookup. Auth required (via middleware).","operationId":"batch_trust_scores_v1_agents_trust_scores_batch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchTrustRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BatchTrustScoreResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"results":[{"agent_id":"ag_a1b2c3d4e5f6","agent_name":"example-agent","trust_score":0.84,"trust_tier":"trusted","total_checks":1247,"last_calculated":"2026-05-24T12:34:56.789Z","non_claims":["recomputable-signal-not-edge-determination","not-a-public-grade"],"edge_role":"evidence-layer"},{"agent_id":"ag_0123456789ab","agent_name":"second-agent","trust_score":0.42,"trust_tier":"developing","total_checks":304,"last_calculated":"2026-05-24T12:34:56.789Z","non_claims":["recomputable-signal-not-edge-determination","not-a-public-grade"],"edge_role":"evidence-layer"}],"count":2,"latency_ms":58},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}]}},"/v1/api-keys":{"post":{"tags":["API Keys"],"summary":"Create an API key via self-serve signup","description":"Create a free API key.\n\n**This step requires a human browser and cannot be completed unattended.** The bot-challenge token the request body carries is issued only to a person who completes the challenge on the hosted form at https://api.bluefoxedge.ai/get-key — a program has no way to mint one. There is no machine-to-machine enrolment path on this endpoint.\n\nA request with no valid challenge token is refused with HTTP 422 and the error code `TURNSTILE_FAILED`. That refusal names the step a caller must take in its `next_action` field, points at the form in `hint_url`, and carries a `request_id` equal to the response's `X-Request-Id` header, so the reference a caller quotes to support matches the server's own log. The challenge-token field is declared optional in the request schema only so this refusal can stay typed and machine-readable; a client that omits it is refused, never enrolled.\n\nOn success the response carries the key value exactly once, with no-store cache headers. Where email verification is enabled, the key is created in `pending` status and must be activated from the emailed link before it will authenticate: until then `GET /v1/api-keys` reports it with `is_active: false`.\n\n**Creating a key forms a contract.** The request must carry `accept_terms: true`, accepting the Terms of Service (https://www.bluefoxedge.ai/terms) and acknowledging the Privacy Policy (https://www.bluefoxedge.ai/privacy). A request that omits the field or sends `false` is refused with HTTP 422 and the error code `TERMS_NOT_ACCEPTED`; no key is created. On success the accepted version and the acceptance timestamp are stored with the key and returned in the response's `terms_accepted` object. The version in force is April 1, 2026.","operationId":"create_api_key_v1_api_keys_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler.","title":"Idempotency-Key"},"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApiKeyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Browser request from a non-allowed origin (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"get":{"tags":["API Keys"],"summary":"List the API keys for your email","description":"List API keys — requires auth, only returns keys for the caller's email.","operationId":"list_api_keys_v1_api_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyListEnvelope"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/api-keys/verify":{"post":{"tags":["API Keys"],"summary":"Activate an API key via its email link","description":"Activate an API key using the single-use slug from its verification email.\n\nThe slug arrives in the request body, sent by the activation page after it\nreads the slug from the URL fragment. Only a hash of the slug is stored, so\nthe plaintext slug never rests in the database, and concurrent activations\nof one slug are serialized by a row-level lock so a key activates exactly\nonce. Re-clicking an already-used link succeeds without consuming budget.","operationId":"verify_api_key_v1_api_keys_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyApiKeyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Browser request from a non-allowed origin (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/api-keys/{key_id}":{"delete":{"tags":["API Keys"],"summary":"Revoke one of your own API keys","description":"Revoke an API key — requires auth, only allows revoking own keys.","operationId":"revoke_api_key_v1_api_keys__key_id__delete","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"The key exists but belongs to another account (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/agents/{agent_id}/audit-log":{"get":{"tags":["Audit"],"summary":"List an agent's verification audit log entries","description":"Paginated audit log for an agent. Auth required (enforced by middleware).","operationId":"get_audit_log_v1_agents__agent_id__audit_log_get","parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Per Page"}},{"name":"endpoint","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Endpoint"}},{"name":"brand","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand"}},{"name":"verdict","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verdict"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From"}},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditLogEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/agents/{agent_id}/audit-log/summary":{"get":{"tags":["Audit"],"summary":"Summarize an agent's verification checks by endpoint, verdict, and brand","description":"Audit summary with breakdowns by endpoint, verdict, and brand. Auth required (enforced by middleware).","operationId":"get_audit_summary_v1_agents__agent_id__audit_log_summary_get","parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}},{"name":"period","in":"query","required":false,"schema":{"type":"string","default":"last_30_days","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditSummaryEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/brand/{slug}/availability":{"get":{"tags":["Availability"],"summary":"Get a brand's recorded geographic availability","description":"Fetches the recorded geographic availability for a brand. Returns\nshipping and per-region availability flags, covered countries, any\nrestrictions note, and the last-verified timestamp. Public; no key\nrequired.","operationId":"get_brand_availability_v1_brand__slug__availability_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandAvailabilityEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/brand/{slug}/promotions":{"get":{"tags":["Availability"],"summary":"List a brand's recorded active promotions","description":"Lists the active promotions recorded for a brand. Returns each\npromotion's name, type, discount, code, conditions, and validity window,\nwith staleness flags and a freshness warning when the data is more than 14\ndays old. Public; no key required.","operationId":"get_brand_promotions_v1_brand__slug__promotions_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandPromotionsEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/billing/checkout":{"post":{"tags":["Billing"],"summary":"Create a Stripe checkout session for an upgrade","description":"Create Stripe checkout session for plan upgrade.","operationId":"billing_checkout_v1_billing_checkout_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler.","title":"Idempotency-Key"},"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Request Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/billing/webhook":{"post":{"tags":["Billing"],"summary":"Process Stripe webhook events idempotently","description":"Handle Stripe webhook events with hybrid idempotency.\n\nDedup flow (Redis-primary, DB-fallback):\n1. Verify signature + extract event\n2. Check Redis for prior processing (fast path)\n3. If Redis unavailable → 503 (fail-closed, CRITICAL tier)\n4. If Redis hit → duplicate_skipped\n5. If Redis miss → check DB table (durable fallback for Redis-flush scenario)\n6. If DB hit → duplicate_skipped\n7. If DB read error → 503 (fail-closed)\n8. If both miss → process, record in DB (atomic with business logic), then Redis","operationId":"billing_webhook_v1_billing_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Stripe webhook event payload, verified against the `stripe-signature` request header. Shape is defined by Stripe.","additionalProperties":true}}}}}},"/v1/billing/status":{"get":{"tags":["Billing"],"summary":"Fetch the calling key's billing plan and usage","description":"Return current billing plan for the authenticated key.","operationId":"billing_status_v1_billing_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/billing/usage":{"get":{"tags":["Billing"],"summary":"Fetch your usage against the daily cap","description":"Return the authenticated caller's own usage against their daily cap.\n\nCustomer-Bearer scope — reports the calling key's plan, daily limit, calls\nconsumed today, remaining headroom, and the next reset boundary. ``calls_today``\nis billing-true: the durable DB counter plus the live, not-yet-flushed Redis\ndelta (usage is batched in Redis and flushed to the DB asynchronously).\n\nServed at both ``/billing/usage`` and ``/v1/billing/usage`` (the billing\nrouter is mounted at root and under ``/v1``).","operationId":"billing_usage_v1_billing_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BillingUsageResponse_"}}}},"401":{"description":"API key required","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/billing/plans":{"get":{"tags":["Billing"],"summary":"List available billing plans","description":"List available billing plans, with both meters named per plan.\n\nBallot ⑧(d) — this docstring is published as the OpenAPI description, so the\nsentence reaches a machine reader here rather than only on a web page:\n\nTwo meters, one bill. ``daily_limit`` is the API-call allowance the monthly\nsubscription buys. ``signed_mints_per_utc_day`` is the separate per-mint\nentitlement, and it is ``null`` on every plan the mint cap does not meter —\nthose plans' mints are included in the subscription. Paid plans include\nsigned mints — your plan's daily call limit is the only meter. Only the\nfree tier is mint-capped; a free key's next mint the same UTC day is\npayable per request via x402 (HTTP 402) on the doors listed at\n/.well-known/x402, or by upgrading.\n\n``monthly_price`` is an amount in ``currency`` (USD), billed monthly.","operationId":"list_plans_v1_billing_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/brands":{"get":{"tags":["Brand"],"summary":"List brands available in the reference catalog","description":"Lists brands in the reference catalog, ordered by name, with keyset\npagination (server default limit 50) and optional substring search via q.\nReturns each brand's slug, name, category, and website; pass all=true to\nreceive the full list without paging.","operationId":"list_brands_v1_brands_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":200,"minimum":1},{"type":"null"}],"description":"Max brands per page (1-200; server default 50). Pass ?all=true to bypass paging and receive the full list (admin/batch use).","title":"Limit"},"description":"Max brands per page (1-200; server default 50). Pass ?all=true to bypass paging and receive the full list (admin/batch use)."},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque keyset cursor from a prior page's meta.pagination.cursor. Bound to the q value at issue time — do not change q between pages.","title":"Cursor"},"description":"Opaque keyset cursor from a prior page's meta.pagination.cursor. Bound to the q value at issue time — do not change q between pages."},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Substring search on name and slug, with BRAND_ALIASES resolution (e.g. q=facebook matches the meta brand).","title":"Q"},"description":"Substring search on name and slug, with BRAND_ALIASES resolution (e.g. q=facebook matches the meta brand)."},{"name":"all","in":"query","required":false,"schema":{"type":"boolean","description":"Set all=true to bypass paging and return the full ordered list (admin/batch use). Incompatible with cursor and limit.","default":false,"title":"All"},"description":"Set all=true to bypass paging and return the full ordered list (admin/batch use). Incompatible with cursor and limit."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_list_BrandSummary__"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":[{"slug":"example-brand","name":"Example Brand","category":"consumer-electronics","website":"https://example.com"},{"slug":"second-brand","name":"Second Brand","category":"consumer-electronics","website":"https://example.com"}],"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true}},"/v1/brand/check":{"post":{"tags":["Brand"],"summary":"Verify brand claims against the reference record","description":"Verifies one or more claims about a brand against its reference record.\nReturns a recorded verdict, confidence tier, and evidence for each claim,\nand mints a reliance receipt per claim (surfaced as receipt_id). Requires a Bearer API key or per-request x402 payment; keyless-paid calls return no durable receipt. Priced: requests without a key or payment receive HTTP 402\nquoting exact per-request terms (x402).","operationId":"brand_check_v1_brand_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BrandCheckResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"brand":"example-brand","results":[{"claim":"Example Brand sells the X100 phone.","verdict":"verified","confidence":0.94,"confidence_tier":"high","evidence":"Product catalog lists 'X100' in current lineup.","method":"rule_match","receipt_id":"01JZAXPYQ4W9GT2C6M8R5H7K3D"},{"claim":"Example Brand lets customers return an unworn X100 within 60 days.","verdict":"unverifiable","confidence":0.0,"confidence_tier":"low","evidence":"Rule engine could not determine verdict","method":"rule_match","receipt_id":"01JZAXPYQ4W9GT2C6M8R5H7K3E","next_action":"retry_with_depth_auto","hint":"This claim missed the deterministic rule set. Retry this route with depth:'auto' to engage LLM verification of the same claim, or POST /verify/claim to verify against a URL you supply. Paraphrases often miss: the rule tier fuzzy-matches your claim text against stored brand data.","hint_url":"https://api.bluefoxedge.ai/getting-started"}],"brand_definition_version":12,"verified_at":"2026-05-24T12:34:56.789Z","latency_ms":142,"depth_used":"fast"},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Brand not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Verification unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":false,"security":[{"ApiKeyAuth":[]},{}]}},"/v1/brand/{slug}/definition":{"get":{"tags":["Brand"],"summary":"Get a brand's compiled reference record","description":"Fetches the compiled brand definition that verification checks read as\nreference data. Returns the brand's description, positioning, policies,\npricing, and messaging fields with version and compile timestamp. Public;\nno key required.","operationId":"get_brand_definition_v1_brand__slug__definition_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BrandDefinitionResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"slug":"example-brand","name":"Example Brand","category":"consumer-electronics","website":"https://example.com","description":"Premium consumer-electronics manufacturer.","positioning":{"tone":"premium","audience":"prosumer"},"policies":{"return_window_days":30},"pricing":{"flagship_msrp_usd":999},"messaging":{"taglines":["Built to last."]},"compiled_at":"2026-05-24T12:34:56.789Z","source":"compiled","version":12,"latency_ms":47},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Brand not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true}},"/v1/api/clusters":{"get":{"tags":["Clusters"],"summary":"List brand clusters with aggregate scores","description":"Lists brand clusters computed from the similarity index, sortable by\nsize, purity, or trust. Returns each cluster's size, dominant vertical,\npurity, average trust score, average sentiment, and top three brands.\nPublic; no key required.","operationId":"list_clusters_v1_api_clusters_get","parameters":[{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","pattern":"^(size|purity|trust)$","default":"size","title":"Sort By"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClusterListEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/api/clusters/{cluster_id}":{"get":{"tags":["Clusters"],"summary":"Get one cluster's brands and aggregate stats","description":"Fetches the detail record for one brand cluster. Returns the cluster's\nsize, verticals, purity, average trust score, sentiment, and\nrecommendation rate, plus every member brand with its recorded scores.\nPublic; no key required.","operationId":"get_cluster_v1_api_clusters__cluster_id__get","parameters":[{"name":"cluster_id","in":"path","required":true,"schema":{"type":"integer","title":"Cluster Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClusterDetailEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/api/brands/{brand_id}/peer-group":{"get":{"tags":["Clusters"],"summary":"Compare a brand against its cluster peers","description":"Places a brand within its cluster peer group. Returns the brand's\nrecorded scores, its rank and deltas against cluster averages, outlier\nflags for dimensions beyond 1.5 standard deviations, and the list of peer\nbrands. Public; no key required.","operationId":"get_peer_group_v1_api_brands__brand_id__peer_group_get","parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","title":"Brand Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PeerGroupEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/competitive/check":{"post":{"tags":["Competitive"],"summary":"Verify competitive claims against reference data","description":"Verifies competitive claims about brands against reference data.\nReturns a recorded verdict, confidence tier, and evidence for each claim,\nwith optional sentiment analysis. Requires a Bearer API key or per-request x402 payment. Priced:\nrequests without a key or payment receive HTTP 402 quoting exact\nper-request terms (x402).","operationId":"competitive_check_v1_competitive_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompetitiveCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_CompetitiveCheckResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"results":[{"claim":"Example Brand's X100 outperforms competitors in battery life.","verdict":"verified","confidence":0.91,"confidence_tier":"high","evidence":"Third-party benchmark publication ranks X100 first in battery-life category.","method":"rule_match"}],"verified_at":"2026-05-24T12:34:56.789Z","latency_ms":274,"depth_used":"auto"},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Verification unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}]}},"/v1/compliance/check":{"post":{"tags":["Compliance"],"summary":"Verify claims about a brand's regulatory status","description":"Verifies claims about a brand's regulatory status against reference\ndata. Returns a recorded verdict, confidence tier, and evidence for each\nclaim, and mints a reliance receipt per claim. Requires a Bearer API key or per-request x402 payment; keyless-paid calls return no durable receipt.\nPriced: requests without a key or payment receive HTTP 402 quoting exact\nper-request terms (x402).","operationId":"compliance_check_v1_compliance_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComplianceCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_ComplianceCheckResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"brand":"example-brand","results":[{"claim":"Example Brand devices comply with FCC Part 15.","verdict":"verified","confidence":0.91,"confidence_tier":"high","evidence":"FCC ID lookup returns active certification on flagship SKUs.","method":"rule_match"}],"compliance_records":14,"verified_at":"2026-05-24T12:34:56.789Z","latency_ms":201,"depth_used":"auto"},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Brand not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Verification unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}]}},"/v1/consent/check":{"post":{"tags":["Consent"],"summary":"Check a consent document against a registered schema","description":"Validates the caller's consent-metadata document against a schema version\nregistered for their account (JSON Schema Draft 2020-12) and returns the\nrecorded verdict with any validation errors. Mints a signed receipt binding\nthe document and the schema by digest; the document itself is never stored.\nRequires a Bearer API key.","operationId":"consent_check_v1_consent_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsentCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_ConsentCheckResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"verdict":"conformant","errors":[],"error_count":0,"schema_slug":"support-purposes","schema_version":3,"schema_digest":"sha256:0000000000000000000000000000000000000000000000000000000000000000","payload_digest":"sha256:1111111111111111111111111111111111111111111111111111111111111111","method":"consent_schema_conformance","validator_draft":"2020-12","receipt_id":"01JEXAMPLE0000000000000000","disclosure":"Deterministic schema-conformance check; a signed reliance record references schema and document by digest — never a legal opinion on consent validity.","checked_at":"2026-05-24T12:34:56.789Z","latency_ms":4},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Consent schema not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Registry integrity check failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]}]}},"/v1/consent/schemas":{"post":{"tags":["Consent"],"summary":"Register a new consent schema version","description":"Registers a new immutable version of a consent schema under the caller's\naccount and returns the stored row with its digest. Versions are append-only;\nexisting versions are never modified. Requires a Bearer API key.","operationId":"consent_schema_register_v1_consent_schemas_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsentSchemaCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_ConsentSchemaCreateResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Concurrent registration for this slug","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Schema not registrable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]},"get":{"tags":["Consent"],"summary":"List your registered consent schema versions","description":"Lists the consent schema versions registered under the caller's account,\noptionally filtered by slug. Requires a Bearer API key.","operationId":"consent_schema_list_v1_consent_schemas_get","parameters":[{"name":"slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_ConsentSchemaListResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/brand/{slug}/contact":{"get":{"tags":["Contact"],"summary":"Fetch recorded contact information for a brand","description":"Public endpoint — no auth required. Returns brand contact information.","operationId":"get_brand_contact_v1_brand__slug__contact_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandContactEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/contracts":{"post":{"tags":["Contracts"],"summary":"Declare a behavior contract for this account","description":"Declares a golden-suite behavior contract for the caller's account; the\nregistry is append-only, so re-declaring a slug mints a new version rather\nthan updating. Returns the stored contract record with its version, case\nand dimension counts, and content digest. Requires a Bearer API key.","operationId":"contract_declare_v1_contracts_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContractDeclareRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BehaviorContractCreateResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Concurrent declaration for this slug","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Contract not declarable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]},"get":{"tags":["Contracts"],"summary":"List this account's declared behavior contracts","description":"Lists the caller's declared behavior contracts with keyset pagination\n(default limit 100) and an optional slug filter, re-verifying each row's\ncontent digest before serving. Returns each contract record's slug,\nversion, case and dimension counts, and content digest. Requires a Bearer\nAPI key.","operationId":"contract_list_v1_contracts_get","parameters":[{"name":"slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Page size (keyset pagination)","default":100,"title":"Limit"},"description":"Page size (keyset pagination)"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor from a prior page's meta.pagination.cursor. Bound to the slug-filter context at issue time — keep the filter constant across pages (the /brands cursor contract).","title":"Cursor"},"description":"Opaque cursor from a prior page's meta.pagination.cursor. Bound to the slug-filter context at issue time — keep the filter constant across pages (the /brands cursor contract)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BehaviorContractListResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/contracts/{slug}":{"get":{"tags":["Contracts"],"summary":"Get one declared behavior contract by slug","description":"Fetches one of the caller's declared behavior contracts by slug (the\nlatest active version unless version is given), re-verifying its content\ndigest before serving. Returns the contract record with its cases and\ncontent digest. Requires a Bearer API key.","operationId":"contract_detail_v1_contracts__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"version","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BehaviorContractDetailResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Contract not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Registry integrity check failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/customs/check":{"post":{"tags":["Customs"],"summary":"Check N-model agreement on HS/HTS codes for a shipment","description":"Runs the declared model set over one shipment description and records whether\ntheir HS/HTS code assignments agree under the declared consensus policy; the\nverdict states agreement (unanimous, majority, or unresolved), never correctness.\nReturns the recorded verdict with the full declared policy scope and mints a\nsigned reliance receipt; the submitted description is never stored. Requires a Bearer API key or per-request x402 payment; keyless-paid calls return no durable receipt.\nPriced: requests without a key or payment receive HTTP 402 quoting exact per-request terms (x402).","operationId":"customs_check_v1_customs_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomsCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_CustomsCheckResponse_"}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Consensus fan-out unavailable — fail-closed, retry later","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}]}},"/v1/egress/gate":{"post":{"tags":["Egress Gate"],"summary":"Gate an egress payload on the pinned PHI detector","description":"Checks the submitted payload with the pinned, versioned PHI detector and answers\nproceed only when the detector flagged nothing in its declared classes; otherwise it\nanswers block with per-class reasons, and a detector that cannot run halts the gate\nwith HTTP 503. Returns the recorded decision and verdict with the detector's\ndisclosed scope and mints a signed reliance receipt binding the payload by digest;\nthe submitted content is never stored. Requires a Bearer API key or per-request x402 payment; keyless-paid calls return no durable receipt.\nPriced: requests without a key or payment receive HTTP 402 quoting exact per-request terms (x402).","operationId":"egress_gate_v1_egress_gate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EgressGateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_EgressGateResponse_"}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Request body over the declared 1 MiB cap — only enforced when Content-Length is present; chunked requests fall back to the 10,000-char content cap (422)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error (content never echoed)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Detector unavailable — fail-closed, the gate halts; retry later","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}]}},"/v1/errors":{"get":{"tags":["Errors"],"summary":"List every registered error problem type","description":"List every registered problem type (the error ``type`` URI registry).","operationId":"list_problem_types_v1_errors_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemTypeListEnvelope"}}}}}}},"/v1/errors/{slug}":{"get":{"tags":["Errors"],"summary":"Fetch one registered problem type by slug","description":"One registered problem type by its URL slug.\n\nAn unknown slug is an honest 404, never a stub — a ``type`` URI Edge has\nactually emitted always resolves here.","operationId":"get_problem_type_v1_errors__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProblemTypeEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/fallbacks":{"post":{"tags":["Fallbacks"],"summary":"Declare a named fallback for this account","description":"Declares a named fallback bound to the caller's pinned behavior\nreference and declared contract; the registry is append-only, so\nre-declaring a slug mints a new version rather than updating. Returns the\nstored declaration with its version and content digest. Requires a Bearer\nAPI key.","operationId":"fallback_declare_v1_fallbacks_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FallbackDeclareRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BehaviorFallbackCreateResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Concurrent declaration for this slug","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Declaration not admissible","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]},"get":{"tags":["Fallbacks"],"summary":"List this account's fallback declarations","description":"Lists the caller's fallback declarations with keyset pagination\n(default limit 100) and an optional slug filter, re-verifying each row's\ncontent digest before serving. Returns each declaration's slug, version,\nkind, bindings, cadence, triggers, and content digest. Requires a Bearer\nAPI key.","operationId":"fallback_list_v1_fallbacks_get","parameters":[{"name":"slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Page size (keyset pagination)","default":100,"title":"Limit"},"description":"Page size (keyset pagination)"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor from a prior page's meta.pagination.cursor. Bound to the slug-filter context at issue time — keep the filter constant across pages (the /brands cursor contract).","title":"Cursor"},"description":"Opaque cursor from a prior page's meta.pagination.cursor. Bound to the slug-filter context at issue time — keep the filter constant across pages (the /brands cursor contract)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BehaviorFallbackListResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Invalid page cursor","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Registry integrity check failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/fallbacks/{slug}":{"get":{"tags":["Fallbacks"],"summary":"Get one fallback declaration by slug","description":"Fetches one of the caller's fallback declarations by slug (the latest\nactive version unless version is given), re-verifying its content digest\nbefore serving. Returns the declaration's bindings, cadence, triggers,\nsubject, and content digest. Requires a Bearer API key.","operationId":"fallback_detail_v1_fallbacks__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"version","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BehaviorFallbackDetailResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Fallback not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Registry integrity check failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/financial/check":{"post":{"tags":["Financial"],"summary":"Verify financial claims against EDGAR-grounded facts","description":"Verify a financial claim against structured, EDGAR-grounded financial facts.\n\nNumeric claims are evaluated by the relation they assert: an equality/approximation claim\n(\"revenue is $416B\", \"about $400B\") is banded ±5%/20% against the canonical figure, while a\nrelational-threshold claim (\"revenue exceeds $50B\", \"at least $400B\", \"under $500B\") is\nevaluated as the bound it states — satisfied or not — never as a distance from a\npoint-estimate.\n\nOwned (persistable) callers: each result stages a signed reliance receipt; its ULID rides\n`results[].receipt_id` (and `meta.receipt` on single-claim requests) and resolves at\nGET /receipts/{receipt_id}. Anonymous and x402-no-key callers: no durable receipt is\nwritten (persist gate); `receipt_id` is null, and this sentence is the why.\n\nThe deterministic comparison record lives in exactly two homes — the response-side figures\nride each result's `financial_data`, and the recompute basis rides the receipt's\n`details.comparison` (an AssertedFact with `asserted_by=\"as-observed-by-Edge\"`), where its\n`value` takes one of two shapes by claim kind:\n- equality/approx: `{fact_type, claimed, canonical, outcome, direction, delta_pct, method}`\n- threshold: `{fact_type, claimed, canonical, operator, satisfied, method}` (`operator` in\n  `gt|gte|lt|lte`; no `delta_pct` — an equality distance is meaningless for a bound)","operationId":"financial_check_v1_financial_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FinancialCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_FinancialCheckResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"brand":"example-brand","ticker":"EXMP","results":[{"claim":"Example Brand reported Q4 2025 revenue of $1.2B.","verdict":"verified","confidence":0.91,"confidence_tier":"high","evidence":"10-K filing dated 2026-02-15 lists $1.2B Q4 revenue.","method":"rule_match","receipt_id":"01JZAXQF8B2D4E6G8H0J2K4M6P"}],"facts_count":23,"verified_at":"2026-05-24T12:34:56.789Z","latency_ms":312,"depth_used":"llm_only"},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z","receipt":{"receipt_id":"01JZAXQF8B2D4E6G8H0J2K4M6P","location":"/receipts/01JZAXQF8B2D4E6G8H0J2K4M6P"}},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Brand not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Verification unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}]}},"/v1/freshness/check":{"post":{"tags":["Freshness"],"summary":"Check submitted text for stale information","description":"Checks the submitted text for stale or outdated information. Returns an\noverall freshness score, counts of fresh, stale, and unknown sources,\nper-source results, and a stored check id. Requires a Bearer API key or per-request x402 payment.\nPriced: requests without a key or payment receive HTTP 402 quoting exact\nper-request terms (x402).","operationId":"freshness_check_v1_freshness_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreshnessCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_FreshnessCheckResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"overall_freshness":0.82,"sources_checked":3,"sources_fresh":2,"sources_stale":1,"sources_unknown":0,"results":[{"url":"https://example.com/2025-report","age_days":95,"freshness_tier":"fresh"},{"url":"https://example.com/2018-archive","age_days":2730,"freshness_tier":"stale"}],"latency_ms":168,"depth_used":"auto","check_id":"fresh_01HX5K3JNZ8A2F4M7P9Q1R3S5T"},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Verification unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}]}},"/v1/graph/entity/{entity_id}":{"get":{"tags":["Graph","Graph"],"summary":"Get recorded observations for a graph entity","description":"Get observations for an entity.","operationId":"get_entity_observations_v1_graph_entity__entity_id__get","parameters":[{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","title":"Entity Id"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Since"}},{"name":"view","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(all|latest)$"},{"type":"null"}],"default":"all","title":"View"}},{"name":"include_superseded","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Superseded"}},{"name":"protocol","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Protocol"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GraphEntityObservationsEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/graph/search":{"get":{"tags":["Graph","Graph"],"summary":"Search graph entities by observation criteria","description":"Search entities by observation criteria and flags.","operationId":"search_entities_v1_graph_search_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"}},{"name":"schema_conformant","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Schema Conformant"}},{"name":"dependencies_clean","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Dependencies Clean"}},{"name":"actively_maintained","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Actively Maintained"}},{"name":"credentials_safe","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Credentials Safe"}},{"name":"scope_contained","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Scope Contained"}},{"name":"registry","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registry"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"protocol","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Protocol"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GraphSearchEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/graph/entities":{"get":{"tags":["Graph","Graph"],"summary":"List tracked entities with latest scan summaries","description":"List all tracked entities with latest scan summary.","operationId":"list_entities_v1_graph_entities_get","parameters":[{"name":"registry","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registry"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"cadence","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cadence"}},{"name":"protocol","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Protocol"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","pattern":"^(name|last_scanned|created)$","default":"last_scanned","title":"Sort"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GraphEntityListEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/notarize/hash":{"post":{"tags":["Notarize","Notarize"],"summary":"Notarize a sha256 digest and mint a signed receipt","description":"Mint one ed25519-signed reliance receipt for the presented digest, in-request.\n\nThe response carries the COMPLETE signed envelope: verify it offline against\n`/.well-known/jwks.json` with zero further contact (`verdict` is the act-word\n`\"notarized\"` — a presentation record, never a content judgment).\n\nPAYMENT BINDING (x402-paid mints only): the signed envelope carries a `payment`\nblock — `payer`, `tx_hash`, `network` (CAIP-2), `amount` (atomic units of\n`asset`), `asset` (token contract), `asserts: \"settlement-at-broadcast\"`. The\nbinding asserts settlement-at-broadcast at mint time, not chain finality —\nfinality composes via the chain itself. The block sits INSIDE the signed bytes:\nthe payment and the proof are one artifact, and editing either breaks the\nsignature. Mints bought with an API key carry no `payment` block (nothing was\npaid at this door), and neither does a mint whose transfer we could not confirm\n— the block's PRESENCE means the transfer was read off the chain, never merely\nreported to us.\n\nHOW TO CHECK THE PAYMENT YOURSELF, precisely: fetch `tx_hash` and look for the\nERC-20 `Transfer` log emitted by the `asset` contract, from `payer`, to the\nquoted payTo, for exactly `amount`. Do NOT conclude anything from the\ntransaction's own status field: the transfer is submitted inside a Multicall3\n`aggregate3` entry with `allowFailure` set, so a transaction in which the\ntransfer reverted still reports success. Also note that `payer` never appears\nas the transaction's sender — a facilitator relayer submits and pays the gas —\nso auditing a wallet's sent-transaction list for this payment returns a false\nnegative every time.\n\nNORMATIVE: the `verify.jwks_url` returned below is a convenience pointer, and a\nverifier MUST NOT follow the `jwks_url` carried inside a receipt it is checking —\nthe field sits outside the signature, so a forged receipt can name the forger's\nown key set. Pin the key set out of band at\nhttps://api.bluefoxedge.ai/.well-known/jwks.json.","operationId":"notarize_hash_v1_notarize_hash_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotarizeHashRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_NotarizeHashResponse_"}}}},"401":{"description":"No API key and no x402 payment","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"409":{"description":"X-Request-Id names a receipt still staged for async mint — retry after the drain or with a fresh id","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Hash/meta shape or caps violation; or meta supplied while the storage tier cannot persist it verbatim","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Signing unavailable — fail-closed, no row persisted, never an unsigned success (R9)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}]}},"/v1/brand/{slug}/hours":{"get":{"tags":["Hours"],"summary":"Get a brand's recorded business hours","description":"Public endpoint — no auth required. Returns brand hours and operating status.","operationId":"get_brand_hours_v1_brand__slug__hours_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandHoursEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/terms":{"get":{"tags":["Legal"],"summary":"Serve the Terms of Service page","description":"Serves the Terms of Service as an HTML page. Pass ?format=json to\nreceive the same content as a JSON envelope.","operationId":"terms_of_service_v1_terms_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/v1/privacy":{"get":{"tags":["Legal"],"summary":"Serve the Privacy Policy page","description":"Serves the Privacy Policy as an HTML page. Pass ?format=json to\nreceive the same content as a JSON envelope.","operationId":"privacy_policy_v1_privacy_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/v1/security-policy":{"get":{"tags":["Legal"],"summary":"Serve the security disclosure policy page","description":"The security disclosure policy named by security.txt's Policy: field.\nPublic by design, no auth required.","operationId":"security_policy_v1_security_policy_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/v1/getting-started":{"get":{"tags":["Legal"],"summary":"Serve the getting started guide","description":"Serves the getting started guide as an HTML page. The x402 payment\nexample values are stamped from the live payment configuration at\nrequest time.","operationId":"getting_started_v1_getting_started_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/v1/verify_receipt.py":{"get":{"tags":["Legal"],"summary":"Serve the offline receipt verifier script","description":"The offline receipt verifier, byte-identical to the /getting-started\nstep-4 snippet and the site's learn pages, served plain so a fetched copy\nruns verbatim. Public by design.","operationId":"serve_verify_receipt_script_v1_verify_receipt_py_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/verify_receipt.py.sha256":{"get":{"tags":["Legal"],"summary":"Serve the SHA-256 checksum of verify_receipt.py","description":"Checksum of the served /verify_receipt.py bytes, computed from the same\nmodule constant the route serves — the pair cannot drift. Public by design.","operationId":"serve_verify_receipt_checksum_v1_verify_receipt_py_sha256_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/methodology":{"get":{"tags":["Methodology","Methodology"],"summary":"List every published methodology document","description":"List every published methodology document (version + slug + absolute URL).","operationId":"list_methodology_v1_methodology_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MethodologyListEnvelope"}}}}}}},"/v1/methodology/{slug}":{"get":{"tags":["Methodology","Methodology"],"summary":"Get one published methodology document by slug","description":"One published methodology document by its URL slug.\n\nAn unknown/absent version is an honest 404 (\"no such methodology\"), never a\nfabricated stub — consistent with the never-a-dead/fabricated-URL contract the\naccuracy cell's ``methodology_url`` relies on.","operationId":"get_methodology_v1_methodology__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MethodologyDocEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/brand/{slug}/monitor":{"get":{"tags":["Monitor"],"summary":"Get a brand's recorded health snapshot","description":"Fetches the brand's recorded health snapshot computed from AI model\ninteractions. Returns the health score and tier, sentiment and\nrecommendation figures with trends, mention count, model agreement and\nclaim accuracy rates, and any alerts; brands without monitor data receive\nan unmonitored placeholder. Public; no key required.","operationId":"get_brand_monitor_v1_brand__slug__monitor_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandMonitorEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/brand/{slug}/monitor/narratives":{"get":{"tags":["Monitor"],"summary":"List recorded narratives for a brand","description":"Lists narratives recorded for the brand, ordered by frequency (default\nlimit 20). Returns each narrative's text, frequency, sentiment, model\ncount, trend, and sample claims. Public; no key required.","operationId":"get_brand_narratives_v1_brand__slug__monitor_narratives_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandNarrativesEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/brand/{slug}/monitor/models":{"get":{"tags":["Monitor"],"summary":"Get per-model metrics recorded for a brand","description":"Fetches the per-model metrics recorded for the brand. Returns each\nmodel's sentiment, recommendation rate, and mention count, plus the\ncross-model mean sentiment and any divergent models. Public; no key\nrequired.","operationId":"get_brand_models_v1_brand__slug__monitor_models_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandModelsEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/brand/{slug}/monitor/recommendations":{"get":{"tags":["Monitor"],"summary":"Get recorded recommendation rates by category","description":"Fetches the recommendation rates recorded for the brand by category.\nReturns each category's rate, 30-day trend, and top-competitor comparison.\nPublic; no key required.","operationId":"get_brand_recommendations_v1_brand__slug__monitor_recommendations_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandRecommendationsEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/brand/{slug}/monitor/competitive":{"get":{"tags":["Monitor"],"summary":"Compare a brand's recorded health against competitors","description":"Compares the brand's recorded health data against the named competitor\nslugs. Returns the brand's health score and tier, each competitor's health\nsnapshot, and up to 20 recorded competitive claims linking the brands.\nPublic; no key required.","operationId":"get_competitive_radar_v1_brand__slug__monitor_competitive_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"competitors","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated competitor slugs","default":"","title":"Competitors"},"description":"Comma-separated competitor slugs"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompetitiveRadarEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/brand/{slug}/monitor/claims":{"post":{"tags":["Monitor"],"summary":"Register claims to track for a brand","description":"Registers one or more claims to track for the brand. Returns the\ncreated tracking records with their ids and expected verdicts. Requires a Bearer API key or per-request x402 payment. Priced: requests without a key or payment receive HTTP 402\nquoting exact per-request terms (x402).","operationId":"track_claims_v1_brand__slug__monitor_claims_post","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler.","title":"Idempotency-Key"},"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"401":{"description":"Authorization credentials malformed or refused (RFC 9457 Problem Details; `WWW-Authenticate` per RFC 6750). A request with no credentials receives 402 while the payment wall is active.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]},{}]},"get":{"tags":["Monitor"],"summary":"List tracked claims for a brand","description":"Lists the claims tracked for the brand, newest first. Returns each\nclaim's text, expected verdict, recorded accuracy counts, common errors,\nand last-checked time. Requires a Bearer API key.","operationId":"get_tracked_claims_v1_brand__slug__monitor_claims_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrackedClaimsEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/brand/{slug}/monitor/insights":{"get":{"tags":["Monitor"],"summary":"Get generated insights from a brand's monitor data","description":"Generates prioritized insights from the brand's recorded monitor data,\ncached for 24 hours. Returns a list of insights with recommendations plus\na summary of the underlying health record. Public; no key required.","operationId":"get_brand_insights_v1_brand__slug__monitor_insights_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorInsightsEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/brand/{slug}/monitor/subscribe":{"post":{"tags":["Monitor"],"summary":"Create a webhook subscription for monitor alerts","description":"Creates a webhook subscription that dispatches brand monitor alerts to\na public HTTPS URL. Returns the subscription id with its recorded\nconditions, frequency, and competitor list. Requires a Bearer API key or per-request x402 payment.\nPriced: requests without a key or payment receive HTTP 402 quoting exact\nper-request terms (x402).","operationId":"subscribe_monitor_v1_brand__slug__monitor_subscribe_post","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler.","title":"Idempotency-Key"},"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"401":{"description":"Authorization credentials malformed or refused (RFC 9457 Problem Details; `WWW-Authenticate` per RFC 6750). A request with no credentials receives 402 while the payment wall is active.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]},{}]}},"/v1/brand/{slug}/monitor/subscribe/{sub_id}":{"delete":{"tags":["Monitor"],"summary":"Delete a brand monitor subscription","description":"Deletes the identified monitor subscription for the brand. Returns a\ndeletion confirmation with the subscription id. Requires a Bearer API key.","operationId":"unsubscribe_monitor_v1_brand__slug__monitor_subscribe__sub_id__delete","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"sub_id","in":"path","required":true,"schema":{"type":"string","title":"Sub Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/brand/{slug}/monitor/subscriptions":{"get":{"tags":["Monitor"],"summary":"List active monitor subscriptions for a brand","description":"Lists the brand's active monitor subscriptions. Returns each\nsubscription's id, webhook URL, conditions, frequency, competitors, and\nlast dispatch time. Requires a Bearer API key.","operationId":"list_subscriptions_v1_brand__slug__monitor_subscriptions_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorSubscriptionsEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/pii/check":{"post":{"tags":["PII"],"summary":"Check submitted content for PII with the pinned detector","description":"Runs the pinned, versioned PII detector over the submitted content and records\nwhether any of its declared detection classes appear (verdict pii_absent or\npii_detected). Returns the recorded verdict with per-class counts and the detector's\ndisclosed scope and mints a signed reliance receipt binding the content by digest;\nthe submitted content is never stored. Requires a Bearer API key or per-request x402 payment; keyless-paid calls return no durable receipt.\nPriced: requests without a key or payment receive HTTP 402 quoting exact per-request terms (x402).","operationId":"pii_check_v1_pii_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PIICheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_PIICheckResponse_"}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Detector unavailable — fail-closed, retry later","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}]}},"/v1/policy/check":{"post":{"tags":["Policy"],"summary":"Verify claims against a brand's stored policies","description":"Verifies claims against the brand's stored policy data. Returns a\nrecorded verdict, confidence tier, and evidence for each claim, and mints\na reliance receipt per claim. Requires a Bearer API key or per-request x402 payment; keyless-paid calls return no durable receipt. Priced: requests\nwithout a key or payment receive HTTP 402 quoting exact per-request terms\n(x402).","operationId":"policy_check_v1_policy_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_PolicyCheckResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"brand":"example-brand","depth":"auto","results":[{"claim":"Brand offers a 30-day return window.","verdict":"verified","confidence":0.91,"confidence_tier":"high","evidence":"Brand's published policy explicitly states a 30-day return window.","method":"rule_match"}],"policies_count":7,"verified_at":"2026-05-24T12:34:56.789Z","latency_ms":188,"depth_used":"rule_only"},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Brand not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Verification unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}]}},"/v1/verify/pre-transaction":{"post":{"tags":["Pre-Transaction"],"summary":"Run multiple verification checks before a commerce transaction","description":"Run comprehensive pre-transaction trust verification.","operationId":"pre_transaction_verify_v1_verify_pre_transaction_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreTransactionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/test/preflight":{"post":{"tags":["Preflight"],"summary":"Run a preflight check on an agent response","description":"Runs preflight validation over a submitted agent response, optionally against a\nquery and brand, at fast or standard depth. Returns the check results with a pass\nor fail verdict and mints a signed reliance receipt recording the verdict and\noverall score. Requires a Bearer API key or per-request x402 payment; keyless-paid calls return no durable receipt.\nPriced: requests without a key or payment receive HTTP 402 quoting exact per-request terms (x402).","operationId":"preflight_check_v1_test_preflight_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreflightRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_PreflightCheckResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"overall_score":0.88,"dimensions":{"factual_accuracy":0.92,"brand_alignment":0.85,"compliance":0.9,"tone":0.87},"flags":[],"recommendation":"send","verified_claims":[{"claim":"X100 has 8GB RAM","verdict":"verified","confidence":0.97}],"latency_ms":423,"depth_used":"standard","pass":true},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}]}},"/v1/test/preflight/batch":{"post":{"tags":["Preflight"],"summary":"Run preflight checks on up to 20 agent responses","description":"Runs the preflight check over each item in a batch of up to 20 submitted\nresponses at a shared depth. Returns per-item results with pass and fail counts\nand mints one signed reliance receipt per item. Requires a Bearer API key or per-request x402 payment; keyless-paid calls return no durable receipt.\nPriced: requests without a key or payment receive HTTP 402 quoting exact per-request terms (x402).","operationId":"preflight_batch_v1_test_preflight_batch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreflightBatchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_PreflightBatchResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"results":[{"overall_score":0.88,"pass":true,"flags":[]},{"overall_score":0.41,"pass":false,"flags":["off_brand_tone"]}],"total":2,"passed":1,"failed":1,"latency_ms":891,"depth_used":"standard"},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}]}},"/v1/price/check":{"post":{"tags":["Price"],"summary":"Verify price claims against recorded product prices","description":"Verifies price claims for a brand against recorded product prices.\nReturns a recorded verdict, confidence tier, evidence, and price data for\neach claim, plus a staleness flag when the price data is more than 7 days\nold. Requires a Bearer API key or per-request x402 payment. Priced: requests without a key or payment\nreceive HTTP 402 quoting exact per-request terms (x402).","operationId":"price_check_v1_price_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"401":{"description":"Authorization credentials malformed or refused (RFC 9457 Problem Details; `WWW-Authenticate` per RFC 6750). A request with no credentials receives 402 while the payment wall is active.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]},{}]}},"/v1/brand/{slug}/profile":{"get":{"tags":["Profile"],"summary":"Get a brand's composite profile","description":"Assembles a composite profile for a brand from its definition,\npolicies, tracked prices, financial facts, and protocol support, cached\nfor 1 hour. Returns display fields, policy and pricing summaries,\nfinancials, agent compatibility flags, and a definition completeness\nscore. Public; no key required.","operationId":"get_brand_profile_v1_brand__slug__profile_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandProfileEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/brands/profiles":{"get":{"tags":["Profile"],"summary":"List brand profile summaries","description":"Lists brand profile summaries, ordered by name, with keyset pagination\n(server default limit 50) and optional substring search via q. Returns\neach brand's slug, name, category, policy and product counts, and\ncompleteness score; pass all=true to receive the full list without\npaging.","operationId":"list_brand_profiles_v1_brands_profiles_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":200,"minimum":1},{"type":"null"}],"description":"Max brand profiles per page (1-200; server default 50). Pass ?all=true to bypass paging and receive the full list (admin/batch use).","title":"Limit"},"description":"Max brand profiles per page (1-200; server default 50). Pass ?all=true to bypass paging and receive the full list (admin/batch use)."},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque keyset cursor from a prior page's meta.pagination.cursor. Bound to the q value at issue time — do not change q between pages.","title":"Cursor"},"description":"Opaque keyset cursor from a prior page's meta.pagination.cursor. Bound to the q value at issue time — do not change q between pages."},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Substring search on name and slug, with BRAND_ALIASES resolution (e.g. q=facebook matches the meta brand).","title":"Q"},"description":"Substring search on name and slug, with BRAND_ALIASES resolution (e.g. q=facebook matches the meta brand)."},{"name":"all","in":"query","required":false,"schema":{"type":"boolean","description":"Set all=true to bypass paging and return the full ordered list (admin/batch use). Incompatible with cursor and limit.","default":false,"title":"All"},"description":"Set all=true to bypass paging and return the full ordered list (admin/batch use). Incompatible with cursor and limit."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandProfileListEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/receipts":{"get":{"tags":["Receipts"],"summary":"List your own receipts, newest first","description":"List the caller's own receipts, newest first. Caller-scoped; bounded page size.\n\n``?request_id=`` resolves a past response to its receipt (F-9 pair). MINTED rows only:\na receipt still staged for materialization matches nothing here until the writer\ndrains it — follow ``meta.receipt.location`` for staged-state visibility.","operationId":"list_receipts_v1_receipts_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"1-indexed page","default":1,"title":"Page"},"description":"1-indexed page"},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Page size (max 200)","default":50,"title":"Per Page"},"description":"Page size (max 200)"},{"name":"request_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":128},{"type":"null"}],"description":"Return only the receipt minted for this request_id (the id every response carries in data/meta and the X-Request-Id header). Unique per receipt, so at most one row matches; covers batch items, which each mint their own request_id.","title":"Request Id"},"description":"Return only the receipt minted for this request_id (the id every response carries in data/meta and the X-Request-Id header). Unique per receipt, so at most one row matches; covers batch items, which each mint their own request_id."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReceiptListEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/receipts/export":{"get":{"tags":["Receipts"],"summary":"Export your receipts as an evidence bundle","description":"Export the caller's own receipts as a self-contained, offline-verifiable evidence\nbundle (chain-ordered, oldest first). Caller-scoped: a cross-account or unknown\n``anchor`` → 404 IDENTICALLY to a nonexistent id (no enumeration oracle). Read-only.","operationId":"export_receipts_v1_receipts_export_get","parameters":[{"name":"anchor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"receipt_id to anchor the segment at (default: the oldest surviving receipt in the caller's chain)","title":"Anchor"},"description":"receipt_id to anchor the segment at (default: the oldest surviving receipt in the caller's chain)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max receipts in this segment (chain-ordered)","default":1000,"title":"Limit"},"description":"Max receipts in this segment (chain-ordered)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReceiptExportEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/receipts/{receipt_id}":{"get":{"tags":["Receipts"],"summary":"Fetch one of your receipts by id","description":"Read one of the caller's own receipts (full envelope). Cross-account id → 404.\n\nA receipt that is staged but not yet drained into the store answers 202 with a\nretry hint instead of 404 (F-9 pair) — the ``meta.receipt.location`` pointer is\nrecognized from the moment it is issued.","operationId":"get_receipt_v1_receipts__receipt_id__get","parameters":[{"name":"receipt_id","in":"path","required":true,"schema":{"type":"string","title":"Receipt Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReceiptReadEnvelope"}}}},"202":{"description":"Receipt staged, not yet materialized — retry after retry_after_seconds","headers":{"Retry-After":{"description":"Suggested poll delay in integer seconds (the drain cadence)","schema":{"type":"integer"}},"Cache-Control":{"description":"Always 'no-store' — the staged representation is transient","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReceiptStagedEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/receipts/{receipt_id}/verify":{"post":{"tags":["Receipts"],"summary":"Check the byte integrity of a receipt","description":"Pure byte-integrity check of one of the caller's own receipts. Cross-account id → 404\n(denied identically to a read — no enumeration oracle). No network, no verdict re-run.","operationId":"verify_receipt_v1_receipts__receipt_id__verify_post","parameters":[{"name":"receipt_id","in":"path","required":true,"schema":{"type":"string","title":"Receipt Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReceiptVerifyEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/receipts/{receipt_id}/recompute":{"post":{"tags":["Receipts"],"summary":"Re-run a receipt's recorded verdict process","description":"Re-run the receipt's recorded verdict process over its RETAINED inputs\nunder its PINNED model/prompt, and report\n``match | drift | infeasible`` (verdict-compared, not digest-compared).\n\nCaller-scoped: a cross-account or unknown id → 404 IDENTICALLY (no enumeration oracle).\nNever 500s: a genuine failure degrades to a reported ``infeasible`` (reason ``recompute_error``),\nnever a server error. ``drift`` and ``infeasible`` are reported honestly and are never\nmassaged toward ``match``.","operationId":"post_recompute_v1_receipts__receipt_id__recompute_post","parameters":[{"name":"receipt_id","in":"path","required":true,"schema":{"type":"string","title":"Receipt Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecomputeEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/receipts/{receipt_id}/hold":{"post":{"tags":["Receipts"],"summary":"Place a legal hold on a receipt","description":"Place a legal hold on one of the caller's own receipts. Idempotent; cross-account\nor unknown id → 404 IDENTICALLY (no enumeration oracle). While held, the receipt\nsurvives retention purging and pins the chain suffix behind it.","operationId":"set_legal_hold_v1_receipts__receipt_id__hold_post","parameters":[{"name":"receipt_id","in":"path","required":true,"schema":{"type":"string","title":"Receipt Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReceiptHoldEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]},"delete":{"tags":["Receipts"],"summary":"Release a legal hold on a receipt","description":"Release a legal hold on one of the caller's own receipts. Idempotent; cross-account\nor unknown id → 404 IDENTICALLY. The receipt re-enters the normal retention policy.","operationId":"release_legal_hold_v1_receipts__receipt_id__hold_delete","parameters":[{"name":"receipt_id","in":"path","required":true,"schema":{"type":"string","title":"Receipt Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReceiptHoldEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/references":{"post":{"tags":["References"],"summary":"Pin a behavior reference snapshot for this account","description":"Pins an immutable behavior reference snapshot for the caller's account;\nthe registry is append-only, so re-pinning a slug mints a new version\nrather than updating. Returns the stored reference record with its\nversion, case and dimension counts, and content digest. Requires a Bearer\nAPI key.","operationId":"reference_pin_v1_references_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferencePinRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BehaviorReferenceCreateResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Concurrent pin for this slug","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Reference not pinnable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]},"get":{"tags":["References"],"summary":"List this account's pinned behavior references","description":"Lists the caller's pinned behavior references with keyset pagination\n(default limit 100) and an optional slug filter, re-verifying each row's\ncontent digest before serving. Returns each reference record's slug,\nversion, case and dimension counts, and content digest. Requires a Bearer\nAPI key.","operationId":"reference_list_v1_references_get","parameters":[{"name":"slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Page size (keyset pagination)","default":100,"title":"Limit"},"description":"Page size (keyset pagination)"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor from a prior page's meta.pagination.cursor. Bound to the slug-filter context at issue time — keep the filter constant across pages (the /brands cursor contract).","title":"Cursor"},"description":"Opaque cursor from a prior page's meta.pagination.cursor. Bound to the slug-filter context at issue time — keep the filter constant across pages (the /brands cursor contract)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BehaviorReferenceListResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/references/{slug}":{"get":{"tags":["References"],"summary":"Get one pinned behavior reference by slug","description":"Fetches one of the caller's pinned behavior references by slug (the\nlatest active version unless version is given), re-verifying its content\ndigest before serving. Returns the reference record with its subject,\ncases, and content digest. Requires a Bearer API key.","operationId":"reference_detail_v1_references__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"version","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Version"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BehaviorReferenceDetailResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Reference not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Registry integrity check failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/verify/run":{"post":{"tags":["Run Conformance"],"summary":"Verify harness run evidence against its card contract","description":"Recomputes every per-check outcome from the submitted exit codes and artifact\ndigests and rolls them up into a run-level conformance verdict against the card\ncontract; the verdict states conformance to the contract, never the quality or\ncorrectness of the work. Returns the recorded verdict envelope and mints a signed\nreliance receipt. Requires a Bearer API key.","operationId":"verify_run_v1_verify_run_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunConformanceRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_HonestyEnvelope_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"x-honesty":{"mode":"verdict-primary","expression":"attestable","dimensions":["run.executable_check","run.artifact_conformance","run.pins_recorded","run.telemetry_integrity"],"envelope_version":"1.0.0","declared_set_hash":"4fdc38d86929435dbe3a144d4fde089acb775440949f14d041701a378953fbd5"},"security":[{"ApiKeyAuth":[]}]}},"/v1/safety/check":{"post":{"tags":["Safety"],"summary":"Check content against GARM brand safety categories","description":"Classifies the submitted content against the GARM brand safety categories,\noptionally scoped to a brand, at the requested depth. Returns the classification\nresults with an overall risk reading and mints a signed reliance receipt recording\nthe safe or unsafe verdict. Requires a Bearer API key or per-request x402 payment; keyless-paid calls return no durable receipt.\nPriced: requests without a key or payment receive HTTP 402 quoting exact per-request terms (x402).","operationId":"safety_check_v1_safety_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SafetyCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_SafetyCheckResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"overall_safe":true,"overall_risk":"low","garm_results":{"adult_sexual":{"safe":true,"score":0.02},"hate_speech":{"safe":true,"score":0.01},"violence":{"safe":true,"score":0.03}},"floor_violations":[],"context_fit":{"brand_aligned":true,"tone_match":"neutral"},"recommendation":"publish","latency_ms":87},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}]}},"/v1/safety/check/batch":{"post":{"tags":["Safety"],"summary":"Run GARM safety checks on up to 20 items","description":"Classifies each item in a batch of up to 20 against the GARM brand safety\ncategories. Returns per-item results with safe and unsafe counts and mints one\nsigned reliance receipt per item. Requires a Bearer API key or per-request x402 payment; keyless-paid calls return no durable receipt.\nPriced: requests without a key or payment receive HTTP 402 quoting exact per-request terms (x402).","operationId":"safety_check_batch_v1_safety_check_batch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchSafetyCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_SafetyCheckBatchResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"results":[{"content_preview":"Example marketing copy item 1...","brand":"example-brand","overall_safe":true,"overall_risk":"low","garm_results":{}},{"content_preview":"Example marketing copy item 2...","brand":"example-brand","overall_safe":false,"overall_risk":"medium","garm_results":{}}],"summary":{"total":2,"safe":1,"unsafe":1,"floor_violations":0},"latency_ms":162},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}]}},"/v1/scanner/submit":{"post":{"tags":["Scanner","Scanner"],"summary":"Submit an MCP server for scanning","description":"Submit an MCP server for on-demand scanning.","operationId":"submit_scan_v1_scanner_submit_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler.","title":"Idempotency-Key"},"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"MCP server submission for on-demand scanning.","properties":{"url":{"type":"string","description":"Source URL of the MCP server (required)"},"registry":{"type":"string","description":"Source registry (inferred from `url` when omitted)"},"transport":{"type":"string","description":"Declared transport"},"name":{"type":"string","description":"Display name"},"protocol":{"type":"string","description":"Protocol family (default `mcp`)"},"cadence":{"type":"string","description":"Re-scan cadence (default `weekly`)"},"callback_url":{"type":"string","description":"Webhook to notify when the scan completes"}},"required":["url"]}}}}}},"/v1/scanner/status/{scan_id}":{"get":{"tags":["Scanner","Scanner"],"summary":"Get a scan's status and progress","description":"Get scan status and progress.","operationId":"get_scan_status_v1_scanner_status__scan_id__get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScannerScanStatusEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/sentiment/check":{"post":{"tags":["Sentiment"],"summary":"Analyze sentiment for a batch of texts","description":"Analyzes sentiment for a batch of up to 50 texts. Returns a sentiment\nlabel and score for each text, plus details of the model used. Requires a Bearer API key or per-request x402 payment.\nPriced: requests without a key or payment receive HTTP 402 quoting exact per-request terms (x402).","operationId":"sentiment_check_v1_sentiment_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SentimentRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_SentimentCheckResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"results":[{"text":"The X100 is fantastic.","sentiment":"positive","score":0.96},{"text":"Battery life is mediocre.","sentiment":"negative","score":0.78}],"latency_ms":124,"model_name":"twitter-roberta-base-sentiment-latest","model_loaded":true},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}]}},"/v1/api/brands/{brand_id}/similar":{"get":{"tags":["Similarity"],"summary":"List brands similar to a given brand","description":"Lists the brands most similar to a given brand from precomputed\nsimilarity matrices, filterable by dimension and minimum score (default\nlimit 10). Returns each similar brand's composite and per-dimension\nscores, shared-cluster flag, and similarity drivers, plus a cluster\nsummary. Public; no key required.","operationId":"get_similar_brands_v1_api_brands__brand_id__similar_get","parameters":[{"name":"brand_id","in":"path","required":true,"schema":{"type":"string","title":"Brand Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":10,"title":"Limit"}},{"name":"dimensions","in":"query","required":false,"schema":{"type":"string","pattern":"^(all|score|semantic|behavior)$","default":"all","title":"Dimensions"}},{"name":"min_score","in":"query","required":false,"schema":{"type":"number","maximum":1.0,"minimum":0.0,"default":0.0,"title":"Min Score"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimilarBrandsEnvelope"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/spec/check":{"post":{"tags":["Spec"],"summary":"Verify a product specification claim for a brand","description":"Verifies a single product specification claim for a brand against\nreference data. Returns the recorded verdict with confidence tier,\nevidence, method, and any matched specification data. Requires a Bearer API key or per-request x402 payment. Priced: requests without a key or payment receive HTTP 402\nquoting exact per-request terms (x402).","operationId":"spec_check_v1_spec_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpecCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_SpecCheckResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"brand":"example-brand","claim":"X100 has 8GB of RAM.","verdict":"verified","confidence":0.97,"confidence_tier":"high","evidence":"Manufacturer spec sheet lists 8GB LPDDR5 on X100.","method":"rule_match","spec_data":{"ram_gb":8,"ram_type":"LPDDR5"},"verified_at":"2026-05-24T12:34:56.789Z","latency_ms":96,"depth_used":"rule_only"},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Brand not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Verification unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]},{}]}},"/v1/subprocessors/check":{"post":{"tags":["Subprocessors"],"summary":"Check observed subprocessors against a disclosed set","description":"Compares the subprocessor identifiers Edge observed for the calling API key\nover the stated window, plus any caller-asserted identifiers, against the\ncaller's pinned disclosed set. Mints a signed receipt recording the verdict\nand returns the recorded verdict with the comparison details. Requires a\nBearer API key.","operationId":"subprocessors_check_v1_subprocessors_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubprocessorCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_SubprocessorCheckResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Subprocessor disclosure not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Registry or observation store unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]}]}},"/v1/subprocessors/disclosures":{"post":{"tags":["Subprocessors"],"summary":"Register a new subprocessor disclosure version","description":"Registers a new immutable version of a subprocessor disclosure under the\ncaller's account and returns the stored row with its identifier digest.\nVersions are append-only; existing versions are never modified. Requires a\nBearer API key.","operationId":"subprocessor_disclosure_register_v1_subprocessors_disclosures_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubprocessorDisclosureCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_SubprocessorDisclosureCreateResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"Concurrent registration for this slug","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Disclosure not registrable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]},"get":{"tags":["Subprocessors"],"summary":"List your registered subprocessor disclosures","description":"Lists the subprocessor disclosure versions registered under the caller's\naccount, optionally filtered by slug. Requires a Bearer API key.","operationId":"subprocessor_disclosure_list_v1_subprocessors_disclosures_get","parameters":[{"name":"slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_SubprocessorDisclosureListResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/verify/package":{"post":{"tags":["Verification"],"summary":"Verify a software package for registry, vulnerability, and typosquat findings","description":"Verify a software package — registry + vulnerability + typosquat.","operationId":"verify_package_endpoint_v1_verify_package_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler.","title":"Idempotency-Key"},"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_EvidenceBundle_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"primitive":"package","primitive_version":"1.1.0","request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","verdict":"accurate","confidence":"high","confidence_score":0.93,"sources":[{"url":"https://www.npmjs.com/package/example-package","fetch_timestamp":"2026-05-24T12:34:56.789Z","source_bytes_digest":"sha256:a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8","extracted_text_hash":"sha256:a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8","hash_alg":"sha256","extraction_method":"registry_api","extraction_quality":"good","relevant_text":"Package published 2026-04-15 by trusted publisher."}],"rationale":"Package metadata matches the registry record; publisher in trusted set.","timestamp":"2026-05-24T12:34:56.789Z","latency_ms":218,"model_used":"claude-sonnet-4-6","cost_usd":0.0042,"details":{"package_name":"example-package","version":"1.2.3","registry":"npm"}},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"Upstream verification failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":false,"with-idempotency-key":true,"security":[{"ApiKeyAuth":[]},{}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PackageVerifyRequest"}}}}}},"/v1/verify/package/batch":{"post":{"tags":["Verification"],"summary":"Verify up to 20 software packages in one batch","description":"Batch package verification — up to 20 items.","operationId":"verify_package_batch_endpoint_v1_verify_package_batch_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler.","title":"Idempotency-Key"},"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BatchVerifyResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"batch_id":"bat_01HX5K3JNZ8A2F4M","items_submitted":2,"items_succeeded":2,"items_failed":0,"results":[{"primitive":"package","primitive_version":"1.1.0","request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","verdict":"accurate","confidence":"high","confidence_score":0.93,"sources":[{"url":"https://example.com/source","fetch_timestamp":"2026-05-24T12:34:56.789Z","source_bytes_digest":"sha256:a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8","extracted_text_hash":"sha256:a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8","hash_alg":"sha256","extraction_method":"trafilatura","extraction_quality":"good","relevant_text":"Independent source corroborating the claim."}],"rationale":"Multiple independent sources confirmed the claim.","timestamp":"2026-05-24T12:34:56.789Z","latency_ms":218,"model_used":"claude-sonnet-4-6","cost_usd":0.0042,"details":{}},{"primitive":"package","primitive_version":"1.1.0","request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","verdict":"unverifiable","confidence":"low","confidence_score":0.41,"sources":[],"rationale":"Source could not be fetched within the timeout window.","timestamp":"2026-05-24T12:34:56.789Z","latency_ms":218,"model_used":"claude-sonnet-4-6","cost_usd":0.0042,"details":{}}],"total_cost_usd":0.0084,"total_latency_ms":412,"timestamp":"2026-05-24T12:34:56.789Z"},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":false,"with-idempotency-key":true,"security":[{"ApiKeyAuth":[]},{}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Batch of package targets (1–20). Items are validated individually: an invalid item becomes a per-item error row in the 200 response, not a request-level 422.","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/PackageVerifyRequest"},"minItems":1,"maxItems":20}},"required":["items"]}}}}}},"/v1/verify/tool":{"post":{"tags":["Verification"],"summary":"Verify a tool or MCP server via three-stage probe","description":"Verify a tool/MCP server — three-stage probe + schema comparison.","operationId":"verify_tool_endpoint_v1_verify_tool_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler.","title":"Idempotency-Key"},"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_HonestyEnvelope_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"envelope_version":"1.0.0","target":{"requested":"registry:example-mcp","resolved":"https://mcp.example.com/api","kind":"mcp-server"},"expression":"attestable","as_of":{"response":"2026-06-12T18:00:00Z","observed":"2026-06-12T17:59:59Z"},"formula_version":"tool-verify/1.0.0","probe":{"method":"mcp_jsonrpc","stages_run":["HEAD","GET:content-type","initialize","tools/list"],"duration_ms":128},"declared_set_hash":"3386034982d91521295017719a87036f1492b6dd9d3a33cc22a43a3ba038b508","posture":"consistent","dimensions":[{"dimension":"tool.liveness","status":"match","advertised":"reachable MCP endpoint claimed","observed":"mcp_jsonrpc","evidence":[{"stages_run":["HEAD","GET:content-type","initialize","tools/list"],"method":"mcp_jsonrpc"}]},{"dimension":"tool.identity","status":"match","advertised":{"name":"example-mcp","version":"0.4.1"},"observed":{"name":"example-mcp","version":"0.4.1","protocolVersion":"2024-11-05"}},{"dimension":"tool.capability_inventory","status":"match","advertised":["example-tool"],"observed":["example-tool"]},{"dimension":"tool.schema_fidelity","status":"match","advertised":"declared inputSchema per tool","observed":"live inputSchema per tool","evidence":[{"per_tool":[{"name":"example-tool","match":"exact"}]}]},{"dimension":"tool.auth_posture","status":"match","advertised":{"auth_expected":false},"observed":{"gated":false}}],"abstentions":[],"fail_clean":true,"non_claims":["no-quality-score","no-safety-judgment","no-external-truth-claim","match-means-observed-equals-advertised","no-fitness-for-purpose-claim"]},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":false,"with-idempotency-key":true,"x-honesty":{"mode":"verdict-primary","expression":"attestable","dimensions":["tool.liveness","tool.identity","tool.capability_inventory","tool.schema_fidelity","tool.auth_posture"],"envelope_version":"1.0.0","declared_set_hash":"3386034982d91521295017719a87036f1492b6dd9d3a33cc22a43a3ba038b508"},"security":[{"ApiKeyAuth":[]},{}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolVerifyInput"}}}}}},"/v1/verify/tool/batch":{"post":{"tags":["Verification"],"summary":"Verify up to 20 tool or MCP servers per batch","description":"Batch verify up to 20 tool/MCP servers.","operationId":"verify_tool_batch_endpoint_v1_verify_tool_batch_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler.","title":"Idempotency-Key"},"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BatchVerifyResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"batch_id":"bat_01HX5K3JNZ8A2F4M","items_submitted":2,"items_succeeded":2,"items_failed":0,"results":[{"envelope_version":"1.0.0","target":{"requested":"registry:example-mcp","resolved":"https://mcp.example.com/api","kind":"mcp-server"},"expression":"attestable","as_of":{"response":"2026-06-12T18:00:00Z","observed":"2026-06-12T17:59:59Z"},"formula_version":"tool-verify/1.0.0","probe":{"method":"mcp_jsonrpc","stages_run":["HEAD","GET:content-type","initialize","tools/list"],"duration_ms":128},"declared_set_hash":"3386034982d91521295017719a87036f1492b6dd9d3a33cc22a43a3ba038b508","posture":"consistent","dimensions":[{"dimension":"tool.liveness","status":"match","advertised":"reachable MCP endpoint claimed","observed":"mcp_jsonrpc","evidence":[{"stages_run":["HEAD","GET:content-type","initialize","tools/list"],"method":"mcp_jsonrpc"}]},{"dimension":"tool.identity","status":"match","advertised":{"name":"example-mcp","version":"0.4.1"},"observed":{"name":"example-mcp","version":"0.4.1","protocolVersion":"2024-11-05"}},{"dimension":"tool.capability_inventory","status":"match","advertised":["example-tool"],"observed":["example-tool"]},{"dimension":"tool.schema_fidelity","status":"match","advertised":"declared inputSchema per tool","observed":"live inputSchema per tool","evidence":[{"per_tool":[{"name":"example-tool","match":"exact"}]}]},{"dimension":"tool.auth_posture","status":"match","advertised":{"auth_expected":false},"observed":{"gated":false}}],"abstentions":[],"fail_clean":true,"non_claims":["no-quality-score","no-safety-judgment","no-external-truth-claim","match-means-observed-equals-advertised","no-fitness-for-purpose-claim"]},{"envelope_version":"1.0.0","target":{"requested":"https://down.example.com/mcp","resolved":"https://down.example.com/mcp","kind":"mcp-server"},"expression":"attestable","as_of":{"response":"2026-06-12T18:00:00Z"},"formula_version":"tool-verify/1.0.0","probe":{"method":"head_request","stages_run":["HEAD"],"duration_ms":21},"declared_set_hash":"3386034982d91521295017719a87036f1492b6dd9d3a33cc22a43a3ba038b508","posture":"unverified","dimensions":[{"dimension":"tool.liveness","status":"unverified","advertised":"reachable MCP endpoint claimed","observed":"head_request","reason":"unreachable","reason_class":"inability"},{"dimension":"tool.identity","status":"unverified","reason":"unreachable","reason_class":"inability"},{"dimension":"tool.capability_inventory","status":"unverified","reason":"unreachable","reason_class":"inability"},{"dimension":"tool.schema_fidelity","status":"unverified","reason":"unreachable","reason_class":"inability"},{"dimension":"tool.auth_posture","status":"unverified","reason":"unreachable","reason_class":"inability"}],"abstentions":[{"dimension":"tool.liveness","reason":"unreachable","reason_class":"inability"},{"dimension":"tool.identity","reason":"unreachable","reason_class":"inability"},{"dimension":"tool.capability_inventory","reason":"unreachable","reason_class":"inability"},{"dimension":"tool.schema_fidelity","reason":"unreachable","reason_class":"inability"},{"dimension":"tool.auth_posture","reason":"unreachable","reason_class":"inability"}],"fail_clean":true,"non_claims":["no-quality-score","no-safety-judgment","no-external-truth-claim","match-means-observed-equals-advertised","no-fitness-for-purpose-claim"]}],"total_cost_usd":0.0,"total_latency_ms":149,"timestamp":"2026-05-24T12:34:56.789Z"},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":false,"with-idempotency-key":true,"x-honesty":{"mode":"verdict-primary","expression":"attestable","dimensions":["tool.liveness","tool.identity","tool.capability_inventory","tool.schema_fidelity","tool.auth_posture"],"envelope_version":"1.0.0","declared_set_hash":"3386034982d91521295017719a87036f1492b6dd9d3a33cc22a43a3ba038b508"},"security":[{"ApiKeyAuth":[]},{}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Batch of tool targets (1–20). Items are validated individually: an invalid item becomes a per-item error row in the 200 response, not a request-level 422.","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/ToolVerifyInput"},"minItems":1,"maxItems":20}},"required":["items"]}}}}}},"/v1/verify/citation":{"post":{"tags":["Verification"],"summary":"Verify a source URL contains the claimed information","description":"Verify whether a source URL contains the claimed information.","operationId":"verify_citation_endpoint_v1_verify_citation_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler.","title":"Idempotency-Key"},"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_EvidenceBundle_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"primitive":"citation","primitive_version":"1.1.0","request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","verdict":"accurate","confidence":"high","confidence_score":0.93,"sources":[{"url":"https://example.com/source-article","fetch_timestamp":"2026-05-24T12:34:56.789Z","source_bytes_digest":"sha256:a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8","extracted_text_hash":"sha256:a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8","hash_alg":"sha256","extraction_method":"trafilatura","extraction_quality":"good","relevant_text":"The cited passage appears verbatim in the source."}],"rationale":"Source URL resolved and content matches cited excerpt.","timestamp":"2026-05-24T12:34:56.789Z","latency_ms":218,"model_used":"claude-sonnet-4-6","cost_usd":0.0042,"details":{"cited_url":"https://example.com/source-article","author":"Example Author"}},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"Upstream verification failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":false,"with-idempotency-key":true,"security":[{"ApiKeyAuth":[]},{}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CitationVerifyRequest"}}}}}},"/v1/verify/citation/batch":{"post":{"tags":["Verification"],"summary":"Verify up to 20 citations in one batch","description":"Batch citation verification — up to 20 items.","operationId":"verify_citation_batch_endpoint_v1_verify_citation_batch_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler.","title":"Idempotency-Key"},"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BatchVerifyResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"batch_id":"bat_01HX5K3JNZ8A2F4M","items_submitted":2,"items_succeeded":2,"items_failed":0,"results":[{"primitive":"citation","primitive_version":"1.1.0","request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","verdict":"accurate","confidence":"high","confidence_score":0.93,"sources":[{"url":"https://example.com/source","fetch_timestamp":"2026-05-24T12:34:56.789Z","source_bytes_digest":"sha256:a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8","extracted_text_hash":"sha256:a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8","hash_alg":"sha256","extraction_method":"trafilatura","extraction_quality":"good","relevant_text":"Independent source corroborating the claim."}],"rationale":"Multiple independent sources confirmed the claim.","timestamp":"2026-05-24T12:34:56.789Z","latency_ms":218,"model_used":"claude-sonnet-4-6","cost_usd":0.0042,"details":{}},{"primitive":"citation","primitive_version":"1.1.0","request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","verdict":"unverifiable","confidence":"low","confidence_score":0.41,"sources":[],"rationale":"Source could not be fetched within the timeout window.","timestamp":"2026-05-24T12:34:56.789Z","latency_ms":218,"model_used":"claude-sonnet-4-6","cost_usd":0.0042,"details":{}}],"total_cost_usd":0.0084,"total_latency_ms":412,"timestamp":"2026-05-24T12:34:56.789Z"},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":false,"with-idempotency-key":true,"security":[{"ApiKeyAuth":[]},{}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Batch of citations (1–20).","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/CitationVerifyRequest"},"minItems":1,"maxItems":20}},"required":["items"]}}}}}},"/v1/verify/claim":{"post":{"tags":["Verification"],"summary":"Verify a factual claim against its cited sources","description":"Verify a factual claim against 1-5 source URLs.\n\nReturns an EvidenceBundle with verdict (supported/refuted/neutral/insufficient_evidence),\nconfidence (high/medium/low), per-source results, and cost tracking.\n\nFor persisting callers, meta.receipt points at the durable reliance receipt; the\npointer is issued at staging time, so the location becomes readable once the\nreceipt writer drains (typically within seconds).","operationId":"verify_claim_endpoint_v1_verify_claim_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler.","title":"Idempotency-Key"},"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_EvidenceBundle_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"primitive":"claim","primitive_version":"1.1.0","request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","verdict":"accurate","confidence":"high","confidence_score":0.93,"sources":[{"url":"https://example.com/source","fetch_timestamp":"2026-05-24T12:34:56.789Z","source_bytes_digest":"sha256:a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8","extracted_text_hash":"sha256:a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8","hash_alg":"sha256","extraction_method":"trafilatura","extraction_quality":"good","relevant_text":"Independent source corroborating the claim."}],"rationale":"Two independent sources corroborate the claim.","timestamp":"2026-05-24T12:34:56.789Z","latency_ms":218,"model_used":"claude-sonnet-4-6","cost_usd":0.0042,"details":{"claim_text":"Example claim under verification."}},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":false,"with-idempotency-key":true,"security":[{"ApiKeyAuth":[]},{}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimVerifyRequest"}}}}}},"/v1/verify/claim/batch":{"post":{"tags":["Verification"],"summary":"Verify up to 20 factual claims in one batch","description":"Batch claim verification — up to 20 items.","operationId":"verify_claim_batch_endpoint_v1_verify_claim_batch_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler.","title":"Idempotency-Key"},"description":"Optional today; required after grace period. Unique key (e.g. UUID) for request deduplication. During the current grace phase this header is accepted but has no effect — the server does not cache or replay responses yet. Once enforcement is active, retrying with the same key will return the cached response without re-executing the handler."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_BatchVerifyResponse_"},"examples":{"happy_path":{"summary":"Successful response","value":{"data":{"batch_id":"bat_01HX5K3JNZ8A2F4M","items_submitted":2,"items_succeeded":2,"items_failed":0,"results":[{"primitive":"claim","primitive_version":"1.1.0","request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","verdict":"accurate","confidence":"high","confidence_score":0.93,"sources":[{"url":"https://example.com/source","fetch_timestamp":"2026-05-24T12:34:56.789Z","source_bytes_digest":"sha256:a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8","extracted_text_hash":"sha256:a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8a1b2c3d4e5f6a7b8","hash_alg":"sha256","extraction_method":"trafilatura","extraction_quality":"good","relevant_text":"Independent source corroborating the claim."}],"rationale":"Multiple independent sources confirmed the claim.","timestamp":"2026-05-24T12:34:56.789Z","latency_ms":218,"model_used":"claude-sonnet-4-6","cost_usd":0.0042,"details":{}},{"primitive":"claim","primitive_version":"1.1.0","request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","verdict":"unverifiable","confidence":"low","confidence_score":0.41,"sources":[],"rationale":"Source could not be fetched within the timeout window.","timestamp":"2026-05-24T12:34:56.789Z","latency_ms":218,"model_used":"claude-sonnet-4-6","cost_usd":0.0042,"details":{}}],"total_cost_usd":0.0084,"total_latency_ms":412,"timestamp":"2026-05-24T12:34:56.789Z"},"meta":{"request_id":"01HX5K3JNZ8A2F4M7P9Q1R3S5T","timestamp":"2026-05-24T12:34:56.789Z"},"links":{}}}}}}},"400":{"description":"Invalid request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required. This operation is payable per call via the x402 protocol as an alternative to an API key: the body carries payment instructions (`accepts[]`). Retry with a valid `Authorization: Bearer` key, or complete the x402 payment flow. The payment wall admits only live-format keys past it, so a test-format key on this operation receives this 402 (not a key-validation error); a live-format key that is then refused yields the documented 401/403 Problem responses. Amounts are set server-side and are not fixed in this document.","headers":{"X-Payment-Required":{"schema":{"type":"string"},"description":"Always `true` on a 402"},"X-Payment-Protocol":{"schema":{"type":"string"},"description":"Payment protocol name (`x402`)"},"X-Payment-Network":{"schema":{"type":"string"},"description":"Chain identifier the payment must settle on"},"X-Payment-Asset":{"schema":{"type":"string"},"description":"Settlement asset: ERC-20 token contract address"},"X-Payment-Amount":{"schema":{"type":"string"},"description":"Server-set amount for this call: an integer string in atomic token units"},"X-Payment-Recipient":{"schema":{"type":"string"},"description":"Recipient wallet address"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402PaymentRequired"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":false,"with-idempotency-key":true,"security":[{"ApiKeyAuth":[]},{}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimBatchRequest"}}}}}},"/v1/verify/cutover":{"post":{"tags":["Cutover"],"summary":"Verify a dated cutover exercise against its declared binding","description":"Accepts a caller-captured cutover exercise dated by exercised_at, resolves the\ndeclared fallback's own contract and reference binding, and computes the\ndifferential between the captured behavior and the pinned reference; the date is\nrecorded as dated evidence, never as a validity claim. Returns the recorded\nverdict with per-dimension results, writes an append-only run row, and mints a\nsigned reliance receipt. Requires a Bearer API key.","operationId":"verify_cutover_v1_verify_cutover_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CutoverRunRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_CutoverRunResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Fallback, contract, or reference not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Registry integrity check failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]}]}},"/v1/verify/parity":{"post":{"tags":["Parity"],"summary":"Verify a declared fallback's captured behavior against its pinned reference","description":"Resolves the declared fallback's own contract and reference binding and computes\nthe differential between the caller-captured fallback behavior and the pinned\nproduction reference; Edge never runs the fallback itself. Returns the recorded\nverdict with per-dimension match, divergent, and unverified results, writes an\nappend-only run row, and mints a signed reliance receipt. Requires a Bearer API\nkey.","operationId":"verify_parity_v1_verify_parity_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParityRunRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_ParityRunResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Fallback, contract, or reference not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Registry integrity check failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]}]}},"/v1/verify/regression":{"post":{"tags":["Regression"],"summary":"Verify one candidate against its declared contract and pinned reference","description":"Computes the deterministic differential between one submitted candidate's\nobservations and the caller's pinned reference under the caller's own declared\ncontract. Returns the recorded verdict with per-dimension deltas and typed\nabstentions, writes an append-only run row, and mints a signed reliance receipt.\nRequires a Bearer API key.","operationId":"verify_regression_v1_verify_regression_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegressionRunRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse_RegressionRunResponse_"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"Contract or reference not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"Registry integrity check failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"x-parallel-safe":true,"security":[{"ApiKeyAuth":[]}]}},"/watchers":{"post":{"tags":["Watchers","Watchers"],"summary":"Create a watcher for a brand","description":"Creates a watcher that monitors a brand for the given conditions and records\nevents when it fires. Returns the created watcher record, including the webhook\nsecret when a webhook URL is set. Requires an API key with access to the brand;\nenforces per-plan watcher, condition, webhook, and cooldown limits plus a cap of\n10 creates per hour.","operationId":"create_watcher_watchers_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatcherCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/watchers","deprecated":true},"get":{"tags":["Watchers","Watchers"],"summary":"List watchers owned by the caller","description":"Lists the caller's watchers with optional brand, status, and enabled filters.\nReturns a page of watcher records (default 20, max 100) with a total count,\nsortable by created_at or last_triggered_at. Requires an API key; only watchers\nowned by that key are returned.","operationId":"list_watchers_watchers_get","parameters":[{"name":"brand","in":"query","required":false,"schema":{"type":"string","title":"Brand"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","title":"Status"}},{"name":"enabled","in":"query","required":false,"schema":{"type":"boolean","title":"Enabled"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","pattern":"^(created_at|last_triggered_at)$","default":"created_at","title":"Sort"}},{"name":"order","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","default":"desc","title":"Order"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/watchers","deprecated":true}},"/watchers/{watcher_id}":{"get":{"tags":["Watchers","Watchers"],"summary":"Get a single watcher by id","description":"Returns a single watcher record owned by the calling API key. Requires an\nAPI key; answers 404 when the watcher does not exist or is owned by another\nkey. The webhook secret is not included in the response.","operationId":"get_watcher_watchers__watcher_id__get","parameters":[{"name":"watcher_id","in":"path","required":true,"schema":{"type":"string","title":"Watcher Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/watchers/{watcher_id}","deprecated":true},"put":{"tags":["Watchers","Watchers"],"summary":"Update fields on an existing watcher","description":"Updates a watcher's conditions, operator, webhook URL, minimum priority,\ncooldown, or enabled state; enabling or disabling also sets the status to\nactive or paused. Returns the updated watcher record. Requires an API key and\nownership of the watcher, and enforces the same per-plan condition, webhook,\nand cooldown limits as creation.","operationId":"update_watcher_watchers__watcher_id__put","parameters":[{"name":"watcher_id","in":"path","required":true,"schema":{"type":"string","title":"Watcher Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatcherUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/watchers/{watcher_id}","deprecated":true},"delete":{"tags":["Watchers","Watchers"],"summary":"Delete a watcher","description":"Deletes a watcher owned by the calling API key. Returns 204 with no body\non success and 404 when the watcher does not exist or is owned by another\nkey. Requires an API key.","operationId":"delete_watcher_watchers__watcher_id__delete","parameters":[{"name":"watcher_id","in":"path","required":true,"schema":{"type":"string","title":"Watcher Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/watchers/{watcher_id}","deprecated":true}},"/watchers/{watcher_id}/events":{"get":{"tags":["Watchers","Watchers"],"summary":"List triggered events for a watcher","description":"Returns triggered events for a watcher the caller owns, newest first, from\nthe last 24 hours unless a since timestamp is given. Supports cursor pagination\n(default 20, max 100 per page) and marks the returned events as retrieved by\npoll. Requires an API key and ownership of the watcher.","operationId":"get_watcher_events_watchers__watcher_id__events_get","parameters":[{"name":"watcher_id","in":"path","required":true,"schema":{"type":"string","title":"Watcher Id"}},{"name":"since","in":"query","required":false,"schema":{"type":"string","title":"Since"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/watchers/{watcher_id}/events","deprecated":true}},"/watchers/{watcher_id}/test":{"post":{"tags":["Watchers","Watchers"],"summary":"Dry-run a watcher without firing it","description":"Runs a dry-run check of a watcher against its stored conditions without\nrecording an event or calling the webhook. Currently returns a stub result:\nwould_trigger is always false and current field values are placeholders.\nRequires an API key and ownership of the watcher.","operationId":"test_watcher_watchers__watcher_id__test_post","parameters":[{"name":"watcher_id","in":"path","required":true,"schema":{"type":"string","title":"Watcher Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/watchers/{watcher_id}/test","deprecated":true}},"/watchers/{watcher_id}/rotate-secret":{"post":{"tags":["Watchers","Watchers"],"summary":"Rotate a watcher's webhook secret","description":"Generates a new webhook secret for a watcher that has a webhook URL\nconfigured and returns it once in the response. Answers 422 when the watcher\nhas no webhook URL. Requires an API key and ownership of the watcher.","operationId":"rotate_secret_watchers__watcher_id__rotate_secret_post","parameters":[{"name":"watcher_id","in":"path","required":true,"schema":{"type":"string","title":"Watcher Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/watchers/{watcher_id}/rotate-secret","deprecated":true}},"/analytics/brand/{slug}/summary":{"get":{"tags":["Brand Analytics","Brand Analytics"],"summary":"Summarize agent activity for a brand","description":"Overview of how agents interact with this brand (last 30 days).\n\nRequires: Starter tier or above. Brand access validated.\nPrivacy: Returns aggregated data only. If fewer than 10 unique agents\nqueried this brand, returns insufficient_data with no counts.\nRate limit: 60/hour per API key.","operationId":"brand_summary_analytics_brand__slug__summary_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/analytics/brand/{slug}/summary","deprecated":true}},"/analytics/brand/{slug}/trends":{"get":{"tags":["Brand Analytics","Brand Analytics"],"summary":"Get weekly agent activity trends","description":"Week-over-week trends for a brand.\n\nRequires: Pro tier or above. Brand access validated.\nCursor-based pagination. Returns next_cursor if more data available.\nRate limit: 60/hour per API key.","operationId":"brand_trends_analytics_brand__slug__trends_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"weeks","in":"query","required":false,"schema":{"type":"integer","maximum":12,"minimum":1,"default":4,"title":"Weeks"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":12,"minimum":1,"default":4,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/analytics/brand/{slug}/trends","deprecated":true}},"/analytics/brand/{slug}/vertical":{"get":{"tags":["Brand Analytics","Brand Analytics"],"summary":"Compare a brand within its vertical","description":"Compare brand query volume and data coverage within its vertical.\n\nRequires: Pro tier or above. Brand access validated.\nSparse data handling:\n  - < 5 brands in vertical -> comparison_quality: \"limited\"\n  - < 50 total queries -> comparison_quality: \"insufficient\", no rank/averages\nRate limit: 60/hour per API key.","operationId":"brand_vertical_analytics_brand__slug__vertical_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/analytics/brand/{slug}/vertical","deprecated":true}},"/analytics/brand/{slug}/gaps":{"get":{"tags":["Brand Analytics","Brand Analytics"],"summary":"List data coverage gaps for a brand","description":"Data coverage gaps for a brand.\n\nRequires: Enterprise tier only. Brand access validated.\nShows which data fields agents request but Edge has no data for.\nRate limit: 60/hour per API key.","operationId":"brand_gaps_analytics_brand__slug__gaps_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}],"x-canonical-path":"/v1/analytics/brand/{slug}/gaps","deprecated":true}},"/v1/watchers":{"post":{"tags":["Watchers","Watchers"],"summary":"Create a watcher for a brand","description":"Creates a watcher that monitors a brand for the given conditions and records\nevents when it fires. Returns the created watcher record, including the webhook\nsecret when a webhook URL is set. Requires an API key with access to the brand;\nenforces per-plan watcher, condition, webhook, and cooldown limits plus a cap of\n10 creates per hour.","operationId":"create_watcher_v1_watchers_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatcherCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]},"get":{"tags":["Watchers","Watchers"],"summary":"List watchers owned by the caller","description":"Lists the caller's watchers with optional brand, status, and enabled filters.\nReturns a page of watcher records (default 20, max 100) with a total count,\nsortable by created_at or last_triggered_at. Requires an API key; only watchers\nowned by that key are returned.","operationId":"list_watchers_v1_watchers_get","parameters":[{"name":"brand","in":"query","required":false,"schema":{"type":"string","title":"Brand"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","title":"Status"}},{"name":"enabled","in":"query","required":false,"schema":{"type":"boolean","title":"Enabled"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","pattern":"^(created_at|last_triggered_at)$","default":"created_at","title":"Sort"}},{"name":"order","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","default":"desc","title":"Order"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/watchers/{watcher_id}":{"get":{"tags":["Watchers","Watchers"],"summary":"Get a single watcher by id","description":"Returns a single watcher record owned by the calling API key. Requires an\nAPI key; answers 404 when the watcher does not exist or is owned by another\nkey. The webhook secret is not included in the response.","operationId":"get_watcher_v1_watchers__watcher_id__get","parameters":[{"name":"watcher_id","in":"path","required":true,"schema":{"type":"string","title":"Watcher Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]},"put":{"tags":["Watchers","Watchers"],"summary":"Update fields on an existing watcher","description":"Updates a watcher's conditions, operator, webhook URL, minimum priority,\ncooldown, or enabled state; enabling or disabling also sets the status to\nactive or paused. Returns the updated watcher record. Requires an API key and\nownership of the watcher, and enforces the same per-plan condition, webhook,\nand cooldown limits as creation.","operationId":"update_watcher_v1_watchers__watcher_id__put","parameters":[{"name":"watcher_id","in":"path","required":true,"schema":{"type":"string","title":"Watcher Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatcherUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]},"delete":{"tags":["Watchers","Watchers"],"summary":"Delete a watcher","description":"Deletes a watcher owned by the calling API key. Returns 204 with no body\non success and 404 when the watcher does not exist or is owned by another\nkey. Requires an API key.","operationId":"delete_watcher_v1_watchers__watcher_id__delete","parameters":[{"name":"watcher_id","in":"path","required":true,"schema":{"type":"string","title":"Watcher Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/watchers/{watcher_id}/events":{"get":{"tags":["Watchers","Watchers"],"summary":"List triggered events for a watcher","description":"Returns triggered events for a watcher the caller owns, newest first, from\nthe last 24 hours unless a since timestamp is given. Supports cursor pagination\n(default 20, max 100 per page) and marks the returned events as retrieved by\npoll. Requires an API key and ownership of the watcher.","operationId":"get_watcher_events_v1_watchers__watcher_id__events_get","parameters":[{"name":"watcher_id","in":"path","required":true,"schema":{"type":"string","title":"Watcher Id"}},{"name":"since","in":"query","required":false,"schema":{"type":"string","title":"Since"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/watchers/{watcher_id}/test":{"post":{"tags":["Watchers","Watchers"],"summary":"Dry-run a watcher without firing it","description":"Runs a dry-run check of a watcher against its stored conditions without\nrecording an event or calling the webhook. Currently returns a stub result:\nwould_trigger is always false and current field values are placeholders.\nRequires an API key and ownership of the watcher.","operationId":"test_watcher_v1_watchers__watcher_id__test_post","parameters":[{"name":"watcher_id","in":"path","required":true,"schema":{"type":"string","title":"Watcher Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/watchers/{watcher_id}/rotate-secret":{"post":{"tags":["Watchers","Watchers"],"summary":"Rotate a watcher's webhook secret","description":"Generates a new webhook secret for a watcher that has a webhook URL\nconfigured and returns it once in the response. Answers 422 when the watcher\nhas no webhook URL. Requires an API key and ownership of the watcher.","operationId":"rotate_secret_v1_watchers__watcher_id__rotate_secret_post","parameters":[{"name":"watcher_id","in":"path","required":true,"schema":{"type":"string","title":"Watcher Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/analytics/brand/{slug}/summary":{"get":{"tags":["Brand Analytics","Brand Analytics"],"summary":"Summarize agent activity for a brand","description":"Overview of how agents interact with this brand (last 30 days).\n\nRequires: Starter tier or above. Brand access validated.\nPrivacy: Returns aggregated data only. If fewer than 10 unique agents\nqueried this brand, returns insufficient_data with no counts.\nRate limit: 60/hour per API key.","operationId":"brand_summary_v1_analytics_brand__slug__summary_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/analytics/brand/{slug}/trends":{"get":{"tags":["Brand Analytics","Brand Analytics"],"summary":"Get weekly agent activity trends","description":"Week-over-week trends for a brand.\n\nRequires: Pro tier or above. Brand access validated.\nCursor-based pagination. Returns next_cursor if more data available.\nRate limit: 60/hour per API key.","operationId":"brand_trends_v1_analytics_brand__slug__trends_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"weeks","in":"query","required":false,"schema":{"type":"integer","maximum":12,"minimum":1,"default":4,"title":"Weeks"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":12,"minimum":1,"default":4,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/analytics/brand/{slug}/vertical":{"get":{"tags":["Brand Analytics","Brand Analytics"],"summary":"Compare a brand within its vertical","description":"Compare brand query volume and data coverage within its vertical.\n\nRequires: Pro tier or above. Brand access validated.\nSparse data handling:\n  - < 5 brands in vertical -> comparison_quality: \"limited\"\n  - < 50 total queries -> comparison_quality: \"insufficient\", no rank/averages\nRate limit: 60/hour per API key.","operationId":"brand_vertical_v1_analytics_brand__slug__vertical_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/v1/analytics/brand/{slug}/gaps":{"get":{"tags":["Brand Analytics","Brand Analytics"],"summary":"List data coverage gaps for a brand","description":"Data coverage gaps for a brand.\n\nRequires: Enterprise tier only. Brand access validated.\nShows which data fields agents request but Edge has no data for.\nRate limit: 60/hour per API key.","operationId":"brand_gaps_v1_analytics_brand__slug__gaps_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvelopeResponse"}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/.well-known/mcp/server.json":{"get":{"tags":["MCP"],"summary":"Serve the MCP server discovery document","description":"Returns the MCP discovery document for this server: name, version, auth and\npayment notes, and the catalog of MCP tools with their parameter descriptions.\nThe same tools are served interactively at the /mcp endpoint and as REST\nbridges under /mcp/tools/*.","operationId":"mcp_discovery__well_known_mcp_server_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/mcp/tools/bluefox_check_brand":{"post":{"tags":["MCP"],"summary":"Verify brand claims (MCP tool bridge)","description":"Verifies one or more factual claims about a brand against curated brand\ndefinition records. Returns a verdict with a confidence score and evidence for\neach claim. REST bridge for the MCP tool bluefox_check_brand; the interactive\nMCP endpoint at /mcp serves the same tool.","operationId":"mcp_check_brand_mcp_tools_bluefox_check_brand_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_BrandShimRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/bluefox_get_brand/{slug}":{"get":{"tags":["MCP"],"summary":"Get raw brand definition (MCP tool bridge)","description":"Returns the raw brand definition record for a slug, including positioning,\npolicies, pricing rules, and key messaging. REST bridge for the MCP tool\nbluefox_get_brand; the interactive MCP endpoint at /mcp serves the same tool.","operationId":"mcp_get_brand_mcp_tools_bluefox_get_brand__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/bluefox_get_brand_profile/{slug}":{"get":{"tags":["MCP"],"summary":"Get agent-ready brand profile (MCP tool bridge)","description":"Returns a structured, agent-ready brand profile for a slug, assembled into\nsections and cached for 1 hour. REST bridge for the MCP tool\nbluefox_get_brand_profile; the interactive MCP endpoint at /mcp serves the\nsame tool.","operationId":"mcp_get_brand_profile_mcp_tools_bluefox_get_brand_profile__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/bluefox_register_agent":{"post":{"tags":["MCP"],"summary":"Register a new agent (MCP tool bridge)","description":"Registers a new AI agent so it can build a verification trust score over\ntime. Returns the agent id and agent token used on later requests. REST bridge\nfor the MCP tool bluefox_register_agent; the interactive MCP endpoint at /mcp\nserves the same tool.","operationId":"mcp_register_agent_mcp_tools_bluefox_register_agent_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRegisterRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/bluefox_check_spec":{"post":{"tags":["MCP"],"summary":"Verify a product spec claim (MCP tool bridge)","description":"Verifies a single product specification claim against extracted spec sheet\nrecords. Returns a verdict with a confidence score and the recorded spec value.\nREST bridge for the MCP tool bluefox_check_spec; the interactive MCP endpoint\nat /mcp serves the same tool.","operationId":"mcp_check_spec_mcp_tools_bluefox_check_spec_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Req"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/bluefox_check_price":{"post":{"tags":["MCP"],"summary":"Verify product pricing claims (MCP tool bridge)","description":"Verifies product pricing claims against tracked price records. Returns a\nverdict and confidence score for each claim, with the tracked price and its\nsource. REST bridge for the MCP tool bluefox_check_price; the interactive MCP\nendpoint at /mcp serves the same tool.","operationId":"mcp_check_price_mcp_tools_bluefox_check_price_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/bluefox_check_policy":{"post":{"tags":["MCP"],"summary":"Verify brand policy claims (MCP tool bridge)","description":"Verifies claims about a brand's return, shipping, warranty, or cancellation\npolicies against structured policy records. Returns a verdict and confidence\nscore for each claim. REST bridge for the MCP tool bluefox_check_policy; the\ninteractive MCP endpoint at /mcp serves the same tool.","operationId":"mcp_check_policy_mcp_tools_bluefox_check_policy_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_PolicyShimRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/bluefox_check_financial":{"post":{"tags":["MCP"],"summary":"Verify company financial claims (MCP tool bridge)","description":"Verifies financial claims about a company against SEC filings and curated\nfinancial data. Returns a verdict and confidence score for each claim, with\nsource attribution. REST bridge for the MCP tool bluefox_check_financial; the\ninteractive MCP endpoint at /mcp serves the same tool.","operationId":"mcp_check_financial_mcp_tools_bluefox_check_financial_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_FinancialShimRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/bluefox_check_compliance":{"post":{"tags":["MCP"],"summary":"Verify compliance claims (MCP tool bridge)","description":"Verifies regulatory and compliance claims about a brand, including FDA,\nGDPR, CCPA, HIPAA, SOC 2, and ISO 27001 statements. Returns a verdict and\nconfidence score for each claim. REST bridge for the MCP tool\nbluefox_check_compliance; the interactive MCP endpoint at /mcp serves the\nsame tool.","operationId":"mcp_check_compliance_mcp_tools_bluefox_check_compliance_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_ComplianceShimRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/bluefox_check_freshness":{"post":{"tags":["MCP"],"summary":"Check citation and date freshness (MCP tool bridge)","description":"Checks whether sources, citations, and date references in a text are current\nor stale. Returns a freshness verdict for each detected reference. REST bridge\nfor the MCP tool bluefox_check_freshness; the interactive MCP endpoint at /mcp\nserves the same tool.","operationId":"mcp_check_freshness_mcp_tools_bluefox_check_freshness_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreshnessCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/bluefox_check_competitive":{"post":{"tags":["MCP"],"summary":"Verify comparative brand claims (MCP tool bridge)","description":"Verifies comparative claims between two or more brands using cross-model AI\nconsensus data. Returns a verdict and confidence score for each claim. REST\nbridge for the MCP tool bluefox_check_competitive; the interactive MCP endpoint\nat /mcp serves the same tool.","operationId":"mcp_check_competitive_mcp_tools_bluefox_check_competitive_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompetitiveCheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/bluefox_check_sentiment":{"post":{"tags":["MCP"],"summary":"Analyze text sentiment (MCP tool bridge)","description":"Analyzes the sentiment of one or more text strings with a BERT-family model.\nReturns a positive, negative, or neutral label with a confidence score for each\ninput; accepts either a texts array or a single text field. REST bridge for the\nMCP tool bluefox_check_sentiment; the interactive MCP endpoint at /mcp serves\nthe same tool.","operationId":"mcp_check_sentiment_mcp_tools_bluefox_check_sentiment_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Req"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/bluefox_preflight_check":{"post":{"tags":["MCP"],"summary":"Run a preflight safety check (MCP tool bridge)","description":"Runs a pre-flight safety check on an agent response before it is delivered,\nscoring six dimensions: safety, factual accuracy, brand alignment,\nprofessionalism, bias, and PII exposure. Returns a verdict with per-dimension\nscores. REST bridge for the MCP tool bluefox_preflight_check; the interactive\nMCP endpoint at /mcp serves the same tool.","operationId":"mcp_preflight_check_mcp_tools_bluefox_preflight_check_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Req"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/bluefox_preflight_batch":{"post":{"tags":["MCP"],"summary":"Run batch preflight safety checks (MCP tool bridge)","description":"Runs pre-flight safety checks on multiple agent responses in a single call,\nusing the same six-dimension evaluation as the single-check variant. Returns\none scored result per submitted check. REST bridge for the MCP tool\nbluefox_preflight_batch; the interactive MCP endpoint at /mcp serves the same\ntool.","operationId":"mcp_preflight_batch_mcp_tools_bluefox_preflight_batch_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Req"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/bluefox_egress_gate":{"post":{"tags":["MCP"],"summary":"Run the fail-closed egress gate (MCP tool bridge)","description":"Voluntary-call egress gate (LB9-007): run the pinned PHI detector over an egress\npayload BEFORE it leaves your fleet — proceed/block with reasons, plus one signed\nreliance receipt per check. Receipts prove the calls that happened; this is a voluntary\ncheck surface, not an in-line interception plane. No db dependency — the gate handler\npersists nothing itself (no-store posture).","operationId":"mcp_egress_gate_mcp_tools_bluefox_egress_gate_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Req"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/bluefox_check_customs":{"post":{"tags":["MCP"],"summary":"Check HS/HTS classification agreement (MCP tool bridge)","description":"HS/HTS consensus-consistency check (LA1-018): did N declared models agree on the\ncode for one shipment description. Verdict is agreement under the pinned policy,\nnever correctness; the description is digest-bound, never stored (route docstring\nis the contract of record). First async handler in the shim family — the route\nhandler is a coroutine (LLM fan-out), so the shim awaits it. Typed request model\n(the financial-shim pattern, not the egress dict pattern): FastAPI validates at\nthe route level and the model's hide_input_in_errors keeps a 422 echo-free.","operationId":"mcp_check_customs_mcp_tools_bluefox_check_customs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/_CustomsShimRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/bluefox_brand_health/{slug}":{"get":{"tags":["MCP"],"summary":"Get a brand health snapshot (MCP tool bridge)","description":"Returns a health snapshot for a brand based on how AI models discuss it,\nincluding a health score, sentiment breakdown, and recommendation rate. REST\nbridge for the MCP tool bluefox_brand_health; the interactive MCP endpoint at\n/mcp serves the same tool.","operationId":"mcp_brand_health_mcp_tools_bluefox_brand_health__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/bluefox_brand_narratives/{slug}":{"get":{"tags":["MCP"],"summary":"List top brand narratives (MCP tool bridge)","description":"Returns the top claims and themes that AI models associate with a brand;\nthis route returns up to 20 narratives. REST bridge for the MCP tool\nbluefox_brand_narratives; the interactive MCP endpoint at /mcp serves the same\ntool.","operationId":"mcp_brand_narratives_mcp_tools_bluefox_brand_narratives__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/bluefox_brand_models/{slug}":{"get":{"tags":["MCP"],"summary":"Get per-model brand sentiment (MCP tool bridge)","description":"Returns a per-model sentiment breakdown showing how each recorded AI model\nviews a brand. REST bridge for the MCP tool bluefox_brand_models; the\ninteractive MCP endpoint at /mcp serves the same tool.","operationId":"mcp_brand_models_mcp_tools_bluefox_brand_models__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/bluefox_brand_recommendations/{slug}":{"get":{"tags":["MCP"],"summary":"Get brand recommendation rates (MCP tool bridge)","description":"Returns how frequently AI models recommend a brand across product\ncategories. REST bridge for the MCP tool bluefox_brand_recommendations; the\ninteractive MCP endpoint at /mcp serves the same tool.","operationId":"mcp_brand_recommendations_mcp_tools_bluefox_brand_recommendations__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/bluefox_competitive_radar/{slug}":{"get":{"tags":["MCP"],"summary":"Compare a brand against competitors (MCP tool bridge)","description":"Compares a brand's health score and recommendation rate against the\ncompetitors named in the comma-separated competitors query parameter. REST\nbridge for the MCP tool bluefox_competitive_radar; the interactive MCP endpoint\nat /mcp serves the same tool.","operationId":"mcp_competitive_radar_mcp_tools_bluefox_competitive_radar__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"competitors","in":"query","required":false,"schema":{"type":"string","default":"","title":"Competitors"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/bluefox_brand_insights/{slug}":{"get":{"tags":["MCP"],"summary":"Get generated brand insights (MCP tool bridge)","description":"Returns AI-generated insights and recommended actions for a brand based on\nits monitoring data, cached for 24 hours. REST bridge for the MCP tool\nbluefox_brand_insights; the interactive MCP endpoint at /mcp serves the same\ntool.","operationId":"mcp_brand_insights_mcp_tools_bluefox_brand_insights__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/bluefox_track_claim":{"post":{"tags":["MCP"],"summary":"Register claims for accuracy tracking (MCP tool bridge)","description":"Registers one or more claims about a brand to monitor for accuracy across\nAI models over time. Returns a tracking record for each registered claim. REST\nbridge for the MCP tool bluefox_track_claim; the interactive MCP endpoint at\n/mcp serves the same tool.","operationId":"mcp_track_claim_mcp_tools_bluefox_track_claim_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Req"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/bluefox_subscribe_monitor":{"post":{"tags":["MCP"],"summary":"Create a brand monitoring webhook (MCP tool bridge)","description":"Creates a webhook subscription that fires when a brand's monitoring data\nchanges; default trigger conditions are sentiment_drop and recommendation_drop.\nReturns the subscription record. REST bridge for the MCP tool\nbluefox_subscribe_monitor; the interactive MCP endpoint at /mcp serves the same\ntool.","operationId":"mcp_subscribe_monitor_mcp_tools_bluefox_subscribe_monitor_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Req"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/edge_advisor_recommend":{"post":{"tags":["MCP"],"summary":"Recommend MCP servers by requirements (MCP tool bridge)","description":"Ranks catalogued MCP servers against the submitted requirements (category,\ncapabilities, constraints, preferences). Returns a ranked recommendation list\nwith scores from recorded observation data. REST bridge for the MCP tool\nedge_advisor_recommend; the interactive MCP endpoint at /mcp serves the same\ntool.","operationId":"mcp_advisor_recommend_mcp_tools_edge_advisor_recommend_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Req"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/edge_advisor_compare":{"get":{"tags":["MCP"],"summary":"Compare MCP servers side by side (MCP tool bridge)","description":"Compares the MCP servers named in the comma-separated entities query\nparameter across recorded observation dimensions. Returns side-by-side metrics\nfor each server. REST bridge for the MCP tool edge_advisor_compare; the\ninteractive MCP endpoint at /mcp serves the same tool.","operationId":"mcp_advisor_compare_mcp_tools_edge_advisor_compare_get","parameters":[{"name":"entities","in":"query","required":false,"schema":{"type":"string","default":"","title":"Entities"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/edge_advisor_categories":{"get":{"tags":["MCP"],"summary":"List MCP server categories (MCP tool bridge)","description":"Lists catalogued MCP server categories with entity counts and data readiness\nflags. REST bridge for the MCP tool edge_advisor_categories; the interactive\nMCP endpoint at /mcp serves the same tool.","operationId":"mcp_advisor_categories_mcp_tools_edge_advisor_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/bluefox_check_safety":{"post":{"tags":["MCP"],"summary":"Classify content for brand safety (MCP tool bridge)","description":"Classifies content against the 12 GARM brand safety categories. Returns\nper-category risk scores, floor violations, and an overall safety verdict.\nREST bridge for the MCP tool bluefox_check_safety; the interactive MCP endpoint\nat /mcp serves the same tool.","operationId":"mcp_check_safety_mcp_tools_bluefox_check_safety_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Req"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/edge_ops_latest":{"get":{"tags":["MCP"],"summary":"Get latest ops feed events (MCP tool bridge)","description":"Returns the most recent published events from one ops feed (default\nsecurity_ops), optionally filtered by priority, newest first and capped at 50.\nREST bridge for the MCP tool edge_ops_latest; the interactive MCP endpoint at\n/mcp serves the same tool.","operationId":"mcp_ops_latest_mcp_tools_edge_ops_latest_get","parameters":[{"name":"feed","in":"query","required":false,"schema":{"type":"string","default":"security_ops","title":"Feed"}},{"name":"priority","in":"query","required":false,"schema":{"type":"string","title":"Priority"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/edge_ops_check":{"get":{"tags":["MCP"],"summary":"List recent P1 ops events (MCP tool bridge)","description":"Returns published P1 ops events from the last 24 hours across all feeds,\nnewest first and capped at 50, with no parameters required. REST bridge for\nthe MCP tool edge_ops_check; the interactive MCP endpoint at /mcp serves the\nsame tool.","operationId":"mcp_ops_check_mcp_tools_edge_ops_check_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/edge_ops_subscribe":{"post":{"tags":["MCP"],"summary":"Subscribe to ops feed webhooks (MCP tool bridge)","description":"Creates a webhook subscription for published ops events, filtered by the\ngiven feeds (empty means all) and priorities (default P1 only). Returns the\nsubscription id and a webhook secret used for HMAC-SHA256 signature checks via\nthe X-Edge-Signature header. REST bridge for the MCP tool edge_ops_subscribe;\nthe interactive MCP endpoint at /mcp serves the same tool.","operationId":"mcp_ops_subscribe_mcp_tools_edge_ops_subscribe_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Req"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/edge_pre_transaction_verify":{"post":{"tags":["MCP"],"summary":"Verify a transaction before purchase (MCP tool bridge)","description":"Runs up to six verification checks (brand, price, policy, compliance, spec,\nfinancial) in one call before a transaction completes. Returns an overall\nverdict with per-domain results and a recommendation. REST bridge for the MCP\ntool edge_pre_transaction_verify; the interactive MCP endpoint at /mcp serves\nthe same tool.","operationId":"mcp_pre_transaction_verify_mcp_tools_edge_pre_transaction_verify_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Req"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/edge_verify_protocol_claim":{"post":{"tags":["MCP"],"summary":"Verify commerce protocol policy claims (MCP tool bridge)","description":"Verifies merchant policy claims published through commerce protocols\n(return policy, shipping policy, warranty) against independent reference data.\nReturns per-claim match levels, discrepancy descriptions, freshness timestamps,\nand confidence levels. REST bridge for the MCP tool edge_verify_protocol_claim;\nthe interactive MCP endpoint at /mcp serves the same tool.","operationId":"mcp_verify_protocol_claim_mcp_tools_edge_verify_protocol_claim_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Req"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/edge_check_reputation":{"post":{"tags":["MCP"],"summary":"Check agent reputation score (MCP tool bridge)","description":"Returns the calling agent's recorded reputation: score, tier, confidence\nlevel, dimension scores, and interaction history. Authenticates with the agent\ntoken (bfa_live_*) supplied in the request body rather than the API-key header.\nREST bridge for the MCP tool edge_check_reputation; the interactive MCP\nendpoint at /mcp serves the same tool.","operationId":"mcp_check_reputation_mcp_tools_edge_check_reputation_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Req"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/edge_create_watcher":{"post":{"tags":["MCP"],"summary":"Create a custom brand watcher (MCP tool bridge)","description":"REST shim for the edge_create_watcher tool. Auth via the standard\nAuthorization: Bearer header (the real request is forwarded, so the caller's\nkey is never placed in a URL/query).","operationId":"mcp_create_watcher_mcp_tools_edge_create_watcher_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Req"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/edge_list_watchers":{"get":{"tags":["MCP"],"summary":"List your custom watchers (MCP tool bridge)","description":"REST shim for the edge_list_watchers tool. Auth via the Authorization\nheader; limit/offset clamped to the route's Query(ge/le) bounds.","operationId":"mcp_list_watchers_mcp_tools_edge_list_watchers_get","parameters":[{"name":"brand","in":"query","required":false,"schema":{"type":"string","title":"Brand"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","title":"Status"}},{"name":"enabled","in":"query","required":false,"schema":{"type":"boolean","title":"Enabled"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/edge_get_watcher_events":{"get":{"tags":["MCP"],"summary":"Get triggered watcher events (MCP tool bridge)","description":"REST shim for the edge_get_watcher_events tool. Auth via the Authorization\nheader; limit clamped to the route's Query(ge/le) bound.","operationId":"mcp_get_watcher_events_mcp_tools_edge_get_watcher_events_get","parameters":[{"name":"watcher_id","in":"query","required":false,"schema":{"type":"string","default":"","title":"Watcher Id"}},{"name":"since","in":"query","required":false,"schema":{"type":"string","title":"Since"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/edge_brand_analytics_summary/{slug}":{"get":{"tags":["MCP"],"summary":"Get 30-day brand query summary (MCP tool bridge)","description":"Summarizes recorded agent queries for a brand over the last 30 days: total\nqueries, unique agents, top 5 domains, average confidence, and tokens saved.\nAnswers insufficient_data with counts withheld when fewer than 10 unique agents\nqueried the brand. REST bridge for the MCP tool edge_brand_analytics_summary;\nthe interactive MCP endpoint at /mcp serves the same tool.","operationId":"mcp_brand_analytics_summary_mcp_tools_edge_brand_analytics_summary__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/mcp/tools/edge_brand_analytics_trends/{slug}":{"get":{"tags":["MCP"],"summary":"Get weekly brand query trends (MCP tool bridge)","description":"Returns recorded week-over-week query trends for a brand: volume and\nagent-count changes, average confidence, and emerging domains, newest week\nfirst. The weeks parameter is capped at 12. REST bridge for the MCP tool\nedge_brand_analytics_trends; the interactive MCP endpoint at /mcp serves the\nsame tool.","operationId":"mcp_brand_analytics_trends_mcp_tools_edge_brand_analytics_trends__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"weeks","in":"query","required":false,"schema":{"type":"integer","default":4,"title":"Weeks"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"API key missing (RFC 9457 Problem Details; `WWW-Authenticate` header set per RFC 6750).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"API key not recognized, revoked, or pending verification (RFC 9457 Problem Details).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/capabilities.json":{"get":{"summary":"List service capabilities and per-call token estimates","description":"Dynamic capabilities endpoint with token economics.","operationId":"capabilities_json_capabilities_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/jwks.json":{"get":{"tags":["Receipts"],"summary":"Receipt-signing public keys (JWK set)","description":"The published ed25519 public-key set (JWK set) at the standard\nRFC 8615 well-known path. Public by design: a verifier\nmatches a receipt's ``key_id`` to the JWKS entry with the identical ``kid`` and checks\nthe detached ed25519 signature over ``chain_self``. A key list, NOT\nissuer metadata: it carries only OKP/Ed25519 verification keys. Serves an honest empty\n``{\"keys\": []}`` while signing is disabled or unconfigured. Static content, no DB read,\nno auth.\n\nTWO FAMILIES, LABELLED. This set can carry receipt-signing keys and the\ninclusion log's checkpoint-signing key, and they never cross. Every entry\ndeclares which it is in ``bfx:purpose``: ``\"receipt\"`` or ``\"log\"``.\n**Select by that label, never by position** — the receipt key is\n``keys[0]``, so a checker that takes the first entry gets the wrong key for\nchecking a transparency-log checkpoint. Both published kids also happen to\nbegin with the same two hex characters, so eyeballing a truncated kid is not\na substitute either. ``bfx:purpose`` is a namespaced private member, lawful\nunder RFC 7517 (additional members are permitted, and members a verifier\ndoes not recognise are ignored), so it is additive for verifiers that\npredate it. The\npublished checkers enforce it in both directions:\n``/verify_inclusion.py`` will only verify a checkpoint under a ``\"log\"``\nkey, and ``/verify_receipt.py`` will only verify a receipt under a\n``\"receipt\"`` key.","operationId":"jwks_json__well_known_jwks_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/security.txt":{"get":{"tags":["Legal"],"summary":"Security policy contact (RFC 9116)","description":"RFC 9116 security.txt — where to report a security issue. Public by design;\nalso served at the legacy root path ``/security.txt``. Static content, no DB\nread, no auth.","operationId":"security_txt_well_known__well_known_security_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/security.txt":{"get":{"tags":["Legal"],"summary":"Security policy contact (RFC 9116, legacy root path)","description":"Legacy root-path alias of ``/.well-known/security.txt`` (same body; RFC 9116\nnames both locations).","operationId":"security_txt_root_security_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/x402":{"get":{"tags":["Discovery"],"summary":"x402 discovery document (keyless-payable endpoints)","description":"Machine-readable listing of the endpoints a keyless x402 payer can buy,\nin the x402 v1 spec's discovery-resource shape. Public by design.","operationId":"wellknown_x402__well_known_x402_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/ai-plugin.json":{"get":{"tags":["Discovery"],"summary":"Agent/plugin manifest (legacy well-known path)","description":"Minimal agent-facing manifest at the legacy plugin well-known path —\nserved because agents still probe it (AS3-40); it points at the same\nOpenAPI document every other discovery surface names. Public by design.","operationId":"wellknown_ai_plugin__well_known_ai_plugin_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/llms.txt":{"get":{"summary":"Serve the agent-readable service description","description":"Agent-discovery convention: machine-readable service description.","operationId":"llms_txt_llms_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/robots.txt":{"get":{"summary":"Serve the machine-access policy","description":"The one robots.txt this estate serves, identical on every origin host.\n\nNothing is disallowed. The Content Signals preamble and the Article 4 /\nDirective 2019/790 express reservation of rights ride byte-for-byte from the\ncapture taken before this house took the file over; the composer refuses to\nrender without them rather than quietly serving a file with the reservation\nmissing.","operationId":"robots_txt_robots_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/sitemap.xml":{"get":{"summary":"Redirect to the canonical sitemap on www","description":"RR④ — cure the host-split that produced the only measured agent harm.\n\nCloudflare's AI Crawl Control panel recorded **12 requests in 24 hours** for\n``bluefoxedge.ai/sitemap.xml``, filed under \"what AI Assistants are trying to\naccess, but can't\". They were not being refused by robots at all: the sitemap\nis generated by the site (``site/app/sitemap.ts``) and so exists only on www,\nwhile agents were asking the apex, which this app serves and which had no such\nroute. A 301 to the host that actually has it turns 12 dead fetches into 12\nlive ones.\n\n301 rather than 302: the canonical location is a fact about the estate's\ntopology, not a temporary condition. The broader apex-vs-www canonical-host\nquestion (P94 flag ⑨ / AS5 F-10) is untouched and still owed a word.","operationId":"sitemap_xml_redirect_sitemap_xml_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ping":{"get":{"summary":"Check service liveness","description":"Lightweight liveness check for uptime monitors. No DB or model check.","operationId":"ping_ping_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"summary":"Report service health","description":"Anonymous: minimal liveness — status + version class, nothing operational\n(staleness counts, pipeline last_success, consumer lag, dead-letter counts and\noutbox depth are no longer vended to unauthenticated callers). Admin bearer — the same\nscheme the /v1/admin family uses — receives the full operational payload, shape\nunchanged. Uptime/platform checkers need only the 200 + `status`; both remain.","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"A2AAgentAuthentication":{"properties":{"schemes":{"items":{"type":"string"},"type":"array","title":"Schemes"}},"type":"object","required":["schemes"],"title":"A2AAgentAuthentication"},"A2AAgentCapabilities":{"properties":{"streaming":{"type":"boolean","title":"Streaming"},"pushNotifications":{"type":"boolean","title":"Pushnotifications"}},"type":"object","required":["streaming","pushNotifications"],"title":"A2AAgentCapabilities"},"A2AAgentCard":{"properties":{"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"url":{"type":"string","title":"Url"},"version":{"type":"string","title":"Version"},"provider":{"$ref":"#/components/schemas/A2AAgentProvider"},"capabilities":{"$ref":"#/components/schemas/A2AAgentCapabilities"},"authentication":{"$ref":"#/components/schemas/A2AAgentAuthentication"},"jwks":{"type":"string","title":"Jwks"},"payment":{"$ref":"#/components/schemas/A2AAgentPayment"},"defaultInputModes":{"items":{"type":"string"},"type":"array","title":"Defaultinputmodes"},"defaultOutputModes":{"items":{"type":"string"},"type":"array","title":"Defaultoutputmodes"},"skills":{"items":{"$ref":"#/components/schemas/A2AAgentSkill"},"type":"array","title":"Skills"}},"type":"object","required":["name","description","url","version","provider","capabilities","authentication","jwks","payment","defaultInputModes","defaultOutputModes","skills"],"title":"A2AAgentCard","description":"A2A Agent Card body shape (no envelope wrapping — A2A protocol-exempt)."},"A2AAgentPayment":{"properties":{"protocol":{"type":"string","title":"Protocol"},"version":{"type":"string","title":"Version"},"networks":{"items":{"type":"string"},"type":"array","title":"Networks"},"currency":{"type":"string","title":"Currency"},"pricing":{"type":"string","title":"Pricing"},"price_range":{"type":"string","title":"Price Range"},"payTo":{"type":"string","title":"Payto"},"facilitator":{"type":"string","title":"Facilitator"},"description":{"type":"string","title":"Description"}},"type":"object","required":["protocol","version","networks","currency","pricing","price_range","payTo","facilitator","description"],"title":"A2AAgentPayment"},"A2AAgentProvider":{"properties":{"organization":{"type":"string","title":"Organization"},"url":{"type":"string","title":"Url"}},"type":"object","required":["organization","url"],"title":"A2AAgentProvider"},"A2AAgentSkill":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"inputModes":{"items":{"type":"string"},"type":"array","title":"Inputmodes"},"outputModes":{"items":{"type":"string"},"type":"array","title":"Outputmodes"}},"type":"object","required":["id","name","description","inputModes","outputModes"],"title":"A2AAgentSkill"},"Abstention":{"properties":{"dimension":{"type":"string","title":"Dimension"},"reason":{"type":"string","title":"Reason"},"reason_class":{"$ref":"#/components/schemas/ReasonClass"}},"additionalProperties":false,"type":"object","required":["dimension","reason","reason_class"],"title":"Abstention"},"Abstentions":{"properties":{"total":{"type":"integer","title":"Total","description":"Total abstaining issuers (foreign + no_concept)"},"foreign":{"type":"integer","title":"Foreign","description":"Abstained: non-US filer / no SEC EDGAR canonical"},"no_concept":{"type":"integer","title":"No Concept","description":"Abstained: filer does not report the us-gaap concept"}},"type":"object","required":["total","foreign","no_concept"],"title":"Abstentions","description":"Issuers that produced NO comparison and were accounted for, not dropped.\n\nOPTIONAL — present only after the H60 re-measurement folds these into the\nstored ``accuracy`` block. When the stored block omits them, the publisher\nOMITS this object entirely rather than fabricating zeros."},"AccuracyBreakdown":{"properties":{"match":{"type":"integer","title":"Match","description":"Strict-pass comparisons (the numerator of value)"},"partially_accurate":{"type":"integer","title":"Partially Accurate","description":"Within-tolerance-but-not-exact comparisons (EXCLUDED from value)"},"divergent":{"type":"integer","title":"Divergent","description":"Out-of-tolerance comparisons (surfaced, not hidden)"},"directions":{"$ref":"#/components/schemas/BreakdownDirections","description":"Over/understate/mismatch tally of the divergents"}},"type":"object","required":["match","partially_accurate","divergent","directions"],"title":"AccuracyBreakdown","description":"The outcome tally over the ``n`` comparisons.\n\n``match`` is the strict-pass count that backs ``value``; ``partially_accurate``\n(within tolerance but not a full match) is disclosed separately and is NOT in\nthe numerator; ``divergent`` is surfaced with its direction tally."},"AccuracyCell":{"properties":{"dimension":{"type":"string","title":"Dimension","description":"Namespaced dimension id (``[a-z0-9._-]+``)"},"validation_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Validation State","description":"A2 state of the dimension's measurement when one exists (validated | comparator-unvalidated | no-ground-truth); NULL for a never-measured dimension — we do not claim a state we do not have"},"no_validated_measurement":{"type":"boolean","title":"No Validated Measurement","description":"True when this dimension has no validated cell (first-class NO-AUTHORITY state)"},"comparator_class":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comparator Class","description":"deterministic (Class-D) | model-based (Class-M/N)"},"methodology_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Methodology Version","description":"Methodology-transparency pointer (versioned); the divergence classification + abstention detail are described there"},"methodology_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Methodology Url","description":"Absolute URL of the published methodology document, derived (serve-time) from methodology_version for a known version; null for an absent/unknown version — never a fabricated or dead URL"},"accuracy":{"anyOf":[{"$ref":"#/components/schemas/AccuracyMetrics"},{"type":"null"}],"description":"The stored accuracy block; null when no validated measurement exists"},"eval_set_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Eval Set Name","description":"Eval-set name"},"eval_set_source_kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Eval Set Source Kind","description":"external-canonical | internal-canonical | independent-gold | templated"},"eval_set_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Eval Set Size","description":"Eval-set size as stored (the field-comparison count for the financial cell)"},"eval_set_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Eval Set Date","description":"Eval-set built / last-labeled date"},"gt_kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gt Kind","description":"Ground-truth kind: canonical | human-gold | none"},"last_validated":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Validated","description":"RFC3339 UTC clearance timestamp; null until validated"},"is_latest_validated":{"type":"boolean","title":"Is Latest Validated","description":"Whether this is the dimension's current latest-validated pointer"},"computed_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Computed By","description":"Author of the measurement write"},"computed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Computed At","description":"RFC3339 UTC write timestamp"},"scope":{"$ref":"#/components/schemas/AccuracyScope","description":"Structured, true-by-construction honesty / scope facts"}},"type":"object","required":["dimension","no_validated_measurement","is_latest_validated","scope"],"title":"AccuracyCell","description":"One published per-domain accuracy cell.\n\nFor a validated dimension this carries the full stored breakdown\n(``validation_state == 'validated'``, ``no_validated_measurement == False``).\nFor a dimension with no validated cell it is the FIRST-CLASS no-cell response\n(``no_validated_measurement == True``, ``accuracy is None``) — honest, never a\nfabricated number, never a 404-as-error."},"AccuracyCellEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/AccuracyCell"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"AccuracyCellEnvelope","description":"Typed envelope for GET /accuracy/{dimension}."},"AccuracyCellList":{"properties":{"dimensions":{"items":{"$ref":"#/components/schemas/AccuracyCell"},"type":"array","title":"Dimensions","description":"Latest-validated cell per dimension (empty until a dimension validates)"},"count":{"type":"integer","title":"Count","description":"Number of dimensions with a latest-validated cell"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note","description":"Honest note, e.g. when no dimension has validated yet"}},"type":"object","required":["dimensions","count"],"title":"AccuracyCellList","description":"The list of every dimension's latest-validated cell (registry publish set).\n\n``dimensions`` is EMPTY when no dimension has a validated measurement yet — an\nhonest empty list, never a placeholder cell."},"AccuracyListEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/AccuracyCellList"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"AccuracyListEnvelope","description":"Typed envelope for GET /accuracy."},"AccuracyMetrics":{"properties":{"value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value","description":"Strict field-comparison match-rate, e.g. 90.19 (matches / n * 100)"},"metric":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metric","description":"Metric identifier as stored, e.g. 'match-rate'"},"n":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"N","description":"Number of FIELD COMPARISONS scored (NOT a count of companies/issuers); NULL if absent/unparseable in the stored block (never a fabricated 0)"},"denominator":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Denominator","description":"What the comparisons were drawn against, e.g. 'financial facts re-fetched from SEC EDGAR'"},"tolerance":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tolerance","description":"The exact matching rule applied, verbatim"},"breakdown":{"anyOf":[{"$ref":"#/components/schemas/AccuracyBreakdown"},{"type":"null"}],"description":"match / partially_accurate / divergent tally + divergent directions; NULL when the stored block carries no breakdown (we never fabricate a 0/0/0 tally — a synthesized all-zero breakdown would falsely claim 'no matches, no divergences')"},"unit_of_measure":{"type":"string","title":"Unit Of Measure","description":"The unit `n` and `value` are measured in: field comparisons, NOT companies","default":"field_comparisons"},"is_per_company_accuracy_score":{"type":"boolean","title":"Is Per Company Accuracy Score","description":"Explicitly false: this is a comparison-weighted match-rate, not a per-company accuracy score","default":false},"partially_accurate_excluded_from_numerator":{"type":"boolean","title":"Partially Accurate Excluded From Numerator","description":"The value numerator counts strict matches only; partially_accurate is excluded, so the rate is never overstated","default":true},"abstentions":{"anyOf":[{"$ref":"#/components/schemas/Abstentions"},{"type":"null"}],"description":"Accounted-for abstaining issuers. Populated once H60 folds them into the cell; NULL (never zeroed/fabricated) until then — the figures are reported in the methodology referenced by methodology_version"},"distinct_issuers":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Distinct Issuers","description":"Distinct issuers contributing >=1 comparison. Populated post-H60; NULL (never fabricated) until then — see methodology_version"}},"type":"object","title":"AccuracyMetrics","description":"The stored ``accuracy`` block, served faithfully + honestly framed.\n\n``value`` / ``metric`` / ``n`` / ``denominator`` / ``tolerance`` / ``breakdown``\nare PASSED THROUGH from the stored JSON (not hardcoded). The framing fields\n(``unit_of_measure``, ``is_per_company_accuracy_score``,\n``partially_accurate_excluded_from_numerator``) are structural facts about the\nmetric, true by construction of the accuracy comparator core."},"AccuracyScope":{"properties":{"unit_of_measure":{"type":"string","title":"Unit Of Measure","description":"Comparisons, not companies","default":"field_comparisons"},"is_per_company_accuracy_score":{"type":"boolean","title":"Is Per Company Accuracy Score","description":"Not a per-company accuracy score","default":false},"partially_accurate_excluded_from_numerator":{"type":"boolean","title":"Partially Accurate Excluded From Numerator","description":"Conservative numerator: strict matches only","default":true},"abstentions_accounted_not_dropped":{"type":"boolean","title":"Abstentions Accounted Not Dropped","description":"Non-comparable / abstaining issuers are accounted for, never silently dropped","default":true},"divergences_surfaced":{"type":"boolean","title":"Divergences Surfaced","description":"Divergent comparisons are disclosed (count + directions), not hidden","default":true},"divergence_classification_reference":{"type":"string","title":"Divergence Classification Reference","description":"WHERE the qualitative divergence classification is published; the route does not assert it","default":"methodology_version"},"statements":{"items":{"type":"string"},"type":"array","title":"Statements","description":"Plain-language restatement of the structural facts above (all true-by-construction)"}},"type":"object","title":"AccuracyScope","description":"Structured, true-by-construction honesty / scope facts about the cell.\n\nEvery field here is computable from the stored row or true by the construction\nof the comparator — NONE is an uncomputed qualitative interpretation. The\nqualitative divergence explanation lives in the methodology referenced by\n``methodology_version``, NOT here."},"AdvisorCategoriesEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/AdvisorCategoriesResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"AdvisorCategoriesEnvelope","description":"Typed envelope for GET /advisor/categories."},"AdvisorCategoriesResponse":{"properties":{"categories":{"items":{"$ref":"#/components/schemas/AdvisorCategoryItem"},"type":"array","title":"Categories"}},"type":"object","required":["categories"],"title":"AdvisorCategoriesResponse","description":"Payload for GET /advisor/categories — the handler wraps the list as ``{\"categories\": [...]}``."},"AdvisorCategoryItem":{"properties":{"category":{"type":"string","title":"Category","description":"Category slug"},"display_name":{"type":"string","title":"Display Name","description":"Human-readable category name"},"entity_count":{"type":"integer","title":"Entity Count","description":"Distinct entities in this category"},"data_confidence":{"type":"string","title":"Data Confidence","description":"Data-readiness tier: one of 'insufficient' (<3 entities), 'low' (3-4), 'medium' (5-9), 'high' (10+) — emitted by the advisor taxonomy service's data-confidence tiering"}},"type":"object","required":["category","display_name","entity_count","data_confidence"],"title":"AdvisorCategoryItem","description":"One category row with entity count and data-readiness tier."},"AdvisorCompareEntity":{"properties":{"entity_id":{"type":"string","title":"Entity Id","description":"Scanner entity id"},"name":{"type":"string","title":"Name","description":"Entity display name (falls back to id)"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","description":"Entity status (active, auth_required, ...)"},"source_registry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Registry","description":"Source registry (npm, pypi, github, ...)"},"categories":{"items":{"type":"string"},"type":"array","title":"Categories","description":"Category slugs the entity belongs to (may be empty)"},"composite_score":{"type":"number","title":"Composite Score","description":"Weighted composite score, rounded to 4 dp"},"dimension_scores":{"additionalProperties":{"type":"number"},"type":"object","title":"Dimension Scores","description":"Per-dimension scores keyed by dimension name (may be empty)"},"observations_summary":{"additionalProperties":{"type":"string"},"type":"object","title":"Observations Summary","description":"Human-readable summary string keyed by observation category (may be empty)"}},"type":"object","required":["entity_id","name","status","source_registry","categories","composite_score","dimension_scores","observations_summary"],"title":"AdvisorCompareEntity","description":"One entity column in a side-by-side comparison.\n\nMirrors the per-entity dict built by the advisor matching service's ``compare``.\nEvery key in that dict is always emitted, so every field is required:\n``status`` / ``source_registry`` are nullable in the scanner's entity record\n(so ``Optional[str]``), and the collections may be empty but the keys are\nalways present — all declared with ``Field(...)`` so the OpenAPI schema\nlists them as required."},"AdvisorCompareEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/AdvisorCompareResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"AdvisorCompareEnvelope","description":"Typed envelope for GET /advisor/compare."},"AdvisorCompareResponse":{"properties":{"entities":{"items":{"$ref":"#/components/schemas/AdvisorCompareEntity"},"type":"array","title":"Entities"},"comparison_generated_at":{"type":"string","title":"Comparison Generated At","description":"ISO 8601 timestamp the comparison was generated"}},"type":"object","required":["entities","comparison_generated_at"],"title":"AdvisorCompareResponse","description":"Payload for GET /advisor/compare (success branch).\n\nThe error branch (``{\"error\": ..., \"entity_id\": ...}``) is intercepted by the\nroute and converted to an RFC 9457 Problem, so it never reaches this model."},"AgentRegisterRequest":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"developer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Developer"}},"type":"object","required":["name"],"title":"AgentRegisterRequest"},"AgentRegisterResponse":{"properties":{"agent_id":{"type":"string","title":"Agent Id"},"agent_token":{"type":"string","title":"Agent Token","description":"The bfa_live_* bearer token (shown only once)"},"name":{"type":"string","title":"Name"},"created_at":{"type":"string","title":"Created At"},"latency_ms":{"type":"integer","title":"Latency Ms"}},"type":"object","required":["agent_id","agent_token","name","created_at","latency_ms"],"title":"AgentRegisterResponse"},"ApiKeyListEnvelope":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ApiKeyListItem"},"type":"array","title":"Data"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"ApiKeyListEnvelope","description":"Typed envelope for GET /api-keys — ``data`` is the caller's list of keys."},"ApiKeyListItem":{"properties":{"key_id":{"type":"string","title":"Key Id","description":"API key id"},"key_prefix":{"type":"string","title":"Key Prefix","description":"Key prefix with trailing ellipsis (e.g. 'bfx_abcd...')"},"name":{"type":"string","title":"Name","description":"Caller-assigned key name"},"is_active":{"type":"boolean","title":"Is Active","description":"Whether the key is currently active"},"status":{"type":"string","title":"Status","description":"Key status: active or pending"},"plan":{"type":"string","title":"Plan","description":"Plan tier: free, starter, pro, enterprise"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At","description":"ISO 8601 creation timestamp"},"last_used_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Used At","description":"ISO 8601 timestamp of last use (null if never used)"},"usage_today":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Usage Today","description":"Requests used today"},"usage_total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Usage Total","description":"Lifetime request count"},"rate_limit_daily":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rate Limit Daily","description":"Daily request quota"}},"type":"object","required":["key_id","key_prefix","name","is_active","status","plan","created_at","last_used_at","usage_today","usage_total","rate_limit_daily"],"title":"ApiKeyListItem","description":"One API key in the caller's key list.\n\nEvery field is always emitted, never conditionally omitted: timestamps and\ninteger counters may be null, but all properties are required in the\nschema — matching the actual wire shape."},"AsOf":{"properties":{"response":{"type":"string","format":"date-time","title":"Response"},"observed":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Observed"},"advertised":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Advertised"},"computed":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Computed"}},"additionalProperties":false,"type":"object","required":["response"],"title":"AsOf"},"AuditEndpointStat":{"properties":{"count":{"type":"integer","title":"Count"},"accurate":{"type":"integer","title":"Accurate"},"accuracy":{"type":"number","title":"Accuracy","description":"accurate / count, rounded to 3 dp (0 when count is 0)"}},"type":"object","required":["count","accurate","accuracy"],"title":"AuditEndpointStat"},"AuditLogEntry":{"properties":{"id":{"type":"string","title":"Id"},"endpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Endpoint"},"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand"},"claim":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Claim"},"verdict":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verdict","description":"The verdict recorded for this entry. The vocabulary is per-primitive, so read this value against the record's `primitive` field rather than as one flat list: a brand claim, a claim-against-sources, and a content scan report in three different vocabularies. Every value, grouped by primitive family and each with its definition, is published in this field's x-verdict-vocabulary schema extension. This field carries NO enum on purpose: the citation primitive composes its found-case verdict as found:<match_type>, so the value space is open by construction, and an enum would instruct validators to reject responses this API correctly serves. Match on the family, not on a closed set.","x-verdict-patterned-families":{"citation":"found:<match_type>"},"x-verdict-vocabulary":{"agent_reputation":{"computed":"A reputation computation occurred for this caller. Deliberately carries no tier or grade — the receipt records the act, not the outcome."},"check":{"accurate":"The claim matches the reference data Edge holds.","inaccurate":"The claim contradicts the reference data Edge holds.","partially_accurate":"The claim is within tolerance but not exact, or matches in part — never counted as a match in any published rate.","unverifiable":"Edge holds no reference data able to decide this claim. Not a statement about the claim's truth."},"citation":{"found:exact":"The quote appears verbatim in the source.","found:explicit":"A model read the source and found the quote stated explicitly.","found:fuzzy":"The quote appears in the source within the fuzzy-match threshold.","found:paraphrased":"A model read the source and found the quote paraphrased.","not_found":"The quote could not be located in the source.","unknown":"The source could not be fetched or read, so nothing was compared."},"claim":{"insufficient_evidence":"A direction was computed but the confidence tier fell below the threshold for a definitive verdict, so none is reported.","neutral":"The sources presented bear on the claim in neither direction — read, weighed, and found not to decide it.","no_data":"No source could be fetched or extracted, so nothing was weighed.","refuted":"The sources presented contradict the claim.","supported":"The sources presented support the claim."},"consent":{"conformant":"The document satisfies the pinned schema version.","nonconformant":"The document violates the pinned schema version."},"customs":{"majority":"A strict majority of voting models agreed at the declared depth.","unanimous":"Every model that produced a vote agreed at the declared depth.","unresolved":"No majority formed, or too few models voted to adjudicate. Carries a reason and no agreed code set."},"egress_gate":{"phi_absent":"The scan found no health data in the submitted material.","phi_detected":"The scan found health data in the submitted material."},"freshness":{"contradicted":"The detected reference disagrees with the newer data Edge holds.","partial":"The reference agrees in part — within tolerance but not exact.","supported":"The detected reference agrees with the newer data Edge holds.","unverifiable":"Edge holds nothing able to decide this reference."},"offline_verification":{"self_consistent_only":"Byte integrity, chain linkage, and signatures check out against the published key set. A statement about THIS BUNDLE only."},"package":{"not_found":"Edge holds no record for this package.","suspicious":"The package carries signals that warrant a human look, short of a match.","verified":"The package matches the reference record Edge holds.","vulnerable":"The package matches a known-vulnerable record."},"pii":{"pii_absent":"The scan found no personal data in the submitted material.","pii_detected":"The scan found personal data in the submitted material."},"pre_transaction_check":{"error":"That domain's check did not complete.","failed":"That domain's check contradicted the claim.","uncertain":"That domain's check neither matched nor contradicted.","verified":"That domain's check matched."},"pre_transaction_trust":{"block":"A check failed, or overall confidence is below the block floor.","caution":"A check was uncertain, or overall confidence sits in the middle band.","insufficient_data":"Fewer than half the checks reached a conclusive verdict, so the bundle declines to give a trust reading.","proceed":"No check failed and overall confidence is above the proceed floor."},"preflight":{"fail":"At least one dimension fell below its floor.","pass":"Every dimension cleared its floor."},"presented_digest":{"notarized":"The digest was presented to Edge at the recorded time. A record that this happened — never a judgment about the content behind the digest, which Edge never sees."},"run_comparison":{"divergent":"The recomputed result differs from the recorded one.","match":"The recomputed result equals the recorded one.","unverified":"The comparison could not be run, so neither outcome is claimed."},"safety":{"safe":"No category breached its floor.","unsafe":"A category breached its floor, or the safety signal was absent — a missing signal reports unsafe by design."},"subprocessors":{"incomparable":"The two sets cannot be compared — no disclosure record, or no observation to compare it against.","set_match":"The observed subprocessor set equals the disclosed set.","set_mismatch":"The observed subprocessor set differs from the disclosed set."},"tool":{"blocked":"The fetch was refused by the egress guard before any check ran.","error":"The check did not complete."}}},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confidence"},"method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Method"},"latency_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Latency Ms"},"timestamp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timestamp"}},"type":"object","required":["id"],"title":"AuditLogEntry"},"AuditLogEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/AuditLogResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"AuditLogEnvelope"},"AuditLogPagination":{"properties":{"page":{"type":"integer","title":"Page"},"per_page":{"type":"integer","title":"Per Page"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["page","per_page","total"],"title":"AuditLogPagination"},"AuditLogPeriod":{"properties":{"from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From","description":"ISO 8601 timestamp of the earliest matching entry (null when none)"},"to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To","description":"ISO 8601 timestamp of the most recent matching entry (null when none)"}},"type":"object","title":"AuditLogPeriod","description":"Date range of matching entries.\n\n``from`` is a Python reserved word, so it is declared as ``from_`` with a\nPydantic alias of ``from``. Aliasing (rather than ``extra='allow'``) keeps\nthe key visible as a named, typed property in the generated OpenAPI schema —\nthe whole point of this PR — instead of hiding it under\n``additionalProperties``. ``populate_by_name=True`` lets the model validate\neither ``from`` (the wire key) or ``from_``; the fidelity test dumps with\n``by_alias=True`` so the wire key ``from`` round-trips."},"AuditLogResponse":{"properties":{"agent_id":{"type":"string","title":"Agent Id"},"total_checks":{"type":"integer","title":"Total Checks"},"period":{"$ref":"#/components/schemas/AuditLogPeriod"},"entries":{"items":{"$ref":"#/components/schemas/AuditLogEntry"},"type":"array","title":"Entries"},"pagination":{"$ref":"#/components/schemas/AuditLogPagination"},"latency_ms":{"type":"integer","title":"Latency Ms"}},"type":"object","required":["agent_id","total_checks","period","entries","pagination","latency_ms"],"title":"AuditLogResponse"},"AuditSummaryEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/AuditSummaryResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"AuditSummaryEnvelope"},"AuditSummaryResponse":{"properties":{"agent_id":{"type":"string","title":"Agent Id"},"period":{"type":"string","title":"Period"},"total_checks":{"type":"integer","title":"Total Checks"},"by_endpoint":{"additionalProperties":{"$ref":"#/components/schemas/AuditEndpointStat"},"type":"object","title":"By Endpoint","description":"Per-endpoint counts/accuracy keyed by endpoint name"},"by_verdict":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Verdict","description":"Count of entries per verdict, keyed by verdict label"},"unique_brands_checked":{"type":"integer","title":"Unique Brands Checked"},"most_checked_brands":{"items":{"type":"string"},"type":"array","title":"Most Checked Brands"},"latency_ms":{"type":"integer","title":"Latency Ms"}},"type":"object","required":["agent_id","period","total_checks","unique_brands_checked","most_checked_brands","latency_ms"],"title":"AuditSummaryResponse"},"AuthHelpResponse":{"properties":{"title":{"type":"string","title":"Title"},"key_format":{"type":"string","title":"Key Format"},"header":{"type":"string","title":"Header"},"example":{"type":"string","title":"Example"},"obtain_key":{"type":"string","title":"Obtain Key"},"enrolment":{"$ref":"#/components/schemas/Enrolment"},"keyless_x402":{"type":"string","title":"Keyless X402"},"x402_discovery":{"type":"string","title":"X402 Discovery"},"rate_limits":{"$ref":"#/components/schemas/RateLimits"},"mcp_endpoint":{"type":"string","title":"Mcp Endpoint"},"mcp_transport":{"type":"string","title":"Mcp Transport"},"mcp_header":{"type":"string","title":"Mcp Header"},"docs_url":{"type":"string","title":"Docs Url"},"support":{"type":"string","title":"Support"},"spec_version":{"type":"string","title":"Spec Version"}},"type":"object","required":["title","key_format","header","example","obtain_key","enrolment","keyless_x402","x402_discovery","rate_limits","mcp_endpoint","mcp_transport","mcp_header","docs_url","support","spec_version"],"title":"AuthHelpResponse"},"Basis":{"properties":{"inputs":{"items":{"$ref":"#/components/schemas/BasisInput"},"type":"array","title":"Inputs"}},"additionalProperties":false,"type":"object","required":["inputs"],"title":"Basis"},"BasisInput":{"properties":{"source":{"type":"string","title":"Source"},"as_of":{"type":"string","format":"date-time","title":"As Of"},"freshness":{"type":"string","pattern":"^(fresh|stale|unknown)$","title":"Freshness"}},"additionalProperties":false,"type":"object","required":["source","as_of","freshness"],"title":"BasisInput"},"BatchSafetyCheckRequest":{"properties":{"items":{"items":{"$ref":"#/components/schemas/SafetyCheckRequest"},"type":"array","maxItems":20,"minItems":1,"title":"Items"}},"type":"object","required":["items"],"title":"BatchSafetyCheckRequest"},"BatchTrustRequest":{"properties":{"agent_ids":{"items":{"type":"string"},"type":"array","maxItems":50,"minItems":1,"title":"Agent Ids"}},"type":"object","required":["agent_ids"],"title":"BatchTrustRequest"},"BatchTrustScoreResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/TrustScoreSummary"},"type":"array","title":"Results"},"count":{"type":"integer","title":"Count"},"latency_ms":{"type":"integer","title":"Latency Ms"}},"type":"object","required":["results","count","latency_ms"],"title":"BatchTrustScoreResponse"},"BatchVerifyResponse":{"properties":{"batch_id":{"type":"string","title":"Batch Id"},"items_submitted":{"type":"integer","title":"Items Submitted"},"items_succeeded":{"type":"integer","title":"Items Succeeded"},"items_failed":{"type":"integer","title":"Items Failed"},"results":{"items":{},"type":"array","title":"Results"},"total_cost_usd":{"type":"number","title":"Total Cost Usd","default":0.0},"total_latency_ms":{"type":"integer","title":"Total Latency Ms","default":0},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"}},"type":"object","required":["items_submitted","items_succeeded","items_failed","results"],"title":"BatchVerifyResponse","description":"Shared batch response schema."},"BehaviorContractCreateResponse":{"properties":{"contract_id":{"type":"string","title":"Contract Id"},"slug":{"type":"string","title":"Slug"},"version":{"type":"integer","title":"Version"},"case_count":{"type":"integer","minimum":0.0,"title":"Case Count","description":"Cases in the normalized golden suite"},"dimension_count":{"type":"integer","minimum":0.0,"title":"Dimension Count","description":"Distinct dimensions across the suite"},"content_digest":{"type":"string","title":"Content Digest","description":"\"sha256:\"+hex over the RFC 8785 canonical normalized suite"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","title":"Created At"},"norm_version":{"type":"string","title":"Norm Version"}},"type":"object","required":["contract_id","slug","version","case_count","dimension_count","content_digest","is_active","created_at","norm_version"],"title":"BehaviorContractCreateResponse"},"BehaviorContractDetailResponse":{"properties":{"contract_id":{"type":"string","title":"Contract Id"},"slug":{"type":"string","title":"Slug"},"version":{"type":"integer","title":"Version"},"case_count":{"type":"integer","minimum":0.0,"title":"Case Count","description":"Cases in the normalized golden suite"},"dimension_count":{"type":"integer","minimum":0.0,"title":"Dimension Count","description":"Distinct dimensions across the suite"},"content_digest":{"type":"string","title":"Content Digest","description":"\"sha256:\"+hex over the RFC 8785 canonical normalized suite"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","title":"Created At"},"cases":{"items":{},"type":"array","title":"Cases","description":"The normalized suite cases as stored (closed comparator vocabulary)"},"norm_version":{"type":"string","title":"Norm Version"}},"type":"object","required":["contract_id","slug","version","case_count","dimension_count","content_digest","is_active","created_at","norm_version"],"title":"BehaviorContractDetailResponse"},"BehaviorContractListResponse":{"properties":{"contracts":{"items":{"$ref":"#/components/schemas/BehaviorContractRow"},"type":"array","title":"Contracts"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["contracts","count"],"title":"BehaviorContractListResponse"},"BehaviorContractRow":{"properties":{"contract_id":{"type":"string","title":"Contract Id"},"slug":{"type":"string","title":"Slug"},"version":{"type":"integer","title":"Version"},"case_count":{"type":"integer","minimum":0.0,"title":"Case Count","description":"Cases in the normalized golden suite"},"dimension_count":{"type":"integer","minimum":0.0,"title":"Dimension Count","description":"Distinct dimensions across the suite"},"content_digest":{"type":"string","title":"Content Digest","description":"\"sha256:\"+hex over the RFC 8785 canonical normalized suite"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["contract_id","slug","version","case_count","dimension_count","content_digest","is_active","created_at"],"title":"BehaviorContractRow"},"BehaviorFallbackCreateResponse":{"properties":{"fallback_id":{"type":"string","title":"Fallback Id"},"slug":{"type":"string","title":"Slug"},"version":{"type":"integer","title":"Version"},"kind":{"type":"string","title":"Kind","description":"Closed fallback kind: substitute-model | ported-harness | standby-estate"},"reference_slug":{"type":"string","title":"Reference Slug"},"reference_version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reference Version","description":"Pinned bound reference version; null = latest active at run time"},"contract_slug":{"type":"string","title":"Contract Slug"},"contract_version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Contract Version","description":"Pinned bound contract version; null = latest active at run time"},"cadence":{"type":"string","title":"Cadence","description":"Declared re-check cadence (closed vocabulary)"},"triggers":{"items":{},"type":"array","title":"Triggers","description":"Declared trigger tokens (closed vocabulary, sorted)"},"content_digest":{"type":"string","title":"Content Digest","description":"\"sha256:\"+hex over the RFC 8785 canonical declaration"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","title":"Created At"},"subject":{"additionalProperties":true,"type":"object","title":"Subject","description":"The declared fallback subject descriptor as stored"},"norm_version":{"type":"string","title":"Norm Version"}},"type":"object","required":["fallback_id","slug","version","kind","reference_slug","contract_slug","cadence","content_digest","is_active","created_at","norm_version"],"title":"BehaviorFallbackCreateResponse"},"BehaviorFallbackDetailResponse":{"properties":{"fallback_id":{"type":"string","title":"Fallback Id"},"slug":{"type":"string","title":"Slug"},"version":{"type":"integer","title":"Version"},"kind":{"type":"string","title":"Kind","description":"Closed fallback kind: substitute-model | ported-harness | standby-estate"},"reference_slug":{"type":"string","title":"Reference Slug"},"reference_version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reference Version","description":"Pinned bound reference version; null = latest active at run time"},"contract_slug":{"type":"string","title":"Contract Slug"},"contract_version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Contract Version","description":"Pinned bound contract version; null = latest active at run time"},"cadence":{"type":"string","title":"Cadence","description":"Declared re-check cadence (closed vocabulary)"},"triggers":{"items":{},"type":"array","title":"Triggers","description":"Declared trigger tokens (closed vocabulary, sorted)"},"content_digest":{"type":"string","title":"Content Digest","description":"\"sha256:\"+hex over the RFC 8785 canonical declaration"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","title":"Created At"},"subject":{"additionalProperties":true,"type":"object","title":"Subject","description":"The declared fallback subject descriptor as stored"},"norm_version":{"type":"string","title":"Norm Version"}},"type":"object","required":["fallback_id","slug","version","kind","reference_slug","contract_slug","cadence","content_digest","is_active","created_at","norm_version"],"title":"BehaviorFallbackDetailResponse"},"BehaviorFallbackListResponse":{"properties":{"fallbacks":{"items":{"$ref":"#/components/schemas/BehaviorFallbackRow"},"type":"array","title":"Fallbacks"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["fallbacks","count"],"title":"BehaviorFallbackListResponse"},"BehaviorFallbackRow":{"properties":{"fallback_id":{"type":"string","title":"Fallback Id"},"slug":{"type":"string","title":"Slug"},"version":{"type":"integer","title":"Version"},"kind":{"type":"string","title":"Kind","description":"Closed fallback kind: substitute-model | ported-harness | standby-estate"},"reference_slug":{"type":"string","title":"Reference Slug"},"reference_version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reference Version","description":"Pinned bound reference version; null = latest active at run time"},"contract_slug":{"type":"string","title":"Contract Slug"},"contract_version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Contract Version","description":"Pinned bound contract version; null = latest active at run time"},"cadence":{"type":"string","title":"Cadence","description":"Declared re-check cadence (closed vocabulary)"},"triggers":{"items":{},"type":"array","title":"Triggers","description":"Declared trigger tokens (closed vocabulary, sorted)"},"content_digest":{"type":"string","title":"Content Digest","description":"\"sha256:\"+hex over the RFC 8785 canonical declaration"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["fallback_id","slug","version","kind","reference_slug","contract_slug","cadence","content_digest","is_active","created_at"],"title":"BehaviorFallbackRow"},"BehaviorReferenceCreateResponse":{"properties":{"reference_id":{"type":"string","title":"Reference Id"},"slug":{"type":"string","title":"Slug"},"version":{"type":"integer","title":"Version"},"case_count":{"type":"integer","minimum":0.0,"title":"Case Count","description":"Cases in the normalized snapshot"},"dimension_count":{"type":"integer","minimum":0.0,"title":"Dimension Count","description":"Distinct dimensions across the snapshot"},"content_digest":{"type":"string","title":"Content Digest","description":"\"sha256:\"+hex over the RFC 8785 canonical {subject, snapshot} pair"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","title":"Created At"},"subject":{"additionalProperties":true,"type":"object","title":"Subject","description":"The declared subject descriptor as stored"},"norm_version":{"type":"string","title":"Norm Version"}},"type":"object","required":["reference_id","slug","version","case_count","dimension_count","content_digest","is_active","created_at","norm_version"],"title":"BehaviorReferenceCreateResponse"},"BehaviorReferenceDetailResponse":{"properties":{"reference_id":{"type":"string","title":"Reference Id"},"slug":{"type":"string","title":"Slug"},"version":{"type":"integer","title":"Version"},"case_count":{"type":"integer","minimum":0.0,"title":"Case Count","description":"Cases in the normalized snapshot"},"dimension_count":{"type":"integer","minimum":0.0,"title":"Dimension Count","description":"Distinct dimensions across the snapshot"},"content_digest":{"type":"string","title":"Content Digest","description":"\"sha256:\"+hex over the RFC 8785 canonical {subject, snapshot} pair"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","title":"Created At"},"subject":{"additionalProperties":true,"type":"object","title":"Subject","description":"The declared subject descriptor as stored"},"cases":{"items":{},"type":"array","title":"Cases","description":"The normalized snapshot cases as stored (digest/numeric observation values only)"},"norm_version":{"type":"string","title":"Norm Version"}},"type":"object","required":["reference_id","slug","version","case_count","dimension_count","content_digest","is_active","created_at","norm_version"],"title":"BehaviorReferenceDetailResponse"},"BehaviorReferenceListResponse":{"properties":{"references":{"items":{"$ref":"#/components/schemas/BehaviorReferenceRow"},"type":"array","title":"References"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["references","count"],"title":"BehaviorReferenceListResponse"},"BehaviorReferenceRow":{"properties":{"reference_id":{"type":"string","title":"Reference Id"},"slug":{"type":"string","title":"Slug"},"version":{"type":"integer","title":"Version"},"case_count":{"type":"integer","minimum":0.0,"title":"Case Count","description":"Cases in the normalized snapshot"},"dimension_count":{"type":"integer","minimum":0.0,"title":"Dimension Count","description":"Distinct dimensions across the snapshot"},"content_digest":{"type":"string","title":"Content Digest","description":"\"sha256:\"+hex over the RFC 8785 canonical {subject, snapshot} pair"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["reference_id","slug","version","case_count","dimension_count","content_digest","is_active","created_at"],"title":"BehaviorReferenceRow"},"BillingUsageResponse":{"properties":{"plan":{"type":"string","title":"Plan","description":"Caller's billing plan: free, starter, pro, enterprise"},"daily_limit":{"type":"integer","title":"Daily Limit","description":"Daily request cap for the plan (calls/day)"},"calls_today":{"type":"integer","title":"Calls Today","description":"Requests consumed in the current UTC day (DB counter + live Redis delta)"},"remaining":{"type":"integer","title":"Remaining","description":"Requests left before the cap: max(0, daily_limit - calls_today)"},"reset_at":{"type":"string","title":"Reset At","description":"ISO-8601 UTC timestamp of the next daily reset (next midnight UTC)"}},"type":"object","required":["plan","daily_limit","calls_today","remaining","reset_at"],"title":"BillingUsageResponse","description":"Payload for GET /billing/usage (and /v1/billing/usage).\n\nThe caller's own current usage against their plan's daily cap, scoped to\nthe authenticated Bearer key. ``calls_today`` is billing-true: the durable\nDB counter plus the live, not-yet-flushed Redis delta (usage is batched in\nRedis and periodically flushed to the DB by the rate limiter). The\ndaily window resets at midnight UTC, matching the rate limiter's enforced\nreset.\n\nField reservation: x402 / Stripe payment rows are not joined here yet. When\nthe payment ledger is modelable, a ``payments`` object will be added without\nbreaking this shape (extra fields are additive). This endpoint ships\nusage only; payments are explicitly out of scope."},"BrandAvailabilityData":{"properties":{"ships_internationally":{"type":"boolean","title":"Ships Internationally"},"countries":{"items":{"type":"string"},"type":"array","title":"Countries"},"us_available":{"type":"boolean","title":"Us Available"},"eu_available":{"type":"boolean","title":"Eu Available"},"uk_available":{"type":"boolean","title":"Uk Available"},"canada_available":{"type":"boolean","title":"Canada Available"},"australia_available":{"type":"boolean","title":"Australia Available"},"restrictions_note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Restrictions Note"},"store_locator_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Store Locator Url"},"source_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Type"},"last_verified":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Verified"}},"type":"object","required":["ships_internationally","countries","us_available","eu_available","uk_available","canada_available","australia_available"],"title":"BrandAvailabilityData"},"BrandAvailabilityEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/BrandAvailabilityResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"BrandAvailabilityEnvelope"},"BrandAvailabilityResponse":{"properties":{"brand":{"type":"string","title":"Brand"},"availability":{"anyOf":[{"$ref":"#/components/schemas/BrandAvailabilityData"},{"type":"null"}]},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"latency_ms":{"type":"integer","title":"Latency Ms"}},"type":"object","required":["brand","latency_ms"],"title":"BrandAvailabilityResponse"},"BrandCheckRequest":{"properties":{"brand":{"type":"string","title":"Brand"},"claims":{"items":{"type":"string"},"type":"array","maxItems":10,"minItems":1,"title":"Claims","description":"1-10 claims to verify, max 2000 chars each"},"depth":{"type":"string","pattern":"^(fast|standard|auto)$","title":"Depth","default":"auto"},"agent_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Token"},"include_sentiment":{"type":"boolean","title":"Include Sentiment","default":false}},"type":"object","required":["brand","claims"],"title":"BrandCheckRequest"},"BrandCheckResponse":{"properties":{"brand":{"type":"string","title":"Brand","description":"Resolved brand slug"},"results":{"items":{"$ref":"#/components/schemas/BrandCheckResultItem"},"type":"array","title":"Results","description":"Per-claim verification results"},"brand_definition_version":{"type":"integer","title":"Brand Definition Version","description":"Version of the brand definition used"},"verified_at":{"type":"string","title":"Verified At","description":"ISO 8601 timestamp of verification"},"latency_ms":{"type":"integer","title":"Latency Ms","description":"End-to-end latency in milliseconds"},"depth_used":{"type":"string","title":"Depth Used","description":"Verification depth: fast, standard, or auto"}},"type":"object","required":["brand","results","brand_definition_version","verified_at","latency_ms","depth_used"],"title":"BrandCheckResponse","description":"Response payload for POST /brand/check."},"BrandCheckResultItem":{"properties":{"claim":{"type":"string","title":"Claim","description":"The claim that was checked"},"verdict":{"type":"string","enum":["accurate","inaccurate","partially_accurate","unverifiable"],"title":"Verdict","description":"Verification verdict for this claim, against the brand reference data Edge holds. Vocabulary — accurate: The claim matches the reference data Edge holds. · inaccurate: The claim contradicts the reference data Edge holds. · partially_accurate: The claim is within tolerance but not exact, or matches in part — never counted as a match in any published rate. · unverifiable: Edge holds no reference data able to decide this claim. Not a statement about the claim's truth."},"confidence":{"type":"number","title":"Confidence","description":"Confidence score 0.0-1.0"},"confidence_tier":{"type":"string","title":"Confidence Tier","description":"Discrete tier derived from confidence"},"evidence":{"type":"string","title":"Evidence","description":"Primary supporting evidence excerpt"},"method":{"type":"string","title":"Method","description":"Method that produced the verdict (rule_match, llm, etc.)"},"sentiment":{"anyOf":[{},{"type":"null"}],"title":"Sentiment","description":"Sentiment analysis (only if include_sentiment=true)"},"receipt_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Receipt Id","description":"ULID of the reliance receipt staged for this verdict — the caller's correlation handle. Resolvable via GET /receipts/{receipt_id} with the same API key once the drain worker materializes it (asynchronous; typically seconds — 404 until then). Null when no durable receipt was staged (e.g. pay-per-call x402 payment without an API key) or the write degraded."},"next_action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Action","description":"Machine token naming the suggested next step when the rule tier could not decide this claim (currently always 'retry_with_depth_auto'). Present only on rule-tier unverifiable results — the same flat grammar 401/403 Problem responses carry; absent on confident verdicts and the LLM tier."},"hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hint","description":"Agent-readable guidance beside next_action: names depth:'auto' (LLM verification of the same claim) and POST /verify/claim (verify against a URL you supply). Present only with next_action."},"hint_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hint Url","description":"Documentation URL for the suggested next step. Present only with next_action."}},"type":"object","required":["claim","verdict","confidence","confidence_tier","evidence","method"],"title":"BrandCheckResultItem","description":"Single verification result inside a /brand/check response."},"BrandContactData":{"properties":{"customer_service_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customer Service Phone"},"customer_service_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customer Service Email"},"support_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Support Url"},"chat_available":{"type":"boolean","title":"Chat Available"},"social":{"$ref":"#/components/schemas/BrandContactSocial"},"hours_note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hours Note"},"last_verified":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Verified"}},"type":"object","required":["chat_available","social"],"title":"BrandContactData"},"BrandContactEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/BrandContactResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"BrandContactEnvelope"},"BrandContactResponse":{"properties":{"brand":{"type":"string","title":"Brand"},"contact":{"anyOf":[{"$ref":"#/components/schemas/BrandContactData"},{"type":"null"}]},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"latency_ms":{"type":"integer","title":"Latency Ms"}},"type":"object","required":["brand","latency_ms"],"title":"BrandContactResponse"},"BrandContactSocial":{"properties":{"twitter":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Twitter"},"instagram":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instagram"},"facebook":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Facebook"},"linkedin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin"}},"type":"object","title":"BrandContactSocial"},"BrandDefinitionResponse":{"properties":{"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"positioning":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Positioning","description":"Brand positioning data (JSON object)"},"policies":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Policies","description":"Brand policies data (JSON object)"},"pricing":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Pricing","description":"Brand pricing data (JSON object)"},"messaging":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Messaging","description":"Brand messaging data (JSON object)"},"compiled_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Compiled At"},"source":{"type":"string","title":"Source","description":"Definition source: manual, compiled, etc."},"version":{"type":"integer","title":"Version","description":"Definition version"},"latency_ms":{"type":"integer","title":"Latency Ms"}},"type":"object","required":["slug","name","source","version","latency_ms"],"title":"BrandDefinitionResponse","description":"Response payload for GET /brand/{slug}/definition."},"BrandHoursData":{"properties":{"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"is_24_7":{"type":"boolean","title":"Is 24 7"},"is_online_only":{"type":"boolean","title":"Is Online Only"},"has_physical_stores":{"type":"boolean","title":"Has Physical Stores"},"typical_hours":{"anyOf":[{},{"type":"null"}],"title":"Typical Hours","description":"Typical operating hours (JSON object, schema varies)"},"customer_service":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Customer Service","description":"Customer-service hours (JSON object)"},"online_store":{"anyOf":[{},{"type":"null"}],"title":"Online Store","description":"Online-store hours (JSON, schema varies)"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"store_locator_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Store Locator Url"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"},"last_verified":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Verified"}},"type":"object","required":["is_24_7","is_online_only","has_physical_stores"],"title":"BrandHoursData"},"BrandHoursEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/BrandHoursResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"BrandHoursEnvelope"},"BrandHoursResponse":{"properties":{"brand":{"type":"string","title":"Brand"},"hours":{"anyOf":[{"$ref":"#/components/schemas/BrandHoursData"},{"type":"null"}]},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"latency_ms":{"type":"integer","title":"Latency Ms"}},"type":"object","required":["brand","latency_ms"],"title":"BrandHoursResponse"},"BrandModelEntry":{"properties":{"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"sentiment":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Sentiment"},"recommendation_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Recommendation Rate"},"mention_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mention Count"},"is_divergent":{"type":"boolean","title":"Is Divergent"}},"type":"object","required":["is_divergent"],"title":"BrandModelEntry"},"BrandModelsEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/BrandModelsResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"BrandModelsEnvelope"},"BrandModelsResponse":{"properties":{"brand":{"type":"string","title":"Brand"},"models":{"items":{"$ref":"#/components/schemas/BrandModelEntry"},"type":"array","title":"Models"},"cross_model_mean_sentiment":{"type":"number","title":"Cross Model Mean Sentiment"},"divergent_models":{"items":{"type":"string"},"type":"array","title":"Divergent Models"},"total_models":{"type":"integer","title":"Total Models"},"latency_ms":{"type":"integer","title":"Latency Ms"}},"type":"object","required":["brand","models","cross_model_mean_sentiment","divergent_models","total_models","latency_ms"],"title":"BrandModelsResponse"},"BrandMonitorEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/BrandMonitorResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"BrandMonitorEnvelope"},"BrandMonitorResponse":{"properties":{"brand":{"type":"string","title":"Brand"},"health_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Health Score"},"health_tier":{"type":"string","title":"Health Tier"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note","description":"Present only on the unmonitored branch"},"sentiment":{"anyOf":[{"$ref":"#/components/schemas/MonitorSentiment"},{"type":"null"}]},"recommendations":{"anyOf":[{"$ref":"#/components/schemas/MonitorRecommendations"},{"type":"null"}]},"mention_count_30d":{"type":"integer","title":"Mention Count 30D"},"model_agreement_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Model Agreement Rate"},"claim_accuracy_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Claim Accuracy Rate"},"alerts":{"items":{},"type":"array","title":"Alerts"},"computed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Computed At"},"latency_ms":{"type":"integer","title":"Latency Ms"}},"type":"object","required":["brand","health_tier","mention_count_30d","alerts","latency_ms"],"title":"BrandMonitorResponse"},"BrandNarrativeEntry":{"properties":{"narrative":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Narrative"},"frequency":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Frequency"},"sentiment":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Sentiment"},"models_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Models Count"},"trend":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trend"},"is_emerging":{"type":"boolean","title":"Is Emerging"},"first_seen":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Seen"},"sample_claims":{"items":{},"type":"array","title":"Sample Claims"}},"type":"object","required":["is_emerging","sample_claims"],"title":"BrandNarrativeEntry"},"BrandNarrativesEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/BrandNarrativesResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"BrandNarrativesEnvelope"},"BrandNarrativesResponse":{"properties":{"brand":{"type":"string","title":"Brand"},"narratives":{"items":{"$ref":"#/components/schemas/BrandNarrativeEntry"},"type":"array","title":"Narratives"},"total":{"type":"integer","title":"Total"},"latency_ms":{"type":"integer","title":"Latency Ms"}},"type":"object","required":["brand","narratives","total","latency_ms"],"title":"BrandNarrativesResponse"},"BrandProfileEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/BrandProfileResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"BrandProfileEnvelope"},"BrandProfileListEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/BrandProfileListResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"BrandProfileListEnvelope"},"BrandProfileListItem":{"properties":{"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"policies_count":{"type":"integer","title":"Policies Count"},"products_count":{"type":"integer","title":"Products Count"},"completeness":{"type":"number","title":"Completeness"}},"type":"object","required":["slug","name","policies_count","products_count","completeness"],"title":"BrandProfileListItem"},"BrandProfileListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/BrandProfileListItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"latency_ms":{"type":"integer","title":"Latency Ms"}},"type":"object","required":["items","total","latency_ms"],"title":"BrandProfileListResponse"},"BrandProfileResponse":{"properties":{"brand":{"type":"string","title":"Brand"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"policies":{"$ref":"#/components/schemas/ProfilePolicies"},"pricing":{"$ref":"#/components/schemas/ProfilePricing"},"financials":{"anyOf":[{"$ref":"#/components/schemas/ProfileFinancials"},{"type":"null"}]},"positioning":{"additionalProperties":true,"type":"object","title":"Positioning","description":"Brand positioning JSON (schema varies)"},"messaging":{"additionalProperties":true,"type":"object","title":"Messaging","description":"Brand messaging JSON (schema varies)"},"agent_compatibility":{"anyOf":[{"$ref":"#/components/schemas/ProfileAgentCompatibility"},{"type":"null"}]},"verification":{"$ref":"#/components/schemas/ProfileVerification"},"data_sources":{"items":{"type":"string"},"type":"array","title":"Data Sources"},"profile_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Version"},"latency_ms":{"type":"integer","title":"Latency Ms"}},"type":"object","required":["brand","policies","pricing","verification","data_sources","latency_ms"],"title":"BrandProfileResponse"},"BrandPromotionEntry":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"discount":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Discount"},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"conditions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conditions"},"valid_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Valid From"},"valid_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Valid To"},"is_stale":{"type":"boolean","title":"Is Stale"},"freshness_warning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Freshness Warning"}},"type":"object","required":["is_stale"],"title":"BrandPromotionEntry"},"BrandPromotionsBlock":{"properties":{"active":{"items":{"$ref":"#/components/schemas/BrandPromotionEntry"},"type":"array","title":"Active"},"count":{"type":"integer","title":"Count"},"stale_count":{"type":"integer","title":"Stale Count"},"disclaimer":{"type":"string","title":"Disclaimer"},"last_verified":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Verified"},"freshness_warning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Freshness Warning"}},"type":"object","required":["active","count","stale_count","disclaimer"],"title":"BrandPromotionsBlock"},"BrandPromotionsEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/BrandPromotionsResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"BrandPromotionsEnvelope"},"BrandPromotionsResponse":{"properties":{"brand":{"type":"string","title":"Brand"},"promotions":{"$ref":"#/components/schemas/BrandPromotionsBlock"},"latency_ms":{"type":"integer","title":"Latency Ms"}},"type":"object","required":["brand","promotions","latency_ms"],"title":"BrandPromotionsResponse"},"BrandRecommendationCategory":{"properties":{"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"recommendation_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Recommendation Rate"},"trend_30d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Trend 30D"},"top_competitor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Top Competitor"},"top_competitor_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Top Competitor Rate"},"period":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Period"}},"type":"object","title":"BrandRecommendationCategory"},"BrandRecommendationsEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/BrandRecommendationsResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"BrandRecommendationsEnvelope"},"BrandRecommendationsResponse":{"properties":{"brand":{"type":"string","title":"Brand"},"categories":{"items":{"$ref":"#/components/schemas/BrandRecommendationCategory"},"type":"array","title":"Categories"},"total_categories":{"type":"integer","title":"Total Categories"},"latency_ms":{"type":"integer","title":"Latency Ms"}},"type":"object","required":["brand","categories","total_categories","latency_ms"],"title":"BrandRecommendationsResponse"},"BrandSummary":{"properties":{"slug":{"type":"string","title":"Slug","description":"URL-safe brand identifier"},"name":{"type":"string","title":"Name","description":"Display name"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category","description":"Brand category"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website","description":"Brand website URL"}},"type":"object","required":["slug","name"],"title":"BrandSummary","description":"Summary of a brand, returned in list endpoints."},"BreakdownDirections":{"properties":{"overstates":{"type":"integer","title":"Overstates","description":"Divergents where the stored value exceeds the canonical truth","default":0},"understates":{"type":"integer","title":"Understates","description":"Divergents where the stored value is below the canonical truth","default":0},"mismatch":{"type":"integer","title":"Mismatch","description":"Categorical (string/catalog) divergents — no numeric direction","default":0}},"type":"object","title":"BreakdownDirections","description":"Divergent-direction tally (the ``breakdown.directions`` tally).\n\nOrdered-magnitude fields carry overstates/understates (stored value above /\nbelow the canonical truth); categorical fields carry ``mismatch``. A direction\nabsent from the stored block is a TRUE ZERO (no divergence of that kind), never\na fabricated count."},"ClusterBrand":{"properties":{"brand_id":{"type":"string","title":"Brand Id"},"display_name":{"type":"string","title":"Display Name"},"vertical":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vertical"},"health_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Health Score"},"sentiment_positive":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Sentiment Positive"},"recommendation_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Recommendation Rate"}},"type":"object","required":["brand_id","display_name"],"title":"ClusterBrand"},"ClusterDetailEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/ClusterDetailResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"ClusterDetailEnvelope"},"ClusterDetailResponse":{"properties":{"cluster_id":{"type":"integer","title":"Cluster Id"},"size":{"type":"integer","title":"Size"},"dominant_vertical":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dominant Vertical"},"purity":{"type":"number","title":"Purity"},"verticals":{"items":{"type":"string"},"type":"array","title":"Verticals"},"avg_trust_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Trust Score"},"avg_sentiment":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Sentiment"},"avg_recommendation_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Recommendation Rate"},"brands":{"items":{"$ref":"#/components/schemas/ClusterBrand"},"type":"array","title":"Brands"},"latency_ms":{"type":"integer","title":"Latency Ms"}},"type":"object","required":["cluster_id","size","purity","verticals","brands","latency_ms"],"title":"ClusterDetailResponse"},"ClusterListEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/ClusterListResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"ClusterListEnvelope"},"ClusterListResponse":{"properties":{"clusters":{"items":{"$ref":"#/components/schemas/ClusterSummary"},"type":"array","title":"Clusters"},"total_clusters":{"type":"integer","title":"Total Clusters"},"latency_ms":{"type":"integer","title":"Latency Ms"},"sort_by":{"type":"string","title":"Sort By"}},"type":"object","required":["clusters","total_clusters","latency_ms","sort_by"],"title":"ClusterListResponse"},"ClusterSummary":{"properties":{"cluster_id":{"type":"integer","title":"Cluster Id"},"size":{"type":"integer","title":"Size"},"dominant_vertical":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dominant Vertical"},"purity":{"type":"number","title":"Purity"},"avg_trust_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Trust Score"},"avg_sentiment":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Sentiment"},"top_brands":{"items":{"$ref":"#/components/schemas/ClusterTopBrand"},"type":"array","title":"Top Brands"}},"type":"object","required":["cluster_id","size","purity","top_brands"],"title":"ClusterSummary"},"ClusterTopBrand":{"properties":{"brand_id":{"type":"string","title":"Brand Id"},"display_name":{"type":"string","title":"Display Name"},"health_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Health Score"}},"type":"object","required":["brand_id","display_name"],"title":"ClusterTopBrand"},"CompetitiveCheckRequest":{"properties":{"claims":{"items":{"type":"string"},"type":"array","maxItems":10,"minItems":1,"title":"Claims"},"depth":{"type":"string","pattern":"^(fast|standard|auto)$","title":"Depth","default":"auto"},"include_sentiment":{"type":"boolean","title":"Include Sentiment","default":false}},"type":"object","required":["claims"],"title":"CompetitiveCheckRequest"},"CompetitiveCheckResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/CompetitiveCheckResultItem"},"type":"array","title":"Results"},"verified_at":{"type":"string","title":"Verified At"},"latency_ms":{"type":"integer","title":"Latency Ms"},"depth_used":{"type":"string","title":"Depth Used"}},"type":"object","required":["results","verified_at","latency_ms","depth_used"],"title":"CompetitiveCheckResponse"},"CompetitiveCheckResultItem":{"properties":{"claim":{"type":"string","title":"Claim"},"verdict":{"type":"string","enum":["accurate","inaccurate","partially_accurate","unverifiable"],"title":"Verdict","description":"Verification verdict for this claim, against the reference data Edge holds for this domain. Vocabulary — accurate: The claim matches the reference data Edge holds. · inaccurate: The claim contradicts the reference data Edge holds. · partially_accurate: The claim is within tolerance but not exact, or matches in part — never counted as a match in any published rate. · unverifiable: Edge holds no reference data able to decide this claim. Not a statement about the claim's truth."},"confidence":{"type":"number","title":"Confidence"},"confidence_tier":{"type":"string","title":"Confidence Tier"},"evidence":{"type":"string","title":"Evidence"},"method":{"type":"string","title":"Method"},"sentiment":{"anyOf":[{},{"type":"null"}],"title":"Sentiment"},"next_action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Action","description":"Machine token naming the suggested next step when the rule tier could not decide this claim (currently always 'retry_with_depth_auto'). Present only on rule-tier unverifiable results — the same flat grammar 401/403 Problem responses carry; absent on confident verdicts and the LLM tier."},"hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hint","description":"Agent-readable guidance beside next_action: names depth:'auto' (LLM verification of the same claim) and POST /verify/claim (verify against a URL you supply). Present only with next_action."},"hint_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hint Url","description":"Documentation URL for the suggested next step. Present only with next_action."},"competitive_data":{"anyOf":[{},{"type":"null"}],"title":"Competitive Data","description":"Domain-specific structured data"}},"type":"object","required":["claim","verdict","confidence","confidence_tier","evidence","method"],"title":"CompetitiveCheckResultItem"},"CompetitiveRadarEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/CompetitiveRadarResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"CompetitiveRadarEnvelope"},"CompetitiveRadarResponse":{"properties":{"brand":{"type":"string","title":"Brand"},"health_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Health Score"},"health_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Health Tier"},"competitors":{"items":{"$ref":"#/components/schemas/MonitorCompetitor"},"type":"array","title":"Competitors"},"competitive_claims":{"items":{"$ref":"#/components/schemas/MonitorCompetitiveClaim"},"type":"array","title":"Competitive Claims"},"latency_ms":{"type":"integer","title":"Latency Ms"}},"type":"object","required":["brand","competitors","competitive_claims","latency_ms"],"title":"CompetitiveRadarResponse"},"ComplianceCheckRequest":{"properties":{"brand":{"type":"string","title":"Brand"},"claims":{"items":{"type":"string"},"type":"array","maxItems":10,"minItems":1,"title":"Claims"},"depth":{"type":"string","pattern":"^(fast|standard|auto)$","title":"Depth","default":"auto"}},"type":"object","required":["brand","claims"],"title":"ComplianceCheckRequest"},"ComplianceCheckResponse":{"properties":{"brand":{"type":"string","title":"Brand"},"results":{"items":{"$ref":"#/components/schemas/ComplianceCheckResultItem"},"type":"array","title":"Results"},"compliance_records":{"type":"integer","title":"Compliance Records"},"verified_at":{"type":"string","title":"Verified At"},"latency_ms":{"type":"integer","title":"Latency Ms"},"depth_used":{"type":"string","title":"Depth Used"}},"type":"object","required":["brand","results","compliance_records","verified_at","latency_ms","depth_used"],"title":"ComplianceCheckResponse"},"ComplianceCheckResultItem":{"properties":{"claim":{"type":"string","title":"Claim"},"verdict":{"type":"string","enum":["accurate","inaccurate","partially_accurate","unverifiable"],"title":"Verdict","description":"Verification verdict for this claim, against the reference data Edge holds for this domain. Vocabulary — accurate: The claim matches the reference data Edge holds. · inaccurate: The claim contradicts the reference data Edge holds. · partially_accurate: The claim is within tolerance but not exact, or matches in part — never counted as a match in any published rate. · unverifiable: Edge holds no reference data able to decide this claim. Not a statement about the claim's truth."},"confidence":{"type":"number","title":"Confidence"},"confidence_tier":{"type":"string","title":"Confidence Tier"},"evidence":{"type":"string","title":"Evidence"},"method":{"type":"string","title":"Method"},"sentiment":{"anyOf":[{},{"type":"null"}],"title":"Sentiment"},"next_action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Action","description":"Machine token naming the suggested next step when the rule tier could not decide this claim (currently always 'retry_with_depth_auto'). Present only on rule-tier unverifiable results — the same flat grammar 401/403 Problem responses carry; absent on confident verdicts and the LLM tier."},"hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hint","description":"Agent-readable guidance beside next_action: names depth:'auto' (LLM verification of the same claim) and POST /verify/claim (verify against a URL you supply). Present only with next_action."},"hint_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hint Url","description":"Documentation URL for the suggested next step. Present only with next_action."},"compliance_data":{"anyOf":[{},{"type":"null"}],"title":"Compliance Data","description":"Domain-specific structured data"}},"type":"object","required":["claim","verdict","confidence","confidence_tier","evidence","method"],"title":"ComplianceCheckResultItem"},"ConditionCreate":{"properties":{"field":{"type":"string","title":"Field"},"trigger":{"type":"string","title":"Trigger"},"threshold":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Threshold"},"value":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Value"}},"type":"object","required":["field","trigger"],"title":"ConditionCreate"},"ConsensusModelRun":{"properties":{"model_id":{"type":"string","title":"Model Id"},"status":{"type":"string","enum":["voted","no_code","invalid_code","call_failed"],"title":"Status"},"codes":{"items":{"type":"string"},"type":"array","title":"Codes","description":"Canonical digits-only HTS codes at the declared comparison depth; empty unless status='voted'"},"output_sha256":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Sha256","description":"'sha256:'+hex over the model's raw output text; null when the call failed"},"latency_ms":{"type":"integer","title":"Latency Ms"},"failure":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failure","description":"Failure discriminator when not voted (e.g. 'timeout', an exception class name, 'over_max_codes'); response-only, never persisted"},"invalid_codes":{"items":{"type":"string"},"type":"array","title":"Invalid Codes","description":"Extracted codes (canonical, at their own depth) that are not members of the pinned edition's code index — set only when status='invalid_code'. A membership miss is a schedule fact, never a correctness judgment. Response-only, like ``failure`` (the receipt basis carries the status token; per-model output digests bind the outputs themselves)."}},"type":"object","required":["model_id","status","codes","latency_ms"],"title":"ConsensusModelRun","description":"One declared model's projection in the fan-out — status, output-binding digest,\nand the code set it voted (AT the declared comparison depth). Output TEXT is never\nreturned or stored; the digest binds it."},"ConsensusPolicyInfo":{"properties":{"policy_id":{"type":"string","title":"Policy Id"},"version":{"type":"string","title":"Version","description":"Policy semver; any model-set/vote/prompt/edition change bumps it"},"artifact_sha256":{"type":"string","title":"Artifact Sha256","description":"'sha256:'+hex content digest over the versioned policy artifact (RFC-8785 canonical bytes)"},"vote_rule":{"type":"string","title":"Vote Rule"},"vote_rule_variants":{"items":{"type":"string"},"type":"array","title":"Vote Rule Variants","description":"The declared vote-rule vocabulary this policy version recognizes (the active rule is vote_rule). 'unanimous-declared' scopes the 'unanimous' outcome word to the full declared set; the default stays voter-scoped."},"min_models":{"type":"integer","title":"Min Models"},"comparison_depth":{"type":"integer","title":"Comparison Depth"},"model_set":{"items":{"type":"string"},"type":"array","title":"Model Set","description":"The declared model identifiers, in declared order"},"model_pin_grade":{"type":"string","title":"Model Pin Grade","description":"Graded pin vocabulary (ALGEBRA v1.3): content-addressed > version-string > endpoint-label"},"membership_index_sha256":{"type":"string","title":"Membership Index Sha256","description":"'sha256:'+hex over the vendored schedule-membership index bytes (derived from the pinned edition export; pinned inside the policy artifact)"},"membership_scope":{"type":"string","title":"Membership Scope","description":"Membership semantics: 'listed-or-prefix' = listed in the edition at that depth, or a truncation of a listed deeper number"},"membership_policy":{"type":"string","title":"Membership Policy","description":"How a non-member code participates in the vote: 'record_exclude_quorum' = the output records invalid_code and is excluded from the tally (the declared failure-policy class)"}},"type":"object","required":["policy_id","version","artifact_sha256","vote_rule","vote_rule_variants","min_models","comparison_depth","model_set","model_pin_grade","membership_index_sha256","membership_scope","membership_policy"],"title":"ConsensusPolicyInfo","description":"The pinned declared-policy identity — the same triple the receipt carries in\n``recompute_inputs`` ({prompt_id, prompt_version, prompt_hash}), plus the declared\nvote parameters and model set the artifact digest covers."},"ConsensusSchemeInfo":{"properties":{"scheme":{"type":"string","title":"Scheme"},"extractor_id":{"type":"string","title":"Extractor Id"},"extractor_version":{"type":"string","title":"Extractor Version"},"edition_id":{"type":"string","title":"Edition Id"},"edition_title":{"type":"string","title":"Edition Title"},"edition_url":{"type":"string","title":"Edition Url"},"edition_sha256":{"type":"string","title":"Edition Sha256","description":"'sha256:'+hex over the ingested edition export bytes (content-addressed pin)"},"edition_pin_grade":{"type":"string","title":"Edition Pin Grade"}},"type":"object","required":["scheme","extractor_id","extractor_version","edition_id","edition_title","edition_url","edition_sha256","edition_pin_grade"],"title":"ConsensusSchemeInfo","description":"The pinned coded-vocabulary scheme + edition — the codes(hts) projection and the\ntariff edition the run was declared against, the edition bound by content digest."},"ConsentCheckRequest":{"properties":{"consent_metadata":{"additionalProperties":true,"type":"object","title":"Consent Metadata","description":"The consent-metadata JSON object to check"},"schema_slug":{"type":"string","pattern":"^[a-z0-9][a-z0-9_-]{0,63}$","title":"Schema Slug"},"schema_version":{"anyOf":[{"type":"integer","maximum":1000000.0,"minimum":1.0},{"type":"null"}],"title":"Schema Version","description":"Pinned schema version; omitted = latest active version for the slug"}},"type":"object","required":["consent_metadata","schema_slug"],"title":"ConsentCheckRequest","description":"Deterministic conformance check of one consent-metadata document against\na registered schema version. ``consent_metadata`` is digest-bound into the\nreceipt, never retained — the caller keeps the document."},"ConsentCheckResponse":{"properties":{"verdict":{"type":"string","enum":["conformant","nonconformant"],"title":"Verdict"},"errors":{"items":{"$ref":"#/components/schemas/ConsentValidationErrorItem"},"type":"array","title":"Errors","description":"First N validation errors (bounded)"},"error_count":{"type":"integer","minimum":0.0,"title":"Error Count","description":"Total validation errors found (exact up to 1000; scan capped there)"},"schema_slug":{"type":"string","title":"Schema Slug"},"schema_version":{"type":"integer","title":"Schema Version"},"schema_digest":{"type":"string","title":"Schema Digest","description":"\"sha256:\"+hex over the RFC 8785 canonical schema"},"payload_digest":{"type":"string","title":"Payload Digest","description":"\"sha256:\"+hex over the RFC 8785 canonical consent_metadata"},"method":{"type":"string","title":"Method"},"validator_draft":{"type":"string","title":"Validator Draft"},"receipt_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Receipt Id","description":"Signed reliance-receipt handle (GET /receipts/{receipt_id}); null when nothing durable was staged (e.g. x402 without a key)"},"disclosure":{"type":"string","title":"Disclosure"},"checked_at":{"type":"string","title":"Checked At"},"latency_ms":{"type":"integer","title":"Latency Ms"}},"type":"object","required":["verdict","error_count","schema_slug","schema_version","schema_digest","payload_digest","method","validator_draft","disclosure","checked_at","latency_ms"],"title":"ConsentCheckResponse"},"ConsentSchemaCreateRequest":{"properties":{"slug":{"type":"string","pattern":"^[a-z0-9][a-z0-9_-]{0,63}$","title":"Slug"},"schema":{"additionalProperties":true,"type":"object","title":"Schema","description":"A JSON Schema (Draft 2020-12)"}},"type":"object","required":["slug","schema"],"title":"ConsentSchemaCreateRequest","description":"Register a new immutable version of an account's consent schema.\nWire field is ``schema`` (aliased: the name shadows a BaseModel attr)."},"ConsentSchemaCreateResponse":{"properties":{"schema_id":{"type":"string","title":"Schema Id"},"slug":{"type":"string","title":"Slug"},"version":{"type":"integer","title":"Version"},"schema_digest":{"type":"string","title":"Schema Digest"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["schema_id","slug","version","schema_digest","is_active","created_at"],"title":"ConsentSchemaCreateResponse"},"ConsentSchemaListResponse":{"properties":{"schemas":{"items":{"$ref":"#/components/schemas/ConsentSchemaRow"},"type":"array","title":"Schemas"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["schemas","count"],"title":"ConsentSchemaListResponse"},"ConsentSchemaRow":{"properties":{"schema_id":{"type":"string","title":"Schema Id"},"slug":{"type":"string","title":"Slug"},"version":{"type":"integer","title":"Version"},"schema_digest":{"type":"string","title":"Schema Digest"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["schema_id","slug","version","schema_digest","is_active","created_at"],"title":"ConsentSchemaRow"},"ConsentValidationErrorItem":{"properties":{"pointer":{"type":"string","title":"Pointer","description":"RFC 6901 JSON Pointer into consent_metadata"},"keyword":{"type":"string","title":"Keyword","description":"The Draft 2020-12 keyword that failed"},"message":{"type":"string","title":"Message","description":"Validator message, truncated"}},"type":"object","required":["pointer","keyword","message"],"title":"ConsentValidationErrorItem","description":"One bounded validation error. May echo document values back to the SAME\ncaller who submitted them — response-only, never persisted anywhere."},"ContractDeclareRequest":{"properties":{"slug":{"type":"string","pattern":"^[a-z0-9][a-z0-9_-]{0,63}$","title":"Slug"},"cases":{"items":{},"type":"array","maxItems":256,"minItems":1,"title":"Cases","description":"Suite cases: {case_id, dimension, comparator: exact_digest | numeric_delta, tolerance_abs?, tolerance_rel?, seed?, input_digest?} — validated and normalized server-side"}},"additionalProperties":false,"type":"object","required":["slug","cases"],"title":"ContractDeclareRequest","description":"Declare a new immutable version of an account's golden-suite contract:\nper-case dimension + comparator + tolerance/seed parameters a differential\nrun evaluates a candidate against. Closed comparator vocabulary; dimension\nand case identifiers are closed-shape tokens."},"CreateApiKeyRequest":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"email":{"type":"string","maxLength":200,"minLength":3,"title":"Email"},"cf_turnstile_response":{"anyOf":[{"type":"string","maxLength":4096},{"type":"null"}],"title":"Cf Turnstile Response","description":"Cloudflare Turnstile token, issued only to a person who completes the bot challenge in a browser. A program cannot mint this value: obtain a key by opening https://api.bluefoxedge.ai/get-key in a browser. Omitting it does not permit unattended enrolment — the request is refused with HTTP 422 and error code TURNSTILE_FAILED.","x-human-required":true},"accept_terms":{"type":"boolean","title":"Accept Terms","description":"Acceptance of the Terms of Service and acknowledgement of the Privacy Policy (https://www.bluefoxedge.ai/terms · https://www.bluefoxedge.ai/privacy). Must be `true`. A request that omits this field, or sends `false`, is refused with HTTP 422 and error code TERMS_NOT_ACCEPTED — no key is created. The accepted terms version and the acceptance timestamp are stored with the resulting key.","default":false,"x-contract-formation":true,"x-terms-version":"April 1, 2026"}},"type":"object","required":["name","email"],"title":"CreateApiKeyRequest","description":"Signup body for the self-serve key endpoint.\n\nEnrolment cannot be completed by a program on its own. The bot-challenge\ntoken below is issued only when a person completes the challenge in a\nbrowser on the hosted signup form, so a client that sends this body with\nno valid token is refused with HTTP 422 and the error code\nTURNSTILE_FAILED.\n\nThe token field is declared optional in this schema for one reason: so\nthat refusal stays a typed, machine-readable error naming the next action,\nrather than a generic missing-field error. Optional here does not mean\nskippable."},"CustomsCheckRequest":{"properties":{"description":{"type":"string","maxLength":10000,"minLength":1,"title":"Description"}},"type":"object","required":["description"],"title":"CustomsCheckRequest"},"CustomsCheckResponse":{"properties":{"verdict":{"type":"string","enum":["unanimous","majority","unresolved"],"title":"Verdict","description":"Voter-scoped under the declared record-exclude-quorum policy: 'unanimous' = every model that produced a valid vote agreed (excluded models are recorded in per_model, never hidden); quorum shortfalls land 'unresolved'."},"reason":{"anyOf":[{"type":"string","enum":["insufficient_models","no_majority"]},{"type":"null"}],"title":"Reason","description":"Set only when verdict='unresolved'"},"consensus_codes":{"items":{"type":"string"},"type":"array","title":"Consensus Codes","description":"The agreed code set at the declared depth (empty when unresolved)"},"tally":{"additionalProperties":{"type":"integer"},"type":"object","title":"Tally","description":"Vote-key (comma-joined sorted code set) -> vote count over models that voted"},"n_voted":{"type":"integer","title":"N Voted"},"per_model":{"items":{"$ref":"#/components/schemas/ConsensusModelRun"},"type":"array","title":"Per Model"},"policy":{"$ref":"#/components/schemas/ConsensusPolicyInfo"},"scheme":{"$ref":"#/components/schemas/ConsensusSchemeInfo"},"input_sha256":{"type":"string","title":"Input Sha256","description":"'sha256:'+hex digest binding the submitted description (caller retains it; carried in the receipt's source record at every retention tier). Unsalted: a receipt holder can confirm a guessed description against it."},"limits":{"type":"string","title":"Limits","description":"Honest scope limits of this policy version, verbatim"},"scope_note":{"type":"string","title":"Scope Note"},"recompute_note":{"type":"string","title":"Recompute Note","description":"Recompute posture stated in-band: not offered (LLM-computed outputs)"},"receipt_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Receipt Id","description":"Staged reliance-receipt ULID; resolvable via GET /receipts/{receipt_id} after the drain worker materializes it (404 until then). Null when nothing durable was staged (anonymous / x402-no-key callers)."},"latency_ms":{"type":"integer","title":"Latency Ms"}},"type":"object","required":["verdict","consensus_codes","tally","n_voted","per_model","policy","scheme","input_sha256","limits","scope_note","recompute_note","latency_ms"],"title":"CustomsCheckResponse","description":"POST /customs/check — the code_consensus_v1 verdict + full declared-policy scope.\n\nThe verdict is CONSISTENCY, never correctness: whether the declared model set agreed\non the HTS code at the declared comparison depth. The submitted description is never\nstored (the receipt binds it by ``input_sha256``); model output text is never stored\nor returned (bound per-model by digest)."},"CutoverRunRequest":{"properties":{"fallback_slug":{"type":"string","pattern":"^[a-z0-9][a-z0-9_-]{0,63}$","title":"Fallback Slug"},"fallback_version":{"anyOf":[{"type":"integer","maximum":1000000.0,"minimum":1.0},{"type":"null"}],"title":"Fallback Version","description":"Pinned fallback-declaration version; omitted = latest active version"},"exercised_at":{"type":"string","maxLength":64,"title":"Exercised At","description":"When the cutover exercise ran (RFC 3339, timezone-aware; normalized to UTC second precision; never in the future) — dated evidence, not a validity window"},"cases":{"items":{},"type":"array","maxItems":256,"minItems":1,"title":"Cases","description":"What the fallback delivered during the exercise: {case_id, observations: {dimension: numeric | 'sha256:'+hex}, seed?} — the same closed shapes a pinned snapshot uses"}},"additionalProperties":false,"type":"object","required":["fallback_slug","exercised_at","cases"],"title":"CutoverRunRequest","description":"Record a tested cutover (THREE-B B-3): the caller exercised their own\ncutover to their DECLARED fallback, captured what it delivered, and\nsubmits the capture WITH THE EXERCISE DATE. Edge computes the same\ndeterministic differential the parity surface runs and signs what the\nexercise showed, dated. Recency is dated evidence in-band — this surface\nrenders no freshness window and no validity claim."},"CutoverRunResponse":{"properties":{"run_id":{"type":"string","title":"Run Id"},"verdict":{"type":"string","enum":["match","divergent","unverified"],"title":"Verdict"},"grammar_version":{"type":"string","title":"Grammar Version"},"exercised_at":{"type":"string","title":"Exercised At","description":"When the caller's cutover exercise ran (RFC 3339 UTC, normalized) — a statement of WHEN, never of validity"},"fallback_slug":{"type":"string","title":"Fallback Slug"},"fallback_version":{"type":"integer","title":"Fallback Version"},"fallback_kind":{"type":"string","title":"Fallback Kind"},"fallback_digest":{"type":"string","title":"Fallback Digest"},"contract_slug":{"type":"string","title":"Contract Slug"},"contract_version":{"type":"integer","title":"Contract Version"},"contract_digest":{"type":"string","title":"Contract Digest"},"reference_slug":{"type":"string","title":"Reference Slug"},"reference_version":{"type":"integer","title":"Reference Version"},"reference_digest":{"type":"string","title":"Reference Digest"},"candidate_digest":{"type":"string","title":"Candidate Digest"},"degraded_dimensions":{"items":{"type":"string"},"type":"array","title":"Degraded Dimensions"},"dim_counts":{"additionalProperties":true,"type":"object","title":"Dim Counts"},"case_counts":{"additionalProperties":true,"type":"object","title":"Case Counts"},"per_dim":{"additionalProperties":true,"type":"object","title":"Per Dim"},"case_verdicts":{"items":{},"type":"array","title":"Case Verdicts"},"abstention_histogram":{"additionalProperties":true,"type":"object","title":"Abstention Histogram"},"abstention_class_histogram":{"additionalProperties":true,"type":"object","title":"Abstention Class Histogram"},"seeds":{"additionalProperties":true,"type":"object","title":"Seeds"},"method":{"type":"string","title":"Method"},"norm_version":{"type":"string","title":"Norm Version"},"receipt_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Receipt Id"},"disclosure":{"type":"string","title":"Disclosure"},"checked_at":{"type":"string","title":"Checked At"},"latency_ms":{"type":"integer","minimum":0.0,"title":"Latency Ms"}},"type":"object","required":["run_id","verdict","grammar_version","exercised_at","fallback_slug","fallback_version","fallback_kind","fallback_digest","contract_slug","contract_version","contract_digest","reference_slug","reference_version","reference_digest","candidate_digest","dim_counts","case_counts","per_dim","abstention_histogram","abstention_class_histogram","seeds","method","norm_version","disclosure","checked_at","latency_ms"],"title":"CutoverRunResponse","description":"THREE-B B-3. Identical surface to ParityRunResponse plus the declared\nexercise date — dated evidence in-band; deliberately NO freshness/validity\nfield exists on this model (the B-3 criterion guard, test-pinned)."},"Dimension":{"properties":{"dimension":{"type":"string","pattern":"^[a-z0-9._-]+$","title":"Dimension"},"status":{"$ref":"#/components/schemas/Status"},"advertised":{"anyOf":[{},{"type":"null"}],"title":"Advertised"},"observed":{"anyOf":[{},{"type":"null"}],"title":"Observed"},"direction":{"anyOf":[{"$ref":"#/components/schemas/Direction"},{"type":"null"}]},"evidence":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Evidence"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"reason_class":{"anyOf":[{"$ref":"#/components/schemas/ReasonClass"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["dimension","status"],"title":"Dimension"},"Direction":{"type":"string","enum":["observed-ahead","observed-behind","observed-missing","observed-extra","differs","narrowed","widened"],"title":"Direction"},"DivergenceClass":{"properties":{"name":{"type":"string","title":"Name","description":"Short name for the divergence class"},"explanation":{"type":"string","title":"Explanation","description":"Why divergents in this class arise"},"scored_as":{"type":"string","title":"Scored As","description":"How the comparator scores it (it is NOT excused — it counts as divergent)"},"example":{"anyOf":[{"$ref":"#/components/schemas/DivergenceExample"},{"type":"null"}],"description":"A concrete, sourced example"}},"type":"object","required":["name","explanation","scored_as"],"title":"DivergenceClass","description":"A characterised class of divergence — explains WHY a divergence is honest\nwithout softening the published divergent count."},"DivergenceExample":{"properties":{"issuer":{"type":"string","title":"Issuer","description":"The issuer the example is drawn from"},"fact":{"type":"string","title":"Fact","description":"The fact compared"},"stored_value":{"type":"string","title":"Stored Value","description":"The value bluefox stored (as characterised in the source)"},"canonical_value":{"type":"string","title":"Canonical Value","description":"The EDGAR canonical value compared against"},"concept":{"type":"string","title":"Concept","description":"The us-gaap concept EDGAR exposed"},"note":{"type":"string","title":"Note","description":"Why this is an honest concept difference, not a comparator error"}},"type":"object","required":["issuer","fact","stored_value","canonical_value","concept","note"],"title":"DivergenceExample","description":"One concrete, sourced example of a divergence class."},"EgressGateRequest":{"properties":{"content":{"type":"string","maxLength":10000,"minLength":1,"title":"Content","description":"The egress payload text to check before it leaves your fleet"}},"type":"object","required":["content"],"title":"EgressGateRequest"},"EgressGateResponse":{"properties":{"decision":{"type":"string","enum":["proceed","block"],"title":"Decision"},"verdict":{"type":"string","enum":["phi_absent","phi_detected"],"title":"Verdict"},"reasons":{"items":{"type":"string"},"type":"array","title":"Reasons","description":"Human-readable block reasons (per-class flag counts); empty on proceed"},"findings":{"additionalProperties":{"type":"integer"},"type":"object","title":"Findings","description":"FLAGGED instances per declared detection class; keys are exactly the entries of classes_checked"},"classes_checked":{"items":{"type":"string"},"type":"array","title":"Classes Checked"},"detector":{"$ref":"#/components/schemas/PIIDetectorInfo"},"locale":{"type":"string","title":"Locale"},"hipaa_coverage":{"additionalProperties":true,"type":"object","title":"Hipaa Coverage","description":"Which of the 18 HIPAA identifiers each class covers, and which are out of scope at this version"},"accuracy":{"additionalProperties":true,"type":"object","title":"Accuracy","description":"Published per-class precision/recall, measured on the detector's own labeled corpus (corpus-bound by digest)"},"limits":{"type":"string","title":"Limits","description":"Honest scope limits of this detector version, verbatim"},"scope_note":{"type":"string","title":"Scope Note"},"content_sha256":{"type":"string","title":"Content Sha256","description":"'sha256:'+hex digest binding the submitted content (caller retains the content; carried in the receipt's source record at every retention tier). Unsalted: a receipt holder can confirm a guessed content value against it."},"receipt_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Receipt Id","description":"Staged reliance-receipt ULID; resolvable via GET /receipts/{receipt_id} after the drain worker materializes it (404 until then). Null when nothing durable was staged (anonymous / x402-no-key callers)."},"receipt_discipline":{"additionalProperties":true,"type":"object","title":"Receipt Discipline","description":"The receipt's frozen self-disclosure block, exported verbatim on the gate surface — the same block rides inside every signed envelope"},"receipt_note":{"type":"string","title":"Receipt Note","description":"Timing disclosure: the decision gates NOW; the signed receipt materializes seconds later"},"latency_ms":{"type":"integer","title":"Latency Ms"}},"type":"object","required":["decision","verdict","reasons","findings","classes_checked","detector","locale","hipaa_coverage","accuracy","limits","scope_note","content_sha256","receipt_discipline","receipt_note","latency_ms"],"title":"EgressGateResponse","description":"POST /egress/gate — the fail-closed egress decision + phi_scan_v1 verdict + full\ndetector scope disclosure (LB9-007).\n\n``decision`` is the gate's act/don't-act word: ``proceed`` iff the pinned detector ran\nand flagged nothing in its declared classes; ``block`` with ``reasons`` otherwise. A\ndetector that cannot run is a 503 — the gate halts on ignorance, it never guesses.\nThe submitted content is never stored; the receipt binds it by ``content_sha256`` only."},"Enrolment":{"properties":{"x-human-required":{"type":"boolean","title":"X-Human-Required","description":"True: obtaining a NEW key needs a person in a browser."},"human_step":{"type":"string","title":"Human Step"},"form_url":{"type":"string","title":"Form Url"},"why":{"type":"string","title":"Why"},"refusal":{"type":"string","title":"Refusal"},"machine_alternative":{"type":"string","title":"Machine Alternative"},"already_have_a_key":{"type":"string","title":"Already Have A Key"}},"type":"object","required":["x-human-required","human_step","form_url","why","refusal","machine_alternative","already_have_a_key"],"title":"Enrolment","description":"How a key is obtained — including the part a program cannot do (H-14).\n\nThis object exists because the sentence a stopped program most needs was the\none this document omitted. ``/v1/auth/help`` is the ``hint_url`` a 401 hands a\nmachine, and it said only \"email verification required\" — which sounds like\nsomething a client with a mailbox can finish. The blocking fact is a human\nbrowser challenge, and it was disclosed only in the OpenAPI operation and in\nthe 422 refusal at the wall itself. An agent that entered here instead of\nthere learned the wrong lesson and retried."},"EnvelopeResponse":{"properties":{"data":{"title":"Data","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse","description":"Generic success envelope. Parameterize with ``EnvelopeResponse[Inner]`` for typed OpenAPI."},"EnvelopeResponse_AgentRegisterResponse_":{"properties":{"data":{"$ref":"#/components/schemas/AgentRegisterResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[AgentRegisterResponse]"},"EnvelopeResponse_BatchTrustScoreResponse_":{"properties":{"data":{"$ref":"#/components/schemas/BatchTrustScoreResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[BatchTrustScoreResponse]"},"EnvelopeResponse_BatchVerifyResponse_":{"properties":{"data":{"$ref":"#/components/schemas/BatchVerifyResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[BatchVerifyResponse]"},"EnvelopeResponse_BehaviorContractCreateResponse_":{"properties":{"data":{"$ref":"#/components/schemas/BehaviorContractCreateResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[BehaviorContractCreateResponse]"},"EnvelopeResponse_BehaviorContractDetailResponse_":{"properties":{"data":{"$ref":"#/components/schemas/BehaviorContractDetailResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[BehaviorContractDetailResponse]"},"EnvelopeResponse_BehaviorContractListResponse_":{"properties":{"data":{"$ref":"#/components/schemas/BehaviorContractListResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[BehaviorContractListResponse]"},"EnvelopeResponse_BehaviorFallbackCreateResponse_":{"properties":{"data":{"$ref":"#/components/schemas/BehaviorFallbackCreateResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[BehaviorFallbackCreateResponse]"},"EnvelopeResponse_BehaviorFallbackDetailResponse_":{"properties":{"data":{"$ref":"#/components/schemas/BehaviorFallbackDetailResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[BehaviorFallbackDetailResponse]"},"EnvelopeResponse_BehaviorFallbackListResponse_":{"properties":{"data":{"$ref":"#/components/schemas/BehaviorFallbackListResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[BehaviorFallbackListResponse]"},"EnvelopeResponse_BehaviorReferenceCreateResponse_":{"properties":{"data":{"$ref":"#/components/schemas/BehaviorReferenceCreateResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[BehaviorReferenceCreateResponse]"},"EnvelopeResponse_BehaviorReferenceDetailResponse_":{"properties":{"data":{"$ref":"#/components/schemas/BehaviorReferenceDetailResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[BehaviorReferenceDetailResponse]"},"EnvelopeResponse_BehaviorReferenceListResponse_":{"properties":{"data":{"$ref":"#/components/schemas/BehaviorReferenceListResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[BehaviorReferenceListResponse]"},"EnvelopeResponse_BillingUsageResponse_":{"properties":{"data":{"$ref":"#/components/schemas/BillingUsageResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[BillingUsageResponse]"},"EnvelopeResponse_BrandCheckResponse_":{"properties":{"data":{"$ref":"#/components/schemas/BrandCheckResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[BrandCheckResponse]"},"EnvelopeResponse_BrandDefinitionResponse_":{"properties":{"data":{"$ref":"#/components/schemas/BrandDefinitionResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[BrandDefinitionResponse]"},"EnvelopeResponse_CompetitiveCheckResponse_":{"properties":{"data":{"$ref":"#/components/schemas/CompetitiveCheckResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[CompetitiveCheckResponse]"},"EnvelopeResponse_ComplianceCheckResponse_":{"properties":{"data":{"$ref":"#/components/schemas/ComplianceCheckResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[ComplianceCheckResponse]"},"EnvelopeResponse_ConsentCheckResponse_":{"properties":{"data":{"$ref":"#/components/schemas/ConsentCheckResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[ConsentCheckResponse]"},"EnvelopeResponse_ConsentSchemaCreateResponse_":{"properties":{"data":{"$ref":"#/components/schemas/ConsentSchemaCreateResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[ConsentSchemaCreateResponse]"},"EnvelopeResponse_ConsentSchemaListResponse_":{"properties":{"data":{"$ref":"#/components/schemas/ConsentSchemaListResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[ConsentSchemaListResponse]"},"EnvelopeResponse_CustomsCheckResponse_":{"properties":{"data":{"$ref":"#/components/schemas/CustomsCheckResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[CustomsCheckResponse]"},"EnvelopeResponse_CutoverRunResponse_":{"properties":{"data":{"$ref":"#/components/schemas/CutoverRunResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[CutoverRunResponse]"},"EnvelopeResponse_EgressGateResponse_":{"properties":{"data":{"$ref":"#/components/schemas/EgressGateResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[EgressGateResponse]"},"EnvelopeResponse_EvidenceBundle_":{"properties":{"data":{"$ref":"#/components/schemas/EvidenceBundle","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[EvidenceBundle]"},"EnvelopeResponse_FinancialCheckResponse_":{"properties":{"data":{"$ref":"#/components/schemas/FinancialCheckResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[FinancialCheckResponse]"},"EnvelopeResponse_FreshnessCheckResponse_":{"properties":{"data":{"$ref":"#/components/schemas/FreshnessCheckResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[FreshnessCheckResponse]"},"EnvelopeResponse_HonestyEnvelope_":{"properties":{"data":{"$ref":"#/components/schemas/HonestyEnvelope","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[HonestyEnvelope]"},"EnvelopeResponse_NotarizeHashResponse_":{"properties":{"data":{"$ref":"#/components/schemas/NotarizeHashResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[NotarizeHashResponse]"},"EnvelopeResponse_PIICheckResponse_":{"properties":{"data":{"$ref":"#/components/schemas/PIICheckResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[PIICheckResponse]"},"EnvelopeResponse_ParityRunResponse_":{"properties":{"data":{"$ref":"#/components/schemas/ParityRunResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[ParityRunResponse]"},"EnvelopeResponse_PolicyCheckResponse_":{"properties":{"data":{"$ref":"#/components/schemas/PolicyCheckResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[PolicyCheckResponse]"},"EnvelopeResponse_PreflightBatchResponse_":{"properties":{"data":{"$ref":"#/components/schemas/PreflightBatchResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[PreflightBatchResponse]"},"EnvelopeResponse_PreflightCheckResponse_":{"properties":{"data":{"$ref":"#/components/schemas/PreflightCheckResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[PreflightCheckResponse]"},"EnvelopeResponse_QuickVerifyStatusResponse_":{"properties":{"data":{"$ref":"#/components/schemas/QuickVerifyStatusResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[QuickVerifyStatusResponse]"},"EnvelopeResponse_QuickVerifySubmitResponse_":{"properties":{"data":{"$ref":"#/components/schemas/QuickVerifySubmitResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[QuickVerifySubmitResponse]"},"EnvelopeResponse_RegressionRunResponse_":{"properties":{"data":{"$ref":"#/components/schemas/RegressionRunResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[RegressionRunResponse]"},"EnvelopeResponse_SafetyCheckBatchResponse_":{"properties":{"data":{"$ref":"#/components/schemas/SafetyCheckBatchResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[SafetyCheckBatchResponse]"},"EnvelopeResponse_SafetyCheckResponse_":{"properties":{"data":{"$ref":"#/components/schemas/SafetyCheckResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[SafetyCheckResponse]"},"EnvelopeResponse_SelfReputationResponse_":{"properties":{"data":{"$ref":"#/components/schemas/SelfReputationResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[SelfReputationResponse]"},"EnvelopeResponse_SentimentCheckResponse_":{"properties":{"data":{"$ref":"#/components/schemas/SentimentCheckResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[SentimentCheckResponse]"},"EnvelopeResponse_SpecCheckResponse_":{"properties":{"data":{"$ref":"#/components/schemas/SpecCheckResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[SpecCheckResponse]"},"EnvelopeResponse_SubprocessorCheckResponse_":{"properties":{"data":{"$ref":"#/components/schemas/SubprocessorCheckResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[SubprocessorCheckResponse]"},"EnvelopeResponse_SubprocessorDisclosureCreateResponse_":{"properties":{"data":{"$ref":"#/components/schemas/SubprocessorDisclosureCreateResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[SubprocessorDisclosureCreateResponse]"},"EnvelopeResponse_SubprocessorDisclosureListResponse_":{"properties":{"data":{"$ref":"#/components/schemas/SubprocessorDisclosureListResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[SubprocessorDisclosureListResponse]"},"EnvelopeResponse_TrustScoreResponse_":{"properties":{"data":{"$ref":"#/components/schemas/TrustScoreResponse","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[TrustScoreResponse]"},"EnvelopeResponse_list_BrandSummary__":{"properties":{"data":{"items":{"$ref":"#/components/schemas/BrandSummary"},"type":"array","title":"Data","description":"Response payload"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"EnvelopeResponse[list[BrandSummary]]"},"EvidenceBundle":{"properties":{"primitive":{"type":"string","enum":["claim","citation","package","tool","list-match","agent-reputation","compliance","harness-run","consensus","regression-verdict","parity-verdict","tested-cutover","hash_notarize"],"title":"Primitive"},"primitive_version":{"type":"string","title":"Primitive Version","default":"1.1.0"},"assertion_type":{"type":"string","const":"reliance","title":"Assertion Type","default":"reliance"},"request_id":{"type":"string","title":"Request Id"},"verdict":{"type":"string","title":"Verdict","description":"The primitive's result for this record. The vocabulary is per-primitive, so read this value against the record's `primitive` field rather than as one flat list: a brand claim, a claim-against-sources, and a content scan report in three different vocabularies. Every value, grouped by primitive family and each with its definition, is published in this field's x-verdict-vocabulary schema extension. This field carries NO enum on purpose: the citation primitive composes its found-case verdict as found:<match_type>, so the value space is open by construction, and an enum would instruct validators to reject responses this API correctly serves. Match on the family, not on a closed set.","x-verdict-patterned-families":{"citation":"found:<match_type>"},"x-verdict-vocabulary":{"agent_reputation":{"computed":"A reputation computation occurred for this caller. Deliberately carries no tier or grade — the receipt records the act, not the outcome."},"check":{"accurate":"The claim matches the reference data Edge holds.","inaccurate":"The claim contradicts the reference data Edge holds.","partially_accurate":"The claim is within tolerance but not exact, or matches in part — never counted as a match in any published rate.","unverifiable":"Edge holds no reference data able to decide this claim. Not a statement about the claim's truth."},"citation":{"found:exact":"The quote appears verbatim in the source.","found:explicit":"A model read the source and found the quote stated explicitly.","found:fuzzy":"The quote appears in the source within the fuzzy-match threshold.","found:paraphrased":"A model read the source and found the quote paraphrased.","not_found":"The quote could not be located in the source.","unknown":"The source could not be fetched or read, so nothing was compared."},"claim":{"insufficient_evidence":"A direction was computed but the confidence tier fell below the threshold for a definitive verdict, so none is reported.","neutral":"The sources presented bear on the claim in neither direction — read, weighed, and found not to decide it.","no_data":"No source could be fetched or extracted, so nothing was weighed.","refuted":"The sources presented contradict the claim.","supported":"The sources presented support the claim."},"consent":{"conformant":"The document satisfies the pinned schema version.","nonconformant":"The document violates the pinned schema version."},"customs":{"majority":"A strict majority of voting models agreed at the declared depth.","unanimous":"Every model that produced a vote agreed at the declared depth.","unresolved":"No majority formed, or too few models voted to adjudicate. Carries a reason and no agreed code set."},"egress_gate":{"phi_absent":"The scan found no health data in the submitted material.","phi_detected":"The scan found health data in the submitted material."},"freshness":{"contradicted":"The detected reference disagrees with the newer data Edge holds.","partial":"The reference agrees in part — within tolerance but not exact.","supported":"The detected reference agrees with the newer data Edge holds.","unverifiable":"Edge holds nothing able to decide this reference."},"offline_verification":{"self_consistent_only":"Byte integrity, chain linkage, and signatures check out against the published key set. A statement about THIS BUNDLE only."},"package":{"not_found":"Edge holds no record for this package.","suspicious":"The package carries signals that warrant a human look, short of a match.","verified":"The package matches the reference record Edge holds.","vulnerable":"The package matches a known-vulnerable record."},"pii":{"pii_absent":"The scan found no personal data in the submitted material.","pii_detected":"The scan found personal data in the submitted material."},"pre_transaction_check":{"error":"That domain's check did not complete.","failed":"That domain's check contradicted the claim.","uncertain":"That domain's check neither matched nor contradicted.","verified":"That domain's check matched."},"pre_transaction_trust":{"block":"A check failed, or overall confidence is below the block floor.","caution":"A check was uncertain, or overall confidence sits in the middle band.","insufficient_data":"Fewer than half the checks reached a conclusive verdict, so the bundle declines to give a trust reading.","proceed":"No check failed and overall confidence is above the proceed floor."},"preflight":{"fail":"At least one dimension fell below its floor.","pass":"Every dimension cleared its floor."},"presented_digest":{"notarized":"The digest was presented to Edge at the recorded time. A record that this happened — never a judgment about the content behind the digest, which Edge never sees."},"run_comparison":{"divergent":"The recomputed result differs from the recorded one.","match":"The recomputed result equals the recorded one.","unverified":"The comparison could not be run, so neither outcome is claimed."},"safety":{"safe":"No category breached its floor.","unsafe":"A category breached its floor, or the safety signal was absent — a missing signal reports unsafe by design."},"subprocessors":{"incomparable":"The two sets cannot be compared — no disclosure record, or no observation to compare it against.","set_match":"The observed subprocessor set equals the disclosed set.","set_mismatch":"The observed subprocessor set differs from the disclosed set."},"tool":{"blocked":"The fetch was refused by the egress guard before any check ran.","error":"The check did not complete."}}},"confidence":{"type":"string","enum":["high","medium","low"],"title":"Confidence"},"confidence_score":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Confidence Score","description":"Numeric confidence in [0,1]. Use this for thresholding; the categorical 'confidence' field maps from this via the documented tier thresholds (high>=0.8, medium>=0.5, low<0.5)."},"sources":{"items":{"$ref":"#/components/schemas/SourceEvidence"},"type":"array","title":"Sources","default":[]},"rationale":{"type":"string","title":"Rationale"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"latency_ms":{"type":"integer","title":"Latency Ms","default":0},"model_used":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Used"},"cost_usd":{"type":"number","title":"Cost Usd","default":0.0},"prompt_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt Id"},"prompt_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt Version"},"prompt_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt Hash"},"payment":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Payment"},"details":{"additionalProperties":true,"type":"object","title":"Details","default":{}},"client_correlation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Correlation Id"}},"type":"object","required":["primitive","verdict","confidence","rationale"],"title":"EvidenceBundle","description":"Standard response contract for all verification primitives."},"Expression":{"type":"string","enum":["attestable","derived"],"title":"Expression"},"FallbackDeclareRequest":{"properties":{"slug":{"type":"string","pattern":"^[a-z0-9][a-z0-9_-]{0,63}$","title":"Slug"},"kind":{"type":"string","title":"Kind","description":"Closed fallback kind: substitute-model | ported-harness | standby-estate"},"subject":{"additionalProperties":true,"type":"object","title":"Subject","description":"Fallback subject descriptor (bounded flat string map; e.g. provider, model id, harness revision, operator). The caller's own statement of what the fallback IS — validated by shape, never interpreted"},"reference_slug":{"type":"string","pattern":"^[a-z0-9][a-z0-9_-]{0,63}$","title":"Reference Slug"},"reference_version":{"anyOf":[{"type":"integer","maximum":1000000.0,"minimum":1.0},{"type":"null"}],"title":"Reference Version","description":"Pinned reference version; omitted = latest active version at run time"},"contract_slug":{"type":"string","pattern":"^[a-z0-9][a-z0-9_-]{0,63}$","title":"Contract Slug"},"contract_version":{"anyOf":[{"type":"integer","maximum":1000000.0,"minimum":1.0},{"type":"null"}],"title":"Contract Version","description":"Pinned contract version; omitted = latest active version at run time"},"cadence":{"type":"string","title":"Cadence","description":"Closed re-check cadence: none | daily | weekly | monthly | quarterly ('none' requires at least one trigger)"},"triggers":{"anyOf":[{"items":{},"type":"array","maxItems":8},{"type":"null"}],"title":"Triggers","description":"Closed trigger tokens: model-change | deprecation | sunset | price-shock | outage | manual (deduped + sorted server-side)"}},"additionalProperties":false,"type":"object","required":["slug","kind","subject","reference_slug","contract_slug","cadence"],"title":"FallbackDeclareRequest","description":"Declare a new immutable version of an account's named fallback (THREE-B\nB-1): what kind of fallback it is (closed vocabulary), the fallback's own\nsubject descriptor (bounded flat string map — carries the operator label\nfor a standby estate), the binding to the caller's existing pinned\nreference + declared contract (optional version pins; omitted = latest\nactive at run time), and closed-vocabulary cadence + trigger config.\nDeclaration data only: Edge never runs the fallback — parity and cutover\nruns (B-2/B-3) evaluate observations the caller captured and submitted."},"FinancialCheckRequest":{"properties":{"brand":{"type":"string","title":"Brand"},"claims":{"items":{"type":"string"},"type":"array","maxItems":10,"minItems":1,"title":"Claims"},"depth":{"type":"string","pattern":"^(fast|standard|auto)$","title":"Depth","default":"auto"},"include_sentiment":{"type":"boolean","title":"Include Sentiment","default":false}},"type":"object","required":["brand","claims"],"title":"FinancialCheckRequest"},"FinancialCheckResponse":{"properties":{"brand":{"type":"string","title":"Brand"},"ticker":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ticker","description":"Public ticker symbol, if known"},"results":{"items":{"$ref":"#/components/schemas/FinancialCheckResultItem"},"type":"array","title":"Results"},"facts_count":{"type":"integer","title":"Facts Count"},"verified_at":{"type":"string","title":"Verified At"},"latency_ms":{"type":"integer","title":"Latency Ms"},"depth_used":{"type":"string","title":"Depth Used"}},"type":"object","required":["brand","results","facts_count","verified_at","latency_ms","depth_used"],"title":"FinancialCheckResponse"},"FinancialCheckResultItem":{"properties":{"claim":{"type":"string","title":"Claim"},"verdict":{"type":"string","enum":["accurate","inaccurate","partially_accurate","unverifiable"],"title":"Verdict","description":"Verification verdict for this claim, against the reference data Edge holds for this domain. Vocabulary — accurate: The claim matches the reference data Edge holds. · inaccurate: The claim contradicts the reference data Edge holds. · partially_accurate: The claim is within tolerance but not exact, or matches in part — never counted as a match in any published rate. · unverifiable: Edge holds no reference data able to decide this claim. Not a statement about the claim's truth."},"confidence":{"type":"number","title":"Confidence"},"confidence_tier":{"type":"string","title":"Confidence Tier"},"evidence":{"type":"string","title":"Evidence"},"method":{"type":"string","title":"Method"},"sentiment":{"anyOf":[{},{"type":"null"}],"title":"Sentiment"},"next_action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Action","description":"Machine token naming the suggested next step when the rule tier could not decide this claim (currently always 'retry_with_depth_auto'). Present only on rule-tier unverifiable results — the same flat grammar 401/403 Problem responses carry; absent on confident verdicts and the LLM tier."},"hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hint","description":"Agent-readable guidance beside next_action: names depth:'auto' (LLM verification of the same claim) and POST /verify/claim (verify against a URL you supply). Present only with next_action."},"hint_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hint Url","description":"Documentation URL for the suggested next step. Present only with next_action."},"financial_data":{"anyOf":[{},{"type":"null"}],"title":"Financial Data","description":"Domain-specific structured data"},"receipt_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Receipt Id","description":"Staged reliance-receipt ULID; resolvable via GET /receipts/{receipt_id}; null when the caller class is not persistable (anonymous / x402-no-key) or the stage degraded."}},"type":"object","required":["claim","verdict","confidence","confidence_tier","evidence","method"],"title":"FinancialCheckResultItem"},"FreshnessCheckRequest":{"properties":{"text":{"type":"string","maxLength":10000,"minLength":10,"title":"Text"},"depth":{"type":"string","pattern":"^(fast|standard|auto)$","title":"Depth","default":"auto"}},"type":"object","required":["text"],"title":"FreshnessCheckRequest"},"FreshnessCheckResponse":{"properties":{"overall_freshness":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Overall Freshness"},"sources_checked":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sources Checked"},"sources_fresh":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sources Fresh"},"sources_stale":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sources Stale"},"sources_unknown":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sources Unknown"},"results":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Results"},"next_action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Action","description":"Machine token naming the suggested next step when the rule tier had no sources to check (currently always 'retry_with_depth_auto'). Present only on the empty rule-tier fallback — the same flat grammar 401/403 Problem responses carry; absent when sources were checked or the LLM tier ran."},"hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hint","description":"Agent-readable guidance beside next_action: names depth:'auto' (LLM verification of the same claim) and POST /verify/claim (verify against a URL you supply). Present only with next_action."},"hint_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hint Url","description":"Documentation URL for the suggested next step. Present only with next_action."},"latency_ms":{"type":"integer","title":"Latency Ms"},"depth_used":{"type":"string","title":"Depth Used"},"check_id":{"type":"string","title":"Check Id"}},"additionalProperties":true,"type":"object","required":["latency_ms","depth_used","check_id"],"title":"FreshnessCheckResponse","description":"Spreads plugin verifier metadata; declared fields are always present in fallback path."},"GraphEntityListEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/GraphEntityListResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"GraphEntityListEnvelope"},"GraphEntityListItem":{"properties":{"entity_id":{"type":"string","title":"Entity Id"},"name":{"type":"string","title":"Name"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"source_registry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Registry"},"scan_cadence":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Cadence"},"last_scanned_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Scanned At"},"schema_conformant":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Schema Conformant"},"dependencies_clean":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Dependencies Clean"},"actively_maintained":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Actively Maintained"},"credentials_safe":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Credentials Safe"},"scope_contained":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Scope Contained"},"behavioral_drift":{"anyOf":[{},{"type":"null"}],"title":"Behavioral Drift","description":"Behavioral-drift indicator; underlying column type varies (bool/float/text)"}},"type":"object","required":["entity_id","name"],"title":"GraphEntityListItem"},"GraphEntityListResponse":{"properties":{"total":{"type":"integer","title":"Total"},"entities":{"items":{"$ref":"#/components/schemas/GraphEntityListItem"},"type":"array","title":"Entities"},"pagination":{"$ref":"#/components/schemas/GraphPagination"}},"type":"object","required":["total","entities","pagination"],"title":"GraphEntityListResponse"},"GraphEntityObservationsEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/GraphEntityObservationsResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"GraphEntityObservationsEnvelope"},"GraphEntityObservationsResponse":{"properties":{"entity_id":{"type":"string","title":"Entity Id"},"entity_name":{"type":"string","title":"Entity Name"},"entity_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Status"},"total_scans":{"type":"integer","title":"Total Scans"},"latest_scan":{"anyOf":[{"$ref":"#/components/schemas/GraphLatestScan"},{"type":"null"}]},"observations":{"items":{"$ref":"#/components/schemas/GraphObservation"},"type":"array","title":"Observations"},"pagination":{"$ref":"#/components/schemas/GraphPagination"}},"type":"object","required":["entity_id","entity_name","total_scans","observations","pagination"],"title":"GraphEntityObservationsResponse"},"GraphLatestScan":{"properties":{"scan_id":{"type":"string","title":"Scan Id"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At"},"summary":{"anyOf":[{},{"type":"null"}],"title":"Summary","description":"Scan summary JSON (schema varies by scan kind)"}},"type":"object","required":["scan_id"],"title":"GraphLatestScan"},"GraphObservation":{"properties":{"id":{"type":"string","title":"Id"},"scan_id":{"type":"string","title":"Scan Id"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"subcategory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subcategory"},"finding":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Finding"},"severity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"},"evidence_json":{"anyOf":[{},{"type":"null"}],"title":"Evidence Json","description":"Evidence JSON (schema varies by observation kind)"},"observed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Observed At"},"supersedes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Supersedes"}},"type":"object","required":["id","scan_id"],"title":"GraphObservation"},"GraphPagination":{"properties":{"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["total","limit","offset"],"title":"GraphPagination"},"GraphSearchEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/GraphSearchResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"GraphSearchEnvelope"},"GraphSearchLatestObservation":{"properties":{"finding":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Finding"},"severity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"},"observed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Observed At"}},"type":"object","title":"GraphSearchLatestObservation"},"GraphSearchResponse":{"properties":{"query":{"additionalProperties":true,"type":"object","title":"Query","description":"Echo of the non-None query parameters used to filter (schema varies by call)"},"total_entities":{"type":"integer","title":"Total Entities"},"entities":{"items":{"$ref":"#/components/schemas/GraphSearchResultEntity"},"type":"array","title":"Entities"},"pagination":{"$ref":"#/components/schemas/GraphPagination"}},"type":"object","required":["total_entities","entities","pagination"],"title":"GraphSearchResponse"},"GraphSearchResultEntity":{"properties":{"entity_id":{"type":"string","title":"Entity Id"},"name":{"type":"string","title":"Name"},"latest_observation":{"anyOf":[{"$ref":"#/components/schemas/GraphSearchLatestObservation"},{"type":"null"}]}},"type":"object","required":["entity_id","name"],"title":"GraphSearchResultEntity"},"HonestyEnvelope":{"properties":{"envelope_version":{"type":"string","title":"Envelope Version","default":"1.0.0"},"target":{"$ref":"#/components/schemas/Target"},"expression":{"$ref":"#/components/schemas/Expression"},"as_of":{"$ref":"#/components/schemas/AsOf"},"formula_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Formula Version"},"methodology_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Methodology Version"},"probe":{"anyOf":[{"$ref":"#/components/schemas/Probe"},{"type":"null"}]},"basis":{"anyOf":[{"$ref":"#/components/schemas/Basis"},{"type":"null"}]},"declared_set_hash":{"type":"string","title":"Declared Set Hash"},"posture":{"$ref":"#/components/schemas/Posture"},"dimensions":{"items":{"$ref":"#/components/schemas/Dimension"},"type":"array","title":"Dimensions"},"abstentions":{"items":{"$ref":"#/components/schemas/Abstention"},"type":"array","title":"Abstentions"},"fail_clean":{"type":"boolean","title":"Fail Clean"},"non_claims":{"items":{"type":"string"},"type":"array","title":"Non Claims"}},"additionalProperties":false,"type":"object","required":["target","expression","as_of","declared_set_hash","posture","dimensions","abstentions","fail_clean"],"title":"HonestyEnvelope"},"MeData":{"properties":{"key_prefix":{"type":"string","title":"Key Prefix","description":"The non-secret leading segment of the key you authenticated with — enough to tell two credentials apart in a log, never enough to use one. The key itself is stored only as a hash and cannot be echoed."},"name":{"type":"string","title":"Name","description":"The label this key was created under."},"status":{"type":"string","title":"Status","description":"Credential status, read off the record. Always 'active' when read successfully — the other states answer at the wall; see other_states."},"plan":{"type":"string","title":"Plan","description":"Plan identifier this key is on."},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At","description":"When this key was issued."},"calls":{"$ref":"#/components/schemas/Meter","description":"The API-call meter — what your plan's allowance is counted in."},"mints":{"$ref":"#/components/schemas/Meter","description":"The signed-receipt meter — counted separately from calls, and only on mint-capped plans."},"meters_note":{"type":"string","title":"Meters Note","description":"One sentence relating the two meters, so neither reads as the other. It describes the PUBLISHED tiers; YOUR allowance is calls.limit and mints.limit above, read from this key's own enforced limits. Where the two differ, the meters are the ones that bill you — a key can be provisioned with a limit that is not its plan's published figure, and reading the sentence as your own quota is the mistake this endpoint exists to prevent."},"other_states":{"items":{"$ref":"#/components/schemas/RefusalLadderEntry"},"type":"array","title":"Other States","description":"The credential states this endpoint cannot be reached in, with the exact status and error code each answers with."},"unmetered":{"type":"boolean","title":"Unmetered","description":"Always true: this call is free and consumes neither meter, so polling your own status can never exhaust it."}},"type":"object","required":["key_prefix","name","status","plan","calls","mints","meters_note","other_states","unmetered"],"title":"MeData","description":"The credential's own status and both of its meters."},"MeEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/MeData"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"MeEnvelope","description":"Typed envelope for GET /v1/me."},"Meter":{"properties":{"used":{"type":"integer","title":"Used","description":"Units consumed in the current window."},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit","description":"Units allowed in the window, or null when this plan is not metered on this axis at all (null is not 'unlimited by policy' — it means the limiter genuinely never looks at this plan)."},"remaining":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Remaining","description":"limit - used, floored at 0; null whenever limit is null."},"window":{"type":"string","title":"Window","description":"The denominator this allowance is counted over, stated in words."},"resets_at":{"type":"string","title":"Resets At","description":"Instant this meter next returns to zero (RFC 3339, UTC)."}},"type":"object","required":["used","limit","remaining","window","resets_at"],"title":"Meter","description":"One metered allowance: what you have spent, what you may spend, when it resets."},"MethodologyAbstentions":{"properties":{"total":{"type":"integer","title":"Total","description":"Total abstaining issuers (accounted for, never silently dropped)"},"foreign":{"type":"integer","title":"Foreign","description":"Abstained: non-US filer absent from SEC company_tickers.json (no EDGAR canonical)"},"no_concept":{"type":"integer","title":"No Concept","description":"Abstained: CIK resolved but the filer reports no matching us-gaap concept"},"explanation":{"type":"string","title":"Explanation","description":"How abstentions are classified and why they are never fabricated as comparisons"}},"type":"object","required":["total","foreign","no_concept","explanation"],"title":"MethodologyAbstentions","description":"The accounted-not-dropped abstaining issuers."},"MethodologyBreakdown":{"properties":{"match":{"type":"integer","title":"Match","description":"Strict-pass comparisons (the numerator of match_rate)"},"partially_accurate":{"type":"integer","title":"Partially Accurate","description":"Within-tolerance-but-not-exact comparisons, EXCLUDED from the numerator"},"divergent":{"type":"integer","title":"Divergent","description":"Out-of-tolerance comparisons (surfaced, not hidden)"},"overstates":{"type":"integer","title":"Overstates","description":"Divergents where the stored value exceeds the EDGAR canonical"},"understates":{"type":"integer","title":"Understates","description":"Divergents where the stored value is below the EDGAR canonical"}},"type":"object","required":["match","partially_accurate","divergent","overstates","understates"],"title":"MethodologyBreakdown","description":"The outcome tally backing the headline match-rate."},"MethodologyConcepts":{"properties":{"revenue":{"items":{"type":"string"},"type":"array","title":"Revenue","description":"us-gaap revenue concept candidates (ASC-606 tag drift handled by order)"},"net_income":{"items":{"type":"string"},"type":"array","title":"Net Income","description":"us-gaap net-income concept candidate(s)"}},"type":"object","required":["revenue","net_income"],"title":"MethodologyConcepts","description":"The us-gaap XBRL concept candidates the comparator re-fetches, in priority\norder (first concept that resolves for the fiscal year wins)."},"MethodologyDistinctIssuers":{"properties":{"distinct_issuers":{"type":"integer","title":"Distinct Issuers","description":"Distinct SEC issuers (CIKs) contributing >=1 comparison"},"brands":{"type":"integer","title":"Brands","description":"Brands in the eval population"},"comparisons":{"type":"integer","title":"Comparisons","description":"Field comparisons over those brands"},"explanation":{"type":"string","title":"Explanation","description":"Why the rate is framed over comparisons + issuers, never 'X% across N companies'"},"example":{"type":"string","title":"Example","description":"A concrete brand→CIK collapse example"}},"type":"object","required":["distinct_issuers","brands","comparisons","explanation","example"],"title":"MethodologyDistinctIssuers","description":"The distinct-issuer breadth (159 issuers over 281 brands / 2,335\ncomparisons in the published measurement) — the honesty thesis:\ncomparisons, not companies."},"MethodologyDoc":{"properties":{"version":{"type":"string","title":"Version","description":"The exact methodology_version (may contain '/')"},"slug":{"type":"string","title":"Slug","description":"Deterministic URL slug for `version` ('/' replaced with '-')"},"title":{"type":"string","title":"Title","description":"Human title"},"summary":{"type":"string","title":"Summary","description":"One-paragraph plain-language summary"},"dimension":{"type":"string","title":"Dimension","description":"The accuracy dimension this methodology measures"},"headline":{"$ref":"#/components/schemas/MethodologyHeadline","description":"The published result, restated with honest framing"},"measurement":{"$ref":"#/components/schemas/MethodologyMeasurement","description":"How the measurement is performed"},"divergence_classes":{"items":{"$ref":"#/components/schemas/DivergenceClass"},"type":"array","title":"Divergence Classes","description":"Characterised divergence classes (the qualitative interpretation)"},"abstentions":{"$ref":"#/components/schemas/MethodologyAbstentions","description":"The accounted-not-dropped abstaining issuers"},"distinct_issuers":{"$ref":"#/components/schemas/MethodologyDistinctIssuers","description":"The distinct-issuer breadth"},"honest_framing":{"items":{"type":"string"},"type":"array","title":"Honest Framing","description":"The non-negotiable framing statements (true-by-construction)"},"eval_set":{"$ref":"#/components/schemas/MethodologyEvalSet","description":"Eval-set provenance"},"sources":{"items":{"$ref":"#/components/schemas/MethodologySource"},"type":"array","title":"Sources","description":"Traceable sources for every figure + claim"}},"type":"object","required":["version","slug","title","summary","dimension","headline","measurement","divergence_classes","abstentions","distinct_issuers","honest_framing","eval_set","sources"],"title":"MethodologyDoc","description":"One published, machine-readable methodology document.\n\n``version`` is the exact ``methodology_version`` stored on the accuracy cell;\n``slug`` is its deterministic URL form (``/`` → ``-``), asserted at registry\nbuild so the published URL the cell points at always resolves here."},"MethodologyDocEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/MethodologyDoc"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"MethodologyDocEnvelope","description":"Typed envelope for GET /methodology/{slug}."},"MethodologyEvalSet":{"properties":{"name":{"type":"string","title":"Name","description":"Eval-set name"},"source_kind":{"type":"string","title":"Source Kind","description":"external-canonical | internal-canonical | independent-gold | templated"},"ground_truth_kind":{"type":"string","title":"Ground Truth Kind","description":"canonical | human-gold | none"},"brand_population":{"type":"integer","title":"Brand Population","description":"Number of brands in the measured population"},"population_sha256":{"type":"string","title":"Population Sha256","description":"SHA-256 of the frozen brand population (reproducibility anchor)"}},"type":"object","required":["name","source_kind","ground_truth_kind","brand_population","population_sha256"],"title":"MethodologyEvalSet","description":"Eval-set provenance for the published cell."},"MethodologyHeadline":{"properties":{"match_rate":{"type":"number","title":"Match Rate","description":"Strict field-comparison match-rate, percent (matches / comparisons * 100)"},"metric":{"type":"string","title":"Metric","description":"Metric identifier as stored on the cell, e.g. 'match-rate'"},"comparisons":{"type":"integer","title":"Comparisons","description":"Number of FIELD COMPARISONS scored — NOT a count of companies/issuers"},"breakdown":{"$ref":"#/components/schemas/MethodologyBreakdown","description":"match / partially_accurate / divergent tally + divergent directions"}},"type":"object","required":["match_rate","metric","comparisons","breakdown"],"title":"MethodologyHeadline","description":"The published result this methodology explains — restated faithfully.\n\nMirrors the accuracy cell's numbers exactly so the\nmethodology and the cell can never disagree."},"MethodologyList":{"properties":{"methodologies":{"items":{"$ref":"#/components/schemas/MethodologySummary"},"type":"array","title":"Methodologies","description":"Published methodology documents"},"count":{"type":"integer","title":"Count","description":"Number of published methodologies"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note","description":"Honest note, e.g. when none are published yet"}},"type":"object","required":["methodologies","count"],"title":"MethodologyList","description":"The index of every published methodology document."},"MethodologyListEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/MethodologyList"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"MethodologyListEnvelope","description":"Typed envelope for GET /methodology."},"MethodologyMeasurement":{"properties":{"what":{"type":"string","title":"What","description":"Plain-language description of the measurement"},"source":{"type":"string","title":"Source","description":"The external canonical authority"},"endpoint":{"type":"string","title":"Endpoint","description":"The exact SEC EDGAR endpoint re-fetched"},"concepts":{"$ref":"#/components/schemas/MethodologyConcepts","description":"The us-gaap XBRL concepts compared"},"fiscal_period":{"type":"string","title":"Fiscal Period","description":"Which fiscal period is re-fetched"},"restatement_tiebreak":{"type":"string","title":"Restatement Tiebreak","description":"How multiple filings for one fact are disambiguated"},"comparison":{"type":"string","title":"Comparison","description":"How a stored value is compared to the canonical"},"tolerance":{"type":"string","title":"Tolerance","description":"The exact matching rule, verbatim"},"numerator_rule":{"type":"string","title":"Numerator Rule","description":"What counts toward the headline rate (and what does not)"}},"type":"object","required":["what","source","endpoint","concepts","fiscal_period","restatement_tiebreak","comparison","tolerance","numerator_rule"],"title":"MethodologyMeasurement","description":"What ``edgar-companyfacts-refetch/v1`` actually does (comparator code)."},"MethodologySource":{"properties":{"label":{"type":"string","title":"Label","description":"What this source grounds"},"reference":{"type":"string","title":"Reference","description":"Where the measurement is recorded"}},"type":"object","required":["label","reference"],"title":"MethodologySource","description":"A traceable source for the figures + claims in this methodology."},"MethodologySummary":{"properties":{"version":{"type":"string","title":"Version","description":"The methodology_version"},"slug":{"type":"string","title":"Slug","description":"URL slug"},"title":{"type":"string","title":"Title","description":"Human title"},"dimension":{"type":"string","title":"Dimension","description":"The accuracy dimension this methodology measures"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"Absolute URL of the full methodology document"}},"type":"object","required":["version","slug","title","dimension"],"title":"MethodologySummary","description":"One row in the methodology index — enough to discover + fetch a document."},"MonitorCompetitiveClaim":{"properties":{"brand_a":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand A"},"brand_b":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand B"},"relationship":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Relationship"},"claim":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Claim"},"agreement_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Agreement Rate"},"observations":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Observations"}},"type":"object","title":"MonitorCompetitiveClaim"},"MonitorCompetitor":{"properties":{"brand":{"type":"string","title":"Brand"},"health_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Health Score"},"health_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Health Tier"},"sentiment_positive":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Sentiment Positive"},"recommendation_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Recommendation Rate"},"mention_count_30d":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mention Count 30D"},"model_agreement_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Model Agreement Rate"}},"type":"object","required":["brand"],"title":"MonitorCompetitor"},"MonitorInsightsDataSummary":{"properties":{"health_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Health Score"},"health_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Health Tier"},"mention_count_30d":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mention Count 30D"},"alerts_count":{"type":"integer","title":"Alerts Count"}},"type":"object","required":["alerts_count"],"title":"MonitorInsightsDataSummary"},"MonitorInsightsEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/MonitorInsightsResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"MonitorInsightsEnvelope"},"MonitorInsightsResponse":{"properties":{"brand":{"type":"string","title":"Brand"},"insights":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Insights","description":"LLM-generated prioritized insights; per-item shape varies (priority/title/description/recommendation/severity in the fallback path)"},"data_summary":{"$ref":"#/components/schemas/MonitorInsightsDataSummary"},"latency_ms":{"type":"integer","title":"Latency Ms"},"cached":{"type":"boolean","title":"Cached"}},"type":"object","required":["brand","insights","data_summary","latency_ms","cached"],"title":"MonitorInsightsResponse"},"MonitorRecommendations":{"properties":{"rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rate"},"trend_7d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Trend 7D"},"trend_30d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Trend 30D"}},"type":"object","title":"MonitorRecommendations"},"MonitorSentiment":{"properties":{"positive":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Positive"},"neutral":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Neutral"},"negative":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Negative"},"trend_7d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Trend 7D"},"trend_30d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Trend 30D"}},"type":"object","title":"MonitorSentiment"},"MonitorSubscriptionEntry":{"properties":{"id":{"type":"string","title":"Id"},"webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url"},"conditions":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Conditions","description":"Trigger conditions (nullable JSON list)"},"frequency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Frequency"},"competitors":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Competitors","description":"Competitor slugs (nullable JSON list)"},"is_active":{"type":"boolean","title":"Is Active"},"last_dispatched":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Dispatched"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","is_active"],"title":"MonitorSubscriptionEntry"},"MonitorSubscriptionsEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/MonitorSubscriptionsResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"MonitorSubscriptionsEnvelope"},"MonitorSubscriptionsResponse":{"properties":{"brand":{"type":"string","title":"Brand"},"subscriptions":{"items":{"$ref":"#/components/schemas/MonitorSubscriptionEntry"},"type":"array","title":"Subscriptions"},"total":{"type":"integer","title":"Total"},"latency_ms":{"type":"integer","title":"Latency Ms"}},"type":"object","required":["brand","subscriptions","total","latency_ms"],"title":"MonitorSubscriptionsResponse"},"NotarizeHashRequest":{"properties":{"hash":{"type":"string","title":"Hash","description":"A client-computed 32-byte SHA-256 digest: exactly 64 lowercase hex characters."},"meta":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Meta","description":"Optional FLAT object, stored verbatim inside the receipt and never interpreted: string keys (lowercase, ≤64 chars), scalar single-line string values ≤256 chars, ≤16 keys, ≤1,024 bytes at JCS form."}},"type":"object","required":["hash"],"title":"NotarizeHashRequest","description":"R1/R2 request shape. ``hide_input_in_errors``: a 422 must never echo the submitted\nbytes back through the raw-errors handler (the pii/no-echo request-model idiom)."},"NotarizeHashResponse":{"properties":{"receipt":{"properties":{"payment":{"properties":{"asserts":{"type":"string","enum":["settlement-at-broadcast"],"description":"What the binding claims, named honestly: settlement at broadcast time, NOT chain finality. Finality composes via the chain itself."},"payer":{"type":"string","description":"The authorization signer — the payer of record, lowercased. NOTE: this address is NOT the transaction sender; a facilitator relayer submits and pays gas, so auditing a wallet's own sent-transaction list for this payment returns a false negative."},"tx_hash":{"type":"string","description":"The settlement transaction. TO CHECK IT YOURSELF: do NOT rely on the transaction's status field — the transfer is submitted inside a Multicall3 aggregate3 entry with allowFailure set, so the outer transaction can read success while the inner transfer reverted. Look for the ERC-20 Transfer log emitted by the `asset` contract, from `payer`, to the quoted payTo, for exactly `amount`."},"network":{"type":"string","description":"CAIP-2 chain id, canonical regardless of wire dialect.","examples":["eip155:8453"]},"amount":{"type":"string","description":"Atomic units of `asset`, as an integer string.","examples":["10000"]},"asset":{"type":"string","description":"The ERC-20 token contract the payment moved."}},"type":"object","required":["asserts","payer","tx_hash","network","amount","asset"],"description":"Settlement facts, bound INSIDE the signed envelope, on x402-paid mints only. Absent on key-bought mints — nothing was paid at that door — and absent when the transfer could not be confirmed on-chain: when this block is present, the transfer was read from the token contract's own Transfer log in a mined block. Editing any field breaks the signature."}},"additionalProperties":true,"type":"object","title":"Receipt"},"receipt_id":{"type":"string","title":"Receipt Id"},"replayed":{"type":"boolean","title":"Replayed"},"verify":{"additionalProperties":true,"type":"object","title":"Verify"},"latency_ms":{"type":"integer","title":"Latency Ms"}},"type":"object","required":["receipt","receipt_id","replayed","verify","latency_ms"],"title":"NotarizeHashResponse","description":"The success payload: the COMPLETE signed receipt envelope (chain block included —\ncontent_digest, chain_prev, chain_self, key_id, signature), byte-matching (post-JCS)\nwhat the owner-scoped receipts read API returns for the same row."},"OpsEventDetail":{"properties":{"event_id":{"type":"string","title":"Event Id","description":"Spec-compliant event id (evt_{prefix}_{YYYYMMDD}_{seq})"},"feed":{"type":"string","title":"Feed","description":"Feed slug"},"event_type":{"type":"string","title":"Event Type","description":"Event type within the feed"},"priority":{"type":"string","title":"Priority","description":"Priority tier: P1, P2, or P3"},"headline":{"type":"string","title":"Headline","description":"One-line headline (max 200 chars)"},"published_at":{"type":"string","title":"Published At","description":"ISO 8601 publication timestamp"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary","description":"Event summary (paid tier and free+P1; absent on free+non-P1)"},"payload":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Payload","description":"Event-specific payload object (paid tier only)"},"sources":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Sources","description":"Citation list (paid tier only)"},"related_events":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Related Events","description":"Related event_id list (paid tier only)"},"actions":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Actions","description":"Suggested action list (paid tier only)"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier","description":"Source-event tier classification (paid tier only)"},"compiled_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Compiled By","description":"Compiler identifier (paid tier only)"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","description":"Event status; always 'published' on the public surface (paid tier only)"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At","description":"ISO 8601 row-creation timestamp (paid tier only)"},"tier_applied":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier Applied","description":"Plan tier actually applied to this event (free-tier list items; always present in single-event endpoint)"},"upgrade_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Upgrade Hint","description":"Hint string suggesting plan upgrade (free tier only)"}},"type":"object","required":["event_id","feed","event_type","priority","headline","published_at"],"title":"OpsEventDetail","description":"Per-event shape returned by the ops feeds after plan-based filtering.\n\nThe wire shape varies by caller plan and event priority:\n\n* Paid tiers (Starter / Pro / Enterprise) → the full event shape\n  (``summary`` / ``payload`` / ``sources`` / ``related_events`` / ``actions``\n  / ``tier`` / ``compiled_by`` / ``status`` / ``created_at``).\n* Free tier + P1 priority → the summary shape\n  (``summary`` / ``tier_applied`` / ``upgrade_hint``).\n* Free tier + non-P1 priority → the headline shape\n  (``tier_applied`` / ``upgrade_hint`` only — no ``summary``).\n\nThe maximal-superset modelled here typed each variant-only key as\n``Optional[...] = Field(None, ...)`` so the OpenAPI ``required`` array lists\nonly the always-emitted core (``event_id`` / ``feed`` / ``event_type`` /\n``priority`` / ``headline`` / ``published_at``). ``tier_applied`` and\n``upgrade_hint`` are conditional (free-tier only inside the per-item shape\nin the list endpoint; the single-event endpoint always injects\n``tier_applied`` after the filter — see ``OpsEventSingleData``)."},"OpsEventSingleData":{"properties":{"event_id":{"type":"string","title":"Event Id","description":"Spec-compliant event id (evt_{prefix}_{YYYYMMDD}_{seq})"},"feed":{"type":"string","title":"Feed","description":"Feed slug"},"event_type":{"type":"string","title":"Event Type","description":"Event type within the feed"},"priority":{"type":"string","title":"Priority","description":"Priority tier: P1, P2, or P3"},"headline":{"type":"string","title":"Headline","description":"One-line headline (max 200 chars)"},"published_at":{"type":"string","title":"Published At","description":"ISO 8601 publication timestamp"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary","description":"Event summary (paid tier and free+P1; absent on free+non-P1)"},"payload":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Payload","description":"Event-specific payload object (paid tier only)"},"sources":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Sources","description":"Citation list (paid tier only)"},"related_events":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Related Events","description":"Related event_id list (paid tier only)"},"actions":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Actions","description":"Suggested action list (paid tier only)"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier","description":"Source-event tier classification (paid tier only)"},"compiled_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Compiled By","description":"Compiler identifier (paid tier only)"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","description":"Event status; always 'published' on the public surface (paid tier only)"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At","description":"ISO 8601 row-creation timestamp (paid tier only)"},"tier_applied":{"type":"string","title":"Tier Applied","description":"Plan tier actually applied to this event response"},"upgrade_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Upgrade Hint","description":"Hint string suggesting plan upgrade (free tier only)"}},"type":"object","required":["event_id","feed","event_type","priority","headline","published_at","tier_applied"],"title":"OpsEventSingleData","description":"Single-event endpoint payload — same shape as ``OpsEventDetail`` but\n``tier_applied`` is always emitted (the handler injects it after the\nplan-tier filter, regardless of plan)."},"OpsEventSingleEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/OpsEventSingleData"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"OpsEventSingleEnvelope","description":"Typed envelope for GET /v1/ops/events/{event_id}."},"OpsFeedEventsData":{"properties":{"feed":{"type":"string","title":"Feed","description":"Feed slug"},"events":{"items":{"$ref":"#/components/schemas/OpsEventDetail"},"type":"array","title":"Events","description":"Filtered events on this page"},"compiled_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Compiled At","description":"ISO 8601 timestamp of the latest published event in this feed (null if the feed is empty)"},"tier_applied":{"type":"string","title":"Tier Applied","description":"Plan tier applied to this listing (top-level tier metadata; per-event tier_applied is free-tier-only)"},"event_count":{"type":"integer","title":"Event Count","description":"Number of events on this page"}},"type":"object","required":["feed","events","compiled_at","tier_applied","event_count"],"title":"OpsFeedEventsData","description":"Payload for GET /v1/ops/{feed} — filtered event list.\n\nThe ``events`` list items use the plan-filtered event shape (see\n``OpsEventDetail``); ``tier_applied`` inside each item is conditional\n(free-tier variants emit it; paid-tier variants do not — the top-level\n``tier_applied`` here always carries the resolved tier).\n\nPagination metadata for this endpoint lives in the envelope's ``meta.pagination``\nblock (``cursor`` / ``has_more``), not in this ``data`` payload."},"OpsFeedEventsEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/OpsFeedEventsData"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"OpsFeedEventsEnvelope","description":"Typed envelope for GET /v1/ops/{feed}."},"OpsFeedIndexData":{"properties":{"feeds":{"additionalProperties":{"$ref":"#/components/schemas/OpsFeedSummary"},"type":"object","title":"Feeds","description":"Per-feed summary, keyed by feed slug"},"total_events":{"type":"integer","title":"Total Events","description":"Sum of event_count across all feeds"},"feeds_active":{"type":"integer","title":"Feeds Active","description":"Number of feeds with at least one event"}},"type":"object","required":["feeds","total_events","feeds_active"],"title":"OpsFeedIndexData","description":"Payload for GET /v1/ops — feed index metadata across all 6 feeds.\n\nThe ``feeds`` mapping is keyed by feed slug (one of ``security_ops`` /\n``commerce_ops`` / ``protocol_ops`` / ``trust_ops`` / ``regulatory_ops`` /\n``model_ops``); the dict shape is left open in OpenAPI so future feed-slug\nadditions land cleanly."},"OpsFeedIndexEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/OpsFeedIndexData"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"OpsFeedIndexEnvelope","description":"Typed envelope for GET /v1/ops."},"OpsFeedSummary":{"properties":{"display_name":{"type":"string","title":"Display Name","description":"Human-readable feed name"},"description":{"type":"string","title":"Description","description":"One-line feed description"},"event_count":{"type":"integer","title":"Event Count","description":"Total published events in this feed (all-time)"},"event_count_24h":{"type":"integer","title":"Event Count 24H","description":"Published events in the last 24 hours"},"p1_count_24h":{"type":"integer","title":"P1 Count 24H","description":"P1-priority published events in the last 24 hours"},"latest_event_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Latest Event At","description":"ISO 8601 timestamp of the most recent published event (null if the feed has no events)"},"compiled_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Compiled At","description":"ISO 8601 timestamp the feed was last compiled (approximated by latest_event_at; null if no events)"}},"type":"object","required":["display_name","description","event_count","event_count_24h","p1_count_24h","latest_event_at","compiled_at"],"title":"OpsFeedSummary","description":"One feed's summary row in the feed-index response.\n\nMirrors the per-feed dict built by the ops feed-index handler. Every\nkey is always emitted for every feed slug (the inner dict is built\nunconditionally), so every field is declared with ``Field(...)`` — even the\ntwo nullable timestamps (``latest_event_at`` / ``compiled_at``), which are\nalways present in the dict but may carry ``None`` when the feed has no\npublished events yet. Nullable\nvalues stay ``Optional[...]`` but the keys stay required."},"OpsWebhookListEnvelope":{"properties":{"data":{"items":{"$ref":"#/components/schemas/OpsWebhookListItem"},"type":"array","title":"Data"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"OpsWebhookListEnvelope","description":"Typed envelope for GET /v1/ops/webhooks."},"OpsWebhookListItem":{"properties":{"id":{"type":"string","title":"Id","description":"Webhook UUID"},"url":{"type":"string","title":"Url","description":"Subscriber HTTPS endpoint"},"feeds":{"items":{"type":"string"},"type":"array","title":"Feeds","description":"Feed slugs this webhook subscribes to (may be empty = all feeds)"},"priority_filter":{"items":{"type":"string"},"type":"array","title":"Priority Filter","description":"Priority filter (may be empty = all priorities)"},"secret_hint":{"type":"string","title":"Secret Hint","description":"Last 4 chars of the HMAC secret, prefixed with '...' (e.g. '...ab12'); '****' if unset"},"is_active":{"type":"boolean","title":"Is Active","description":"Whether the webhook is currently active"},"created_at":{"type":"string","title":"Created At","description":"ISO 8601 creation timestamp"}},"type":"object","required":["id","url","feeds","priority_filter","secret_hint","is_active","created_at"],"title":"OpsWebhookListItem","description":"One webhook subscription in the caller's webhook list.\n\nEvery key is always emitted on every row, so every field is declared\nrequired."},"PIICheckRequest":{"properties":{"content":{"type":"string","maxLength":10000,"minLength":1,"title":"Content"}},"type":"object","required":["content"],"title":"PIICheckRequest"},"PIICheckResponse":{"properties":{"verdict":{"type":"string","enum":["pii_absent","pii_detected"],"title":"Verdict"},"findings":{"additionalProperties":{"type":"integer"},"type":"object","title":"Findings","description":"FLAGGED instances per declared detection class"},"classes_checked":{"items":{"type":"string"},"type":"array","title":"Classes Checked"},"detector":{"$ref":"#/components/schemas/PIIDetectorInfo"},"locale":{"type":"string","title":"Locale"},"skip_heuristics":{"items":{"type":"string"},"type":"array","title":"Skip Heuristics"},"accuracy":{"additionalProperties":true,"type":"object","title":"Accuracy","description":"Published per-class precision/recall, measured on the detector's own labeled corpus (corpus-bound by digest)"},"limits":{"type":"string","title":"Limits","description":"Honest scope limits of this detector version, verbatim"},"scope_note":{"type":"string","title":"Scope Note"},"content_sha256":{"type":"string","title":"Content Sha256","description":"'sha256:'+hex digest binding the submitted content (caller retains the content; carried in the receipt's source record at every retention tier). Unsalted: a receipt holder can confirm a guessed content value against it."},"receipt_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Receipt Id","description":"Staged reliance-receipt ULID; resolvable via GET /receipts/{receipt_id} after the drain worker materializes it (404 until then). Null when nothing durable was staged (anonymous / x402-no-key callers)."},"latency_ms":{"type":"integer","title":"Latency Ms"}},"type":"object","required":["verdict","findings","classes_checked","detector","locale","skip_heuristics","accuracy","limits","scope_note","content_sha256","latency_ms"],"title":"PIICheckResponse","description":"POST /pii/check — the pii_scan_v1 verdict + full detector scope disclosure.\n\n``findings`` are per-class FLAGGED instance counts (0 = none flagged); the submitted\ncontent itself is never stored — the receipt binds it by ``content_sha256`` only (a\nsource-record digest kept at every retention tier; the class list/tally basis rides the\nreceipt details at tiers A/B)."},"PIIDetectorInfo":{"properties":{"detector_id":{"type":"string","title":"Detector Id"},"version":{"type":"string","title":"Version","description":"Detector semver; runs are re-runnable at the same pinned version only"},"artifact_sha256":{"type":"string","title":"Artifact Sha256","description":"'sha256:'+hex content digest over the versioned detector artifact (RFC-8785 canonical bytes)"}},"type":"object","required":["detector_id","version","artifact_sha256"],"title":"PIIDetectorInfo","description":"The pinned detector identity — the same triple the receipt carries in\n``recompute_inputs`` ({prompt_id, prompt_version, prompt_hash})."},"PaginationMeta":{"properties":{"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor","description":"Opaque cursor for next page"},"has_more":{"type":"boolean","title":"Has More","description":"Whether more results exist beyond this page"},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit","description":"Page size applied to this response (null when the full list was returned)"},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total","description":"Total matching rows (omitted when COUNT is too costly)"}},"type":"object","required":["has_more"],"title":"PaginationMeta"},"ParityRunRequest":{"properties":{"fallback_slug":{"type":"string","pattern":"^[a-z0-9][a-z0-9_-]{0,63}$","title":"Fallback Slug"},"fallback_version":{"anyOf":[{"type":"integer","maximum":1000000.0,"minimum":1.0},{"type":"null"}],"title":"Fallback Version","description":"Pinned fallback-declaration version; omitted = latest active version"},"cases":{"items":{},"type":"array","maxItems":256,"minItems":1,"title":"Cases","description":"The fallback's captured observations: {case_id, observations: {dimension: numeric | 'sha256:'+hex}, seed?} — the same closed shapes a pinned snapshot uses"}},"additionalProperties":false,"type":"object","required":["fallback_slug","cases"],"title":"ParityRunRequest","description":"Run the differential for the caller's DECLARED fallback (THREE-B B-2):\nthe fallback's captured observations against the pinned reference under\nthe declared contract the fallback itself binds. Observations use the\nregistry's closed shapes (finite numeric | 'sha256:'+hex digest) — free\ntext is rejected. Exactly one declared fallback per run; the candidate\nsubject is the fallback declaration's own subject, never caller-\nsubstituted. Edge never runs the fallback — the caller captures and\nsubmits what their fallback delivered."},"ParityRunResponse":{"properties":{"run_id":{"type":"string","title":"Run Id"},"verdict":{"type":"string","enum":["match","divergent","unverified"],"title":"Verdict"},"grammar_version":{"type":"string","title":"Grammar Version"},"fallback_slug":{"type":"string","title":"Fallback Slug"},"fallback_version":{"type":"integer","title":"Fallback Version"},"fallback_kind":{"type":"string","title":"Fallback Kind"},"fallback_digest":{"type":"string","title":"Fallback Digest","description":"\"sha256:\"+hex over the RFC 8785 canonical fallback declaration"},"contract_slug":{"type":"string","title":"Contract Slug"},"contract_version":{"type":"integer","title":"Contract Version"},"contract_digest":{"type":"string","title":"Contract Digest"},"reference_slug":{"type":"string","title":"Reference Slug"},"reference_version":{"type":"integer","title":"Reference Version"},"reference_digest":{"type":"string","title":"Reference Digest"},"candidate_digest":{"type":"string","title":"Candidate Digest","description":"\"sha256:\"+hex over the {subject, snapshot} pair of the declared fallback's subject + the submitted capture"},"degraded_dimensions":{"items":{"type":"string"},"type":"array","title":"Degraded Dimensions","description":"Dimensions whose rollup status is divergent — exactly what degrades, stated under the caller's own contract; deltas ride per_dim/case_verdicts"},"dim_counts":{"additionalProperties":true,"type":"object","title":"Dim Counts","description":"status -> dimension count"},"case_counts":{"additionalProperties":true,"type":"object","title":"Case Counts","description":"status -> case count"},"per_dim":{"additionalProperties":true,"type":"object","title":"Per Dim","description":"dimension -> {status, counts} rollup (deltas per dimension ride the case_verdicts evidence + the receipt basis)"},"case_verdicts":{"items":{},"type":"array","title":"Case Verdicts","description":"Per-case grammar verdicts (dimension, status, direction/reason, digest/numeric evidence only — no free text)"},"abstention_histogram":{"additionalProperties":true,"type":"object","title":"Abstention Histogram","description":"typed abstention reason -> count"},"abstention_class_histogram":{"additionalProperties":true,"type":"object","title":"Abstention Class Histogram","description":"reason class -> count"},"seeds":{"additionalProperties":true,"type":"object","title":"Seeds","description":"{\"declared\": {case_id: seed}, \"observed\": {case_id: seed}}"},"method":{"type":"string","title":"Method"},"norm_version":{"type":"string","title":"Norm Version"},"receipt_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Receipt Id","description":"Signed reliance-receipt handle (GET /receipts/{receipt_id}); null when nothing durable was staged"},"disclosure":{"type":"string","title":"Disclosure"},"checked_at":{"type":"string","title":"Checked At"},"latency_ms":{"type":"integer","minimum":0.0,"title":"Latency Ms"}},"type":"object","required":["run_id","verdict","grammar_version","fallback_slug","fallback_version","fallback_kind","fallback_digest","contract_slug","contract_version","contract_digest","reference_slug","reference_version","reference_digest","candidate_digest","dim_counts","case_counts","per_dim","abstention_histogram","abstention_class_histogram","seeds","method","norm_version","disclosure","checked_at","latency_ms"],"title":"ParityRunResponse"},"PeerGroupComparison":{"properties":{"delta":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Delta"},"position":{"type":"string","title":"Position","description":"One of: above, below, at, unknown"}},"type":"object","required":["position"],"title":"PeerGroupComparison"},"PeerGroupEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/PeerGroupResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"PeerGroupEnvelope"},"PeerGroupOutlierFlag":{"properties":{"dimension":{"type":"string","title":"Dimension"},"brand_value":{"type":"number","title":"Brand Value"},"cluster_mean":{"type":"number","title":"Cluster Mean"},"cluster_std":{"type":"number","title":"Cluster Std"},"deviations":{"type":"number","title":"Deviations"}},"type":"object","required":["dimension","brand_value","cluster_mean","cluster_std","deviations"],"title":"PeerGroupOutlierFlag"},"PeerGroupResponse":{"properties":{"brand_id":{"type":"string","title":"Brand Id"},"brand_name":{"type":"string","title":"Brand Name"},"cluster_id":{"type":"integer","title":"Cluster Id"},"cluster_size":{"type":"integer","title":"Cluster Size"},"dominant_vertical":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dominant Vertical"},"rank_in_cluster":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank In Cluster"},"brand_scores":{"$ref":"#/components/schemas/PeerGroupScores"},"cluster_averages":{"$ref":"#/components/schemas/PeerGroupScores"},"vs_cluster":{"$ref":"#/components/schemas/PeerGroupVsCluster"},"is_outlier":{"type":"boolean","title":"Is Outlier"},"outlier_flags":{"items":{"$ref":"#/components/schemas/PeerGroupOutlierFlag"},"type":"array","title":"Outlier Flags"},"peers":{"items":{"$ref":"#/components/schemas/ClusterBrand"},"type":"array","title":"Peers"},"latency_ms":{"type":"integer","title":"Latency Ms"}},"type":"object","required":["brand_id","brand_name","cluster_id","cluster_size","brand_scores","cluster_averages","vs_cluster","is_outlier","outlier_flags","peers","latency_ms"],"title":"PeerGroupResponse"},"PeerGroupScores":{"properties":{"health_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Health Score"},"sentiment_positive":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Sentiment Positive"},"recommendation_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Recommendation Rate"}},"type":"object","title":"PeerGroupScores"},"PeerGroupVsCluster":{"properties":{"health_score":{"$ref":"#/components/schemas/PeerGroupComparison"},"sentiment":{"$ref":"#/components/schemas/PeerGroupComparison"},"recommendation_rate":{"$ref":"#/components/schemas/PeerGroupComparison"}},"type":"object","required":["health_score","sentiment","recommendation_rate"],"title":"PeerGroupVsCluster"},"PolicyCheckRequest":{"properties":{"brand":{"type":"string","title":"Brand"},"claims":{"items":{"type":"string"},"type":"array","maxItems":10,"minItems":1,"title":"Claims"},"depth":{"type":"string","pattern":"^(fast|standard|auto)$","title":"Depth","default":"auto"},"include_sentiment":{"type":"boolean","title":"Include Sentiment","default":false}},"type":"object","required":["brand","claims"],"title":"PolicyCheckRequest"},"PolicyCheckResponse":{"properties":{"brand":{"type":"string","title":"Brand"},"depth":{"type":"string","title":"Depth","description":"Depth requested by the caller"},"results":{"items":{"$ref":"#/components/schemas/PolicyCheckResultItem"},"type":"array","title":"Results"},"policies_count":{"type":"integer","title":"Policies Count","description":"Number of policy records loaded for this brand"},"verified_at":{"type":"string","title":"Verified At"},"latency_ms":{"type":"integer","title":"Latency Ms"},"depth_used":{"type":"string","title":"Depth Used"}},"type":"object","required":["brand","depth","results","policies_count","verified_at","latency_ms","depth_used"],"title":"PolicyCheckResponse"},"PolicyCheckResultItem":{"properties":{"claim":{"type":"string","title":"Claim"},"verdict":{"type":"string","enum":["accurate","inaccurate","partially_accurate","unverifiable"],"title":"Verdict","description":"Verification verdict for this claim, against the reference data Edge holds for this domain. Vocabulary — accurate: The claim matches the reference data Edge holds. · inaccurate: The claim contradicts the reference data Edge holds. · partially_accurate: The claim is within tolerance but not exact, or matches in part — never counted as a match in any published rate. · unverifiable: Edge holds no reference data able to decide this claim. Not a statement about the claim's truth."},"confidence":{"type":"number","title":"Confidence"},"confidence_tier":{"type":"string","title":"Confidence Tier"},"evidence":{"type":"string","title":"Evidence"},"method":{"type":"string","title":"Method"},"sentiment":{"anyOf":[{},{"type":"null"}],"title":"Sentiment"},"next_action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Action","description":"Machine token naming the suggested next step when the rule tier could not decide this claim (currently always 'retry_with_depth_auto'). Present only on rule-tier unverifiable results — the same flat grammar 401/403 Problem responses carry; absent on confident verdicts and the LLM tier."},"hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hint","description":"Agent-readable guidance beside next_action: names depth:'auto' (LLM verification of the same claim) and POST /verify/claim (verify against a URL you supply). Present only with next_action."},"hint_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hint Url","description":"Documentation URL for the suggested next step. Present only with next_action."},"policy_data":{"anyOf":[{},{"type":"null"}],"title":"Policy Data","description":"Domain-specific structured data"}},"type":"object","required":["claim","verdict","confidence","confidence_tier","evidence","method"],"title":"PolicyCheckResultItem"},"Posture":{"type":"string","enum":["consistent","divergent","partial","unverified","observed-only"],"title":"Posture"},"PreTransactionRequest":{"properties":{"brand":{"type":"string","maxLength":200,"minLength":1,"title":"Brand"},"product":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Product"},"price":{"anyOf":[{"$ref":"#/components/schemas/PriceInfo"},{"type":"null"}]},"claims":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":10},{"type":"null"}],"title":"Claims"},"checks":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":6},{"type":"null"}],"title":"Checks"}},"type":"object","required":["brand"],"title":"PreTransactionRequest"},"PreflightBatchItem":{"properties":{"response":{"type":"string","maxLength":10000,"minLength":1,"title":"Response"},"query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query"},"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand"}},"type":"object","required":["response"],"title":"PreflightBatchItem"},"PreflightBatchRequest":{"properties":{"checks":{"items":{"$ref":"#/components/schemas/PreflightBatchItem"},"type":"array","maxItems":20,"minItems":1,"title":"Checks"},"depth":{"type":"string","pattern":"^(fast|standard)$","title":"Depth","default":"standard"}},"type":"object","required":["checks"],"title":"PreflightBatchRequest"},"PreflightBatchResponse":{"properties":{"results":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Results","description":"Per-item preflight result dicts"},"total":{"type":"integer","title":"Total"},"passed":{"type":"integer","title":"Passed"},"failed":{"type":"integer","title":"Failed"},"latency_ms":{"type":"integer","title":"Latency Ms"},"depth_used":{"type":"string","title":"Depth Used"}},"type":"object","required":["results","total","passed","failed","latency_ms","depth_used"],"title":"PreflightBatchResponse","description":"Each results item is the raw run_preflight() dict shape."},"PreflightCheckResponse":{"properties":{"overall_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Overall Score"},"dimensions":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Dimensions"},"flags":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Flags"},"recommendation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recommendation"},"verified_claims":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Verified Claims"},"latency_ms":{"type":"integer","title":"Latency Ms"},"depth_used":{"type":"string","title":"Depth Used"}},"additionalProperties":true,"type":"object","required":["latency_ms","depth_used"],"title":"PreflightCheckResponse","description":"Spreads run_preflight() dict + latency_ms + depth_used.\n\nThe run_preflight dict carries a ``pass`` key (reserved word); it is\npreserved verbatim via ``extra='allow'`` rather than aliased to avoid\nFastAPI by_alias=False stripping the original key on re-serialize."},"PreflightRequest":{"properties":{"response":{"type":"string","maxLength":10000,"minLength":1,"title":"Response"},"query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query"},"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand"},"depth":{"type":"string","pattern":"^(fast|standard)$","title":"Depth","default":"standard"}},"type":"object","required":["response"],"title":"PreflightRequest"},"PriceCheckRequest":{"properties":{"brand":{"type":"string","title":"Brand"},"claims":{"items":{"type":"string"},"type":"array","maxItems":10,"minItems":1,"title":"Claims"},"depth":{"type":"string","pattern":"^(fast|standard|auto)$","title":"Depth","default":"auto"},"include_sentiment":{"type":"boolean","title":"Include Sentiment","default":false}},"type":"object","required":["brand","claims"],"title":"PriceCheckRequest"},"PriceInfo":{"properties":{"amount":{"type":"number","exclusiveMinimum":0.0,"title":"Amount"},"currency":{"type":"string","maxLength":3,"minLength":3,"title":"Currency"}},"type":"object","required":["amount","currency"],"title":"PriceInfo"},"Probe":{"properties":{"method":{"type":"string","title":"Method"},"stages_run":{"items":{"type":"string"},"type":"array","title":"Stages Run"},"duration_ms":{"type":"integer","title":"Duration Ms"}},"additionalProperties":false,"type":"object","required":["method","stages_run","duration_ms"],"title":"Probe"},"Problem":{"properties":{"type":{"type":"string","title":"Type","description":"Absolute URI identifying the problem type"},"title":{"type":"string","title":"Title","description":"Short, human-readable summary"},"status":{"type":"integer","title":"Status","description":"HTTP status code as integer"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail","description":"Human-readable explanation specific to this occurrence"},"instance":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instance","description":"Occurrence URI (`urn:uuid:<request_id>`)"},"request_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Id","description":"Correlation UUID (Edge extension)"},"next_action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Action","description":"Suggested next step (Edge extension)"},"hint_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hint Url","description":"More information URL (Edge extension)"},"retry_after":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Retry After","description":"Delta seconds, mirrored as Retry-After header (Edge extension)"},"context":{"anyOf":[{},{"type":"null"}],"title":"Context","description":"Structured detail (Edge extension)"},"errors":{"anyOf":[{"items":{"$ref":"#/components/schemas/ProblemValidationError"},"type":"array"},{"type":"null"}],"title":"Errors","description":"Validation errors (Edge extension; populated on Pydantic 422)"}},"type":"object","required":["type","title","status"],"title":"Problem","description":"RFC 9457 Problem Details body. Top-level Edge extensions are flat."},"ProblemType":{"properties":{"type":{"type":"string","title":"Type","description":"Absolute problem-type URI (the error body's ``type`` value)"},"slug":{"type":"string","title":"Slug","description":"URL slug of this problem type"},"code":{"type":"string","title":"Code","description":"Registered machine-readable error code (the error body's ``code`` value)"},"title":{"type":"string","title":"Title","description":"Static human-readable title (identical for every occurrence of this type)"},"status":{"type":"integer","title":"Status","description":"Canonical HTTP status for this type (the error body's ``status`` equals the response status)"}},"type":"object","required":["type","slug","code","title","status"],"title":"ProblemType","description":"One registered problem type — what an error body's ``type`` URI documents."},"ProblemTypeEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/ProblemType"},"meta":{"additionalProperties":true,"type":"object","title":"Meta"}},"type":"object","required":["data","meta"],"title":"ProblemTypeEnvelope"},"ProblemTypeList":{"properties":{"problem_types":{"items":{"$ref":"#/components/schemas/ProblemType"},"type":"array","title":"Problem Types","description":"Every registered problem type, sorted by slug"},"count":{"type":"integer","title":"Count","description":"Number of registered problem types"}},"type":"object","required":["problem_types","count"],"title":"ProblemTypeList","description":"The index of every registered problem type."},"ProblemTypeListEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/ProblemTypeList"},"meta":{"additionalProperties":true,"type":"object","title":"Meta"}},"type":"object","required":["data","meta"],"title":"ProblemTypeListEnvelope"},"ProblemValidationError":{"properties":{"field":{"type":"string","title":"Field","description":"JSON Pointer (RFC 6901) to the offending field"},"message":{"type":"string","title":"Message","description":"Validator-provided message"},"type":{"type":"string","title":"Type","description":"Pydantic error type identifier"}},"type":"object","required":["field","message","type"],"title":"ProblemValidationError","description":"Single entry in the ``errors`` extension on a 422 Problem."},"ProfileAgentCompatibility":{"properties":{"supports_ucp":{"type":"boolean","title":"Supports Ucp"},"supports_a2a":{"type":"boolean","title":"Supports A2A"},"supports_mcp":{"type":"boolean","title":"Supports Mcp"},"supports_api_checkout":{"type":"boolean","title":"Supports Api Checkout"},"shopify_merchant":{"type":"boolean","title":"Shopify Merchant"},"protocols_checked":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Protocols Checked"}},"type":"object","required":["supports_ucp","supports_a2a","supports_mcp","supports_api_checkout","shopify_merchant"],"title":"ProfileAgentCompatibility"},"ProfileFinancials":{"properties":{"ticker":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ticker"},"exchange":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exchange"},"fiscal_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Fiscal Year"},"revenue":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Revenue"},"net_income":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Net Income"},"market_cap":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Market Cap"},"employee_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Employee Count"},"founded_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Founded Year"},"headquarters":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Headquarters"},"ceo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ceo"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},"type":"object","title":"ProfileFinancials","description":"Union of the two financial shapes the handler emits (full\nCompanyFinancial row vs. curated FinancialFact subset); every key from\neither branch is declared so neither is dropped."},"ProfilePolicies":{"properties":{"count":{"type":"integer","title":"Count"},"types":{"items":{"type":"string"},"type":"array","title":"Types"},"summary":{"additionalProperties":true,"type":"object","title":"Summary","description":"policy_type -> summary text (dynamic keys; content varies)"}},"type":"object","required":["count","types"],"title":"ProfilePolicies"},"ProfilePriceRange":{"properties":{"min":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min"},"max":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max"},"currency":{"type":"string","title":"Currency"}},"type":"object","required":["currency"],"title":"ProfilePriceRange"},"ProfilePricing":{"properties":{"products_tracked":{"type":"integer","title":"Products Tracked"},"price_range":{"anyOf":[{"$ref":"#/components/schemas/ProfilePriceRange"},{"type":"null"}]},"last_verified":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Verified"},"sample_products":{"items":{"$ref":"#/components/schemas/ProfileSampleProduct"},"type":"array","title":"Sample Products"}},"type":"object","required":["products_tracked","sample_products"],"title":"ProfilePricing"},"ProfileSampleProduct":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"}},"type":"object","title":"ProfileSampleProduct"},"ProfileVerification":{"properties":{"endpoints_available":{"items":{"type":"string"},"type":"array","title":"Endpoints Available"},"definition_completeness":{"type":"number","title":"Definition Completeness"},"last_updated":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Updated"}},"type":"object","required":["endpoints_available","definition_completeness"],"title":"ProfileVerification"},"ProtocolClaim":{"properties":{"source_protocol":{"type":"string","maxLength":50,"minLength":1,"title":"Source Protocol"},"claim_type":{"type":"string","maxLength":100,"minLength":1,"title":"Claim Type"},"claim_value":{"type":"string","maxLength":1000,"minLength":1,"title":"Claim Value"},"claim_timestamp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Claim Timestamp"}},"type":"object","required":["source_protocol","claim_type","claim_value"],"title":"ProtocolClaim"},"ProtocolClaimRequest":{"properties":{"brand":{"type":"string","maxLength":200,"minLength":1,"title":"Brand"},"claims":{"items":{"$ref":"#/components/schemas/ProtocolClaim"},"type":"array","maxItems":10,"minItems":1,"title":"Claims"}},"type":"object","required":["brand","claims"],"title":"ProtocolClaimRequest"},"QuickVerifyStatusResponse":{"properties":{"scan_id":{"type":"string","title":"Scan Id"},"entity_id":{"type":"string","title":"Entity Id"},"status":{"type":"string","title":"Status"},"modules_completed":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Modules Completed"},"modules_pending":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Modules Pending"},"poll_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Poll Url"},"entity_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Name"},"scanned_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scanned At"},"duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Ms"},"cached":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Cached"},"findings":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Findings"},"summary":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Summary"},"entity_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Url"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"additionalProperties":true,"type":"object","required":["scan_id","entity_id","status"],"title":"QuickVerifyStatusResponse","description":"Union of GET /v1/verify/quick/{scan_id}: completed/failed/timeout vs in-progress.\n\nCompleted states include findings + summary + entity_url etc.;\nin-progress includes modules_completed + modules_pending."},"QuickVerifySubmitResponse":{"properties":{"scan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Id"},"entity_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Id"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"poll_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Poll Url"},"cached":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Cached"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"estimated_duration_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Estimated Duration Seconds"}},"additionalProperties":true,"type":"object","title":"QuickVerifySubmitResponse","description":"Union of the three POST /v1/verify/quick paths: active scan, new scan, cached result.\n\nThe cached-result path returns the full _build_scan_result shape; we permit\nthose keys via ``extra='allow'`` since they overlap heavily with the status\nresponse."},"RateLimits":{"properties":{"free_tier":{"type":"string","title":"Free Tier"},"paid_tier":{"type":"string","title":"Paid Tier"},"free_tier_signed_mints":{"type":"string","title":"Free Tier Signed Mints"},"free_tier_claim_verification":{"type":"string","title":"Free Tier Claim Verification"},"note":{"type":"string","title":"Note"}},"type":"object","required":["free_tier","paid_tier","free_tier_signed_mints","free_tier_claim_verification","note"],"title":"RateLimits"},"ReasonClass":{"type":"string","enum":["inability","bound-violation","dependency","not-evaluated"],"title":"ReasonClass"},"ReceiptExportData":{"properties":{"bundle_format":{"type":"string","title":"Bundle Format","description":"Bundle format identifier"},"generated_at":{"type":"string","title":"Generated At","description":"RFC3339 UTC instant this bundle was exported"},"account_id":{"type":"string","title":"Account Id","description":"The exporting account (owner scope)"},"receipt_count":{"type":"integer","title":"Receipt Count"},"receipts":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Receipts","description":"Chain-ordered (oldest first) receipt records: stored envelope + row fields + source-blob sidecars"},"segment":{"anyOf":[{"$ref":"#/components/schemas/ReceiptExportSegment"},{"type":"null"}],"description":"Chain-segment semantics; null for an empty bundle"},"jwks_url":{"type":"string","title":"Jwks Url","description":"Where the Ed25519 public keys are published. NORMATIVE: a verifier MUST NOT follow this pointer out of a bundle it is checking — it is unsigned wrapper data, so a forged bundle can name the forger's own key set. Pin the key set out of band at https://api.bluefoxedge.ai/.well-known/jwks.json."},"jwks":{"additionalProperties":true,"type":"object","title":"Jwks","description":"Snapshot of the published key set at export time"},"canonicalization":{"additionalProperties":true,"type":"object","title":"Canonicalization","description":"The frozen reproduction recipe + committed normative vector"},"verify_instructions":{"items":{"type":"string"},"type":"array","title":"Verify Instructions"},"declaration_template":{"type":"string","title":"Declaration Template","description":"DRAFT declaration text — counsel review pending"},"disclosures":{"items":{"type":"string"},"type":"array","title":"Disclosures","description":"Honest limits of what this bundle proves"},"offline_verification":{"$ref":"#/components/schemas/ReceiptExportOfflineVerification","description":"The disclosures' machine-readable index: what offline verification establishes (the verdict) and what it does not (`unsupported_paths`)"},"process_description":{"additionalProperties":{"type":"string"},"type":"object","title":"Process Description"},"transparency":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Transparency","description":"L2 inclusion-path block: per-log C2SP checkpoints, consistency proofs, anchors, and the monitor pointer. Null/absent = today's bundle; populated only while the inclusion log is enabled and a signed checkpoint exists. Bundle-level and pre-image-safe: no signed receipt byte moves (the receipt's canonical JSON stays frozen)"}},"additionalProperties":false,"type":"object","required":["bundle_format","generated_at","account_id","receipt_count","receipts","jwks_url","jwks","canonicalization","verify_instructions","declaration_template","disclosures","offline_verification","process_description"],"title":"ReceiptExportData"},"ReceiptExportEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/ReceiptExportData"},"meta":{"additionalProperties":true,"type":"object","title":"Meta"}},"type":"object","required":["data","meta"],"title":"ReceiptExportEnvelope"},"ReceiptExportOfflineVerification":{"properties":{"verdict":{"type":"string","const":"self_consistent_only","title":"Verdict","description":"Offline verification standing of THIS BUNDLE: byte integrity, chain linkage, and signatures against the published key set — self-consistency only; no external witness, transparency log, or anchor. Unrelated to any receipt's measurement `verdict`"},"unsupported_paths":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Unsupported Paths","description":"What offline verification of this bundle does NOT cover — the machine-readable index of `disclosures`; required and non-empty"}},"additionalProperties":false,"type":"object","required":["verdict","unsupported_paths"],"title":"ReceiptExportOfflineVerification","description":"What offline verification of THIS bundle can establish, as fields rather than\nprose. ``disclosures`` has said it in sentences since /1.0; machine consumers parse\nfields, so /1.1 says it machine-readably too. Both members are honest by\nconstruction rather than by vigilance (the same posture as the evidence pack's\ngrade ban): the verdict is typed as the single Literal — a stronger standing is\nunrepresentable in this format version — and ``unsupported_paths`` is required and\nnon-empty, so a silent totality claim is unrepresentable as well.\n\nDeliberate disambiguation (gate r1, three-reviewer convergent): this block's\n``verdict`` describes the BUNDLE's offline-verification standing and nothing else.\nIt is unrelated to the per-receipt measurement ``verdict`` (e.g. \"accurate\") inside\neach envelope; the two live at disjoint JSON paths and never merge."},"ReceiptExportSegment":{"properties":{"anchor_receipt_id":{"type":"string","title":"Anchor Receipt Id","description":"First (oldest) receipt in the exported segment"},"anchor_chain_prev":{"type":"string","title":"Anchor Chain Prev","description":"The anchor's chain_prev — 'GENESIS' or the digest of a receipt not in this bundle"},"anchor_kind":{"type":"string","enum":["genesis","post_purge_suffix","mid_chain"],"title":"Anchor Kind","description":"genesis = chain start; post_purge_suffix = predecessor purged by retention; mid_chain = predecessor exists but was excluded by request"},"head_chain_self":{"type":"string","title":"Head Chain Self","description":"chain_self of the last (newest) receipt in the segment"},"complete_through_head":{"type":"boolean","title":"Complete Through Head","description":"True when the segment reaches the account chain's current head"},"next_anchor_receipt_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Anchor Receipt Id","description":"Where to anchor the next segment when this one was truncated by 'limit'"},"count":{"type":"integer","title":"Count","description":"Receipts in this segment"}},"additionalProperties":false,"type":"object","required":["anchor_receipt_id","anchor_chain_prev","anchor_kind","head_chain_self","complete_through_head","count"],"title":"ReceiptExportSegment"},"ReceiptHoldData":{"properties":{"receipt_id":{"type":"string","title":"Receipt Id"},"legal_hold":{"type":"boolean","title":"Legal Hold","description":"The hold state after this call"},"changed":{"type":"boolean","title":"Changed","description":"False when the call was an idempotent no-op"},"retention_tier":{"type":"string","title":"Retention Tier"},"expires_at":{"type":"string","title":"Expires At","description":"ISO 8601 UTC expiry (suspended while held)"},"disclosure":{"type":"string","title":"Disclosure","description":"Honest description of what the hold state means"}},"additionalProperties":false,"type":"object","required":["receipt_id","legal_hold","changed","retention_tier","expires_at","disclosure"],"title":"ReceiptHoldData"},"ReceiptHoldEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/ReceiptHoldData"},"meta":{"additionalProperties":true,"type":"object","title":"Meta"}},"type":"object","required":["data","meta"],"title":"ReceiptHoldEnvelope"},"ReceiptListData":{"properties":{"receipts":{"items":{"$ref":"#/components/schemas/ReceiptSummary"},"type":"array","title":"Receipts","description":"This page of the caller's receipts"},"pagination":{"$ref":"#/components/schemas/ReceiptListPagination"}},"additionalProperties":false,"type":"object","required":["receipts","pagination"],"title":"ReceiptListData"},"ReceiptListEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/ReceiptListData"},"meta":{"additionalProperties":true,"type":"object","title":"Meta"}},"type":"object","required":["data","meta"],"title":"ReceiptListEnvelope"},"ReceiptListPagination":{"properties":{"page":{"type":"integer","title":"Page","description":"1-indexed page number"},"per_page":{"type":"integer","title":"Per Page","description":"Page size applied to this response"},"total":{"type":"integer","title":"Total","description":"Total receipts owned by the caller"}},"additionalProperties":false,"type":"object","required":["page","per_page","total"],"title":"ReceiptListPagination"},"ReceiptReadData":{"properties":{"receipt_id":{"type":"string","title":"Receipt Id"},"request_id":{"type":"string","title":"Request Id","description":"Server-minted trace spine (uuid4)"},"client_correlation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Correlation Id","description":"Optional client idempotency key"},"primitive":{"type":"string","title":"Primitive"},"schema_version":{"type":"string","title":"Schema Version"},"produced_at":{"type":"string","title":"Produced At","description":"ISO 8601 UTC instant the receipt was produced"},"retention_tier":{"type":"string","title":"Retention Tier"},"expires_at":{"type":"string","title":"Expires At","description":"ISO 8601 UTC expiry"},"legal_hold":{"type":"boolean","title":"Legal Hold"},"signed":{"type":"boolean","title":"Signed","description":"Whether the receipt carries a signature (else keyless)"},"content_digest":{"type":"string","title":"Content Digest","description":"Chain-independent digest of the canonical envelope"},"chain_self":{"type":"string","title":"Chain Self","description":"Per-account chain self-hash (integrity): 'sha256:' + sha256 over (content_digest + '|' + chain_prev + '|' + schema_version) joined as full literal strings, encoded UTF-8. Runnable recipe: /getting-started step 4"},"chain_prev":{"type":"string","title":"Chain Prev","description":"Prior receipt's chain_self, or the literal 'GENESIS' for an account's first receipt"},"envelope":{"additionalProperties":true,"type":"object","title":"Envelope","description":"The frozen v1.0.0 receipt envelope (no claim_text) — THE SIGNED FACTS, and the only place this response states a verdict. Everything inside it except the chain block is bound by content_digest, which the signature commits to. ``envelope.verdict``, ``envelope.confidence`` and ``envelope.confidence_score`` are the recorded measurement; there is no unsigned copy of them anywhere in this response, deliberately, because a tampered unsigned verdict leaves every signature valid and a reader with a receipt whose every clause is true and whose whole is a lie. The verdict words follow the published cross-primitive grammar (see the ``verdict`` field on the list-rows schema, which carries the full union, and /docs/receipt-anatomy). Any field this response repeats OUTSIDE the envelope is an unsigned convenience that must byte-equal its signed counterpart: verifiers read from the envelope."},"jwks_url":{"type":"string","title":"Jwks Url","description":"Where the ed25519 public keys that verify receipt signatures are published (match receipt key_id to JWKS kid). NORMATIVE: a verifier MUST NOT follow this pointer out of a receipt it is checking — the field sits outside the signature, so a forged receipt can name the forger's own key set. Pin the key set out of band at https://api.bluefoxedge.ai/.well-known/jwks.json."}},"additionalProperties":false,"type":"object","required":["receipt_id","request_id","primitive","schema_version","produced_at","retention_tier","expires_at","legal_hold","signed","content_digest","chain_self","chain_prev","envelope","jwks_url"],"title":"ReceiptReadData"},"ReceiptReadEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/ReceiptReadData"},"meta":{"additionalProperties":true,"type":"object","title":"Meta"}},"type":"object","required":["data","meta"],"title":"ReceiptReadEnvelope"},"ReceiptRef":{"properties":{"receipt_id":{"type":"string","title":"Receipt Id","description":"ULID of the reliance receipt for this verdict"},"location":{"type":"string","title":"Location","description":"Caller-scoped path to fetch the receipt"}},"type":"object","required":["receipt_id","location"],"title":"ReceiptRef","description":"Pointer to the reliance receipt minted for a verdict. Additive/optional — a verdict\nroute sets it once receipt emission is wired to that route; until then it\nis absent from the wire (default None)."},"ReceiptStagedData":{"properties":{"receipt_id":{"type":"string","title":"Receipt Id","description":"ULID identity of the staged receipt"},"status":{"type":"string","const":"staged","title":"Status","description":"Always 'staged' on this response"},"staged_at":{"type":"string","title":"Staged At","description":"ISO 8601 UTC instant the receipt was staged"},"retry_after_seconds":{"type":"integer","title":"Retry After Seconds","description":"Suggested poll interval (the drain cadence)"},"disclosure":{"type":"string","title":"Disclosure","description":"Honest description of what a staged receipt is and is not"}},"additionalProperties":false,"type":"object","required":["receipt_id","status","staged_at","retry_after_seconds","disclosure"],"title":"ReceiptStagedData"},"ReceiptStagedEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/ReceiptStagedData"},"meta":{"additionalProperties":true,"type":"object","title":"Meta"}},"type":"object","required":["data","meta"],"title":"ReceiptStagedEnvelope"},"ReceiptSummary":{"properties":{"receipt_id":{"type":"string","title":"Receipt Id","description":"ULID identity of the receipt"},"request_id":{"type":"string","title":"Request Id","description":"Server-minted trace spine (uuid4) of the request that produced this receipt"},"primitive":{"type":"string","title":"Primitive","description":"The verification primitive that produced this receipt"},"verdict":{"type":"string","title":"Verdict","description":"The recorded verdict. The vocabulary is per-primitive, so read this value against the record's `primitive` field rather than as one flat list: a brand claim, a claim-against-sources, and a content scan report in three different vocabularies. Every value, grouped by primitive family and each with its definition, is published in this field's x-verdict-vocabulary schema extension. This field carries NO enum on purpose: the citation primitive composes its found-case verdict as found:<match_type>, so the value space is open by construction, and an enum would instruct validators to reject responses this API correctly serves. Match on the family, not on a closed set.","x-verdict-patterned-families":{"citation":"found:<match_type>"},"x-verdict-vocabulary":{"agent_reputation":{"computed":"A reputation computation occurred for this caller. Deliberately carries no tier or grade — the receipt records the act, not the outcome."},"check":{"accurate":"The claim matches the reference data Edge holds.","inaccurate":"The claim contradicts the reference data Edge holds.","partially_accurate":"The claim is within tolerance but not exact, or matches in part — never counted as a match in any published rate.","unverifiable":"Edge holds no reference data able to decide this claim. Not a statement about the claim's truth."},"citation":{"found:exact":"The quote appears verbatim in the source.","found:explicit":"A model read the source and found the quote stated explicitly.","found:fuzzy":"The quote appears in the source within the fuzzy-match threshold.","found:paraphrased":"A model read the source and found the quote paraphrased.","not_found":"The quote could not be located in the source.","unknown":"The source could not be fetched or read, so nothing was compared."},"claim":{"insufficient_evidence":"A direction was computed but the confidence tier fell below the threshold for a definitive verdict, so none is reported.","neutral":"The sources presented bear on the claim in neither direction — read, weighed, and found not to decide it.","no_data":"No source could be fetched or extracted, so nothing was weighed.","refuted":"The sources presented contradict the claim.","supported":"The sources presented support the claim."},"consent":{"conformant":"The document satisfies the pinned schema version.","nonconformant":"The document violates the pinned schema version."},"customs":{"majority":"A strict majority of voting models agreed at the declared depth.","unanimous":"Every model that produced a vote agreed at the declared depth.","unresolved":"No majority formed, or too few models voted to adjudicate. Carries a reason and no agreed code set."},"egress_gate":{"phi_absent":"The scan found no health data in the submitted material.","phi_detected":"The scan found health data in the submitted material."},"freshness":{"contradicted":"The detected reference disagrees with the newer data Edge holds.","partial":"The reference agrees in part — within tolerance but not exact.","supported":"The detected reference agrees with the newer data Edge holds.","unverifiable":"Edge holds nothing able to decide this reference."},"offline_verification":{"self_consistent_only":"Byte integrity, chain linkage, and signatures check out against the published key set. A statement about THIS BUNDLE only."},"package":{"not_found":"Edge holds no record for this package.","suspicious":"The package carries signals that warrant a human look, short of a match.","verified":"The package matches the reference record Edge holds.","vulnerable":"The package matches a known-vulnerable record."},"pii":{"pii_absent":"The scan found no personal data in the submitted material.","pii_detected":"The scan found personal data in the submitted material."},"pre_transaction_check":{"error":"That domain's check did not complete.","failed":"That domain's check contradicted the claim.","uncertain":"That domain's check neither matched nor contradicted.","verified":"That domain's check matched."},"pre_transaction_trust":{"block":"A check failed, or overall confidence is below the block floor.","caution":"A check was uncertain, or overall confidence sits in the middle band.","insufficient_data":"Fewer than half the checks reached a conclusive verdict, so the bundle declines to give a trust reading.","proceed":"No check failed and overall confidence is above the proceed floor."},"preflight":{"fail":"At least one dimension fell below its floor.","pass":"Every dimension cleared its floor."},"presented_digest":{"notarized":"The digest was presented to Edge at the recorded time. A record that this happened — never a judgment about the content behind the digest, which Edge never sees."},"run_comparison":{"divergent":"The recomputed result differs from the recorded one.","match":"The recomputed result equals the recorded one.","unverified":"The comparison could not be run, so neither outcome is claimed."},"safety":{"safe":"No category breached its floor.","unsafe":"A category breached its floor, or the safety signal was absent — a missing signal reports unsafe by design."},"subprocessors":{"incomparable":"The two sets cannot be compared — no disclosure record, or no observation to compare it against.","set_match":"The observed subprocessor set equals the disclosed set.","set_mismatch":"The observed subprocessor set differs from the disclosed set."},"tool":{"blocked":"The fetch was refused by the egress guard before any check ran.","error":"The check did not complete."}}},"confidence":{"type":"string","title":"Confidence","description":"The recorded confidence band"},"produced_at":{"type":"string","title":"Produced At","description":"ISO 8601 UTC instant the receipt was produced"},"retention_tier":{"type":"string","title":"Retention Tier","description":"Retention tier A|B|C"},"expires_at":{"type":"string","title":"Expires At","description":"ISO 8601 UTC expiry (produced_at + horizon[tier])"},"legal_hold":{"type":"boolean","title":"Legal Hold","description":"Whether a legal hold suspends reaping"},"signed":{"type":"boolean","title":"Signed","description":"Whether the receipt carries a signature (else keyless)"}},"additionalProperties":false,"type":"object","required":["receipt_id","request_id","primitive","verdict","confidence","produced_at","retention_tier","expires_at","legal_hold","signed"],"title":"ReceiptSummary"},"ReceiptVerifyChecks":{"properties":{"digest_match":{"type":"boolean","title":"Digest Match","description":"content_digest recomputed from the stored envelope matches the stored column"},"chain_match":{"type":"boolean","title":"Chain Match","description":"chain_self recomputed from (content_digest, chain_prev, schema_version) matches the stored column — the recomputation is 'sha256:' + sha256 over (content_digest + '|' + chain_prev + '|' + schema_version) encoded UTF-8; runnable recipe at /getting-started step 4"},"envelope_consistent":{"type":"boolean","title":"Envelope Consistent","description":"The embedded chain subtree agrees with the stored columns"},"signature_valid":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Signature Valid","description":"ed25519 signature verifies against the published key; null on a keyless row"}},"additionalProperties":false,"type":"object","required":["digest_match","chain_match","envelope_consistent"],"title":"ReceiptVerifyChecks"},"ReceiptVerifyData":{"properties":{"receipt_id":{"type":"string","title":"Receipt Id"},"integrity_verified":{"type":"boolean","title":"Integrity Verified","description":"All byte-integrity checks passed"},"signed":{"type":"boolean","title":"Signed","description":"Whether a signature is present (keyless if false)"},"digest_algorithm":{"type":"string","title":"Digest Algorithm","description":"One spelling everywhere","default":"sha256"},"checks":{"$ref":"#/components/schemas/ReceiptVerifyChecks"},"content_digest":{"type":"string","title":"Content Digest"},"chain_self":{"type":"string","title":"Chain Self"},"jwks_url":{"type":"string","title":"Jwks Url","description":"Where the ed25519 public keys that verify receipt signatures are published (match receipt key_id to JWKS kid). NORMATIVE: a verifier MUST NOT follow this pointer out of a receipt it is checking — the field sits outside the signature, so a forged receipt can name the forger's own key set. Pin the key set out of band at https://api.bluefoxedge.ai/.well-known/jwks.json."},"disclosure":{"type":"string","title":"Disclosure","description":"Honest description of exactly what was checked"}},"additionalProperties":false,"type":"object","required":["receipt_id","integrity_verified","signed","checks","content_digest","chain_self","jwks_url","disclosure"],"title":"ReceiptVerifyData"},"ReceiptVerifyEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/ReceiptVerifyData"},"meta":{"additionalProperties":true,"type":"object","title":"Meta"}},"type":"object","required":["data","meta"],"title":"ReceiptVerifyEnvelope"},"RecomputeData":{"properties":{"receipt_id":{"type":"string","title":"Receipt Id"},"outcome":{"type":"string","enum":["match","drift","infeasible"],"title":"Outcome","description":"match | drift | infeasible (a closed set)"},"reason":{"type":"string","title":"Reason","description":"Machine-readable cause code (ok / retention_tier_c / expired_or_reaped / extracted_text_not_retained / recompute_inputs_unpinned / recompute_runner_unavailable / verdict_changed / determinism_precondition_unmet / recompute_error)"},"feasible":{"type":"boolean","title":"Feasible","description":"Whether the recorded process could be re-run at all"},"recorded_verdict":{"type":"string","title":"Recorded Verdict","description":"The verdict recorded on the receipt"},"recomputed_verdict":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recomputed Verdict","description":"The freshly re-evaluated verdict (present only when a run completed; null otherwise)"},"unmet_preconditions":{"items":{"type":"string"},"type":"array","title":"Unmet Preconditions","description":"Specific reasons the recompute could not run or reproduce"},"determinism_preconditions":{"items":{"type":"string"},"type":"array","title":"Determinism Preconditions","description":"What a 'match' asserts held"},"disclosure":{"type":"string","title":"Disclosure","description":"Honest, outcome-specific description of what happened"}},"additionalProperties":false,"type":"object","required":["receipt_id","outcome","reason","feasible","recorded_verdict","determinism_preconditions","disclosure"],"title":"RecomputeData"},"RecomputeEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/RecomputeData"},"meta":{"additionalProperties":true,"type":"object","title":"Meta"}},"type":"object","required":["data","meta"],"title":"RecomputeEnvelope"},"ReferencePinRequest":{"properties":{"slug":{"type":"string","pattern":"^[a-z0-9][a-z0-9_-]{0,63}$","title":"Slug"},"subject":{"additionalProperties":true,"type":"object","title":"Subject","description":"Declared subject descriptor (bounded flat string map; e.g. provider, model id, version, quantization). The caller's own statement of what was snapshotted — validated by shape, never interpreted"},"cases":{"items":{},"type":"array","maxItems":256,"minItems":1,"title":"Cases","description":"Snapshot cases: {case_id, observations: {dimension: numeric | 'sha256:'+hex}, seed?} — validated and normalized server-side"}},"additionalProperties":false,"type":"object","required":["slug","subject","cases"],"title":"ReferencePinRequest","description":"Pin a new immutable version of an account's behavior reference: a frozen,\ncontent-addressed snapshot of observed behaviors for a declared subject.\nObservation values are CLOSED shapes only — a finite numeric scalar or a\n'sha256:'+hex digest the caller computed over their own output bytes —\nnever free text. Normalized (cases sorted, keys sorted) server-side; the\nstored array + its digest are what a verdict receipt pins."},"RefusalLadderEntry":{"properties":{"state":{"type":"string","title":"State","description":"The credential state."},"http_status":{"type":"integer","title":"Http Status","description":"Status the wall answers with."},"error_code":{"type":"string","title":"Error Code","description":"The body's machine-readable code."}},"type":"object","required":["state","http_status","error_code"],"title":"RefusalLadderEntry","description":"One credential state this endpoint cannot be reached in, and its answer."},"RegressionRunRequest":{"properties":{"contract_slug":{"type":"string","pattern":"^[a-z0-9][a-z0-9_-]{0,63}$","title":"Contract Slug"},"contract_version":{"anyOf":[{"type":"integer","maximum":1000000.0,"minimum":1.0},{"type":"null"}],"title":"Contract Version","description":"Pinned contract version; omitted = latest active version"},"reference_slug":{"type":"string","pattern":"^[a-z0-9][a-z0-9_-]{0,63}$","title":"Reference Slug"},"reference_version":{"anyOf":[{"type":"integer","maximum":1000000.0,"minimum":1.0},{"type":"null"}],"title":"Reference Version","description":"Pinned reference version; omitted = latest active version"},"candidate_subject":{"additionalProperties":true,"type":"object","title":"Candidate Subject","description":"Declared candidate subject descriptor (bounded flat map of printable-ASCII labels) — ONE candidate per run"},"candidate_cases":{"items":{},"type":"array","maxItems":256,"minItems":1,"title":"Candidate Cases","description":"Candidate observations: {case_id, observations: {dimension: numeric | 'sha256:'+hex}, seed?} — the same closed shapes a pinned snapshot uses"}},"additionalProperties":false,"type":"object","required":["contract_slug","reference_slug","candidate_subject","candidate_cases"],"title":"RegressionRunRequest","description":"Run the differential for ONE candidate against a pinned reference under\na declared contract. Candidate observations use the registry's closed\nshapes (finite numeric | 'sha256:'+hex digest) — free text is rejected.\nExactly one candidate per run: verdicts render only against the caller's\ndeclared contract, never across candidates or models."},"RegressionRunResponse":{"properties":{"run_id":{"type":"string","title":"Run Id"},"verdict":{"type":"string","enum":["match","divergent","unverified"],"title":"Verdict"},"grammar_version":{"type":"string","title":"Grammar Version"},"contract_slug":{"type":"string","title":"Contract Slug"},"contract_version":{"type":"integer","title":"Contract Version"},"contract_digest":{"type":"string","title":"Contract Digest"},"reference_slug":{"type":"string","title":"Reference Slug"},"reference_version":{"type":"integer","title":"Reference Version"},"reference_digest":{"type":"string","title":"Reference Digest"},"candidate_digest":{"type":"string","title":"Candidate Digest","description":"\"sha256:\"+hex over the submitted {subject, snapshot} pair — a candidate later pinned as a reference digests identically"},"dim_counts":{"additionalProperties":true,"type":"object","title":"Dim Counts","description":"status -> dimension count"},"case_counts":{"additionalProperties":true,"type":"object","title":"Case Counts","description":"status -> case count"},"per_dim":{"additionalProperties":true,"type":"object","title":"Per Dim","description":"dimension -> {status, counts} rollup (deltas per dimension ride the case_verdicts evidence + the receipt basis)"},"case_verdicts":{"items":{},"type":"array","title":"Case Verdicts","description":"Per-case grammar verdicts (dimension, status, direction/reason, digest/numeric evidence only — no free text)"},"abstention_histogram":{"additionalProperties":true,"type":"object","title":"Abstention Histogram","description":"typed abstention reason -> count"},"abstention_class_histogram":{"additionalProperties":true,"type":"object","title":"Abstention Class Histogram","description":"reason class -> count"},"seeds":{"additionalProperties":true,"type":"object","title":"Seeds","description":"{\"declared\": {case_id: seed}, \"observed\": {case_id: seed}}"},"method":{"type":"string","title":"Method"},"norm_version":{"type":"string","title":"Norm Version"},"receipt_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Receipt Id","description":"Signed reliance-receipt handle (GET /receipts/{receipt_id}); null when nothing durable was staged"},"disclosure":{"type":"string","title":"Disclosure"},"checked_at":{"type":"string","title":"Checked At"},"latency_ms":{"type":"integer","minimum":0.0,"title":"Latency Ms"}},"type":"object","required":["run_id","verdict","grammar_version","contract_slug","contract_version","contract_digest","reference_slug","reference_version","reference_digest","candidate_digest","dim_counts","case_counts","per_dim","abstention_histogram","abstention_class_histogram","seeds","method","norm_version","disclosure","checked_at","latency_ms"],"title":"RegressionRunResponse"},"ReputationDimensions":{"properties":{"query_consistency":{"title":"Query Consistency"},"verification_usage":{"title":"Verification Usage"},"rate_compliance":{"title":"Rate Compliance"},"data_freshness_pref":{"title":"Data Freshness Pref"},"attribution_integrity":{"title":"Attribution Integrity"}},"type":"object","required":["query_consistency","verification_usage","rate_compliance","data_freshness_pref","attribution_integrity"],"title":"ReputationDimensions"},"ReputationHistory":{"properties":{"first_seen":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Seen"},"total_interactions":{"type":"integer","title":"Total Interactions"},"active_days":{"title":"Active Days"},"last_active":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Active"}},"type":"object","required":["total_interactions","active_days"],"title":"ReputationHistory"},"ResponseMeta":{"properties":{"request_id":{"type":"string","title":"Request Id","description":"UUID v4 correlation identifier"},"timestamp":{"type":"string","title":"Timestamp","description":"ISO 8601 UTC timestamp of response"},"pagination":{"anyOf":[{"$ref":"#/components/schemas/PaginationMeta"},{"type":"null"}],"description":"Present only on paginated endpoints"},"receipt":{"anyOf":[{"$ref":"#/components/schemas/ReceiptRef"},{"type":"null"}],"description":"Pointer to the reliance receipt for this verdict (present only when a verdict route emits one)"}},"type":"object","required":["request_id","timestamp"],"title":"ResponseMeta"},"RunCheckItem":{"properties":{"check_id":{"type":"string","title":"Check Id"},"rc":{"type":"integer","maximum":255.0,"minimum":0.0,"title":"Rc"},"expected_digest":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expected Digest"},"observed_digest":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Observed Digest"}},"additionalProperties":false,"type":"object","required":["check_id","rc"],"title":"RunCheckItem","description":"One executable-check row, exactly the kernel basis row shape."},"RunConformanceRequest":{"properties":{"harness_id":{"type":"string","title":"Harness Id"},"repo":{"type":"string","title":"Repo"},"base_sha":{"type":"string","title":"Base Sha"},"card_sha256":{"type":"string","title":"Card Sha256"},"checks":{"items":{"$ref":"#/components/schemas/RunCheckItem"},"type":"array","maxItems":64,"minItems":1,"title":"Checks"},"policy_sha256":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Policy Sha256"},"sandbox_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sandbox Tier"},"model_ids":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":8,"minItems":1},{"type":"null"}],"title":"Model Ids"},"run_started":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Run Started"},"run_ended":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Run Ended"},"cost_usd":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Cost Usd"},"telemetry":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Telemetry"}},"additionalProperties":false,"type":"object","required":["harness_id","repo","base_sha","card_sha256","checks"],"title":"RunConformanceRequest","description":"The run evidence bundle a harness submits — closed shapes only, no free text."},"SafetyCheckBatchResponse":{"properties":{"results":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Results","description":"Per-item safety result (spread from check_brand_safety + preview/brand)"},"summary":{"$ref":"#/components/schemas/SafetyCheckBatchSummary"},"latency_ms":{"type":"integer","title":"Latency Ms"}},"type":"object","required":["results","summary","latency_ms"],"title":"SafetyCheckBatchResponse","description":"Each results item spreads check_brand_safety() dict + content_preview + brand."},"SafetyCheckBatchSummary":{"properties":{"total":{"type":"integer","title":"Total"},"safe":{"type":"integer","title":"Safe"},"unsafe":{"type":"integer","title":"Unsafe"},"floor_violations":{"type":"integer","title":"Floor Violations"}},"type":"object","required":["total","safe","unsafe","floor_violations"],"title":"SafetyCheckBatchSummary"},"SafetyCheckRequest":{"properties":{"content":{"type":"string","maxLength":10000,"minLength":1,"title":"Content"},"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand"},"content_type":{"type":"string","title":"Content Type","default":"text"},"depth":{"type":"string","pattern":"^(fast|standard|auto)$","title":"Depth","default":"auto"}},"type":"object","required":["content"],"title":"SafetyCheckRequest"},"SafetyCheckResponse":{"properties":{"overall_safe":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Overall Safe"},"overall_risk":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Overall Risk"},"garm_results":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Garm Results"},"floor_violations":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Floor Violations"},"context_fit":{"anyOf":[{},{"type":"null"}],"title":"Context Fit"},"recommendation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recommendation"},"latency_ms":{"type":"integer","title":"Latency Ms"}},"additionalProperties":true,"type":"object","required":["latency_ms"],"title":"SafetyCheckResponse","description":"Spreads check_brand_safety() dict + latency_ms."},"ScannerScanStatusData":{"properties":{"scan_id":{"type":"string","title":"Scan Id","description":"Scan UUID"},"entity_id":{"type":"string","title":"Entity Id","description":"Scanner entity id being scanned"},"status":{"type":"string","title":"Status","description":"Scan status: queued, running, completed, failed, or timeout"},"started_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Started At","description":"ISO 8601 start timestamp (null until the scan starts running)"},"modules_completed":{"items":{"type":"string"},"type":"array","title":"Modules Completed","description":"Names of scan modules that have completed (may be empty)"},"modules_pending":{"items":{"type":"string"},"type":"array","title":"Modules Pending","description":"Names of scan modules still to run (may be empty)"},"observations_so_far":{"type":"integer","title":"Observations So Far","description":"Count of observations recorded for this scan so far"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At","description":"ISO 8601 completion timestamp (only on terminal status; null if the row is missing the column)"},"duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Ms","description":"End-to-end duration in milliseconds (only on terminal status)"},"summary":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Summary","description":"Per-module summary object (only on terminal status with a populated summary_json)"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","description":"Error message (only on terminal status with a populated error_message)"}},"type":"object","required":["scan_id","entity_id","status","started_at","modules_completed","modules_pending","observations_so_far"],"title":"ScannerScanStatusData","description":"Payload for GET /scanner/status/{scan_id}.\n\nThe first seven fields are always emitted on every response (in-progress\nand terminal alike); the last four are emitted only when ``status`` is\n``completed`` / ``failed`` / ``timeout``, and within terminal states\n``summary`` / ``error`` appear only when populated. Terminal-conditional\nfields are typed ``Optional[...] = Field(None, ...)`` so the OpenAPI\n``required`` array matches the always-emitted core."},"ScannerScanStatusEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/ScannerScanStatusData"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"ScannerScanStatusEnvelope","description":"Typed envelope for GET /scanner/status/{scan_id}."},"SelfReputationResponse":{"properties":{"agent_id":{"type":"string","title":"Agent Id"},"reputation_score":{"type":"number","title":"Reputation Score"},"tier":{"type":"string","title":"Tier"},"confidence":{"title":"Confidence"},"dimensions":{"$ref":"#/components/schemas/ReputationDimensions"},"history":{"$ref":"#/components/schemas/ReputationHistory"},"tier_criteria":{"$ref":"#/components/schemas/TierCriteria"},"dimensions_note":{"anyOf":[{},{"type":"null"}],"title":"Dimensions Note"},"computed_at":{"type":"string","title":"Computed At"},"latency_ms":{"type":"integer","title":"Latency Ms"}},"type":"object","required":["agent_id","reputation_score","tier","confidence","dimensions","history","tier_criteria","computed_at","latency_ms"],"title":"SelfReputationResponse"},"SentimentCheckResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/SentimentResultItem"},"type":"array","title":"Results"},"latency_ms":{"type":"integer","title":"Latency Ms"}},"additionalProperties":true,"type":"object","required":["results","latency_ms"],"title":"SentimentCheckResponse","description":"Spreads get_model_info() fields into the envelope alongside results+latency_ms."},"SentimentRequest":{"properties":{"texts":{"items":{"type":"string"},"type":"array","maxItems":50,"minItems":1,"title":"Texts"}},"type":"object","required":["texts"],"title":"SentimentRequest"},"SentimentResultItem":{"properties":{"text":{"type":"string","title":"Text"},"sentiment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sentiment","description":"Label (e.g., positive, negative, neutral)"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score","description":"Confidence score 0.0-1.0"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","description":"Error message when the model is unavailable"}},"type":"object","required":["text"],"title":"SentimentResultItem"},"SimilarBrand":{"properties":{"brand_id":{"type":"string","title":"Brand Id"},"brand_name":{"type":"string","title":"Brand Name"},"composite_score":{"type":"number","title":"Composite Score"},"dimensions":{"$ref":"#/components/schemas/SimilarityDimensions"},"shared_cluster":{"type":"boolean","title":"Shared Cluster"},"vertical":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vertical"},"top_similarity_drivers":{"items":{"type":"string"},"type":"array","title":"Top Similarity Drivers"}},"type":"object","required":["brand_id","brand_name","composite_score","dimensions","shared_cluster","top_similarity_drivers"],"title":"SimilarBrand"},"SimilarBrandsEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/SimilarBrandsResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"SimilarBrandsEnvelope"},"SimilarBrandsResponse":{"properties":{"brand_id":{"type":"string","title":"Brand Id"},"brand_name":{"type":"string","title":"Brand Name"},"cluster_id":{"type":"integer","title":"Cluster Id"},"similar_brands":{"items":{"$ref":"#/components/schemas/SimilarBrand"},"type":"array","title":"Similar Brands"},"cluster_summary":{"$ref":"#/components/schemas/SimilarityClusterSummary"},"latency_ms":{"type":"integer","title":"Latency Ms"},"total_brands_indexed":{"type":"integer","title":"Total Brands Indexed"},"dimensions_used":{"type":"string","title":"Dimensions Used"},"methodology_version":{"type":"string","title":"Methodology Version"}},"type":"object","required":["brand_id","brand_name","cluster_id","similar_brands","cluster_summary","latency_ms","total_brands_indexed","dimensions_used","methodology_version"],"title":"SimilarBrandsResponse"},"SimilarityClusterSummary":{"properties":{"cluster_id":{"type":"integer","title":"Cluster Id"},"cluster_size":{"type":"integer","title":"Cluster Size"},"cluster_verticals":{"items":{"type":"string"},"type":"array","title":"Cluster Verticals"}},"type":"object","required":["cluster_id","cluster_size","cluster_verticals"],"title":"SimilarityClusterSummary"},"SimilarityDimensions":{"properties":{"score_profile":{"type":"number","title":"Score Profile"},"semantic":{"type":"number","title":"Semantic"},"behavioral":{"type":"number","title":"Behavioral"}},"type":"object","required":["score_profile","semantic","behavioral"],"title":"SimilarityDimensions"},"SourceEvidence":{"properties":{"url":{"type":"string","title":"Url"},"fetch_timestamp":{"type":"string","format":"date-time","title":"Fetch Timestamp"},"source_bytes_digest":{"type":"string","title":"Source Bytes Digest"},"extracted_text_hash":{"type":"string","title":"Extracted Text Hash"},"hash_alg":{"type":"string","const":"sha256","title":"Hash Alg","default":"sha256"},"extraction_method":{"type":"string","enum":["trafilatura","playwright","registry_api","mcp_protocol","head_request","client_submission","artifact_ingest","mcp_meta"],"title":"Extraction Method"},"extraction_quality":{"type":"string","enum":["good","partial","failed"],"title":"Extraction Quality"},"relevant_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Relevant Text"},"asserted_by":{"type":"string","title":"Asserted By","default":"as-observed-by-Edge"}},"type":"object","required":["url","fetch_timestamp","source_bytes_digest","extracted_text_hash","extraction_method","extraction_quality"],"title":"SourceEvidence","description":"Evidence from a single source.\n\nTWO digests, ONE spelling. Supersedes the former single\n``content_hash`` (the \"BLAKE3 or SHA-256\" ambiguity):\n  * ``source_bytes_digest`` — ``\"sha256:\"``+hex of the fetched source bytes; ALWAYS\n    present. A stored-canonical digest of what Edge fetched — honestly labelled, never\n    claimed to be raw-wire / raw-SEC bytes.\n  * ``extracted_text_hash`` — ``\"sha256:\"``+hex of the extracted text; ALWAYS present,\n    and EQUALS the frozen empty-extraction digest when extraction failed/yielded no\n    text (``\"sha256:\"+sha256(b\"\")``).\n``hash_alg`` names the algorithm for both, matching the ``\"sha256:\"`` prefix\n('sha256', ONE spelling everywhere)."},"SpecCheckRequest":{"properties":{"brand":{"type":"string","title":"Brand"},"claim":{"type":"string","maxLength":2000,"minLength":1,"title":"Claim"},"depth":{"type":"string","pattern":"^(fast|standard|auto)$","title":"Depth","default":"auto"},"include_sentiment":{"type":"boolean","title":"Include Sentiment","default":false}},"type":"object","required":["brand","claim"],"title":"SpecCheckRequest"},"SpecCheckResponse":{"properties":{"brand":{"type":"string","title":"Brand"},"claim":{"type":"string","title":"Claim"},"verdict":{"type":"string","enum":["accurate","inaccurate","partially_accurate","unverifiable"],"title":"Verdict","description":"Verification verdict for this claim, against the product-spec reference data Edge holds. Vocabulary — accurate: The claim matches the reference data Edge holds. · inaccurate: The claim contradicts the reference data Edge holds. · partially_accurate: The claim is within tolerance but not exact, or matches in part — never counted as a match in any published rate. · unverifiable: Edge holds no reference data able to decide this claim. Not a statement about the claim's truth."},"confidence":{"type":"number","title":"Confidence"},"confidence_tier":{"type":"string","title":"Confidence Tier"},"evidence":{"type":"string","title":"Evidence"},"method":{"type":"string","title":"Method"},"spec_data":{"anyOf":[{},{"type":"null"}],"title":"Spec Data"},"sentiment":{"anyOf":[{},{"type":"null"}],"title":"Sentiment"},"next_action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Action","description":"Machine token naming the suggested next step when the rule tier could not decide this claim (currently always 'retry_with_depth_auto'). Present only on rule-tier unverifiable results — the same flat grammar 401/403 Problem responses carry; absent on confident verdicts and the LLM tier."},"hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hint","description":"Agent-readable guidance beside next_action: names depth:'auto' (LLM verification of the same claim) and POST /verify/claim (verify against a URL you supply). Present only with next_action."},"hint_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hint Url","description":"Documentation URL for the suggested next step. Present only with next_action."},"verified_at":{"type":"string","title":"Verified At"},"latency_ms":{"type":"integer","title":"Latency Ms"},"depth_used":{"type":"string","title":"Depth Used"}},"type":"object","required":["brand","claim","verdict","confidence","confidence_tier","evidence","method","verified_at","latency_ms","depth_used"],"title":"SpecCheckResponse"},"Status":{"type":"string","enum":["match","divergent","unverified"],"title":"Status"},"SubprocessorCheckRequest":{"properties":{"disclosure_slug":{"type":"string","pattern":"^[a-z0-9][a-z0-9_-]{0,63}$","title":"Disclosure Slug"},"disclosure_version":{"anyOf":[{"type":"integer","maximum":1000000.0,"minimum":1.0},{"type":"null"}],"title":"Disclosure Version","description":"Pinned disclosure version; omitted = latest active version for the slug"},"window":{"type":"string","enum":["1h","6h","24h","7d"],"title":"Window","description":"Observation window ending now (canonical windows only)","default":"24h"},"dimension":{"type":"string","enum":["endpoint","mcp_tool"],"title":"Dimension","description":"query_events dimension the sets are compared on","default":"endpoint"},"asserted_invocations":{"anyOf":[{"items":{"type":"string","maxLength":512},"type":"array","maxItems":512},{"type":"null"}],"title":"Asserted Invocations","description":"Caller-asserted invoked identifiers (e.g. from the caller's own egress logs), each <=512 raw chars — unioned into the observed side at labeled relay semantics"},"asserted_by":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Asserted By","description":"Relay provenance for asserted_invocations, \"as-stated-by-<party>\"; required iff asserted_invocations is non-empty"}},"type":"object","required":["disclosure_slug"],"title":"SubprocessorCheckRequest","description":"Compare the invoked-set observed by Edge for the calling key (plus any\ncaller-asserted identifiers, relay-labeled) against a pinned disclosed set\nover a canonical window. Deterministic set compare — no model, no judge."},"SubprocessorCheckResponse":{"properties":{"verdict":{"type":"string","enum":["set_match","set_mismatch","incomparable"],"title":"Verdict"},"incomparable_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Incomparable Reason","description":"Set only when verdict=incomparable (closed reason vocabulary)"},"dimension":{"type":"string","title":"Dimension"},"window":{"type":"string","enum":["1h","6h","24h","7d"],"title":"Window"},"window_start":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{1,6})?\\+00:00$","title":"Window Start","description":"Start of the half-open window (window_start, window_end]: observed events are STRICTLY AFTER this instant"},"window_end":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{1,6})?\\+00:00$","title":"Window End","description":"End of the half-open window (window_start, window_end]: observed events are at or before this instant — the end bound itself is included"},"observed_source":{"type":"string","title":"Observed Source","description":"edge_query_events, or edge_query_events+asserted when caller-asserted identifiers were unioned in"},"edge_observed_count":{"type":"integer","minimum":0.0,"title":"Edge Observed Count","description":"Distinct normalized identifiers observed by Edge for the calling key in-window. On verdict=incomparable this may be 0 because the honest-stop ladder halted before or at the store read, not because traffic was absent"},"asserted_count":{"type":"integer","minimum":0.0,"title":"Asserted Count","description":"Distinct normalized caller-asserted identifiers unioned into the observed side"},"observed_total":{"type":"integer","minimum":0.0,"title":"Observed Total","description":"Size of the observed union (Edge-observed + asserted). On verdict=incomparable the count fields describe the inputs materialized before the honest stop — they are NOT a faithful compare"},"reference_count":{"type":"integer","minimum":0.0,"title":"Reference Count","description":"Size of the pinned disclosed set"},"undisclosed_invoked":{"items":{"type":"string"},"type":"array","title":"Undisclosed Invoked","description":"Observed but not disclosed (sorted). EMPTY when diff_truncated — a partial array would be unverifiable against the retained basis; undisclosed_count stays exact"},"disclosed_uninvoked":{"items":{"type":"string"},"type":"array","title":"Disclosed Uninvoked","description":"Disclosed but not observed in-window (sorted). EMPTY when diff_truncated — a partial array would be unverifiable against the retained basis; uninvoked_count stays exact"},"undisclosed_count":{"type":"integer","minimum":0.0,"title":"Undisclosed Count","description":"Exact count (response arrays are emptied when diff_truncated)"},"uninvoked_count":{"type":"integer","minimum":0.0,"title":"Uninvoked Count","description":"Exact count (response arrays are emptied when diff_truncated)"},"diff_truncated":{"type":"boolean","title":"Diff Truncated","description":"True when a difference array exceeded the basis bound; the response arrays are then EMPTY (counts stay exact) and the receipt carries no retained basis (fail-closed), verdict unchanged","default":false},"observed_set_digest":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Observed Set Digest","description":"\"sha256:\"+hex over the sorted observed union; null when incomparable"},"reference_set_digest":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference Set Digest","description":"\"sha256:\"+hex over the pinned disclosed set; null when incomparable"},"disclosure_slug":{"type":"string","title":"Disclosure Slug"},"disclosure_version":{"type":"integer","title":"Disclosure Version"},"method":{"type":"string","title":"Method"},"norm_version":{"type":"string","title":"Norm Version"},"asserted_source_party":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asserted Source Party","description":"Relay label for the asserted portion (\"as-stated-by-<party>\"), when supplied"},"receipt_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Receipt Id","description":"Signed reliance-receipt handle (GET /receipts/{receipt_id}); null when nothing durable was staged (e.g. x402 without a key)"},"disclosure":{"type":"string","title":"Disclosure"},"checked_at":{"type":"string","title":"Checked At"},"latency_ms":{"type":"integer","minimum":0.0,"title":"Latency Ms"}},"type":"object","required":["verdict","dimension","window","window_start","window_end","observed_source","edge_observed_count","asserted_count","observed_total","reference_count","undisclosed_count","uninvoked_count","disclosure_slug","disclosure_version","method","norm_version","disclosure","checked_at","latency_ms"],"title":"SubprocessorCheckResponse"},"SubprocessorDisclosureCreateRequest":{"properties":{"slug":{"type":"string","pattern":"^[a-z0-9][a-z0-9_-]{0,63}$","title":"Slug"},"identifiers":{"items":{"type":"string","maxLength":512},"type":"array","maxItems":512,"minItems":1,"title":"Identifiers","description":"Disclosed identifiers (endpoints / tool names / host[:port] strings), each <=512 raw chars; normalized, deduplicated and sorted server-side"},"dpa_document_digest":{"anyOf":[{"type":"string","pattern":"^sha256:[0-9a-f]{64}$"},{"type":"null"}],"title":"Dpa Document Digest","description":"Optional \"sha256:\"+hex pin of the caller's own DPA document bytes (Edge never sees that document)"},"effective_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Effective From","description":"Disclosure coverage start; omitted = unbounded. UTC-aware preferred; a NAIVE value is interpreted as UTC (documented contract)"},"effective_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Effective To","description":"Disclosure coverage end; omitted = unbounded. UTC-aware preferred; a NAIVE value is interpreted as UTC (documented contract)"}},"type":"object","required":["slug","identifiers"],"title":"SubprocessorDisclosureCreateRequest","description":"Register a new immutable version of an account's disclosed subprocessor\nset. Identifiers are normalized server-side (subproc_norm v1), deduplicated\nand sorted; the stored array + its digest are what a check receipt pins."},"SubprocessorDisclosureCreateResponse":{"properties":{"disclosure_id":{"type":"string","title":"Disclosure Id"},"slug":{"type":"string","title":"Slug"},"version":{"type":"integer","title":"Version"},"identifier_count":{"type":"integer","minimum":0.0,"title":"Identifier Count","description":"Size of the normalized disclosed set"},"identifiers_digest":{"type":"string","title":"Identifiers Digest","description":"\"sha256:\"+hex over the RFC 8785 canonical sorted identifier array"},"dpa_document_digest":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dpa Document Digest","description":"Optional caller-pinned \"sha256:\"+hex of their own DPA document bytes"},"effective_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective From","description":"Coverage start (UTC ISO); null = unbounded"},"effective_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective To","description":"Coverage end (UTC ISO); null = unbounded"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","title":"Created At"},"identifiers":{"items":{"type":"string"},"type":"array","title":"Identifiers","description":"The normalized, deduplicated, sorted disclosed set as stored (echoed once at registration)"}},"type":"object","required":["disclosure_id","slug","version","identifier_count","identifiers_digest","is_active","created_at"],"title":"SubprocessorDisclosureCreateResponse"},"SubprocessorDisclosureListResponse":{"properties":{"disclosures":{"items":{"$ref":"#/components/schemas/SubprocessorDisclosureRow"},"type":"array","title":"Disclosures"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["disclosures","count"],"title":"SubprocessorDisclosureListResponse"},"SubprocessorDisclosureRow":{"properties":{"disclosure_id":{"type":"string","title":"Disclosure Id"},"slug":{"type":"string","title":"Slug"},"version":{"type":"integer","title":"Version"},"identifier_count":{"type":"integer","minimum":0.0,"title":"Identifier Count","description":"Size of the normalized disclosed set"},"identifiers_digest":{"type":"string","title":"Identifiers Digest","description":"\"sha256:\"+hex over the RFC 8785 canonical sorted identifier array"},"dpa_document_digest":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dpa Document Digest","description":"Optional caller-pinned \"sha256:\"+hex of their own DPA document bytes"},"effective_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective From","description":"Coverage start (UTC ISO); null = unbounded"},"effective_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective To","description":"Coverage end (UTC ISO); null = unbounded"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["disclosure_id","slug","version","identifier_count","identifiers_digest","is_active","created_at"],"title":"SubprocessorDisclosureRow"},"Target":{"properties":{"requested":{"type":"string","title":"Requested"},"resolved":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resolved"},"kind":{"type":"string","title":"Kind"}},"additionalProperties":false,"type":"object","required":["requested","kind"],"title":"Target"},"TierCriteria":{"properties":{"current_tier":{"type":"string","title":"Current Tier"},"next_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Tier"},"next_tier_requirements":{"type":"string","title":"Next Tier Requirements"}},"type":"object","required":["current_tier","next_tier_requirements"],"title":"TierCriteria"},"TrackedClaimEntry":{"properties":{"id":{"type":"string","title":"Id"},"claim":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Claim"},"expected_verdict":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expected Verdict"},"current_accuracy":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Current Accuracy"},"models_correct":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Models Correct"},"models_incorrect":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Models Incorrect"},"common_errors":{"anyOf":[{},{"type":"null"}],"title":"Common Errors","description":"Common error patterns (JSON; schema varies)"},"last_checked":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Checked"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id"],"title":"TrackedClaimEntry"},"TrackedClaimsEnvelope":{"properties":{"data":{"$ref":"#/components/schemas/TrackedClaimsResponse"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"type":"object","required":["data","meta"],"title":"TrackedClaimsEnvelope"},"TrackedClaimsResponse":{"properties":{"brand":{"type":"string","title":"Brand"},"claims":{"items":{"$ref":"#/components/schemas/TrackedClaimEntry"},"type":"array","title":"Claims"},"total":{"type":"integer","title":"Total"},"latency_ms":{"type":"integer","title":"Latency Ms"}},"type":"object","required":["brand","claims","total","latency_ms"],"title":"TrackedClaimsResponse"},"TrustScoreMethod":{"properties":{"method_version":{"type":"string","title":"Method Version"},"formula":{"type":"string","title":"Formula"},"weights":{"additionalProperties":{"type":"number"},"type":"object","title":"Weights"},"input_signals":{"items":{"type":"string"},"type":"array","title":"Input Signals"},"re_derivation":{"type":"string","title":"Re Derivation"}},"additionalProperties":false,"type":"object","required":["method_version","formula","weights","input_signals","re_derivation"],"title":"TrustScoreMethod","description":"Disclosed-method block for the trust_score signal.\n\ntrust_score is a recomputable *signal* the requesting account re-runs and bears\nreliance for — NOT an Edge-published rating or authority determination.\nThis block discloses the recipe so a customer re-derives the signal themselves."},"TrustScoreResponse":{"properties":{"agent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Id"},"agent_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Name"},"trust_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Trust Score"},"trust_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trust Tier"},"components":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Components"},"domain_scores":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Domain Scores"},"verification_summary":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Verification Summary"},"last_calculated":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Calculated"},"latency_ms":{"type":"integer","title":"Latency Ms"},"method":{"anyOf":[{"$ref":"#/components/schemas/TrustScoreMethod"},{"type":"null"}]},"non_claims":{"items":{"type":"string"},"type":"array","title":"Non Claims"},"edge_role":{"type":"string","title":"Edge Role","default":"evidence-layer"}},"additionalProperties":false,"type":"object","required":["latency_ms"],"title":"TrustScoreResponse","description":"Full trust_score response for GET /agents/{agent_id}/trust-score.\n\nStrict shape: ``extra=\"forbid\"`` with every field\nexplicitly typed, so no un-typed or prohibited key can ride along on the wire. The\n``method`` block + ``non_claims`` + ``edge_role`` self-disclose that trust_score is a\nrecomputable *signal* the account re-runs and bears reliance for — never an Edge\nrating/authority. The endpoint is auth-required (account-scoped). ``trust_score`` is\nthe canonical float 0.0-1.0. (The prior ``score: Optional[Any]`` fallback was\nremoved: the score computation always returns the typed dict, and a bare prohibited-named\n``score`` scalar is exactly what the fence forbids.)"},"TrustScoreSummary":{"properties":{"agent_id":{"type":"string","title":"Agent Id"},"agent_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Name"},"trust_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Trust Score"},"trust_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trust Tier"},"total_checks":{"type":"integer","title":"Total Checks"},"last_calculated":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Calculated"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"non_claims":{"items":{"type":"string"},"type":"array","title":"Non Claims"},"edge_role":{"type":"string","title":"Edge Role","default":"evidence-layer"}},"additionalProperties":false,"type":"object","required":["agent_id","total_checks"],"title":"TrustScoreSummary","description":"Lightweight per-agent trust summary for the batch route.\n\nCarries the same self-disclosure (``edge_role`` + ``non_claims``) as the full response\nso the batch surface never presents a bare authority scalar either.\n``extra=\"forbid\"`` for symmetry with TrustScoreResponse — no un-typed key rides along."},"VerifyApiKeyRequest":{"properties":{"slug":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[A-Za-z0-9_-]+$","title":"Slug"}},"type":"object","required":["slug"],"title":"VerifyApiKeyRequest","description":"POST /api-keys/verify body. Slug is URL-safe base64, max 64 chars."},"WatcherCreate":{"properties":{"brand":{"type":"string","maxLength":200,"minLength":1,"title":"Brand"},"conditions":{"items":{"$ref":"#/components/schemas/ConditionCreate"},"type":"array","maxItems":5,"minItems":1,"title":"Conditions"},"operator":{"type":"string","pattern":"^(AND|OR)$","title":"Operator","default":"OR"},"webhook_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Webhook Url"},"priority_minimum":{"type":"string","pattern":"^(P1|P2|P3)$","title":"Priority Minimum","default":"P3"},"cooldown_seconds":{"type":"integer","maximum":604800.0,"minimum":60.0,"title":"Cooldown Seconds","default":3600}},"type":"object","required":["brand","conditions"],"title":"WatcherCreate"},"WatcherUpdate":{"properties":{"conditions":{"anyOf":[{"items":{"$ref":"#/components/schemas/ConditionCreate"},"type":"array","maxItems":5,"minItems":1},{"type":"null"}],"title":"Conditions"},"operator":{"anyOf":[{"type":"string","pattern":"^(AND|OR)$"},{"type":"null"}],"title":"Operator"},"webhook_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Webhook Url"},"priority_minimum":{"anyOf":[{"type":"string","pattern":"^(P1|P2|P3)$"},{"type":"null"}],"title":"Priority Minimum"},"cooldown_seconds":{"anyOf":[{"type":"integer","maximum":604800.0,"minimum":60.0},{"type":"null"}],"title":"Cooldown Seconds"},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"}},"type":"object","title":"WatcherUpdate"},"_BrandShimRequest":{"properties":{"brand":{"type":"string","title":"Brand"},"claims":{"items":{"type":"string"},"type":"array","maxItems":10,"minItems":1,"title":"Claims","description":"1-10 claims to verify, max 2000 chars each"},"depth":{"type":"string","pattern":"^(fast|standard|auto)$","title":"Depth","default":"auto"},"agent_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Token"},"include_sentiment":{"type":"boolean","title":"Include Sentiment","default":false},"_meta":{"anyOf":[{},{"type":"null"}],"title":"Meta"}},"type":"object","required":["brand","claims"],"title":"_BrandShimRequest"},"_ComplianceShimRequest":{"properties":{"brand":{"type":"string","title":"Brand"},"claims":{"items":{"type":"string"},"type":"array","maxItems":10,"minItems":1,"title":"Claims"},"depth":{"type":"string","pattern":"^(fast|standard|auto)$","title":"Depth","default":"auto"},"_meta":{"anyOf":[{},{"type":"null"}],"title":"Meta"}},"type":"object","required":["brand","claims"],"title":"_ComplianceShimRequest"},"_CustomsShimRequest":{"properties":{"description":{"type":"string","maxLength":10000,"minLength":1,"title":"Description"},"_meta":{"anyOf":[{},{"type":"null"}],"title":"Meta"}},"type":"object","required":["description"],"title":"_CustomsShimRequest"},"_FinancialShimRequest":{"properties":{"brand":{"type":"string","title":"Brand"},"claims":{"items":{"type":"string"},"type":"array","maxItems":10,"minItems":1,"title":"Claims"},"depth":{"type":"string","pattern":"^(fast|standard|auto)$","title":"Depth","default":"auto"},"include_sentiment":{"type":"boolean","title":"Include Sentiment","default":false},"_meta":{"anyOf":[{},{"type":"null"}],"title":"Meta"}},"type":"object","required":["brand","claims"],"title":"_FinancialShimRequest"},"_PolicyShimRequest":{"properties":{"brand":{"type":"string","title":"Brand"},"claims":{"items":{"type":"string"},"type":"array","maxItems":10,"minItems":1,"title":"Claims"},"depth":{"type":"string","pattern":"^(fast|standard|auto)$","title":"Depth","default":"auto"},"include_sentiment":{"type":"boolean","title":"Include Sentiment","default":false},"_meta":{"anyOf":[{},{"type":"null"}],"title":"Meta"}},"type":"object","required":["brand","claims"],"title":"_PolicyShimRequest"},"X402PaymentOption":{"type":"object","description":"One acceptable x402 payment route for this call. Amounts are set server-side per call; treat `maxAmountRequired` as opaque protocol data, not a published price.","properties":{"scheme":{"type":"string","description":"x402 payment scheme identifier"},"network":{"type":"string","description":"Chain identifier (the x402 v1 network name, e.g. base)"},"maxAmountRequired":{"type":"string","description":"Server-set amount for this call: an integer string in atomic token units (x402 v1)"},"resource":{"type":"string","description":"Absolute URL of the paid resource"},"description":{"type":"string","description":"Human-readable call description"},"mimeType":{"type":"string","description":"Response media type once paid"},"outputSchema":{"type":"object","description":"Response shape of the paid resource (JSON Schema)"},"payTo":{"type":"string","description":"Recipient wallet address"},"maxTimeoutSeconds":{"type":"integer","description":"Payment validity window"},"asset":{"type":"string","description":"Settlement asset: ERC-20 token contract address"},"extra":{"type":"object","description":"Scheme-specific extension data (EIP-712 domain name/version of the token, plus decimals)"}}},"X402PaymentRequired":{"type":"object","description":"402 body emitted when a payable operation is called without an API key: x402 protocol payment instructions (top-level `x402Version`, `error`, `accepts[]`).","properties":{"x402Version":{"type":"integer","description":"x402 protocol version"},"error":{"type":"string","description":"Why payment is required"},"accepts":{"type":"array","items":{"$ref":"#/components/schemas/X402PaymentOption"},"description":"Acceptable payment routes"}},"required":["x402Version","error","accepts"]},"ToolVerifyInput":{"type":"object","description":"Tool/MCP-server coordinates. At least one of `registry_id`, `url`, or `descriptor` is required.","properties":{"registry_id":{"type":"string","minLength":1,"description":"Registry identifier of the tool"},"url":{"type":"string","minLength":1,"description":"Endpoint or manifest URL of the tool"},"descriptor":{"type":"object","description":"Inline tool/MCP descriptor document"}},"anyOf":[{"required":["registry_id"]},{"required":["url"]},{"required":["descriptor"]}]},"QuickVerifyRequest":{"type":"object","description":"Zero-signup quick scan target.","properties":{"target":{"type":"string","description":"What to scan: an npm/PyPI package name, a GitHub `owner/repo`, or an MCP server URL."}},"required":["target"]},"AdvisorConstraints":{"properties":{"transport":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Transport"},"auth":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Auth"},"self_hostable":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"title":"Self Hostable"},"max_tools":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Max Tools"},"min_maintenance_score":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Min Maintenance Score"},"max_vulnerability_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Max Vulnerability Count"},"ecosystems":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"title":"Ecosystems"}},"title":"AdvisorConstraints","type":"object"},"AdvisorPreferences":{"properties":{"minimize":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Minimize"},"maximize":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Maximize"}},"title":"AdvisorPreferences","type":"object"},"AdvisorRequirements":{"properties":{"category":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Category"},"capabilities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"title":"Capabilities"},"constraints":{"anyOf":[{"$ref":"#/components/schemas/AdvisorConstraints"},{"type":"null"}],"default":null},"preferences":{"anyOf":[{"$ref":"#/components/schemas/AdvisorPreferences"},{"type":"null"}],"default":null},"detail":{"default":"full","title":"Detail","type":"string"}},"title":"AdvisorRequirements","type":"object"},"AdvisorFeedbackRequest":{"properties":{"recommendation_id":{"title":"Recommendation Id","type":"string"},"useful":{"title":"Useful","type":"boolean"},"selected_entity":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Selected Entity"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Notes"}},"required":["recommendation_id","useful"],"title":"AdvisorFeedbackRequest","type":"object"},"OpsWebhookCreateRequest":{"properties":{"url":{"title":"Url","type":"string"},"feeds":{"items":{"type":"string"},"title":"Feeds","type":"array"},"priority_filter":{"items":{"type":"string"},"title":"Priority Filter","type":"array"}},"required":["url"],"title":"OpsWebhookCreateRequest","type":"object"},"PackageVerifyRequest":{"properties":{"name":{"description":"Package name","maxLength":256,"minLength":1,"title":"Name","type":"string"},"ecosystem":{"description":"Package ecosystem (npm, pypi, crates, rubygems, maven)","title":"Ecosystem","type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Specific version to check","title":"Version"}},"required":["name","ecosystem"],"title":"PackageVerifyRequest","type":"object"},"CitationVerifyRequest":{"properties":{"claim":{"maxLength":2000,"minLength":1,"title":"Claim","type":"string"},"source_url":{"maxLength":2048,"minLength":1,"title":"Source Url","type":"string"},"quote":{"anyOf":[{"maxLength":5000,"type":"string"},{"type":"null"}],"default":null,"title":"Quote"}},"required":["claim","source_url"],"title":"CitationVerifyRequest","type":"object"},"ClaimVerifyRequest":{"properties":{"claim":{"title":"Claim","type":"string"},"source_urls":{"items":{"type":"string"},"title":"Source Urls","type":"array"}},"required":["claim","source_urls"],"title":"ClaimVerifyRequest","type":"object"},"ClaimBatchItem":{"properties":{"claim":{"title":"Claim","type":"string"},"source_urls":{"items":{"type":"string"},"title":"Source Urls","type":"array"}},"required":["claim","source_urls"],"title":"ClaimBatchItem","type":"object"},"ClaimBatchRequest":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ClaimBatchItem"},"title":"Items","type":"array"}},"required":["items"],"title":"ClaimBatchRequest","type":"object"}},"securitySchemes":{"ApiKeyAuth":{"type":"http","scheme":"bearer","bearerFormat":"bfx_live_<32 hex chars> or bfx_test_<32 hex chars>","description":"BlueFox Edge API key sent as an RFC 6750 bearer token (`Authorization: Bearer <key>`). Machine-readable details — key format, header, and where to obtain one — at `GET /v1/auth/help` (the runtime's 401 body carries the same pointer). Secured operations return 401 (Problem Details) when the key is MISSING and 403 (Problem Details) when a presented key is not recognized, revoked, or pending verification. Operations that also document a 402 response accept a per-call x402 payment in place of a key; note the payment wall admits only live-format keys past it — on those operations a test-format key receives the 402 payment response rather than a key-validation error."}}},"tags":[{"name":"Verification","description":"Verify packages, tools, citations, and factual claims before an agent acts on them. Each check returns the recorded verdict with evidence, and keyed (API-key) checks mint a signed reliance receipt."},{"name":"Brand","description":"Brand claim checks and the brand catalog: verify a claim about a brand's identity or positioning against reference data, read a brand's definition, or list the catalog."},{"name":"Receipts","description":"Read, list, export, and hold the signed receipts your checks minted, and fetch the receipt-signing public keys (JWKS). A receipt is a signed record of a check that happened; anyone can re-verify one offline from public keys."},{"name":"Notarize","description":"Submit a sha256 digest and receive a signed receipt recording that the digest was presented at that time. No content is seen or judged; payable keyless per request via x402, no account needed."},{"name":"Transparency","description":"The public transparency log surface: fetch the latest signed checkpoint and prove consistency between checkpoints, so strangers can watch the receipt log for themselves."},{"name":"Agent","description":"Register an agent and read agent trust scores - public, factor-based scores built from an agent's verification history."},{"name":"Agent Reputation","description":"Read the calling agent's own reputation standing, as recorded by its verification history."},{"name":"Audit","description":"Read an agent's verification audit trail: the checks it ran and the recorded outcomes."},{"name":"Monitor","description":"Track how AI models discuss a brand over time: health snapshots, tracked claims, per-model views, and webhook subscriptions for significant changes."},{"name":"Brand Analytics","description":"Aggregated reads over brand monitoring data: summaries, trends, and gaps computed from recorded model responses."},{"name":"Price","description":"Verify a product pricing claim against tracked price data. Returns the recorded verdict with the tracked price and a staleness flag."},{"name":"Policy","description":"Verify a claim about a brand's return, shipping, warranty, or cancellation policy against structured policy records."},{"name":"Financial","description":"Verify a financial claim about a company against curated filing-sourced data. Returns the recorded verdict with source attribution."},{"name":"Compliance","description":"Verify a claim about a brand's stated regulatory status against reference data. The check reports what the record shows; it does not confer or assess any status itself."},{"name":"Spec","description":"Verify a product specification claim against extracted spec-sheet data."},{"name":"Competitive","description":"Verify a comparative claim between brands using cross-model consensus data."},{"name":"Sentiment","description":"Classify the sentiment of submitted text. Returns a label and confidence score per input."},{"name":"Freshness","description":"Check whether the sources, citations, and dates in a text are current or stale."},{"name":"Customs","description":"Check whether independent models agree on the tariff classification of a shipment description. The verdict is agreement, never correctness; keyed checks mint a signed reliance receipt."},{"name":"Safety","description":"Classify content against the 12 GARM brand-safety categories for advertising suitability."},{"name":"PII","description":"Scan submitted content for personally identifiable information using the pinned detector and its declared detection classes."},{"name":"Preflight","description":"Run a pre-delivery check over an agent response across safety, accuracy, brand-alignment, professionalism, bias, and PII dimensions."},{"name":"Egress Gate","description":"Fail-closed outbound gate: the pinned detector scans a payload and the decision is proceed only if nothing flagged. Keyed checks mint a signed reliance receipt binding the payload by digest; content is never stored."},{"name":"Pre-Transaction","description":"Run the pre-purchase bundle - brand, price, policy, and compliance-status checks in one call - and get a single recorded verdict with per-domain results."},{"name":"References","description":"Append-only, account-scoped registry of pinned behavior snapshots: one immutable, content-addressed row per (slug, version) declaring a reference to check candidates against."},{"name":"Contracts","description":"Append-only, account-scoped registry of declared golden-suite contracts: immutable, content-addressed rows that later runs are checked against."},{"name":"Fallbacks","description":"Append-only, account-scoped registry of named fallback declarations: what your fallback IS, pinned so later parity and cutover runs can be checked against it."},{"name":"Regression","description":"Submit a candidate's observed behavior against a declared contract and pinned reference; receive a signed record of whether they agreed."},{"name":"Parity","description":"Submit a fallback's captured behavior against its declaration and a pinned production reference; receive a signed record of what the fallback actually delivered."},{"name":"Cutover","description":"Submit evidence from a cutover you ran on your own estate - production traffic cut to your declared fallback - and receive a signed record of what the fallback delivered."},{"name":"Run Conformance","description":"Submit an executed run against its declared contract and receive a signed record of conformance."},{"name":"Accuracy","description":"Public read surface for validated accuracy measurements, published per dimension. Only cells that passed validation are visible; dimensions without a validated cell are absent, not estimated."},{"name":"Methodology","description":"Public read surface for the published methodology behind each validated accuracy cell: interpretation, abstention handling, and measurement breadth."},{"name":"Graph","description":"Query recorded entity observations: read an entity's observation history, search by observation criteria, or list tracked entities."},{"name":"Advisor","description":"Ranked MCP server recommendations, side-by-side comparisons, and category listings built from recorded observation data."},{"name":"Scanner","description":"Submit an MCP server for behavioral scanning and poll scan progress."},{"name":"Clusters","description":"Brand cluster and peer-group reads: list clusters, read a cluster's brands and aggregate stats, or fetch a brand's peer context."},{"name":"Similarity","description":"List brands similar to a given brand, from recorded clustering data."},{"name":"Profile","description":"Agent-ready brand profiles: structured identity, policy, pricing, and contact sections assembled per brand."},{"name":"Availability","description":"Read a brand's recorded product availability and current promotions."},{"name":"Hours","description":"Read a brand's recorded business hours."},{"name":"Contact","description":"Read a brand's recorded contact channels."},{"name":"Edge Ops","description":"Operational intelligence feeds for agents: security, commerce, protocol, trust, regulatory, and model events, with webhook subscriptions."},{"name":"Watchers","description":"Account-scoped watchers that monitor a brand for declared conditions and deliver structured change events by webhook or poll."},{"name":"API Keys","description":"Issue, list, verify, and revoke the API keys that authenticate requests."},{"name":"Billing","description":"Read plans, usage, and billing status, and start checkout. Prices are quoted by the endpoints themselves."},{"name":"Auth","description":"Machine-readable description of how to authenticate: key header shape, where to get a key, and the keyless x402 payment path."},{"name":"Account","description":"Read the status of the credential you are calling with: whether it is active, which plan it is on, both meters (API calls and signed mints) with their limits and reset instants. Free and unmetered - reading your quota never spends it."},{"name":"Consent","description":"Validate a consent-metadata document against your own pinned schema version - a pure schema check that mints a signed receipt - and manage pinned schemas."},{"name":"Subprocessors","description":"Compare the subprocessor set observed for your API key against your disclosed set, and manage the disclosure records."},{"name":"Legal","description":"The service's own published pages: terms, privacy, security policy, security.txt, and getting-started."},{"name":"Errors","description":"Documentation surface for error type URIs: every error body's type field resolves to a page here describing that problem class."},{"name":"Discovery","description":"Machine-readable service discovery documents: the AI plugin manifest and the x402 pricing listing."},{"name":"A2A","description":"The A2A agent card: this service's skills described for agent-to-agent protocol clients."},{"name":"MCP","description":"REST bridges for the MCP tool catalog and the catalog document itself. The interactive MCP endpoint at /mcp serves the same tools over Streamable HTTP."},{"name":"Protocol Verification","description":"Verify policy claims published through commerce protocols against independent reference data. Returns per-claim match levels with discrepancy notes."},{"name":"Verify Quick","description":"The self-serve verification toolkit: the verify script, its checksum, and the MCP quick-start page."}],"servers":[{"url":"https://api.bluefoxedge.ai","description":"Production"}],"jsonSchemaDialect":"https://spec.openapis.org/oas/3.1/dialect/base"}