{"openapi":"3.1.0","info":{"title":"CastCheck API","version":"1.0.1","summary":"Station-level verification of raw weather-model 2 m temperature forecasts.","description":"Static JSON on a CDN: no keys, no rate limit, CORS open, cached one hour. MAE, bias, RMSE and interval bounds are in degrees Celsius; the HTML site displays the same differences in degrees Fahrenheit. Groups with fewer than 30 scored days are published but never ranked.","license":{"name":"CC BY 4.0","url":"https://creativecommons.org/licenses/by/4.0/"},"contact":{"url":"https://castcheck.zifanzhang.com"}},"servers":[{"url":"https://castcheck.zifanzhang.com/api/v1"}],"paths":{"/scores/latest.json":{"get":{"summary":"Every published aggregate, compact {columns, rows} encoding.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Table"}}}}}}},"/scores/leaderboard.json":{"get":{"summary":"The station_id=ALL slice of the scores table.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Table"}}}}}}},"/leaderboard/{view}.json":{"get":{"summary":"One pre-ranked leaderboard per site view, e.g. 90d-00z-bilinear-tmax.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Leaderboard"}}}}},"parameters":[{"name":"view","in":"path","required":true,"schema":{"type":"string"},"example":"90d-00z-bilinear-tmax","description":"{window}-{init}z-{method}-{variable}"}]}},"/scores/{station}/{model}/{lead}.json":{"get":{"summary":"One permanent-link card: every window/init/method/variable for that combination, its pairwise comparisons and the daily error series.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Card"}}}}},"parameters":[{"name":"station","in":"path","required":true,"schema":{"type":"string"},"example":"ALL","description":"ICAO identifier, or ALL for the aggregate"},{"name":"model","in":"path","required":true,"schema":{"type":"string"},"example":"gfs","description":"model_id from models.json"},{"name":"lead","in":"path","required":true,"schema":{"type":"string"},"example":"1","description":"lead day"}]}},"/pairwise/latest.json":{"get":{"summary":"Paired model-vs-model MAE differences on common days.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Table"}}}}}}},"/stations.json":{"get":{"summary":"Station metadata.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/models.json":{"get":{"summary":"Model registry.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/status.json":{"get":{"summary":"Pipeline completeness report.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}}},"components":{"schemas":{"Envelope":{"type":"object","required":["schema_version","generated_at","data_through","window","units","method","truth"],"properties":{"schema_version":{"type":"string"},"methodology_version":{"type":"string"},"castcheck_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"data_through":{"type":["string","null"],"format":"date"},"next_update":{"type":"string","format":"date-time"},"window":{"type":"object","properties":{"type":{"type":"string","examples":["30d","90d","365d","all"]},"days":{"type":["integer","null"]},"start":{"type":["string","null"],"format":"date"},"end":{"type":["string","null"],"format":"date"}}},"units":{"type":"object","additionalProperties":{"type":"string"}},"method":{"type":"object"},"truth":{"type":"object"},"license":{"type":"string"}}},"Table":{"allOf":[{"$ref":"#/components/schemas/Envelope"},{"type":"object","properties":{"columns":{"type":"array","items":{"type":"string"}},"rows":{"type":"array","items":{"type":"array"}}}}]},"Leaderboard":{"allOf":[{"$ref":"#/components/schemas/Envelope"},{"type":"object","properties":{"view":{"type":"object"},"results":{"type":"array","items":{"type":"object","properties":{"lead_day":{"type":"integer"},"rank":{"type":["integer","null"]},"ranked":{"type":"boolean"},"model_id":{"type":"string"},"n":{"type":"integer"},"mae":{"type":["number","null"]},"mae_ci_low":{"type":["number","null"]},"mae_ci_high":{"type":["number","null"]},"bias":{"type":["number","null"]},"permalink":{"type":"string"}}}}}}]},"Card":{"allOf":[{"$ref":"#/components/schemas/Envelope"},{"type":"object","properties":{"station_id":{"type":"string"},"model_id":{"type":"string"},"lead_day":{"type":"integer"},"permalink":{"type":"string"},"scores":{"$ref":"#/components/schemas/Table"},"pairwise":{"$ref":"#/components/schemas/Table"},"series":{"type":"array","items":{"type":"object"}}}}]}}}}