{"openapi":"3.1.0","info":{"title":"ModelDex API","version":"1.0.0","description":"The ModelDex public read API — a sourced reference for frontier and leading open AI models.\n\nEvery fact, benchmark, and news item carries its primary source, the verbatim quote,\nthe verification date, and a verification status.\n\n**Auth is optional.** Anonymous access works for every endpoint and is rate-limited per IP.\nSending an `Authorization: Bearer mdx_live_…` key (created at /account) only raises your\nrate-limit tier and records usage — it never unlocks extra data. Call `GET /me` to introspect.\n\nAn MCP (Model Context Protocol) server exposes the same data to AI agents at https://modeldex.dev/api/mcp.","contact":{"name":"ModelDex","url":"https://modeldex.dev/developers"}},"security":[{},{"ApiKeyAuth":[]}],"servers":[{"url":"https://modeldex.dev/api/v1","description":"Production"}],"tags":[{"name":"Models"},{"name":"Providers"},{"name":"Benchmarks"},{"name":"News"},{"name":"Guides"},{"name":"Attributes"},{"name":"Compare"},{"name":"Search"},{"name":"Meta"}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"http","scheme":"bearer","bearerFormat":"mdx_live_…","description":"OPTIONAL. Anonymous access works for every endpoint. Sending a key (created at /account) only raises your rate-limit tier and records usage — it never unlocks extra data."}},"schemas":{"Source":{"type":"object","properties":{"url":{"type":"string","description":"URL of the primary source document."},"label":{"type":["string","null"],"description":"Human-readable source label, e.g. 'OpenAI Pricing'."},"trust_tier":{"type":["number","null"],"description":"Source trust tier (1 = canonical/official, higher = less authoritative)."},"type":{"type":["string","null"],"description":"Source type, e.g. docs, pricing, blog, changelog."}},"required":["url","label","trust_tier","type"],"description":"A primary source reference."},"Fact":{"type":"object","properties":{"key":{"type":"string","description":"Attribute key, e.g. 'context_window', 'input_price_per_mtok'."},"label":{"type":"string","description":"Human-readable attribute label from the catalog."},"category":{"type":"string","description":"Attribute category, e.g. capacity, pricing, capability."},"value_type":{"type":"string","enum":["text","int","num","json","bool","date"],"description":"The stored type of a fact value."},"value":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}],"description":"Typed scalar value (null for json-typed facts)."},"json":{"description":"Structured value, present only for json-typed facts."},"unit":{"type":["string","null"],"description":"Unit of the value, e.g. 'tokens', '$', '%'."},"display":{"type":"string","description":"Formatted display string for the value."},"confidence":{"type":["number","null"],"description":"Agent confidence (0–1), if recorded."},"source":{"type":["object","null"],"properties":{"url":{"type":"string","description":"URL of the primary source document."},"label":{"type":["string","null"],"description":"Human-readable source label, e.g. 'OpenAI Pricing'."},"trust_tier":{"type":["number","null"],"description":"Source trust tier (1 = canonical/official, higher = less authoritative)."},"type":{"type":["string","null"],"description":"Source type, e.g. docs, pricing, blog, changelog."}},"required":["url","label","trust_tier","type"],"description":"Primary source backing this value, if assigned."},"source_quote":{"type":["string","null"],"description":"Verbatim quote from the source that justifies the value."},"verified_at":{"type":["string","null"],"description":"ISO 8601 timestamp this value was last verified against its source."},"status":{"type":"string","enum":["quarantined","unverified","verified","stale","conflicting","superseded"],"description":"Verification state of a fact. Only `verified` should be treated as settled; `superseded` marks a hidden, retired duplicate (never served on read paths)."}},"required":["key","label","category","value_type","value","unit","display","confidence","source","source_quote","verified_at","status"],"description":"A single specification fact with full provenance."},"Benchmark":{"type":"object","properties":{"name":{"type":"string","description":"Benchmark name, e.g. 'MMLU', 'SWE-bench'."},"score":{"type":["number","null"],"description":"Reported score."},"unit":{"type":["string","null"],"description":"Score unit, e.g. '%'."},"measured_at":{"type":["string","null"],"description":"ISO date the benchmark was measured/reported."},"model":{"type":["object","null"],"properties":{"slug":{"type":"string"},"display_name":{"type":"string"}},"required":["slug","display_name"],"description":"Owning model (present on cross-model benchmark listings)."},"confidence":{"type":["number","null"],"description":"Agent confidence (0–1), if recorded."},"source":{"type":["object","null"],"properties":{"url":{"type":"string","description":"URL of the primary source document."},"label":{"type":["string","null"],"description":"Human-readable source label, e.g. 'OpenAI Pricing'."},"trust_tier":{"type":["number","null"],"description":"Source trust tier (1 = canonical/official, higher = less authoritative)."},"type":{"type":["string","null"],"description":"Source type, e.g. docs, pricing, blog, changelog."}},"required":["url","label","trust_tier","type"],"description":"Primary source backing this value, if assigned."},"source_quote":{"type":["string","null"],"description":"Verbatim quote from the source that justifies the value."},"verified_at":{"type":["string","null"],"description":"ISO 8601 timestamp this value was last verified against its source."},"status":{"type":"string","enum":["quarantined","unverified","verified","stale","conflicting","superseded"],"description":"Verification state of a fact. Only `verified` should be treated as settled; `superseded` marks a hidden, retired duplicate (never served on read paths)."}},"required":["name","score","unit","measured_at","confidence","source","source_quote","verified_at","status"],"description":"A benchmark result with provenance."},"Provider":{"type":"object","properties":{"slug":{"type":"string","description":"Provider slug, e.g. 'openai', 'anthropic', 'google', 'xai'."},"name":{"type":"string","description":"Provider display name."},"brand_color":{"type":["string","null"]},"logo_url":{"type":["string","null"]},"homepage_url":{"type":["string","null"]},"docs_url":{"type":["string","null"]},"pricing_url":{"type":["string","null"]},"blog_url":{"type":["string","null"]},"x_handles":{"type":["array","null"],"items":{"type":"string"}},"url":{"type":"string","description":"Canonical ModelDex web page for this provider."}},"required":["slug","name","brand_color","logo_url","homepage_url","docs_url","pricing_url","blog_url","x_handles","url"],"description":"An AI model provider."},"ModelSummary":{"type":"object","properties":{"slug":{"type":"string","description":"Model slug, e.g. 'gpt-5', 'claude-opus-4-6'."},"display_name":{"type":"string"},"family":{"type":["string","null"]},"provider":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"brand_color":{"type":["string","null"]}},"required":["slug","name","brand_color"]},"status":{"type":"string","enum":["draft","current","preview","legacy","deprecated"],"description":"Lifecycle status of a model."},"is_flagship":{"type":"boolean"},"released_at":{"type":["string","null"]},"summary":{"type":["string","null"]},"url":{"type":"string","description":"Canonical ModelDex web page for this model."}},"required":["slug","display_name","family","provider","status","is_flagship","released_at","summary","url"],"description":"A model summary (no facts)."},"ModelDetail":{"type":"object","properties":{"slug":{"type":"string","description":"Model slug, e.g. 'gpt-5', 'claude-opus-4-6'."},"display_name":{"type":"string"},"family":{"type":["string","null"]},"provider":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"brand_color":{"type":["string","null"]}},"required":["slug","name","brand_color"]},"status":{"type":"string","enum":["draft","current","preview","legacy","deprecated"],"description":"Lifecycle status of a model."},"is_flagship":{"type":"boolean"},"released_at":{"type":["string","null"]},"summary":{"type":["string","null"]},"url":{"type":"string","description":"Canonical ModelDex web page for this model."},"spec_health":{"type":["string","null"],"enum":["quarantined","unverified","verified","stale","conflicting","superseded",null],"description":"Rollup health of the spec."},"spec_verified_at":{"type":["string","null"]},"last_verified_at":{"type":["string","null"],"description":"Most recent verification across all facts."},"facts":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Attribute key, e.g. 'context_window', 'input_price_per_mtok'."},"label":{"type":"string","description":"Human-readable attribute label from the catalog."},"category":{"type":"string","description":"Attribute category, e.g. capacity, pricing, capability."},"value_type":{"type":"string","enum":["text","int","num","json","bool","date"],"description":"The stored type of a fact value."},"value":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}],"description":"Typed scalar value (null for json-typed facts)."},"json":{"description":"Structured value, present only for json-typed facts."},"unit":{"type":["string","null"],"description":"Unit of the value, e.g. 'tokens', '$', '%'."},"display":{"type":"string","description":"Formatted display string for the value."},"confidence":{"type":["number","null"],"description":"Agent confidence (0–1), if recorded."},"source":{"type":["object","null"],"properties":{"url":{"type":"string","description":"URL of the primary source document."},"label":{"type":["string","null"],"description":"Human-readable source label, e.g. 'OpenAI Pricing'."},"trust_tier":{"type":["number","null"],"description":"Source trust tier (1 = canonical/official, higher = less authoritative)."},"type":{"type":["string","null"],"description":"Source type, e.g. docs, pricing, blog, changelog."}},"required":["url","label","trust_tier","type"],"description":"Primary source backing this value, if assigned."},"source_quote":{"type":["string","null"],"description":"Verbatim quote from the source that justifies the value."},"verified_at":{"type":["string","null"],"description":"ISO 8601 timestamp this value was last verified against its source."},"status":{"type":"string","enum":["quarantined","unverified","verified","stale","conflicting","superseded"],"description":"Verification state of a fact. Only `verified` should be treated as settled; `superseded` marks a hidden, retired duplicate (never served on read paths)."}},"required":["key","label","category","value_type","value","unit","display","confidence","source","source_quote","verified_at","status"],"description":"A single specification fact with full provenance."},"description":"All published facts, each with provenance."},"benchmarks":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Benchmark name, e.g. 'MMLU', 'SWE-bench'."},"score":{"type":["number","null"],"description":"Reported score."},"unit":{"type":["string","null"],"description":"Score unit, e.g. '%'."},"measured_at":{"type":["string","null"],"description":"ISO date the benchmark was measured/reported."},"model":{"type":["object","null"],"properties":{"slug":{"type":"string"},"display_name":{"type":"string"}},"required":["slug","display_name"],"description":"Owning model (present on cross-model benchmark listings)."},"confidence":{"type":["number","null"],"description":"Agent confidence (0–1), if recorded."},"source":{"type":["object","null"],"properties":{"url":{"type":"string","description":"URL of the primary source document."},"label":{"type":["string","null"],"description":"Human-readable source label, e.g. 'OpenAI Pricing'."},"trust_tier":{"type":["number","null"],"description":"Source trust tier (1 = canonical/official, higher = less authoritative)."},"type":{"type":["string","null"],"description":"Source type, e.g. docs, pricing, blog, changelog."}},"required":["url","label","trust_tier","type"],"description":"Primary source backing this value, if assigned."},"source_quote":{"type":["string","null"],"description":"Verbatim quote from the source that justifies the value."},"verified_at":{"type":["string","null"],"description":"ISO 8601 timestamp this value was last verified against its source."},"status":{"type":"string","enum":["quarantined","unverified","verified","stale","conflicting","superseded"],"description":"Verification state of a fact. Only `verified` should be treated as settled; `superseded` marks a hidden, retired duplicate (never served on read paths)."}},"required":["name","score","unit","measured_at","confidence","source","source_quote","verified_at","status"],"description":"A benchmark result with provenance."}},"related_news":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"},"category":{"type":"string","enum":["release","feature","pricing","research","policy","model","product","funding","acquisition","partnership","hardware","infrastructure","open-source","benchmark","safety","legal"],"description":"News item category."},"event_date":{"type":["string","null"],"description":"ISO date the event occurred."},"published_at":{"type":["string","null"]},"importance":{"type":"number","description":"Editorial importance score (higher = more important)."},"reads":{"type":"integer","description":"Count of agent reads (MCP get_news + REST /news/{slug} detail fetches) of this item. Engagement telemetry, NOT a verified fact — has no provenance and is not gate-controlled."},"status":{"type":"string","enum":["quarantined","unverified","verified","stale","conflicting","superseded"],"description":"Verification state of a fact. Only `verified` should be treated as settled; `superseded` marks a hidden, retired duplicate (never served on read paths)."},"provider":{"type":["object","null"],"properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"]},"model":{"type":["object","null"],"properties":{"slug":{"type":"string"},"display_name":{"type":"string"}},"required":["slug","display_name"]},"url":{"type":"string","description":"Canonical ModelDex web page for this news item."},"audio":{"type":["object","null"],"properties":{"url":{"type":"string","description":"Public MP3 URL of the pre-rendered voiceover."},"duration_seconds":{"type":["number","null"],"description":"Clip length in seconds, if known."},"voice":{"type":"string","description":"TTS voice id (audit only)."},"model":{"type":"string","description":"TTS model id (audit only)."}},"required":["url","duration_seconds","voice","model"],"description":"Pre-rendered voiceover of this article, if available. A rendering of already-provenanced text — it carries no source/verified_at of its own (the article's sources remain authoritative)."}},"required":["slug","title","category","event_date","published_at","importance","reads","status","provider","model","url"],"description":"A news item summary."}}},"required":["slug","display_name","family","provider","status","is_flagship","released_at","summary","url","spec_health","spec_verified_at","last_verified_at","facts","benchmarks","related_news"],"description":"A model with its full, source-backed specification."},"NewsRef":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"},"category":{"type":"string","enum":["release","feature","pricing","research","policy","model","product","funding","acquisition","partnership","hardware","infrastructure","open-source","benchmark","safety","legal"],"description":"News item category."},"event_date":{"type":["string","null"],"description":"ISO date the event occurred."},"published_at":{"type":["string","null"]},"importance":{"type":"number","description":"Editorial importance score (higher = more important)."},"reads":{"type":"integer","description":"Count of agent reads (MCP get_news + REST /news/{slug} detail fetches) of this item. Engagement telemetry, NOT a verified fact — has no provenance and is not gate-controlled."},"status":{"type":"string","enum":["quarantined","unverified","verified","stale","conflicting","superseded"],"description":"Verification state of a fact. Only `verified` should be treated as settled; `superseded` marks a hidden, retired duplicate (never served on read paths)."},"provider":{"type":["object","null"],"properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"]},"model":{"type":["object","null"],"properties":{"slug":{"type":"string"},"display_name":{"type":"string"}},"required":["slug","display_name"]},"url":{"type":"string","description":"Canonical ModelDex web page for this news item."},"audio":{"type":["object","null"],"properties":{"url":{"type":"string","description":"Public MP3 URL of the pre-rendered voiceover."},"duration_seconds":{"type":["number","null"],"description":"Clip length in seconds, if known."},"voice":{"type":"string","description":"TTS voice id (audit only)."},"model":{"type":"string","description":"TTS model id (audit only)."}},"required":["url","duration_seconds","voice","model"],"description":"Pre-rendered voiceover of this article, if available. A rendering of already-provenanced text — it carries no source/verified_at of its own (the article's sources remain authoritative)."}},"required":["slug","title","category","event_date","published_at","importance","reads","status","provider","model","url"],"description":"A news item summary."},"NewsDetail":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"},"category":{"type":"string","enum":["release","feature","pricing","research","policy","model","product","funding","acquisition","partnership","hardware","infrastructure","open-source","benchmark","safety","legal"],"description":"News item category."},"event_date":{"type":["string","null"],"description":"ISO date the event occurred."},"published_at":{"type":["string","null"]},"importance":{"type":"number","description":"Editorial importance score (higher = more important)."},"reads":{"type":"integer","description":"Count of agent reads (MCP get_news + REST /news/{slug} detail fetches) of this item. Engagement telemetry, NOT a verified fact — has no provenance and is not gate-controlled."},"status":{"type":"string","enum":["quarantined","unverified","verified","stale","conflicting","superseded"],"description":"Verification state of a fact. Only `verified` should be treated as settled; `superseded` marks a hidden, retired duplicate (never served on read paths)."},"provider":{"type":["object","null"],"properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"]},"model":{"type":["object","null"],"properties":{"slug":{"type":"string"},"display_name":{"type":"string"}},"required":["slug","display_name"]},"url":{"type":"string","description":"Canonical ModelDex web page for this news item."},"audio":{"type":["object","null"],"properties":{"url":{"type":"string","description":"Public MP3 URL of the pre-rendered voiceover."},"duration_seconds":{"type":["number","null"],"description":"Clip length in seconds, if known."},"voice":{"type":"string","description":"TTS voice id (audit only)."},"model":{"type":"string","description":"TTS model id (audit only)."}},"required":["url","duration_seconds","voice","model"],"description":"Pre-rendered voiceover of this article, if available. A rendering of already-provenanced text — it carries no source/verified_at of its own (the article's sources remain authoritative)."},"body_md":{"type":["string","null"],"description":"Markdown body."},"sources":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"source_quote":{"type":["string","null"]},"source":{"type":["object","null"],"properties":{"url":{"type":"string","description":"URL of the primary source document."},"label":{"type":["string","null"],"description":"Human-readable source label, e.g. 'OpenAI Pricing'."},"trust_tier":{"type":["number","null"],"description":"Source trust tier (1 = canonical/official, higher = less authoritative)."},"type":{"type":["string","null"],"description":"Source type, e.g. docs, pricing, blog, changelog."}},"required":["url","label","trust_tier","type"],"description":"A primary source reference."},"captured_at":{"type":"string"}},"required":["url","source_quote","source","captured_at"],"description":"A corroborating source for a news item."},"description":"Corroborating sources, each with a quote."}},"required":["slug","title","category","event_date","published_at","importance","reads","status","provider","model","url","body_md","sources"],"description":"A news item with body and corroborating sources."},"Guide":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"},"category":{"type":["string","null"]},"published_at":{"type":["string","null"]},"updated_at":{"type":"string"},"url":{"type":"string"},"body_md":{"type":["string","null"],"description":"Markdown body (detail responses only)."}},"required":["slug","title","category","published_at","updated_at","url"],"description":"An educational guide."},"Attribute":{"type":"object","properties":{"key":{"type":"string","description":"Attribute key."},"label":{"type":"string","description":"Display label."},"category":{"type":"string"},"value_type":{"type":"string","enum":["text","int","num","json","bool","date"],"description":"The stored type of a fact value."},"unit":{"type":["string","null"]},"is_comparable":{"type":"boolean","description":"Whether this attribute appears in comparison matrices."},"higher_is_better":{"type":["boolean","null"]},"sort_order":{"type":"number"}},"required":["key","label","category","value_type","unit","is_comparable","higher_is_better","sort_order"],"description":"An attribute catalog entry."},"Compare":{"type":"object","properties":{"models":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string","description":"Model slug, e.g. 'gpt-5', 'claude-opus-4-6'."},"display_name":{"type":"string"},"family":{"type":["string","null"]},"provider":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"brand_color":{"type":["string","null"]}},"required":["slug","name","brand_color"]},"status":{"type":"string","enum":["draft","current","preview","legacy","deprecated"],"description":"Lifecycle status of a model."},"is_flagship":{"type":"boolean"},"released_at":{"type":["string","null"]},"summary":{"type":["string","null"]},"url":{"type":"string","description":"Canonical ModelDex web page for this model."}},"required":["slug","display_name","family","provider","status","is_flagship","released_at","summary","url"],"description":"A model summary (no facts)."}},"attributes":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Attribute key."},"label":{"type":"string","description":"Display label."},"category":{"type":"string"},"value_type":{"type":"string","enum":["text","int","num","json","bool","date"],"description":"The stored type of a fact value."},"unit":{"type":["string","null"]},"is_comparable":{"type":"boolean","description":"Whether this attribute appears in comparison matrices."},"higher_is_better":{"type":["boolean","null"]},"sort_order":{"type":"number"}},"required":["key","label","category","value_type","unit","is_comparable","higher_is_better","sort_order"],"description":"An attribute catalog entry."}},"rows":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Attribute key."},"label":{"type":"string"},"unit":{"type":["string","null"]},"cells":{"type":"object","additionalProperties":{"type":["object","null"],"properties":{"display":{"type":"string"},"value":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},"source":{"type":["object","null"],"properties":{"url":{"type":"string","description":"URL of the primary source document."},"label":{"type":["string","null"],"description":"Human-readable source label, e.g. 'OpenAI Pricing'."},"trust_tier":{"type":["number","null"],"description":"Source trust tier (1 = canonical/official, higher = less authoritative)."},"type":{"type":["string","null"],"description":"Source type, e.g. docs, pricing, blog, changelog."}},"required":["url","label","trust_tier","type"],"description":"Primary source backing this value, if assigned."},"source_quote":{"type":["string","null"],"description":"Verbatim quote from the source that justifies the value."},"verified_at":{"type":["string","null"],"description":"ISO 8601 timestamp this value was last verified against its source."},"status":{"type":"string","enum":["quarantined","unverified","verified","stale","conflicting","superseded"],"description":"Verification state of a fact. Only `verified` should be treated as settled; `superseded` marks a hidden, retired duplicate (never served on read paths)."}},"required":["display","value","source","source_quote","verified_at","status"],"description":"A single model's value for one comparable attribute."},"description":"Map of model slug → cell (null when the model has no such fact)."}},"required":["key","label","unit","cells"]},"description":"One row per comparable attribute."},"url":{"type":"string","description":"Canonical ModelDex compare page for this selection."}},"required":["models","attributes","rows","url"],"description":"A head-to-head comparison matrix with per-cell provenance."},"Stats":{"type":"object","properties":{"models":{"type":"integer"},"providers":{"type":"integer"},"facts":{"type":"integer"},"news":{"type":"integer"},"last_verified_at":{"type":["string","null"]}},"required":["models","providers","facts","news","last_verified_at"],"description":"Site-wide coverage and freshness stats."},"Me":{"type":"object","properties":{"authenticated":{"type":"boolean","description":"True when a valid API key was presented."},"tier":{"type":"string","description":"'anonymous' for keyless callers, otherwise the key's tier (e.g. 'free')."},"rate_limit_per_min":{"type":"integer","description":"Requests per minute this caller may make."},"key_prefix":{"type":["string","null"],"description":"Display prefix of the key in use (keyed callers only; never the full key)."},"usage":{"type":["object","null"],"properties":{"today":{"type":"integer","description":"Requests recorded for this key today (UTC)."}},"required":["today"],"description":"Usage for the key in use (keyed callers only)."}},"required":["authenticated","tier","rate_limit_per_min","key_prefix","usage"],"description":"The calling identity: auth status, tier, rate limit, and today's usage."},"Meta":{"type":"object","properties":{"api_version":{"type":"string","enum":["v1"]},"generated_at":{"type":"string","description":"ISO 8601 time this response was generated."},"pagination":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"count":{"type":"integer","description":"Items in this page."},"total":{"type":"integer","description":"Total matching items."},"has_more":{"type":"boolean"}},"required":["limit","offset","count","total","has_more"]},"freshness":{"type":"object","properties":{"last_verified_at":{"type":["string","null"]},"verification":{"type":"object","additionalProperties":{"type":"integer"},"description":"Histogram of verification_status across the payload."}},"required":["last_verified_at","verification"]}},"required":["api_version","generated_at"]},"Problem":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}},"parameters":{}},"paths":{"/models":{"get":{"summary":"List models","description":"List AI models with optional filters. Returns summaries (no facts).","tags":["Models"],"parameters":[{"schema":{"type":"string","maxLength":200,"description":"Filter by provider slug."},"required":false,"description":"Filter by provider slug.","name":"provider","in":"query"},{"schema":{"type":"string","enum":["draft","current","preview","legacy","deprecated"],"description":"Lifecycle status of a model."},"required":false,"description":"Lifecycle status of a model.","name":"status","in":"query"},{"schema":{"type":"string","maxLength":200},"required":false,"name":"family","in":"query"},{"schema":{"type":"string","enum":["0","1","true","false"],"description":"Only flagship models when true."},"required":false,"description":"Only flagship models when true.","name":"flagship","in":"query"},{"schema":{"type":"string","maxLength":200,"description":"Case-insensitive substring match on name/slug."},"required":false,"description":"Case-insensitive substring match on name/slug.","name":"q","in":"query"},{"schema":{"type":"string","enum":["name","released","flagship"],"default":"flagship"},"required":false,"name":"sort","in":"query"},{"schema":{"type":"string","enum":["asc","desc"],"description":"Sort direction for name/released; ignored for the flagship default sort."},"required":false,"description":"Sort direction for name/released; ignored for the flagship default sort.","name":"order","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":50,"description":"Max items to return (1–100)."},"required":false,"description":"Max items to return (1–100).","name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0,"description":"Items to skip."},"required":false,"description":"Items to skip.","name":"offset","in":"query"}],"responses":{"200":{"description":"A page of models","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string","description":"Model slug, e.g. 'gpt-5', 'claude-opus-4-6'."},"display_name":{"type":"string"},"family":{"type":["string","null"]},"provider":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"brand_color":{"type":["string","null"]}},"required":["slug","name","brand_color"]},"status":{"type":"string","enum":["draft","current","preview","legacy","deprecated"],"description":"Lifecycle status of a model."},"is_flagship":{"type":"boolean"},"released_at":{"type":["string","null"]},"summary":{"type":["string","null"]},"url":{"type":"string","description":"Canonical ModelDex web page for this model."}},"required":["slug","display_name","family","provider","status","is_flagship","released_at","summary","url"],"description":"A model summary (no facts)."}},"meta":{"type":"object","properties":{"api_version":{"type":"string","enum":["v1"]},"generated_at":{"type":"string","description":"ISO 8601 time this response was generated."},"pagination":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"count":{"type":"integer","description":"Items in this page."},"total":{"type":"integer","description":"Total matching items."},"has_more":{"type":"boolean"}},"required":["limit","offset","count","total","has_more"]},"freshness":{"type":"object","properties":{"last_verified_at":{"type":["string","null"]},"verification":{"type":"object","additionalProperties":{"type":"integer"},"description":"Histogram of verification_status across the payload."}},"required":["last_verified_at","verification"]}},"required":["api_version","generated_at"]}},"required":["data","meta"]}}}},"401":{"description":"Invalid API key (only when a key is sent; anonymous is never an error)","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"429":{"description":"Rate limit exceeded","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"500":{"description":"Internal server error","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}}}}},"/models/{slug}":{"get":{"summary":"Get a model","description":"Full specification for one model, with per-fact provenance.","tags":["Models"],"parameters":[{"schema":{"type":"string"},"required":true,"name":"slug","in":"path"}],"responses":{"200":{"description":"The model","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"slug":{"type":"string","description":"Model slug, e.g. 'gpt-5', 'claude-opus-4-6'."},"display_name":{"type":"string"},"family":{"type":["string","null"]},"provider":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"brand_color":{"type":["string","null"]}},"required":["slug","name","brand_color"]},"status":{"type":"string","enum":["draft","current","preview","legacy","deprecated"],"description":"Lifecycle status of a model."},"is_flagship":{"type":"boolean"},"released_at":{"type":["string","null"]},"summary":{"type":["string","null"]},"url":{"type":"string","description":"Canonical ModelDex web page for this model."},"spec_health":{"type":["string","null"],"enum":["quarantined","unverified","verified","stale","conflicting","superseded",null],"description":"Rollup health of the spec."},"spec_verified_at":{"type":["string","null"]},"last_verified_at":{"type":["string","null"],"description":"Most recent verification across all facts."},"facts":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Attribute key, e.g. 'context_window', 'input_price_per_mtok'."},"label":{"type":"string","description":"Human-readable attribute label from the catalog."},"category":{"type":"string","description":"Attribute category, e.g. capacity, pricing, capability."},"value_type":{"type":"string","enum":["text","int","num","json","bool","date"],"description":"The stored type of a fact value."},"value":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}],"description":"Typed scalar value (null for json-typed facts)."},"json":{"description":"Structured value, present only for json-typed facts."},"unit":{"type":["string","null"],"description":"Unit of the value, e.g. 'tokens', '$', '%'."},"display":{"type":"string","description":"Formatted display string for the value."},"confidence":{"type":["number","null"],"description":"Agent confidence (0–1), if recorded."},"source":{"type":["object","null"],"properties":{"url":{"type":"string","description":"URL of the primary source document."},"label":{"type":["string","null"],"description":"Human-readable source label, e.g. 'OpenAI Pricing'."},"trust_tier":{"type":["number","null"],"description":"Source trust tier (1 = canonical/official, higher = less authoritative)."},"type":{"type":["string","null"],"description":"Source type, e.g. docs, pricing, blog, changelog."}},"required":["url","label","trust_tier","type"],"description":"Primary source backing this value, if assigned."},"source_quote":{"type":["string","null"],"description":"Verbatim quote from the source that justifies the value."},"verified_at":{"type":["string","null"],"description":"ISO 8601 timestamp this value was last verified against its source."},"status":{"type":"string","enum":["quarantined","unverified","verified","stale","conflicting","superseded"],"description":"Verification state of a fact. Only `verified` should be treated as settled; `superseded` marks a hidden, retired duplicate (never served on read paths)."}},"required":["key","label","category","value_type","value","unit","display","confidence","source","source_quote","verified_at","status"],"description":"A single specification fact with full provenance."},"description":"All published facts, each with provenance."},"benchmarks":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Benchmark name, e.g. 'MMLU', 'SWE-bench'."},"score":{"type":["number","null"],"description":"Reported score."},"unit":{"type":["string","null"],"description":"Score unit, e.g. '%'."},"measured_at":{"type":["string","null"],"description":"ISO date the benchmark was measured/reported."},"model":{"type":["object","null"],"properties":{"slug":{"type":"string"},"display_name":{"type":"string"}},"required":["slug","display_name"],"description":"Owning model (present on cross-model benchmark listings)."},"confidence":{"type":["number","null"],"description":"Agent confidence (0–1), if recorded."},"source":{"type":["object","null"],"properties":{"url":{"type":"string","description":"URL of the primary source document."},"label":{"type":["string","null"],"description":"Human-readable source label, e.g. 'OpenAI Pricing'."},"trust_tier":{"type":["number","null"],"description":"Source trust tier (1 = canonical/official, higher = less authoritative)."},"type":{"type":["string","null"],"description":"Source type, e.g. docs, pricing, blog, changelog."}},"required":["url","label","trust_tier","type"],"description":"Primary source backing this value, if assigned."},"source_quote":{"type":["string","null"],"description":"Verbatim quote from the source that justifies the value."},"verified_at":{"type":["string","null"],"description":"ISO 8601 timestamp this value was last verified against its source."},"status":{"type":"string","enum":["quarantined","unverified","verified","stale","conflicting","superseded"],"description":"Verification state of a fact. Only `verified` should be treated as settled; `superseded` marks a hidden, retired duplicate (never served on read paths)."}},"required":["name","score","unit","measured_at","confidence","source","source_quote","verified_at","status"],"description":"A benchmark result with provenance."}},"related_news":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"},"category":{"type":"string","enum":["release","feature","pricing","research","policy","model","product","funding","acquisition","partnership","hardware","infrastructure","open-source","benchmark","safety","legal"],"description":"News item category."},"event_date":{"type":["string","null"],"description":"ISO date the event occurred."},"published_at":{"type":["string","null"]},"importance":{"type":"number","description":"Editorial importance score (higher = more important)."},"reads":{"type":"integer","description":"Count of agent reads (MCP get_news + REST /news/{slug} detail fetches) of this item. Engagement telemetry, NOT a verified fact — has no provenance and is not gate-controlled."},"status":{"type":"string","enum":["quarantined","unverified","verified","stale","conflicting","superseded"],"description":"Verification state of a fact. Only `verified` should be treated as settled; `superseded` marks a hidden, retired duplicate (never served on read paths)."},"provider":{"type":["object","null"],"properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"]},"model":{"type":["object","null"],"properties":{"slug":{"type":"string"},"display_name":{"type":"string"}},"required":["slug","display_name"]},"url":{"type":"string","description":"Canonical ModelDex web page for this news item."},"audio":{"type":["object","null"],"properties":{"url":{"type":"string","description":"Public MP3 URL of the pre-rendered voiceover."},"duration_seconds":{"type":["number","null"],"description":"Clip length in seconds, if known."},"voice":{"type":"string","description":"TTS voice id (audit only)."},"model":{"type":"string","description":"TTS model id (audit only)."}},"required":["url","duration_seconds","voice","model"],"description":"Pre-rendered voiceover of this article, if available. A rendering of already-provenanced text — it carries no source/verified_at of its own (the article's sources remain authoritative)."}},"required":["slug","title","category","event_date","published_at","importance","reads","status","provider","model","url"],"description":"A news item summary."}}},"required":["slug","display_name","family","provider","status","is_flagship","released_at","summary","url","spec_health","spec_verified_at","last_verified_at","facts","benchmarks","related_news"],"description":"A model with its full, source-backed specification."},"meta":{"type":"object","properties":{"api_version":{"type":"string","enum":["v1"]},"generated_at":{"type":"string","description":"ISO 8601 time this response was generated."},"pagination":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"count":{"type":"integer","description":"Items in this page."},"total":{"type":"integer","description":"Total matching items."},"has_more":{"type":"boolean"}},"required":["limit","offset","count","total","has_more"]},"freshness":{"type":"object","properties":{"last_verified_at":{"type":["string","null"]},"verification":{"type":"object","additionalProperties":{"type":"integer"},"description":"Histogram of verification_status across the payload."}},"required":["last_verified_at","verification"]}},"required":["api_version","generated_at"]}},"required":["data","meta"]}}}},"401":{"description":"Invalid API key (only when a key is sent; anonymous is never an error)","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"404":{"description":"Model not found","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"429":{"description":"Rate limit exceeded","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"500":{"description":"Internal server error","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}}}}},"/models/{slug}/facts":{"get":{"summary":"Get a model's facts","description":"Provenance-rich facts for one model, optionally grouped by category.","tags":["Models"],"parameters":[{"schema":{"type":"string"},"required":true,"name":"slug","in":"path"},{"schema":{"type":"string","maxLength":200},"required":false,"name":"category","in":"query"},{"schema":{"type":"string","enum":["quarantined","unverified","verified","stale","conflicting","superseded"],"description":"Verification state of a fact. Only `verified` should be treated as settled; `superseded` marks a hidden, retired duplicate (never served on read paths)."},"required":false,"description":"Verification state of a fact. Only `verified` should be treated as settled; `superseded` marks a hidden, retired duplicate (never served on read paths).","name":"status","in":"query"},{"schema":{"type":"string","enum":["0","1","true","false"],"description":"Group facts by category when true."},"required":false,"description":"Group facts by category when true.","name":"group","in":"query"}],"responses":{"200":{"description":"The facts: a flat array, or category groups when group=true.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Attribute key, e.g. 'context_window', 'input_price_per_mtok'."},"label":{"type":"string","description":"Human-readable attribute label from the catalog."},"category":{"type":"string","description":"Attribute category, e.g. capacity, pricing, capability."},"value_type":{"type":"string","enum":["text","int","num","json","bool","date"],"description":"The stored type of a fact value."},"value":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}],"description":"Typed scalar value (null for json-typed facts)."},"json":{"description":"Structured value, present only for json-typed facts."},"unit":{"type":["string","null"],"description":"Unit of the value, e.g. 'tokens', '$', '%'."},"display":{"type":"string","description":"Formatted display string for the value."},"confidence":{"type":["number","null"],"description":"Agent confidence (0–1), if recorded."},"source":{"type":["object","null"],"properties":{"url":{"type":"string","description":"URL of the primary source document."},"label":{"type":["string","null"],"description":"Human-readable source label, e.g. 'OpenAI Pricing'."},"trust_tier":{"type":["number","null"],"description":"Source trust tier (1 = canonical/official, higher = less authoritative)."},"type":{"type":["string","null"],"description":"Source type, e.g. docs, pricing, blog, changelog."}},"required":["url","label","trust_tier","type"],"description":"Primary source backing this value, if assigned."},"source_quote":{"type":["string","null"],"description":"Verbatim quote from the source that justifies the value."},"verified_at":{"type":["string","null"],"description":"ISO 8601 timestamp this value was last verified against its source."},"status":{"type":"string","enum":["quarantined","unverified","verified","stale","conflicting","superseded"],"description":"Verification state of a fact. Only `verified` should be treated as settled; `superseded` marks a hidden, retired duplicate (never served on read paths)."}},"required":["key","label","category","value_type","value","unit","display","confidence","source","source_quote","verified_at","status"],"description":"A single specification fact with full provenance."}},{"type":"array","items":{"type":"object","properties":{"category":{"type":"string"},"label":{"type":"string"},"facts":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Attribute key, e.g. 'context_window', 'input_price_per_mtok'."},"label":{"type":"string","description":"Human-readable attribute label from the catalog."},"category":{"type":"string","description":"Attribute category, e.g. capacity, pricing, capability."},"value_type":{"type":"string","enum":["text","int","num","json","bool","date"],"description":"The stored type of a fact value."},"value":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}],"description":"Typed scalar value (null for json-typed facts)."},"json":{"description":"Structured value, present only for json-typed facts."},"unit":{"type":["string","null"],"description":"Unit of the value, e.g. 'tokens', '$', '%'."},"display":{"type":"string","description":"Formatted display string for the value."},"confidence":{"type":["number","null"],"description":"Agent confidence (0–1), if recorded."},"source":{"type":["object","null"],"properties":{"url":{"type":"string","description":"URL of the primary source document."},"label":{"type":["string","null"],"description":"Human-readable source label, e.g. 'OpenAI Pricing'."},"trust_tier":{"type":["number","null"],"description":"Source trust tier (1 = canonical/official, higher = less authoritative)."},"type":{"type":["string","null"],"description":"Source type, e.g. docs, pricing, blog, changelog."}},"required":["url","label","trust_tier","type"],"description":"Primary source backing this value, if assigned."},"source_quote":{"type":["string","null"],"description":"Verbatim quote from the source that justifies the value."},"verified_at":{"type":["string","null"],"description":"ISO 8601 timestamp this value was last verified against its source."},"status":{"type":"string","enum":["quarantined","unverified","verified","stale","conflicting","superseded"],"description":"Verification state of a fact. Only `verified` should be treated as settled; `superseded` marks a hidden, retired duplicate (never served on read paths)."}},"required":["key","label","category","value_type","value","unit","display","confidence","source","source_quote","verified_at","status"],"description":"A single specification fact with full provenance."}}},"required":["category","label","facts"]}}]},"meta":{"type":"object","properties":{"api_version":{"type":"string","enum":["v1"]},"generated_at":{"type":"string","description":"ISO 8601 time this response was generated."},"pagination":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"count":{"type":"integer","description":"Items in this page."},"total":{"type":"integer","description":"Total matching items."},"has_more":{"type":"boolean"}},"required":["limit","offset","count","total","has_more"]},"freshness":{"type":"object","properties":{"last_verified_at":{"type":["string","null"]},"verification":{"type":"object","additionalProperties":{"type":"integer"},"description":"Histogram of verification_status across the payload."}},"required":["last_verified_at","verification"]}},"required":["api_version","generated_at"]}},"required":["data","meta"]}}}},"401":{"description":"Invalid API key (only when a key is sent; anonymous is never an error)","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"404":{"description":"Model not found","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"429":{"description":"Rate limit exceeded","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"500":{"description":"Internal server error","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}}}}},"/models/{slug}/benchmarks":{"get":{"summary":"Get a model's benchmarks","tags":["Models","Benchmarks"],"parameters":[{"schema":{"type":"string"},"required":true,"name":"slug","in":"path"}],"responses":{"200":{"description":"The benchmarks","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Benchmark name, e.g. 'MMLU', 'SWE-bench'."},"score":{"type":["number","null"],"description":"Reported score."},"unit":{"type":["string","null"],"description":"Score unit, e.g. '%'."},"measured_at":{"type":["string","null"],"description":"ISO date the benchmark was measured/reported."},"model":{"type":["object","null"],"properties":{"slug":{"type":"string"},"display_name":{"type":"string"}},"required":["slug","display_name"],"description":"Owning model (present on cross-model benchmark listings)."},"confidence":{"type":["number","null"],"description":"Agent confidence (0–1), if recorded."},"source":{"type":["object","null"],"properties":{"url":{"type":"string","description":"URL of the primary source document."},"label":{"type":["string","null"],"description":"Human-readable source label, e.g. 'OpenAI Pricing'."},"trust_tier":{"type":["number","null"],"description":"Source trust tier (1 = canonical/official, higher = less authoritative)."},"type":{"type":["string","null"],"description":"Source type, e.g. docs, pricing, blog, changelog."}},"required":["url","label","trust_tier","type"],"description":"Primary source backing this value, if assigned."},"source_quote":{"type":["string","null"],"description":"Verbatim quote from the source that justifies the value."},"verified_at":{"type":["string","null"],"description":"ISO 8601 timestamp this value was last verified against its source."},"status":{"type":"string","enum":["quarantined","unverified","verified","stale","conflicting","superseded"],"description":"Verification state of a fact. Only `verified` should be treated as settled; `superseded` marks a hidden, retired duplicate (never served on read paths)."}},"required":["name","score","unit","measured_at","confidence","source","source_quote","verified_at","status"],"description":"A benchmark result with provenance."}},"meta":{"type":"object","properties":{"api_version":{"type":"string","enum":["v1"]},"generated_at":{"type":"string","description":"ISO 8601 time this response was generated."},"pagination":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"count":{"type":"integer","description":"Items in this page."},"total":{"type":"integer","description":"Total matching items."},"has_more":{"type":"boolean"}},"required":["limit","offset","count","total","has_more"]},"freshness":{"type":"object","properties":{"last_verified_at":{"type":["string","null"]},"verification":{"type":"object","additionalProperties":{"type":"integer"},"description":"Histogram of verification_status across the payload."}},"required":["last_verified_at","verification"]}},"required":["api_version","generated_at"]}},"required":["data","meta"]}}}},"401":{"description":"Invalid API key (only when a key is sent; anonymous is never an error)","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"404":{"description":"Model not found","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"429":{"description":"Rate limit exceeded","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"500":{"description":"Internal server error","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}}}}},"/providers":{"get":{"summary":"List providers","tags":["Providers"],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":100,"default":50,"description":"Max items to return (1–100)."},"required":false,"description":"Max items to return (1–100).","name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0,"description":"Items to skip."},"required":false,"description":"Items to skip.","name":"offset","in":"query"}],"responses":{"200":{"description":"A page of providers","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string","description":"Provider slug, e.g. 'openai', 'anthropic', 'google', 'xai'."},"name":{"type":"string","description":"Provider display name."},"brand_color":{"type":["string","null"]},"logo_url":{"type":["string","null"]},"homepage_url":{"type":["string","null"]},"docs_url":{"type":["string","null"]},"pricing_url":{"type":["string","null"]},"blog_url":{"type":["string","null"]},"x_handles":{"type":["array","null"],"items":{"type":"string"}},"url":{"type":"string","description":"Canonical ModelDex web page for this provider."}},"required":["slug","name","brand_color","logo_url","homepage_url","docs_url","pricing_url","blog_url","x_handles","url"],"description":"An AI model provider."}},"meta":{"type":"object","properties":{"api_version":{"type":"string","enum":["v1"]},"generated_at":{"type":"string","description":"ISO 8601 time this response was generated."},"pagination":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"count":{"type":"integer","description":"Items in this page."},"total":{"type":"integer","description":"Total matching items."},"has_more":{"type":"boolean"}},"required":["limit","offset","count","total","has_more"]},"freshness":{"type":"object","properties":{"last_verified_at":{"type":["string","null"]},"verification":{"type":"object","additionalProperties":{"type":"integer"},"description":"Histogram of verification_status across the payload."}},"required":["last_verified_at","verification"]}},"required":["api_version","generated_at"]}},"required":["data","meta"]}}}},"401":{"description":"Invalid API key (only when a key is sent; anonymous is never an error)","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"429":{"description":"Rate limit exceeded","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"500":{"description":"Internal server error","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}}}}},"/providers/{slug}":{"get":{"summary":"Get a provider","description":"A provider with its models and recent news.","tags":["Providers"],"parameters":[{"schema":{"type":"string"},"required":true,"name":"slug","in":"path"}],"responses":{"200":{"description":"The provider","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"slug":{"type":"string","description":"Provider slug, e.g. 'openai', 'anthropic', 'google', 'xai'."},"name":{"type":"string","description":"Provider display name."},"brand_color":{"type":["string","null"]},"logo_url":{"type":["string","null"]},"homepage_url":{"type":["string","null"]},"docs_url":{"type":["string","null"]},"pricing_url":{"type":["string","null"]},"blog_url":{"type":["string","null"]},"x_handles":{"type":["array","null"],"items":{"type":"string"}},"url":{"type":"string","description":"Canonical ModelDex web page for this provider."},"models":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string","description":"Model slug, e.g. 'gpt-5', 'claude-opus-4-6'."},"display_name":{"type":"string"},"family":{"type":["string","null"]},"provider":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"brand_color":{"type":["string","null"]}},"required":["slug","name","brand_color"]},"status":{"type":"string","enum":["draft","current","preview","legacy","deprecated"],"description":"Lifecycle status of a model."},"is_flagship":{"type":"boolean"},"released_at":{"type":["string","null"]},"summary":{"type":["string","null"]},"url":{"type":"string","description":"Canonical ModelDex web page for this model."}},"required":["slug","display_name","family","provider","status","is_flagship","released_at","summary","url"],"description":"A model summary (no facts)."}},"news":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"},"category":{"type":"string","enum":["release","feature","pricing","research","policy","model","product","funding","acquisition","partnership","hardware","infrastructure","open-source","benchmark","safety","legal"],"description":"News item category."},"event_date":{"type":["string","null"],"description":"ISO date the event occurred."},"published_at":{"type":["string","null"]},"importance":{"type":"number","description":"Editorial importance score (higher = more important)."},"reads":{"type":"integer","description":"Count of agent reads (MCP get_news + REST /news/{slug} detail fetches) of this item. Engagement telemetry, NOT a verified fact — has no provenance and is not gate-controlled."},"status":{"type":"string","enum":["quarantined","unverified","verified","stale","conflicting","superseded"],"description":"Verification state of a fact. Only `verified` should be treated as settled; `superseded` marks a hidden, retired duplicate (never served on read paths)."},"provider":{"type":["object","null"],"properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"]},"model":{"type":["object","null"],"properties":{"slug":{"type":"string"},"display_name":{"type":"string"}},"required":["slug","display_name"]},"url":{"type":"string","description":"Canonical ModelDex web page for this news item."},"audio":{"type":["object","null"],"properties":{"url":{"type":"string","description":"Public MP3 URL of the pre-rendered voiceover."},"duration_seconds":{"type":["number","null"],"description":"Clip length in seconds, if known."},"voice":{"type":"string","description":"TTS voice id (audit only)."},"model":{"type":"string","description":"TTS model id (audit only)."}},"required":["url","duration_seconds","voice","model"],"description":"Pre-rendered voiceover of this article, if available. A rendering of already-provenanced text — it carries no source/verified_at of its own (the article's sources remain authoritative)."}},"required":["slug","title","category","event_date","published_at","importance","reads","status","provider","model","url"],"description":"A news item summary."}}},"required":["slug","name","brand_color","logo_url","homepage_url","docs_url","pricing_url","blog_url","x_handles","url","models","news"]},"meta":{"type":"object","properties":{"api_version":{"type":"string","enum":["v1"]},"generated_at":{"type":"string","description":"ISO 8601 time this response was generated."},"pagination":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"count":{"type":"integer","description":"Items in this page."},"total":{"type":"integer","description":"Total matching items."},"has_more":{"type":"boolean"}},"required":["limit","offset","count","total","has_more"]},"freshness":{"type":"object","properties":{"last_verified_at":{"type":["string","null"]},"verification":{"type":"object","additionalProperties":{"type":"integer"},"description":"Histogram of verification_status across the payload."}},"required":["last_verified_at","verification"]}},"required":["api_version","generated_at"]}},"required":["data","meta"]}}}},"401":{"description":"Invalid API key (only when a key is sent; anonymous is never an error)","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"404":{"description":"Provider not found","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"429":{"description":"Rate limit exceeded","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"500":{"description":"Internal server error","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}}}}},"/benchmarks":{"get":{"summary":"List benchmarks","tags":["Benchmarks"],"parameters":[{"schema":{"type":"string","maxLength":200,"description":"Filter by benchmark name."},"required":false,"description":"Filter by benchmark name.","name":"benchmark","in":"query"},{"schema":{"type":"string","maxLength":200,"description":"Filter by model slug."},"required":false,"description":"Filter by model slug.","name":"model","in":"query"},{"schema":{"type":"string","maxLength":200,"description":"Filter by provider slug."},"required":false,"description":"Filter by provider slug.","name":"provider","in":"query"},{"schema":{"type":"string","enum":["score","name"],"default":"score"},"required":false,"name":"sort","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":50,"description":"Max items to return (1–100)."},"required":false,"description":"Max items to return (1–100).","name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0,"description":"Items to skip."},"required":false,"description":"Items to skip.","name":"offset","in":"query"}],"responses":{"200":{"description":"A page of benchmarks","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Benchmark name, e.g. 'MMLU', 'SWE-bench'."},"score":{"type":["number","null"],"description":"Reported score."},"unit":{"type":["string","null"],"description":"Score unit, e.g. '%'."},"measured_at":{"type":["string","null"],"description":"ISO date the benchmark was measured/reported."},"model":{"type":["object","null"],"properties":{"slug":{"type":"string"},"display_name":{"type":"string"}},"required":["slug","display_name"],"description":"Owning model (present on cross-model benchmark listings)."},"confidence":{"type":["number","null"],"description":"Agent confidence (0–1), if recorded."},"source":{"type":["object","null"],"properties":{"url":{"type":"string","description":"URL of the primary source document."},"label":{"type":["string","null"],"description":"Human-readable source label, e.g. 'OpenAI Pricing'."},"trust_tier":{"type":["number","null"],"description":"Source trust tier (1 = canonical/official, higher = less authoritative)."},"type":{"type":["string","null"],"description":"Source type, e.g. docs, pricing, blog, changelog."}},"required":["url","label","trust_tier","type"],"description":"Primary source backing this value, if assigned."},"source_quote":{"type":["string","null"],"description":"Verbatim quote from the source that justifies the value."},"verified_at":{"type":["string","null"],"description":"ISO 8601 timestamp this value was last verified against its source."},"status":{"type":"string","enum":["quarantined","unverified","verified","stale","conflicting","superseded"],"description":"Verification state of a fact. Only `verified` should be treated as settled; `superseded` marks a hidden, retired duplicate (never served on read paths)."}},"required":["name","score","unit","measured_at","confidence","source","source_quote","verified_at","status"],"description":"A benchmark result with provenance."}},"meta":{"type":"object","properties":{"api_version":{"type":"string","enum":["v1"]},"generated_at":{"type":"string","description":"ISO 8601 time this response was generated."},"pagination":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"count":{"type":"integer","description":"Items in this page."},"total":{"type":"integer","description":"Total matching items."},"has_more":{"type":"boolean"}},"required":["limit","offset","count","total","has_more"]},"freshness":{"type":"object","properties":{"last_verified_at":{"type":["string","null"]},"verification":{"type":"object","additionalProperties":{"type":"integer"},"description":"Histogram of verification_status across the payload."}},"required":["last_verified_at","verification"]}},"required":["api_version","generated_at"]}},"required":["data","meta"]}}}},"401":{"description":"Invalid API key (only when a key is sent; anonymous is never an error)","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"429":{"description":"Rate limit exceeded","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"500":{"description":"Internal server error","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}}}}},"/news":{"get":{"summary":"List news","tags":["News"],"parameters":[{"schema":{"type":"string","enum":["release","feature","pricing","research","policy","model","product","funding","acquisition","partnership","hardware","infrastructure","open-source","benchmark","safety","legal"],"description":"News item category."},"required":false,"description":"News item category.","name":"category","in":"query"},{"schema":{"type":"string","maxLength":200},"required":false,"name":"provider","in":"query"},{"schema":{"type":"string","maxLength":200},"required":false,"name":"model","in":"query"},{"schema":{"type":"string","enum":["recent","popular"],"default":"recent","description":"Order by recency (default) or by agent read count (popular)."},"required":false,"description":"Order by recency (default) or by agent read count (popular).","name":"sort","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":50,"description":"Max items to return (1–100)."},"required":false,"description":"Max items to return (1–100).","name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0,"description":"Items to skip."},"required":false,"description":"Items to skip.","name":"offset","in":"query"}],"responses":{"200":{"description":"A page of news","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"},"category":{"type":"string","enum":["release","feature","pricing","research","policy","model","product","funding","acquisition","partnership","hardware","infrastructure","open-source","benchmark","safety","legal"],"description":"News item category."},"event_date":{"type":["string","null"],"description":"ISO date the event occurred."},"published_at":{"type":["string","null"]},"importance":{"type":"number","description":"Editorial importance score (higher = more important)."},"reads":{"type":"integer","description":"Count of agent reads (MCP get_news + REST /news/{slug} detail fetches) of this item. Engagement telemetry, NOT a verified fact — has no provenance and is not gate-controlled."},"status":{"type":"string","enum":["quarantined","unverified","verified","stale","conflicting","superseded"],"description":"Verification state of a fact. Only `verified` should be treated as settled; `superseded` marks a hidden, retired duplicate (never served on read paths)."},"provider":{"type":["object","null"],"properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"]},"model":{"type":["object","null"],"properties":{"slug":{"type":"string"},"display_name":{"type":"string"}},"required":["slug","display_name"]},"url":{"type":"string","description":"Canonical ModelDex web page for this news item."},"audio":{"type":["object","null"],"properties":{"url":{"type":"string","description":"Public MP3 URL of the pre-rendered voiceover."},"duration_seconds":{"type":["number","null"],"description":"Clip length in seconds, if known."},"voice":{"type":"string","description":"TTS voice id (audit only)."},"model":{"type":"string","description":"TTS model id (audit only)."}},"required":["url","duration_seconds","voice","model"],"description":"Pre-rendered voiceover of this article, if available. A rendering of already-provenanced text — it carries no source/verified_at of its own (the article's sources remain authoritative)."}},"required":["slug","title","category","event_date","published_at","importance","reads","status","provider","model","url"],"description":"A news item summary."}},"meta":{"type":"object","properties":{"api_version":{"type":"string","enum":["v1"]},"generated_at":{"type":"string","description":"ISO 8601 time this response was generated."},"pagination":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"count":{"type":"integer","description":"Items in this page."},"total":{"type":"integer","description":"Total matching items."},"has_more":{"type":"boolean"}},"required":["limit","offset","count","total","has_more"]},"freshness":{"type":"object","properties":{"last_verified_at":{"type":["string","null"]},"verification":{"type":"object","additionalProperties":{"type":"integer"},"description":"Histogram of verification_status across the payload."}},"required":["last_verified_at","verification"]}},"required":["api_version","generated_at"]}},"required":["data","meta"]}}}},"401":{"description":"Invalid API key (only when a key is sent; anonymous is never an error)","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"429":{"description":"Rate limit exceeded","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"500":{"description":"Internal server error","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}}}}},"/news/{slug}":{"get":{"summary":"Get a news item","description":"A news item with body and corroborating sources.","tags":["News"],"parameters":[{"schema":{"type":"string"},"required":true,"name":"slug","in":"path"}],"responses":{"200":{"description":"The news item","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"},"category":{"type":"string","enum":["release","feature","pricing","research","policy","model","product","funding","acquisition","partnership","hardware","infrastructure","open-source","benchmark","safety","legal"],"description":"News item category."},"event_date":{"type":["string","null"],"description":"ISO date the event occurred."},"published_at":{"type":["string","null"]},"importance":{"type":"number","description":"Editorial importance score (higher = more important)."},"reads":{"type":"integer","description":"Count of agent reads (MCP get_news + REST /news/{slug} detail fetches) of this item. Engagement telemetry, NOT a verified fact — has no provenance and is not gate-controlled."},"status":{"type":"string","enum":["quarantined","unverified","verified","stale","conflicting","superseded"],"description":"Verification state of a fact. Only `verified` should be treated as settled; `superseded` marks a hidden, retired duplicate (never served on read paths)."},"provider":{"type":["object","null"],"properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"]},"model":{"type":["object","null"],"properties":{"slug":{"type":"string"},"display_name":{"type":"string"}},"required":["slug","display_name"]},"url":{"type":"string","description":"Canonical ModelDex web page for this news item."},"audio":{"type":["object","null"],"properties":{"url":{"type":"string","description":"Public MP3 URL of the pre-rendered voiceover."},"duration_seconds":{"type":["number","null"],"description":"Clip length in seconds, if known."},"voice":{"type":"string","description":"TTS voice id (audit only)."},"model":{"type":"string","description":"TTS model id (audit only)."}},"required":["url","duration_seconds","voice","model"],"description":"Pre-rendered voiceover of this article, if available. A rendering of already-provenanced text — it carries no source/verified_at of its own (the article's sources remain authoritative)."},"body_md":{"type":["string","null"],"description":"Markdown body."},"sources":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"source_quote":{"type":["string","null"]},"source":{"type":["object","null"],"properties":{"url":{"type":"string","description":"URL of the primary source document."},"label":{"type":["string","null"],"description":"Human-readable source label, e.g. 'OpenAI Pricing'."},"trust_tier":{"type":["number","null"],"description":"Source trust tier (1 = canonical/official, higher = less authoritative)."},"type":{"type":["string","null"],"description":"Source type, e.g. docs, pricing, blog, changelog."}},"required":["url","label","trust_tier","type"],"description":"A primary source reference."},"captured_at":{"type":"string"}},"required":["url","source_quote","source","captured_at"],"description":"A corroborating source for a news item."},"description":"Corroborating sources, each with a quote."}},"required":["slug","title","category","event_date","published_at","importance","reads","status","provider","model","url","body_md","sources"],"description":"A news item with body and corroborating sources."},"meta":{"type":"object","properties":{"api_version":{"type":"string","enum":["v1"]},"generated_at":{"type":"string","description":"ISO 8601 time this response was generated."},"pagination":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"count":{"type":"integer","description":"Items in this page."},"total":{"type":"integer","description":"Total matching items."},"has_more":{"type":"boolean"}},"required":["limit","offset","count","total","has_more"]},"freshness":{"type":"object","properties":{"last_verified_at":{"type":["string","null"]},"verification":{"type":"object","additionalProperties":{"type":"integer"},"description":"Histogram of verification_status across the payload."}},"required":["last_verified_at","verification"]}},"required":["api_version","generated_at"]}},"required":["data","meta"]}}}},"401":{"description":"Invalid API key (only when a key is sent; anonymous is never an error)","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"404":{"description":"News item not found","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"429":{"description":"Rate limit exceeded","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"500":{"description":"Internal server error","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}}}}},"/guides":{"get":{"summary":"List guides","tags":["Guides"],"parameters":[{"schema":{"type":"string","maxLength":200},"required":false,"name":"category","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":100,"default":50,"description":"Max items to return (1–100)."},"required":false,"description":"Max items to return (1–100).","name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0,"description":"Items to skip."},"required":false,"description":"Items to skip.","name":"offset","in":"query"}],"responses":{"200":{"description":"A page of guides","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"},"category":{"type":["string","null"]},"published_at":{"type":["string","null"]},"updated_at":{"type":"string"},"url":{"type":"string"},"body_md":{"type":["string","null"],"description":"Markdown body (detail responses only)."}},"required":["slug","title","category","published_at","updated_at","url"],"description":"An educational guide."}},"meta":{"type":"object","properties":{"api_version":{"type":"string","enum":["v1"]},"generated_at":{"type":"string","description":"ISO 8601 time this response was generated."},"pagination":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"count":{"type":"integer","description":"Items in this page."},"total":{"type":"integer","description":"Total matching items."},"has_more":{"type":"boolean"}},"required":["limit","offset","count","total","has_more"]},"freshness":{"type":"object","properties":{"last_verified_at":{"type":["string","null"]},"verification":{"type":"object","additionalProperties":{"type":"integer"},"description":"Histogram of verification_status across the payload."}},"required":["last_verified_at","verification"]}},"required":["api_version","generated_at"]}},"required":["data","meta"]}}}},"401":{"description":"Invalid API key (only when a key is sent; anonymous is never an error)","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"429":{"description":"Rate limit exceeded","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"500":{"description":"Internal server error","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}}}}},"/guides/{slug}":{"get":{"summary":"Get a guide","tags":["Guides"],"parameters":[{"schema":{"type":"string"},"required":true,"name":"slug","in":"path"}],"responses":{"200":{"description":"The guide","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"},"category":{"type":["string","null"]},"published_at":{"type":["string","null"]},"updated_at":{"type":"string"},"url":{"type":"string"},"body_md":{"type":["string","null"],"description":"Markdown body (detail responses only)."}},"required":["slug","title","category","published_at","updated_at","url"],"description":"An educational guide."},"meta":{"type":"object","properties":{"api_version":{"type":"string","enum":["v1"]},"generated_at":{"type":"string","description":"ISO 8601 time this response was generated."},"pagination":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"count":{"type":"integer","description":"Items in this page."},"total":{"type":"integer","description":"Total matching items."},"has_more":{"type":"boolean"}},"required":["limit","offset","count","total","has_more"]},"freshness":{"type":"object","properties":{"last_verified_at":{"type":["string","null"]},"verification":{"type":"object","additionalProperties":{"type":"integer"},"description":"Histogram of verification_status across the payload."}},"required":["last_verified_at","verification"]}},"required":["api_version","generated_at"]}},"required":["data","meta"]}}}},"401":{"description":"Invalid API key (only when a key is sent; anonymous is never an error)","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"404":{"description":"Guide not found","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"429":{"description":"Rate limit exceeded","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"500":{"description":"Internal server error","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}}}}},"/attributes":{"get":{"summary":"List attribute catalog","description":"The attribute catalog that drives comparability and render order.","tags":["Attributes"],"parameters":[{"schema":{"type":"string","maxLength":200},"required":false,"name":"category","in":"query"},{"schema":{"type":"string","enum":["0","1","true","false"],"description":"Only comparable attributes when true."},"required":false,"description":"Only comparable attributes when true.","name":"comparable","in":"query"}],"responses":{"200":{"description":"The catalog","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Attribute key."},"label":{"type":"string","description":"Display label."},"category":{"type":"string"},"value_type":{"type":"string","enum":["text","int","num","json","bool","date"],"description":"The stored type of a fact value."},"unit":{"type":["string","null"]},"is_comparable":{"type":"boolean","description":"Whether this attribute appears in comparison matrices."},"higher_is_better":{"type":["boolean","null"]},"sort_order":{"type":"number"}},"required":["key","label","category","value_type","unit","is_comparable","higher_is_better","sort_order"],"description":"An attribute catalog entry."}},"meta":{"type":"object","properties":{"api_version":{"type":"string","enum":["v1"]},"generated_at":{"type":"string","description":"ISO 8601 time this response was generated."},"pagination":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"count":{"type":"integer","description":"Items in this page."},"total":{"type":"integer","description":"Total matching items."},"has_more":{"type":"boolean"}},"required":["limit","offset","count","total","has_more"]},"freshness":{"type":"object","properties":{"last_verified_at":{"type":["string","null"]},"verification":{"type":"object","additionalProperties":{"type":"integer"},"description":"Histogram of verification_status across the payload."}},"required":["last_verified_at","verification"]}},"required":["api_version","generated_at"]}},"required":["data","meta"]}}}},"401":{"description":"Invalid API key (only when a key is sent; anonymous is never an error)","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"429":{"description":"Rate limit exceeded","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"500":{"description":"Internal server error","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}}}}},"/compare":{"get":{"summary":"Compare models","description":"Head-to-head comparison matrix over comparable attributes, with per-cell provenance.","tags":["Compare"],"parameters":[{"schema":{"type":"string","maxLength":400,"description":"Comma-separated list of 2–6 model slugs."},"required":true,"description":"Comma-separated list of 2–6 model slugs.","name":"models","in":"query"},{"schema":{"type":"string","maxLength":1000,"description":"Optional comma-separated attribute keys to limit the matrix."},"required":false,"description":"Optional comma-separated attribute keys to limit the matrix.","name":"attributes","in":"query"}],"responses":{"200":{"description":"The comparison matrix","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"models":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string","description":"Model slug, e.g. 'gpt-5', 'claude-opus-4-6'."},"display_name":{"type":"string"},"family":{"type":["string","null"]},"provider":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"brand_color":{"type":["string","null"]}},"required":["slug","name","brand_color"]},"status":{"type":"string","enum":["draft","current","preview","legacy","deprecated"],"description":"Lifecycle status of a model."},"is_flagship":{"type":"boolean"},"released_at":{"type":["string","null"]},"summary":{"type":["string","null"]},"url":{"type":"string","description":"Canonical ModelDex web page for this model."}},"required":["slug","display_name","family","provider","status","is_flagship","released_at","summary","url"],"description":"A model summary (no facts)."}},"attributes":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Attribute key."},"label":{"type":"string","description":"Display label."},"category":{"type":"string"},"value_type":{"type":"string","enum":["text","int","num","json","bool","date"],"description":"The stored type of a fact value."},"unit":{"type":["string","null"]},"is_comparable":{"type":"boolean","description":"Whether this attribute appears in comparison matrices."},"higher_is_better":{"type":["boolean","null"]},"sort_order":{"type":"number"}},"required":["key","label","category","value_type","unit","is_comparable","higher_is_better","sort_order"],"description":"An attribute catalog entry."}},"rows":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Attribute key."},"label":{"type":"string"},"unit":{"type":["string","null"]},"cells":{"type":"object","additionalProperties":{"type":["object","null"],"properties":{"display":{"type":"string"},"value":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},"source":{"type":["object","null"],"properties":{"url":{"type":"string","description":"URL of the primary source document."},"label":{"type":["string","null"],"description":"Human-readable source label, e.g. 'OpenAI Pricing'."},"trust_tier":{"type":["number","null"],"description":"Source trust tier (1 = canonical/official, higher = less authoritative)."},"type":{"type":["string","null"],"description":"Source type, e.g. docs, pricing, blog, changelog."}},"required":["url","label","trust_tier","type"],"description":"Primary source backing this value, if assigned."},"source_quote":{"type":["string","null"],"description":"Verbatim quote from the source that justifies the value."},"verified_at":{"type":["string","null"],"description":"ISO 8601 timestamp this value was last verified against its source."},"status":{"type":"string","enum":["quarantined","unverified","verified","stale","conflicting","superseded"],"description":"Verification state of a fact. Only `verified` should be treated as settled; `superseded` marks a hidden, retired duplicate (never served on read paths)."}},"required":["display","value","source","source_quote","verified_at","status"],"description":"A single model's value for one comparable attribute."},"description":"Map of model slug → cell (null when the model has no such fact)."}},"required":["key","label","unit","cells"]},"description":"One row per comparable attribute."},"url":{"type":"string","description":"Canonical ModelDex compare page for this selection."}},"required":["models","attributes","rows","url"],"description":"A head-to-head comparison matrix with per-cell provenance."},"meta":{"type":"object","properties":{"api_version":{"type":"string","enum":["v1"]},"generated_at":{"type":"string","description":"ISO 8601 time this response was generated."},"pagination":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"count":{"type":"integer","description":"Items in this page."},"total":{"type":"integer","description":"Total matching items."},"has_more":{"type":"boolean"}},"required":["limit","offset","count","total","has_more"]},"freshness":{"type":"object","properties":{"last_verified_at":{"type":["string","null"]},"verification":{"type":"object","additionalProperties":{"type":"integer"},"description":"Histogram of verification_status across the payload."}},"required":["last_verified_at","verification"]}},"required":["api_version","generated_at"]}},"required":["data","meta"]}}}},"400":{"description":"Invalid model selection","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"401":{"description":"Invalid API key (only when a key is sent; anonymous is never an error)","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"429":{"description":"Rate limit exceeded","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"500":{"description":"Internal server error","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}}}}},"/search":{"get":{"summary":"Search","description":"Search models, providers, news, and guides.","tags":["Search"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":200,"description":"Search query (required)."},"required":true,"description":"Search query (required).","name":"q","in":"query"},{"schema":{"type":"string","enum":["model","provider","news","guide"]},"required":false,"name":"type","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":50,"default":20},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"Search results","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["model","provider","news","guide"]},"slug":{"type":"string"},"title":{"type":"string"},"subtitle":{"type":"string"},"href":{"type":"string"},"url":{"type":"string"}},"required":["type","slug","title","subtitle","href","url"]}},"meta":{"type":"object","properties":{"api_version":{"type":"string","enum":["v1"]},"generated_at":{"type":"string","description":"ISO 8601 time this response was generated."},"pagination":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"count":{"type":"integer","description":"Items in this page."},"total":{"type":"integer","description":"Total matching items."},"has_more":{"type":"boolean"}},"required":["limit","offset","count","total","has_more"]},"freshness":{"type":"object","properties":{"last_verified_at":{"type":["string","null"]},"verification":{"type":"object","additionalProperties":{"type":"integer"},"description":"Histogram of verification_status across the payload."}},"required":["last_verified_at","verification"]}},"required":["api_version","generated_at"]}},"required":["data","meta"]}}}},"401":{"description":"Invalid API key (only when a key is sent; anonymous is never an error)","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"429":{"description":"Rate limit exceeded","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"500":{"description":"Internal server error","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}}}}},"/stats":{"get":{"summary":"Site stats","tags":["Meta"],"responses":{"200":{"description":"Coverage + freshness stats","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"models":{"type":"integer"},"providers":{"type":"integer"},"facts":{"type":"integer"},"news":{"type":"integer"},"last_verified_at":{"type":["string","null"]}},"required":["models","providers","facts","news","last_verified_at"],"description":"Site-wide coverage and freshness stats."},"meta":{"type":"object","properties":{"api_version":{"type":"string","enum":["v1"]},"generated_at":{"type":"string","description":"ISO 8601 time this response was generated."},"pagination":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"count":{"type":"integer","description":"Items in this page."},"total":{"type":"integer","description":"Total matching items."},"has_more":{"type":"boolean"}},"required":["limit","offset","count","total","has_more"]},"freshness":{"type":"object","properties":{"last_verified_at":{"type":["string","null"]},"verification":{"type":"object","additionalProperties":{"type":"integer"},"description":"Histogram of verification_status across the payload."}},"required":["last_verified_at","verification"]}},"required":["api_version","generated_at"]}},"required":["data","meta"]}}}},"401":{"description":"Invalid API key (only when a key is sent; anonymous is never an error)","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"429":{"description":"Rate limit exceeded","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"500":{"description":"Internal server error","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}}}}},"/health":{"get":{"summary":"Health check","tags":["Meta"],"responses":{"200":{"description":"Service is healthy","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["ok"]},"api_version":{"type":"string","enum":["v1"]}},"required":["status","api_version"]}}}}}}},"/me":{"get":{"summary":"Caller identity (whoami)","description":"Reports auth status, tier, rate limit, and today's usage for the calling key (or the anonymous defaults). Lets a client confirm a key is recognized without provoking a 429.","tags":["Meta"],"security":[{"ApiKeyAuth":[]},{}],"responses":{"200":{"description":"The caller identity","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"authenticated":{"type":"boolean","description":"True when a valid API key was presented."},"tier":{"type":"string","description":"'anonymous' for keyless callers, otherwise the key's tier (e.g. 'free')."},"rate_limit_per_min":{"type":"integer","description":"Requests per minute this caller may make."},"key_prefix":{"type":["string","null"],"description":"Display prefix of the key in use (keyed callers only; never the full key)."},"usage":{"type":["object","null"],"properties":{"today":{"type":"integer","description":"Requests recorded for this key today (UTC)."}},"required":["today"],"description":"Usage for the key in use (keyed callers only)."}},"required":["authenticated","tier","rate_limit_per_min","key_prefix","usage"],"description":"The calling identity: auth status, tier, rate limit, and today's usage."},"meta":{"type":"object","properties":{"api_version":{"type":"string","enum":["v1"]},"generated_at":{"type":"string","description":"ISO 8601 time this response was generated."},"pagination":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"count":{"type":"integer","description":"Items in this page."},"total":{"type":"integer","description":"Total matching items."},"has_more":{"type":"boolean"}},"required":["limit","offset","count","total","has_more"]},"freshness":{"type":"object","properties":{"last_verified_at":{"type":["string","null"]},"verification":{"type":"object","additionalProperties":{"type":"integer"},"description":"Histogram of verification_status across the payload."}},"required":["last_verified_at","verification"]}},"required":["api_version","generated_at"]}},"required":["data","meta"]}}}},"401":{"description":"Invalid API key (only when a key is sent; anonymous is never an error)","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"429":{"description":"Rate limit exceeded","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}},"500":{"description":"Internal server error","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string","description":"Request path that produced the problem."},"errors":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"]},"description":"Field-level validation errors (validation-error only)."}},"required":["type","title","status"],"description":"An RFC 9457 problem document."}}}}}}}},"webhooks":{}}