{"openapi":"3.1.0","info":{"title":"Tokrate Public API","version":"0.1.0","description":"Public v1 API contract for external API consumers."},"servers":[{"url":"/api/public/v1"}],"tags":[{"name":"Status"}],"paths":{"/status":{"get":{"tags":["Status"],"summary":"Public API status","security":[{"apiKeyAuth":[]}],"responses":{"200":{"description":"Public API status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicStatusResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/board":{"get":{"tags":["Public"],"summary":"Precomputed community performance snapshot","description":"All board windows, history buckets, recent summaries and adjacent-period comparisons align to T, the latest complete five-minute UTC boundary, and cover [T-W,T). Comparisons use [T-W,T) vs [T-2W,T), contributor medians, and independent publication floors; a zero previous median has no percentage delta. The prior period is null when outside 30-day retention. Standard publication requires 10 installs and 50 eligible turns per metric. Admin-enabled early-data mode uses 1 install and 1 turn; slowdown detection always keeps its strict 10-contributor/50-turn gates and independent seven-day evidence window. Signals are included for both metrics whenever a cohort is published, even if one metric misses its selected-window floor. Missing recent buckets are explicit and their public counts are null. Geography is unknown and measurement quality is not assessed. Percentiles use contributor medians. Min/max fields are extrema across eligible individual turns in the selected window, not model capability limits. Model/provider/client/parser/metric/explicit-effort cohorts remain separate, so primary and subagent turns are never merged; missing effort is unknown and speed tier is not controlled. Usage categories have the same independent contributor/turn floors and include all reported primary turns, even those below throughput eligibility; subagent turns are excluded from usage. Whole-turn throughput includes tools and waiting, not streaming speed. dataAsOf and metric signal timestamps describe observation freshness; state distinguishes stale processing.","parameters":[{"in":"query","name":"window","schema":{"type":"string","enum":["15m","24h","7d","30d"],"default":"15m"}}],"responses":{"200":{"description":"Cached aggregate snapshot","content":{"application/json":{"schema":{"type":"object","required":["schemaVersion","generatedAt","dataAsOf","collectionEnabled","metadata","usage","state","window","cohorts","alerts","methodology"],"properties":{"schemaVersion":{"const":1},"generatedAt":{"type":["string","null"],"format":"date-time"},"dataAsOf":{"type":["string","null"],"format":"date-time"},"collectionEnabled":{"const":true},"metadata":{"type":"object","required":["geography","qualityMeasured"],"properties":{"geography":{"const":"unknown"},"qualityMeasured":{"const":false}}},"usage":{"type":"object","description":"Raw reported-turn usage, not population/market share. Each dimension applies its publication floor independently. Primary turns only: Claude Code subagent turns are separate cohorts and never counted. At most 12 named categories plus Other published categories. Missing effort is unknown, counts overlap across categories, no contributor identifiers.","required":["scope","shareBasis","minimumContributors","minimumTurns","clients","models","providers","reasoningEfforts","clientVersions","appVersions"],"properties":{"scope":{"const":"reported_primary_turns"},"shareBasis":{"const":"displayed_turns_per_dimension"},"minimumContributors":{"type":"integer","minimum":1},"minimumTurns":{"type":"integer","minimum":1},"clients":{"type":"array","maxItems":13,"items":{"type":"object","required":["value","turns","contributors","sharePercent"],"properties":{"value":{"type":"string"},"turns":{"type":"integer","minimum":1},"contributors":{"type":"integer","minimum":1},"sharePercent":{"type":"number","minimum":0,"maximum":100}}}},"models":{"type":"array","maxItems":13,"items":{"type":"object","required":["value","turns","contributors","sharePercent"],"properties":{"value":{"type":"string"},"turns":{"type":"integer","minimum":1},"contributors":{"type":"integer","minimum":1},"sharePercent":{"type":"number","minimum":0,"maximum":100}}}},"providers":{"type":"array","maxItems":13,"items":{"type":"object","required":["value","turns","contributors","sharePercent"],"properties":{"value":{"type":"string"},"turns":{"type":"integer","minimum":1},"contributors":{"type":"integer","minimum":1},"sharePercent":{"type":"number","minimum":0,"maximum":100}}}},"reasoningEfforts":{"type":"array","maxItems":13,"items":{"type":"object","required":["value","turns","contributors","sharePercent"],"properties":{"value":{"type":"string"},"turns":{"type":"integer","minimum":1},"contributors":{"type":"integer","minimum":1},"sharePercent":{"type":"number","minimum":0,"maximum":100}}}},"clientVersions":{"type":"array","maxItems":13,"items":{"type":"object","required":["value","turns","contributors","sharePercent"],"properties":{"value":{"type":"string"},"turns":{"type":"integer","minimum":1},"contributors":{"type":"integer","minimum":1},"sharePercent":{"type":"number","minimum":0,"maximum":100}}}},"appVersions":{"type":"array","maxItems":13,"items":{"type":"object","required":["value","turns","contributors","sharePercent"],"properties":{"value":{"type":"string"},"turns":{"type":"integer","minimum":1},"contributors":{"type":"integer","minimum":1},"sharePercent":{"type":"number","minimum":0,"maximum":100}}}}}},"state":{"type":"string","enum":["insufficient_data","available","stale"]},"window":{"type":"string","enum":["15m","24h","7d","30d"]},"cohorts":{"type":"array","items":{"type":"object","required":["id","client","reasoningEffort","model","provider","clientVersion","parserVersion","metricVersion","sourceKind","serviceMode","contributors","turns","throughputContributors","throughputTurns","ttftContributors","ttftTurns","observedAt","history","medianThroughput","minThroughput","maxThroughput","p10Throughput","medianTtftMs","minTtftMs","maxTtftMs","p95TtftMs","recent","comparison","signals"],"properties":{"id":{"type":"string"},"client":{"type":"string"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max","ultra","unknown"]},"model":{"type":"string"},"provider":{"type":"string"},"clientVersion":{"type":"string"},"parserVersion":{"type":"string"},"metricVersion":{"type":"string"},"sourceKind":{"type":"string","enum":["primary","subagent"],"description":"Primary turns and Claude Code subagent turns are separate cohorts and are never merged."},"serviceMode":{"const":"unknown"},"contributors":{"type":"integer"},"turns":{"type":"integer"},"throughputContributors":{"type":["integer","null"]},"throughputTurns":{"type":["integer","null"]},"ttftContributors":{"type":["integer","null"]},"ttftTurns":{"type":["integer","null"]},"observedAt":{"type":"string","format":"date-time"},"history":{"type":"array","maxItems":30,"description":"Independent publication floors per time bucket and metric. Missing/suppressed values and coverage are null; do not connect across gaps.","items":{"type":"object","required":["at","medianThroughput","medianTtftMs","throughputTurns","throughputContributors","ttftTurns","ttftContributors"],"properties":{"at":{"type":"string","format":"date-time"},"medianThroughput":{"type":["number","null"]},"medianTtftMs":{"type":["number","null"]},"throughputTurns":{"type":["integer","null"]},"throughputContributors":{"type":["integer","null"]},"ttftTurns":{"type":["integer","null"]},"ttftContributors":{"type":["integer","null"]}}}},"medianThroughput":{"type":["number","null"]},"p10Throughput":{"type":["number","null"]},"minThroughput":{"type":["number","null"],"description":"Lowest eligible observed turn throughput in the selected window"},"maxThroughput":{"type":["number","null"],"description":"Highest eligible observed turn throughput in the selected window"},"medianTtftMs":{"type":["number","null"]},"p95TtftMs":{"type":["number","null"]},"minTtftMs":{"type":["number","null"]},"maxTtftMs":{"type":["number","null"]},"recent":{"type":"object","required":["throughput","ttft"],"properties":{"throughput":{"type":"object","required":["startAt","endAt","median","contributors","turns"],"properties":{"startAt":{"type":"string","format":"date-time"},"endAt":{"type":"string","format":"date-time"},"median":{"type":["number","null"]},"contributors":{"type":["integer","null"],"minimum":1},"turns":{"type":["integer","null"],"minimum":1}}},"ttft":{"type":"object","required":["startAt","endAt","median","contributors","turns"],"properties":{"startAt":{"type":"string","format":"date-time"},"endAt":{"type":"string","format":"date-time"},"median":{"type":["number","null"]},"contributors":{"type":["integer","null"],"minimum":1},"turns":{"type":["integer","null"],"minimum":1}}}},"description":"Contributor-weighted summaries for the latest complete 15 minutes; fields remain null when that period misses the publication floor."},"comparison":{"type":"object","required":["throughput","ttft"],"properties":{"throughput":{"type":"object","required":["method","current","previous","changePercent","availability"],"properties":{"method":{"const":"adjacent_period_contributor_medians_v1"},"current":{"type":"object","required":["startAt","endAt","median","contributors","turns"],"properties":{"startAt":{"type":"string","format":"date-time"},"endAt":{"type":"string","format":"date-time"},"median":{"type":["number","null"]},"contributors":{"type":["integer","null"],"minimum":1},"turns":{"type":["integer","null"],"minimum":1}}},"previous":{"anyOf":[{"type":"object","required":["startAt","endAt","median","contributors","turns"],"properties":{"startAt":{"type":"string","format":"date-time"},"endAt":{"type":"string","format":"date-time"},"median":{"type":["number","null"]},"contributors":{"type":["integer","null"],"minimum":1},"turns":{"type":["integer","null"],"minimum":1}}},{"type":"null"}]},"changePercent":{"type":["number","null"]},"availability":{"type":"string","enum":["available","insufficient_current","insufficient_previous","outside_retention"]}}},"ttft":{"type":"object","required":["method","current","previous","changePercent","availability"],"properties":{"method":{"const":"adjacent_period_contributor_medians_v1"},"current":{"type":"object","required":["startAt","endAt","median","contributors","turns"],"properties":{"startAt":{"type":"string","format":"date-time"},"endAt":{"type":"string","format":"date-time"},"median":{"type":["number","null"]},"contributors":{"type":["integer","null"],"minimum":1},"turns":{"type":["integer","null"],"minimum":1}}},"previous":{"anyOf":[{"type":"object","required":["startAt","endAt","median","contributors","turns"],"properties":{"startAt":{"type":"string","format":"date-time"},"endAt":{"type":"string","format":"date-time"},"median":{"type":["number","null"]},"contributors":{"type":["integer","null"],"minimum":1},"turns":{"type":["integer","null"],"minimum":1}}},{"type":"null"}]},"changePercent":{"type":["number","null"]},"availability":{"type":"string","enum":["available","insufficient_current","insufficient_previous","outside_retention"]}}}},"description":"Aligned adjacent periods ending at the latest complete five-minute boundary. A zero previous median has null changePercent and insufficient_previous availability; previous is null outside the 30-day retention period."},"signals":{"type":"object","required":["throughput","ttft"],"properties":{"throughput":{"type":"object","required":["detectorVersion","metric","state","reason","baselineBuckets","baselineDays","baselineHours","baselineMedian","changePercent","lastObservedAt","recentContributors","recentTurns","recentBuckets"],"properties":{"detectorVersion":{"type":"string"},"metric":{"type":"string","enum":["throughput","ttft"]},"state":{"type":"string","enum":["within_usual_range","possible_slowdown","sustained_slowdown","recovering","insufficient_data","stale"]},"reason":{"type":"string","enum":["insufficient_baseline","insufficient_recent_coverage","no_recent_observations","unknown_identity","within_usual_range","possible_slowdown","sustained_slowdown","recovering"]},"baselineBuckets":{"type":"integer","minimum":0},"baselineDays":{"type":"integer","minimum":0},"baselineHours":{"type":"integer","minimum":0},"baselineMedian":{"type":["number","null"]},"changePercent":{"type":["number","null"]},"lastObservedAt":{"type":["string","null"],"format":"date-time"},"recentContributors":{"type":["integer","null"],"minimum":1},"recentTurns":{"type":["integer","null"],"minimum":1},"recentBuckets":{"type":"array","minItems":6,"maxItems":6,"description":"Six chronological complete five-minute buckets. Contributor and turn counts are null when that individual bucket misses the independent public floor.","items":{"type":"object","required":["at","qualified","contributors","turns","median"],"properties":{"at":{"type":"string","format":"date-time"},"qualified":{"type":"boolean"},"contributors":{"type":["integer","null"],"minimum":1},"turns":{"type":["integer","null"],"minimum":1},"median":{"type":["number","null"]}}}}}},"ttft":{"type":"object","required":["detectorVersion","metric","state","reason","baselineBuckets","baselineDays","baselineHours","baselineMedian","changePercent","lastObservedAt","recentContributors","recentTurns","recentBuckets"],"properties":{"detectorVersion":{"type":"string"},"metric":{"type":"string","enum":["throughput","ttft"]},"state":{"type":"string","enum":["within_usual_range","possible_slowdown","sustained_slowdown","recovering","insufficient_data","stale"]},"reason":{"type":"string","enum":["insufficient_baseline","insufficient_recent_coverage","no_recent_observations","unknown_identity","within_usual_range","possible_slowdown","sustained_slowdown","recovering"]},"baselineBuckets":{"type":"integer","minimum":0},"baselineDays":{"type":"integer","minimum":0},"baselineHours":{"type":"integer","minimum":0},"baselineMedian":{"type":["number","null"]},"changePercent":{"type":["number","null"]},"lastObservedAt":{"type":["string","null"],"format":"date-time"},"recentContributors":{"type":["integer","null"],"minimum":1},"recentTurns":{"type":["integer","null"],"minimum":1},"recentBuckets":{"type":"array","minItems":6,"maxItems":6,"description":"Six chronological complete five-minute buckets. Contributor and turn counts are null when that individual bucket misses the independent public floor.","items":{"type":"object","required":["at","qualified","contributors","turns","median"],"properties":{"at":{"type":"string","format":"date-time"},"qualified":{"type":"boolean"},"contributors":{"type":["integer","null"],"minimum":1},"turns":{"type":["integer","null"],"minimum":1},"median":{"type":["number","null"]}}}}}}},"description":"Strict 10-contributor/50-turn slowdown detector evidence over its independent seven-day window. Signals remain present when that metric is unqualified in the selected board window."}}}},"alerts":{"type":"array","items":{"type":"object","required":["cohortId","model","provider","client","reasoningEffort","detectorVersion","metric","state","reason","baselineBuckets","baselineDays","baselineHours","baselineMedian","changePercent","lastObservedAt","recentContributors","recentTurns","recentBuckets","contributors","turns"],"properties":{"cohortId":{"type":"string"},"model":{"type":"string"},"provider":{"type":"string"},"client":{"type":"string"},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max","ultra","unknown"]},"detectorVersion":{"type":"string"},"metric":{"type":"string","enum":["throughput","ttft"]},"state":{"type":"string","enum":["possible_slowdown","sustained_slowdown","recovering"]},"reason":{"type":"string","enum":["possible_slowdown","sustained_slowdown","recovering"]},"baselineBuckets":{"type":"integer"},"baselineDays":{"type":"integer"},"baselineHours":{"type":"integer"},"baselineMedian":{"type":"number"},"changePercent":{"type":["number","null"]},"lastObservedAt":{"type":["string","null"],"format":"date-time"},"recentContributors":{"type":["integer","null"]},"recentTurns":{"type":["integer","null"]},"recentBuckets":{"type":"array","items":{"type":"object","required":["at","qualified","contributors","turns","median"],"properties":{"at":{"type":"string","format":"date-time"},"qualified":{"type":"boolean"},"contributors":{"type":["integer","null"],"minimum":1},"turns":{"type":["integer","null"],"minimum":1},"median":{"type":["number","null"]}}}},"contributors":{"type":["integer","null"]},"turns":{"type":["integer","null"]}}}},"methodology":{"type":"object","required":["statistics","publicationMode","minimumContributors","minimumTurns","observationBucketMinutes","streamingSpeedAvailable","source","detectorVersion","signalRecentBuckets","signalBaselineWindowDays","signalMinimumBaselineBuckets","signalMinimumBaselineDays"],"properties":{"statistics":{"const":"percentiles across contributor medians"},"publicationMode":{"type":"string","enum":["standard","early_data"]},"minimumContributors":{"type":"integer","minimum":1},"minimumTurns":{"type":"integer","minimum":1},"observationBucketMinutes":{"const":5},"streamingSpeedAvailable":{"const":false},"source":{"const":"self-reported community observations"},"detectorVersion":{"type":"string"},"signalRecentBuckets":{"const":6},"signalBaselineWindowDays":{"const":7},"signalMinimumBaselineBuckets":{"const":100},"signalMinimumBaselineDays":{"const":3}}}}}}}},"304":{"description":"Snapshot unchanged"},"400":{"description":"Invalid window","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/samples":{"post":{"tags":["Public"],"summary":"Submit signed derived samples","description":"Sign exact UTF-8 JSON body bytes with Ed25519. Canonical base64 headers carry raw public key (32 bytes) and signature (64 bytes). Signing proves install continuity, not measurement authenticity. sentAt must be within five minutes. observedAt uses five-minute UTC buckets within the last 24 hours. contributor/sampleId deduplicates retries. Samples expire after 30 days. Throughput above 10,000 output tokens per whole-turn second is rejected. Live ingestion requires a consent-enabled app version (0.1.11, 0.1.12, 0.1.13); older allowlisted schema versions receive HTTP 426. Claude Code subagent samples (metric claude-observed-subagent-turn-v1, sourceKind subagent) require parser claude-transcript-v2 with app version 0.1.12 or claude-transcript-v3 with 0.1.13; subagent source kind is rejected for every other definition.","parameters":[{"in":"header","name":"X-Tokrate-Key","required":true,"schema":{"type":"string"}},{"in":"header","name":"X-Tokrate-Signature","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["schemaVersion","sentAt","samples"],"properties":{"schemaVersion":{"const":1},"sentAt":{"type":"string","format":"date-time"},"samples":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"object","additionalProperties":false,"required":["sampleId","observedAt","client","clientVersion","appVersion","parserVersion","metricVersion","model","provider","sourceKind","outputTokens","reasoningOutputTokens","durationMs","ttftMs"],"properties":{"sampleId":{"type":"string","format":"uuid"},"observedAt":{"type":"string","format":"date-time"},"client":{"enum":["codex","claude-code","grok-build"]},"clientVersion":{"type":"string","pattern":"^[a-zA-Z0-9.+_-]{1,40}$"},"appVersion":{"type":"string","enum":["0.1.0","0.1.1","0.1.2","0.1.3","0.1.4","0.1.5","0.1.6","0.1.7","0.1.8","0.1.9","0.1.10","0.1.11","0.1.12","0.1.13"]},"parserVersion":{"enum":["codex-rollout-v1","claude-transcript-v1","claude-transcript-v2","claude-transcript-v3","grok-session-v1"]},"metricVersion":{"enum":["turn-v1","claude-observed-turn-v1","claude-observed-subagent-turn-v1","grok-observed-work-turn-v1"]},"model":{"type":"string","pattern":"^[a-zA-Z0-9._-]{1,80}$"},"provider":{"type":"string","enum":["openai","anthropic","xai","unknown","amazon-bedrock","google-vertex"],"description":"Inference provider. amazon-bedrock and google-vertex are accepted only for client claude-code with parser claude-transcript-v3 and are attributed from explicit response evidence (message id prefixes); otherwise unknown."},"sourceKind":{"type":"string","enum":["primary","subagent","unknown"]},"outputTokens":{"type":"integer","minimum":0,"maximum":10000000},"reasoningEffort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh","max","ultra","unknown"],"description":"Explicit coding-tool turn reasoning setting; absent legacy fields are unknown. No inference from token counts."},"reasoningOutputTokens":{"type":["integer","null"],"minimum":0,"maximum":10000000},"durationMs":{"type":"number","minimum":1,"maximum":86400000},"ttftMs":{"type":["number","null"],"minimum":0}},"oneOf":[{"properties":{"client":{"const":"codex"},"parserVersion":{"const":"codex-rollout-v1"},"metricVersion":{"const":"turn-v1"},"sourceKind":{"enum":["primary","unknown"]},"provider":{"enum":["openai","anthropic","xai","unknown"]}}},{"properties":{"client":{"const":"claude-code"},"parserVersion":{"const":"claude-transcript-v1"},"metricVersion":{"const":"claude-observed-turn-v1"},"sourceKind":{"const":"primary"},"appVersion":{"enum":["0.1.9","0.1.10","0.1.11"]},"provider":{"enum":["openai","anthropic","xai","unknown"]},"ttftMs":{"type":"null"}}},{"properties":{"client":{"const":"claude-code"},"parserVersion":{"const":"claude-transcript-v2"},"metricVersion":{"const":"claude-observed-turn-v1"},"sourceKind":{"const":"primary"},"appVersion":{"const":"0.1.12"},"provider":{"enum":["openai","anthropic","xai","unknown"]},"ttftMs":{"type":"null"}}},{"properties":{"client":{"const":"claude-code"},"parserVersion":{"const":"claude-transcript-v2"},"metricVersion":{"const":"claude-observed-subagent-turn-v1"},"sourceKind":{"const":"subagent"},"appVersion":{"const":"0.1.12"},"provider":{"enum":["openai","anthropic","xai","unknown"]},"ttftMs":{"type":"null"}}},{"properties":{"client":{"const":"claude-code"},"parserVersion":{"const":"claude-transcript-v3"},"metricVersion":{"const":"claude-observed-turn-v1"},"sourceKind":{"const":"primary"},"appVersion":{"const":"0.1.13"},"ttftMs":{"type":"null"}}},{"properties":{"client":{"const":"claude-code"},"parserVersion":{"const":"claude-transcript-v3"},"metricVersion":{"const":"claude-observed-subagent-turn-v1"},"sourceKind":{"const":"subagent"},"appVersion":{"const":"0.1.13"},"ttftMs":{"type":"null"}}},{"properties":{"client":{"const":"grok-build"},"parserVersion":{"const":"grok-session-v1"},"metricVersion":{"const":"grok-observed-work-turn-v1"},"sourceKind":{"enum":["primary","unknown"]},"appVersion":{"enum":["0.1.9","0.1.10","0.1.11","0.1.12","0.1.13"]},"provider":{"enum":["openai","anthropic","xai","unknown"]},"ttftMs":{"type":"null"}}}]}}}}}}},"responses":{"202":{"description":"Accepted; counts distinguish new inserts and duplicate submissions","content":{"application/json":{"schema":{"type":"object","required":["schemaVersion","accepted","duplicates"],"properties":{"schemaVersion":{"const":1},"accepted":{"type":"integer","minimum":0},"duplicates":{"type":"integer","minimum":0}}}}}},"400":{"description":"Invalid schema or observation window","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid signature","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"Body exceeds 64 KiB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"415":{"description":"JSON required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"426":{"description":"Consent-enabled client upgrade required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/og/board.png":{"get":{"tags":["Public"],"summary":"Default social preview image","description":"1200x630 PNG with the Tokrate brand and the top three models by median turn speed in each measurement group over the last 24 hours, from the current public snapshot. Used as the default og:image of tokrate.dev pages. Whole-turn speed includes tools and waiting; it is not streaming speed.","responses":{"200":{"description":"PNG image","headers":{"Cache-Control":{"description":"public, max-age=300","schema":{"type":"string"}}},"content":{"image/png":{"schema":{"type":"string","format":"binary"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Image renderer or snapshot unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/og/models/{model}.png":{"get":{"tags":["Public"],"summary":"Social preview image for one model","description":"1200x630 PNG with the model name, its median whole-turn speed over the last 24 hours, measurement group, contributor and turn counts, and an Early data chip when the snapshot publishes in early-data mode. The cohort is the model's most-observed published one. Only models in the current public snapshot render; any other name returns 404.","parameters":[{"in":"path","name":"model","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{1,80}$"}}],"responses":{"200":{"description":"PNG image","headers":{"Cache-Control":{"description":"public, max-age=300","schema":{"type":"string"}}},"content":{"image/png":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"Unsafe model name or model not in the current public snapshot","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Image renderer or snapshot unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}},"components":{"securitySchemes":{"apiKeyAuth":{"type":"apiKey","in":"header","name":"x-api-key"}},"responses":{"Unauthorized":{"description":"Authentication required or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"schemas":{"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"PublicStatusResponse":{"type":"object","required":["status","apiVersion","authenticated","time"],"properties":{"status":{"type":"string","enum":["ok"]},"apiVersion":{"type":"string","enum":["v1"]},"authenticated":{"type":"boolean"},"apiKeyId":{"type":"string"},"time":{"type":"string","format":"date-time"}}}}}}