{"openapi":"3.1.0","info":{"title":"Gembook API","version":"1.5.0","description":"Public read API for Gembook canonical card data: assets, comps, listings, methodology, and source registry. Per docs/specs/PHASE-2-SCHEMA-API.md."},"servers":[{"url":"https://gembook.xyz/api"}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"http","scheme":"bearer","description":"API key issued via the operator CLI. Format: gemb_<48 char base64url>"}}},"paths":{"/v1/ping":{"get":{"summary":"Connectivity check","security":[{"ApiKeyAuth":[]}],"tags":["meta"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","meta","links"],"properties":{"data":{"type":"object","properties":{"ok":{"type":"boolean"},"engineVersion":{"type":"integer"},"timestamp":{"type":"string","format":"date-time"}}},"meta":{"type":"object","required":["version","computed_at","engine_version","request_id"],"properties":{"version":{"type":"string","const":"v1"},"computed_at":{"type":"string","format":"date-time"},"engine_version":{"type":"integer"},"request_id":{"type":"string"}}},"links":{"type":"object","required":["self"],"properties":{"self":{"type":"string"},"related":{"type":"object","additionalProperties":{"type":"string"}}}}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"403":{"description":"Key lacks required scope","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/v1/methodology":{"get":{"summary":"Trust + valuation methodology (machine-readable)","security":[{"ApiKeyAuth":[]}],"tags":["meta"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","meta","links"],"properties":{"data":{"type":"object"},"meta":{"type":"object","required":["version","computed_at","engine_version","request_id"],"properties":{"version":{"type":"string","const":"v1"},"computed_at":{"type":"string","format":"date-time"},"engine_version":{"type":"integer"},"request_id":{"type":"string"}}},"links":{"type":"object","required":["self"],"properties":{"self":{"type":"string"},"related":{"type":"object","additionalProperties":{"type":"string"}}}}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"403":{"description":"Key lacks required scope","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/v1/sources":{"get":{"summary":"Source registry — every adapter we ingest from","security":[{"ApiKeyAuth":[]}],"tags":["meta"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","meta","links"],"properties":{"data":{"type":"object"},"meta":{"type":"object","required":["version","computed_at","engine_version","request_id"],"properties":{"version":{"type":"string","const":"v1"},"computed_at":{"type":"string","format":"date-time"},"engine_version":{"type":"integer"},"request_id":{"type":"string"}}},"links":{"type":"object","required":["self"],"properties":{"self":{"type":"string"},"related":{"type":"object","additionalProperties":{"type":"string"}}}}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"403":{"description":"Key lacks required scope","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/v1/system/health":{"get":{"summary":"Selected public status checks (no auth)","tags":["meta"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","meta","links"],"properties":{"data":{"type":"object","required":["status","status_scope","status_deprecated","selected_checks_status","scope","checked_at","observed_at","summary","checks","data_freshness","data_freshness_semantics","source_health","source_health_status","sla_targets","sla_targets_status"],"properties":{"selected_checks_status":{"type":"string","enum":["operational","degraded","unavailable"]},"scope":{"type":"string","const":"selected_public_checks"},"checked_at":{"oneOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_at":{"type":"string","format":"date-time"},"summary":{"type":"string"},"checks":{"type":"object","required":["health_snapshot","cache_connectivity","comp_ingestion_activity","sale_date_freshness","listings_snapshot","public_incidents"],"properties":{"health_snapshot":{"type":"object","required":["status","detail","age_minutes"],"properties":{"status":{"type":"string","enum":["operational","degraded","unavailable"]},"detail":{"type":"string"},"age_minutes":{"type":["number","null"]}}},"cache_connectivity":{"type":"object","required":["status","detail"],"properties":{"status":{"type":"string","enum":["operational","degraded","unavailable"]},"detail":{"type":"string"}}},"comp_ingestion_activity":{"type":"object","required":["status","detail","detected","count","window_hours"],"properties":{"status":{"type":"string","enum":["operational","degraded","unavailable"]},"detail":{"type":"string"},"detected":{"type":["boolean","null"]},"count":{"type":["integer","null"]},"window_hours":{"type":"integer","const":24}}},"sale_date_freshness":{"type":"object","required":["status","detail","newest_sale_age_hours"],"properties":{"status":{"type":"string","enum":["operational","degraded","unavailable"]},"detail":{"type":"string"},"newest_sale_age_hours":{"type":["number","null"]}}},"listings_snapshot":{"type":"object","required":["status","detail","count"],"properties":{"status":{"type":"string","enum":["operational","degraded","unavailable"]},"detail":{"type":"string"},"count":{"type":["integer","null"]}}},"public_incidents":{"type":"object","required":["status","detail","count","filter"],"properties":{"status":{"type":"string","enum":["operational","degraded","unavailable"]},"detail":{"type":"string"},"count":{"type":["integer","null"]},"filter":{"type":"string","const":"unacknowledged_partner_visible_critical"}}}}},"status":{"type":"string","enum":["healthy","degraded","unknown"],"deprecated":true},"status_scope":{"type":"string","const":"selected_public_checks"},"status_deprecated":{"type":"boolean","const":true},"data_freshness":{"type":"object","required":["newest_comp_age_hours","comps_last_24h","live_listings"],"properties":{"newest_comp_age_hours":{"type":["number","null"]},"comps_last_24h":{"type":["integer","null"]},"live_listings":{"type":["integer","null"]}}},"data_freshness_semantics":{"type":"object","required":["newest_comp_age_hours","comps_last_24h","live_listings"],"properties":{"newest_comp_age_hours":{"type":"string"},"comps_last_24h":{"type":"string"},"live_listings":{"type":"string"}}},"source_health":{"type":"array","maxItems":0,"items":{"type":"object"},"deprecated":true},"source_health_status":{"type":"string","const":"unavailable"},"sla_targets":{"type":"null","deprecated":true},"sla_targets_status":{"type":"string","const":"unavailable"}}},"meta":{"type":"object","required":["version","computed_at","engine_version","request_id"],"properties":{"version":{"type":"string","const":"v1"},"computed_at":{"type":"string","format":"date-time"},"engine_version":{"type":"integer"},"request_id":{"type":"string"}}},"links":{"type":"object","required":["self"],"properties":{"self":{"type":"string"},"related":{"type":"object","additionalProperties":{"type":"string"}}}}}}}},"headers":{"Cache-Control":{"description":"Public status responses are not cached by clients or CDNs.","schema":{"type":"string","const":"no-store, max-age=0"}}}},"503":{"description":"Selected public status query unavailable","headers":{"Cache-Control":{"description":"Public status responses are not cached by clients or CDNs.","schema":{"type":"string","const":"no-store, max-age=0"}}},"content":{"application/json":{"schema":{"type":"object","required":["data","meta","links"],"properties":{"data":{"type":"object","required":["status","status_scope","status_deprecated","selected_checks_status","scope","checked_at","observed_at","summary","checks","data_freshness","data_freshness_semantics","source_health","source_health_status","sla_targets","sla_targets_status"],"properties":{"selected_checks_status":{"type":"string","enum":["operational","degraded","unavailable"]},"scope":{"type":"string","const":"selected_public_checks"},"checked_at":{"oneOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"observed_at":{"type":"string","format":"date-time"},"summary":{"type":"string"},"checks":{"type":"object","required":["health_snapshot","cache_connectivity","comp_ingestion_activity","sale_date_freshness","listings_snapshot","public_incidents"],"properties":{"health_snapshot":{"type":"object","required":["status","detail","age_minutes"],"properties":{"status":{"type":"string","enum":["operational","degraded","unavailable"]},"detail":{"type":"string"},"age_minutes":{"type":["number","null"]}}},"cache_connectivity":{"type":"object","required":["status","detail"],"properties":{"status":{"type":"string","enum":["operational","degraded","unavailable"]},"detail":{"type":"string"}}},"comp_ingestion_activity":{"type":"object","required":["status","detail","detected","count","window_hours"],"properties":{"status":{"type":"string","enum":["operational","degraded","unavailable"]},"detail":{"type":"string"},"detected":{"type":["boolean","null"]},"count":{"type":["integer","null"]},"window_hours":{"type":"integer","const":24}}},"sale_date_freshness":{"type":"object","required":["status","detail","newest_sale_age_hours"],"properties":{"status":{"type":"string","enum":["operational","degraded","unavailable"]},"detail":{"type":"string"},"newest_sale_age_hours":{"type":["number","null"]}}},"listings_snapshot":{"type":"object","required":["status","detail","count"],"properties":{"status":{"type":"string","enum":["operational","degraded","unavailable"]},"detail":{"type":"string"},"count":{"type":["integer","null"]}}},"public_incidents":{"type":"object","required":["status","detail","count","filter"],"properties":{"status":{"type":"string","enum":["operational","degraded","unavailable"]},"detail":{"type":"string"},"count":{"type":["integer","null"]},"filter":{"type":"string","const":"unacknowledged_partner_visible_critical"}}}}},"status":{"type":"string","enum":["healthy","degraded","unknown"],"deprecated":true},"status_scope":{"type":"string","const":"selected_public_checks"},"status_deprecated":{"type":"boolean","const":true},"data_freshness":{"type":"object","required":["newest_comp_age_hours","comps_last_24h","live_listings"],"properties":{"newest_comp_age_hours":{"type":["number","null"]},"comps_last_24h":{"type":["integer","null"]},"live_listings":{"type":["integer","null"]}}},"data_freshness_semantics":{"type":"object","required":["newest_comp_age_hours","comps_last_24h","live_listings"],"properties":{"newest_comp_age_hours":{"type":"string"},"comps_last_24h":{"type":"string"},"live_listings":{"type":"string"}}},"source_health":{"type":"array","maxItems":0,"items":{"type":"object"},"deprecated":true},"source_health_status":{"type":"string","const":"unavailable"},"sla_targets":{"type":"null","deprecated":true},"sla_targets_status":{"type":"string","const":"unavailable"}}},"meta":{"type":"object","required":["version","computed_at","engine_version","request_id"],"properties":{"version":{"type":"string","const":"v1"},"computed_at":{"type":"string","format":"date-time"},"engine_version":{"type":"integer"},"request_id":{"type":"string"}}},"links":{"type":"object","required":["self"],"properties":{"self":{"type":"string"},"related":{"type":"object","additionalProperties":{"type":"string"}}}}}}}}}}}},"/v1/assets/{slug}":{"get":{"summary":"Canonical asset, release-selected valuation + published Gembook Value","security":[{"ApiKeyAuth":[]}],"tags":["assets"],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Asset resource in the existing data/meta/links envelope, including when only its valuation release is unavailable.","content":{"application/json":{"schema":{"type":"object","required":["data","meta","links"],"properties":{"data":{"type":"object","properties":{"asset":{"type":"object","description":"Canonical asset identity, preserved when its valuation release is unavailable."},"valuation":{"type":["object","null"],"description":"The selected valuation row, which may itself have a null fair_value. Null for a healthy scoped miss or an unavailable release; valuation_status distinguishes them. No other release or unscoped row is used as a fallback."},"valuation_status":{"type":"string","enum":["available","no_value","unavailable"],"description":"available: a row was selected, even if fair_value is null; no_value: the valid captured release/run has no row; unavailable: the pointer, release or valuation storage could not be read or validated."},"raw":{"type":["object","null"],"description":"Independent raw anchor; preserved when the valuation release is unavailable."},"gembook_value":{"type":["object","null"],"description":"Independently gated published Gembook Value; preserved when the valuation release is unavailable."}}},"meta":{"type":"object","required":["version","computed_at","engine_version","request_id"],"properties":{"version":{"type":"string","const":"v1"},"computed_at":{"type":"string","format":"date-time"},"engine_version":{"type":"integer"},"request_id":{"type":"string"}}},"links":{"type":"object","required":["self"],"properties":{"self":{"type":"string"},"related":{"type":"object","additionalProperties":{"type":"string"}}}}}}}},"headers":{"Cache-Control":{"description":"Set to no-store only when valuation_status is unavailable. Healthy available and no_value responses retain their existing cache behavior.","schema":{"type":"string","const":"no-store"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"403":{"description":"Key lacks required scope","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Asset not found","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/v1/assets/{slug}/comps":{"get":{"summary":"Paged sold comps for an asset","security":[{"ApiKeyAuth":[]}],"tags":["assets"],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"since","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"status","in":"query","schema":{"type":"string","enum":["active","superseded","quarantined","manual_review"]}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":200}},{"name":"cursor","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","meta","links"],"properties":{"data":{"type":"object"},"meta":{"type":"object","required":["version","computed_at","engine_version","request_id"],"properties":{"version":{"type":"string","const":"v1"},"computed_at":{"type":"string","format":"date-time"},"engine_version":{"type":"integer"},"request_id":{"type":"string"}}},"links":{"type":"object","required":["self"],"properties":{"self":{"type":"string"},"related":{"type":"object","additionalProperties":{"type":"string"}}}}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"403":{"description":"Key lacks required scope","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/v1/assets/{slug}/listings":{"get":{"summary":"Live listings for an asset, with trust signals","security":[{"ApiKeyAuth":[]}],"tags":["assets"],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"include_flagged","in":"query","schema":{"type":"boolean"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"name":"cursor","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","meta","links"],"properties":{"data":{"type":"object"},"meta":{"type":"object","required":["version","computed_at","engine_version","request_id"],"properties":{"version":{"type":"string","const":"v1"},"computed_at":{"type":"string","format":"date-time"},"engine_version":{"type":"integer"},"request_id":{"type":"string"}}},"links":{"type":"object","required":["self"],"properties":{"self":{"type":"string"},"related":{"type":"object","additionalProperties":{"type":"string"}}}}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"403":{"description":"Key lacks required scope","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/v1/sets/{slug}":{"get":{"summary":"Set aggregate — market cap, volume, top card","security":[{"ApiKeyAuth":[]}],"tags":["sets"],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","meta","links"],"properties":{"data":{"type":"object"},"meta":{"type":"object","required":["version","computed_at","engine_version","request_id"],"properties":{"version":{"type":"string","const":"v1"},"computed_at":{"type":"string","format":"date-time"},"engine_version":{"type":"integer"},"request_id":{"type":"string"}}},"links":{"type":"object","required":["self"],"properties":{"self":{"type":"string"},"related":{"type":"object","additionalProperties":{"type":"string"}}}}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"403":{"description":"Key lacks required scope","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/v1/market/snapshot":{"get":{"summary":"Latest macro market snapshot","security":[{"ApiKeyAuth":[]}],"tags":["market"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","meta","links"],"properties":{"data":{"type":"object"},"meta":{"type":"object","required":["version","computed_at","engine_version","request_id"],"properties":{"version":{"type":"string","const":"v1"},"computed_at":{"type":"string","format":"date-time"},"engine_version":{"type":"integer"},"request_id":{"type":"string"}}},"links":{"type":"object","required":["self"],"properties":{"self":{"type":"string"},"related":{"type":"object","additionalProperties":{"type":"string"}}}}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"403":{"description":"Key lacks required scope","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/v1/webhooks":{"get":{"summary":"List the caller's webhook subscriptions","security":[{"ApiKeyAuth":[]}],"tags":["webhooks"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","meta","links"],"properties":{"data":{"type":"object"},"meta":{"type":"object","required":["version","computed_at","engine_version","request_id"],"properties":{"version":{"type":"string","const":"v1"},"computed_at":{"type":"string","format":"date-time"},"engine_version":{"type":"integer"},"request_id":{"type":"string"}}},"links":{"type":"object","required":["self"],"properties":{"self":{"type":"string"},"related":{"type":"object","additionalProperties":{"type":"string"}}}}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"403":{"description":"Key lacks required scope","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/v1/webhooks/{id}":{"get":{"summary":"Fetch one subscription (caller-scoped)","security":[{"ApiKeyAuth":[]}],"tags":["webhooks"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","meta","links"],"properties":{"data":{"type":"object"},"meta":{"type":"object","required":["version","computed_at","engine_version","request_id"],"properties":{"version":{"type":"string","const":"v1"},"computed_at":{"type":"string","format":"date-time"},"engine_version":{"type":"integer"},"request_id":{"type":"string"}}},"links":{"type":"object","required":["self"],"properties":{"self":{"type":"string"},"related":{"type":"object","additionalProperties":{"type":"string"}}}}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"403":{"description":"Key lacks required scope","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"404":{"description":"Subscription not found","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}},"500":{"description":"Internal error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}}}},"/v1/openapi.json":{"get":{"summary":"OpenAPI 3.1 spec (this document)","tags":["meta"],"responses":{"200":{"description":"OK"}}}}}}