GET /v1/verification/station/{station}$0.02dailytier: datacache 3600sEngine B — Weather Intelligence
Single-station audit view of our forecast verification: daily MAE, signed bias, raw-NWS baseline, and sample counts for every lead time and method segment at one ICAO station, over a selectable window up to 90 days. Scored against that station's real NWS observations; model versions reported separately, never mixed.
| Name | In | Type | Required | Notes |
|---|---|---|---|---|
station | path | string | yes | ICAO observation station, e.g. KNYC |
days | query | integer | no | (default: 30) |
lead_hours | query | integer | no |
curl "https://x402-factory.com/v1/verification/station/KNYC?days=30"
New York (Central Park) station history.
Worked example from deterministic fixture data (note meta.data_mode); live responses report their own sources and data_mode.
{
"data": {
"rows": [
{
"date": "2026-07-13",
"station": "KNYC",
"region": "northeast",
"variable": "temp",
"lead_hours": 1,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.2,
"bias_ours": 0.2,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-13",
"station": "KNYC",
"region": "northeast",
"variable": "wind",
"lead_hours": 1,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.4,
"bias_ours": -0.4,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-13",
"station": "KNYC",
"region": "northeast",
"variable": "temp",
"lead_hours": 3,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.9,
"bias_ours": -0.9,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-13",
"station": "KNYC",
"region": "northeast",
"variable": "wind",
"lead_hours": 3,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 1.4,
"bias_ours": 1.4,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-13",
"station": "KNYC",
"region": "northeast",
"variable": "temp",
"lead_hours": 6,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.8,
"bias_ours": -0.8,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-13",
"station": "KNYC",
"region": "northeast",
"variable": "wind",
"lead_hours": 6,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 2.1,
"bias_ours": -2.1,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-14",
"station": "KNYC",
"region": "northeast",
"variable": "temp",
"lead_hours": 1,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.2,
"bias_ours": 0.2,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-14",
"station": "KNYC",
"region": "northeast",
"variable": "wind",
"lead_hours": 1,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.8,
"bias_ours": -0.8,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-14",
"station": "KNYC",
"region": "northeast",
"variable": "temp",
"lead_hours": 3,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.1,
"bias_ours": -0.1,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-14",
"station": "KNYC",
"region": "northeast",
"variable": "wind",
"lead_hours": 3,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 1.5,
"bias_ours": 1.5,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-14",
"station": "KNYC",
"region": "northeast",
"variable": "temp",
"lead_hours": 6,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.7,
"bias_ours": -0.7,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-14",
"station": "KNYC",
"region": "northeast",
"variable": "wind",
"lead_hours": 6,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.6,
"bias_ours": -0.6,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-14",
"station": "KNYC",
"region": "northeast",
"variable": "temp",
"lead_hours": 24,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 1.8,
"bias_ours": 1.8,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-14",
"station": "KNYC",
"region": "northeast",
"variable": "wind",
"lead_hours": 24,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.8,
"bias_ours": -0.8,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-15",
"station": "KNYC",
"region": "northeast",
"variable": "temp",
"lead_hours": 1,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.6,
"bias_ours": -0.6,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-15",
"station": "KNYC",
"region": "northeast",
"variable": "wind",
"lead_hours": 1,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 3.5,
"bias_ours": 3.5,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-15",
"station": "KNYC",
"region": "northeast",
"variable": "temp",
"lead_hours": 3,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.1,
"bias_ours": -0.1,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-15",
"station": "KNYC",
"region": "northeast",
"variable": "wind",
"lead_hours": 3,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 1.2,
"bias_ours": 1.2,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-15",
"station": "KNYC",
"region": "northeast",
"variable": "temp",
"lead_hours": 6,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.1,
"bias_ours": 0.1,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-15",
"station": "KNYC",
"region": "northeast",
"variable": "wind",
"lead_hours": 6,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 2.6,
"bias_ours": -2.6,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-15",
"station": "KNYC",
"region": "northeast",
"variable": "temp",
"lead_hours": 24,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.2,
"bias_ours": -0.2,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-15",
"station": "KNYC",
"region": "northeast",
"variable": "wind",
"lead_hours": 24,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.6,
"bias_ours": 0.6,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-15",
"station": "KNYC",
"region": "northeast",
"variable": "temp",
"lead_hours": 48,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.2,
"bias_ours": -0.2,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-15",
"station": "KNYC",
"region": "northeast",
"variable": "wind",
"lead_hours": 48,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.6,
"bias_ours": 0.6,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-16",
"station": "KNYC",
"region": "northeast",
"variable": "temp",
"lead_hours": 1,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 1.3,
"bias_ours": 1.3,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-16",
"station": "KNYC",
"region": "northeast",
"variable": "wind",
"lead_hours": 1,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.4,
"bias_ours": 0.4,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-16",
"station": "KNYC",
"region": "northeast",
"variable": "temp",
"lead_hours": 3,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.1,
"bias_ours": 0.1,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-16",
"station": "KNYC",
"region": "northeast",
"variable": "wind",
"lead_hours": 3,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 1.4,
"bias_ours": 1.4,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-16",
"station": "KNYC",
"region": "northeast",
"variable": "temp",
"lead_hours": 6,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.4,
"bias_ours": 0.4,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-16",
"station": "KNYC",
"region": "northeast",
"variable": "wind",
"lead_hours": 6,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 1,
"bias_ours": 1,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-16",
"station": "KNYC",
"region": "northeast",
"variable": "temp",
"lead_hours": 24,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.1,
"bias_ours": -0.1,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-16",
"station": "KNYC",
"region": "northeast",
"variable": "wind",
"lead_hours": 24,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.8,
"bias_ours": -0.8,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-16",
"station": "KNYC",
"region": "northeast",
"variable": "temp",
"lead_hours": 48,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.1,
"bias_ours": -0.1,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-16",
"station": "KNYC",
"region": "northeast",
"variable": "wind",
"lead_hours": 48,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.8,
"bias_ours": -0.8,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-16",
"station": "KNYC",
"region": "northeast",
"variable": "temp",
"lead_hours": 72,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.1,
"bias_ours": -0.1,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-16",
"station": "KNYC",
"region": "northeast",
"variable": "wind",
"lead_hours": 72,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.8,
"bias_ours": -0.8,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-17",
"station": "KNYC",
"region": "northeast",
"variable": "temp",
"lead_hours": 1,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.6,
"bias_ours": 0.6,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-17",
"station": "KNYC",
"region": "northeast",
"variable": "wind",
"lead_hours": 1,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.4,
"bias_ours": 0.4,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-17",
"station": "KNYC",
"region": "northeast",
"variable": "temp",
"lead_hours": 3,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 1.6,
"bias_ours": 1.6,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-17",
"station": "KNYC",
"region": "northeast",
"variable": "wind",
"lead_hours": 3,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.7,
"bias_ours": 0.7,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-17",
"station": "KNYC",
"region": "northeast",
"variable": "temp",
"lead_hours": 6,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0,
"bias_ours": 0,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-17",
"station": "KNYC",
"region": "northeast",
"variable": "wind",
"lead_hours": 6,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 1.2,
"bias_ours": 1.2,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-17",
"station": "KNYC",
"region": "northeast",
"variable": "temp",
"lead_hours": 24,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.5,
"bias_ours": -0.5,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-17",
"station": "KNYC",
"region": "northeast",
"variable": "wind",
"lead_hours": 24,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 1,
"bias_ours": -1,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-17",
"station": "KNYC",
"region": "northeast",
"variable": "temp",
"lead_hours": 48,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.5,
"bias_ours": -0.5,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-17",
"station": "KNYC",
"region": "northeast",
"variable": "wind",
"lead_hours": 48,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 1,
"bias_ours": -1,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-17",
"station": "KNYC",
"region": "northeast",
"variable": "temp",
"lead_hours": 72,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.6,
"bias_ours": -0.6,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-17",
"station": "KNYC",
"region": "northeast",
"variable": "wind",
"lead_hours": 72,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 1,
"bias_ours": -1,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-18",
"station": "KNYC",
"region": "northeast",
"variable": "temp",
"lead_hours": 24,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 0.9,
"bias_ours": 0.9,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-18",
"station": "KNYC",
"region": "northeast",
"variable": "wind",
"lead_hours": 24,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 1.3,
"bias_ours": -1.3,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-18",
"station": "KNYC",
"region": "northeast",
"variable": "temp",
"lead_hours": 48,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 1.1,
"bias_ours": 1.1,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-18",
"station": "KNYC",
"region": "northeast",
"variable": "wind",
"lead_hours": 48,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 1.3,
"bias_ours": -1.3,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-18",
"station": "KNYC",
"region": "northeast",
"variable": "temp",
"lead_hours": 72,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 1.2,
"bias_ours": 1.2,
"mae_nws": null,
"n": 1,
"n_nws": 0
},
{
"date": "2026-07-18",
"station": "KNYC",
"region": "northeast",
"variable": "wind",
"lead_hours": 72,
"segment": "stub",
"model_version": "stub-model",
"mae_ours": 1.3,
"bias_ours": -1.3,
"mae_nws": null,
"n": 1,
"n_nws": 0
}
],
"window_days": 30,
"methodology": "MAE over stored forecast/actual pairs for the verification set (25 cities + 20 airports, rolling 90d), grouped by variable × region × lead × segment × model_version. Rows recorded before 2026-09-08 were backfilled to model_version 'runway-oracle-v4' by timestamp (exact: the v4.1 wrapper deployed after the partition shipped); read skill claims within one version only. Forecasts are recorded at issue time; actuals are real NWS station observations attached after valid time. `segment` is the model's own method label: 'nws-blend' = temperature at the 8 covered stations where the proprietary nowcast informs the series; 'nws-gridpoint' = NWS passthrough (uncovered temperature, and wind everywhere) — there mae_ours equals NWS by construction, so mae_nws is only reported for the blend segment, where it is the raw un-blended NWS gridpoint scored against the same observations. Rows labeled 'stub'/'stub-era' predate the real model (2026-08-13) and verify the deterministic placeholder. historical_oos is offline fit history, kept separate from live pairs.",
"free_summary": "/v1/verification/scores"
},
"meta": {
"endpoint": "/v1/verification/station/{station}",
"version": "1.0.0",
"generated_at": "2026-10-05T10:15:58.182Z",
"freshness": "daily",
"sources": [
"stub-model",
"nws"
],
"request_id": "req_00000000",
"docs": "https://x402-factory.com/docs/weather.verification-station",
"data_mode": "live"
}
}data payload){
"type": "object",
"properties": {
"rows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"date": {
"type": "string",
"description": "UTC day the forecasts were valid for"
},
"station": {
"type": "string",
"description": "ICAO observation station that scored the rows ('unmatched' where none)"
},
"region": {
"type": "string"
},
"variable": {
"type": "string"
},
"lead_hours": {
"type": "number"
},
"segment": {
"type": "string",
"description": "What produced the forecast: 'nws-blend' (proprietary nowcast at covered stations) or 'nws-gridpoint' (NWS passthrough)"
},
"model_version": {
"type": "string"
},
"mae_ours": {
"type": "number",
"description": "Mean absolute error of our served forecast, °C"
},
"bias_ours": {
"type": "number",
"description": "Mean signed error (forecast − actual), °C — the direction of the miss"
},
"mae_nws": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Raw-NWS baseline MAE on the same rows; null outside the blend segment"
},
"n": {
"type": "number"
},
"n_nws": {
"type": "number"
}
},
"required": [
"date",
"station",
"region",
"variable",
"lead_hours",
"segment",
"model_version",
"mae_ours",
"bias_ours",
"mae_nws",
"n",
"n_nws"
],
"additionalProperties": false
}
},
"window_days": {
"type": "number"
},
"methodology": {
"type": "string"
},
"free_summary": {
"type": "string"
}
},
"required": [
"rows",
"window_days",
"methodology",
"free_summary"
],
"additionalProperties": false
}
The platform wraps every payload in an envelope: { "data": …, "meta": { endpoint, version, generated_at, freshness, sources, request_id, docs, data_mode } }.
Unpaid requests receive 402 with payment requirements (accepts). Pay $0.02 in USDC on Base per call via an X-PAYMENT header — see docs.x402.org. With PAYMENT_MODE=disabled (local dev) the endpoint is open.
| Status | Code | Meaning |
|---|---|---|
| 400 | INVALID_PARAMS | Input failed validation; message lists the offending fields. |
| 404 | NOT_FOUND | No matching resource; suggestion may point to a sibling endpoint. |
| 410 | RESOLVED | Market/event settled; body includes a resolution summary. |
| 503 | STALE_DATA | Upstream feed down; stale data is never silently served beyond 2× cache TTL. |
| 500 | INTERNAL | Our bug. The request_id helps us find it. |