GET /v1/verification/scoresfreedailytier: freecache 86400sEngine B — Weather Intelligence
Transparent skill scores from stored forecast/actual pairs over a rolling 90-day window, scored against real NWS station observations and segmented by what produced each forecast (proprietary-blend temperature at covered stations vs NWS passthrough). Live-accumulated pairs are reported separately from the model's offline historical_oos fit metrics — the two are never mixed. Free forever so you can judge the model before paying for forecasts.
| Name | In | Type | Required | Notes |
|---|---|---|---|---|
variable | query | string | no | — one of "temp", "wind" |
region | query | string | no | |
lead_hours | query | integer | no |
curl "https://x402-factory.com/v1/verification/scores"
{
"data": {
"scores": [
{
"variable": "temp",
"region": "midwest",
"lead_hours": 24,
"segment": "stub",
"mae_ours": 0.73,
"n_samples": 40,
"window_days": 90
},
{
"variable": "temp",
"region": "midwest",
"lead_hours": 48,
"segment": "stub",
"mae_ours": 0.81,
"n_samples": 32,
"window_days": 90
},
{
"variable": "temp",
"region": "midwest",
"lead_hours": 72,
"segment": "stub",
"mae_ours": 0.89,
"n_samples": 24,
"window_days": 90
},
{
"variable": "temp",
"region": "mountain",
"lead_hours": 24,
"segment": "stub",
"mae_ours": 0.83,
"n_samples": 15,
"window_days": 90
},
{
"variable": "temp",
"region": "mountain",
"lead_hours": 48,
"segment": "stub",
"mae_ours": 0.92,
"n_samples": 12,
"window_days": 90
},
{
"variable": "temp",
"region": "mountain",
"lead_hours": 72,
"segment": "stub",
"mae_ours": 1.04,
"n_samples": 9,
"window_days": 90
},
{
"variable": "temp",
"region": "northeast",
"lead_hours": 24,
"segment": "stub",
"mae_ours": 0.8,
"n_samples": 35,
"window_days": 90
},
{
"variable": "temp",
"region": "northeast",
"lead_hours": 48,
"segment": "stub",
"mae_ours": 0.82,
"n_samples": 28,
"window_days": 90
},
{
"variable": "temp",
"region": "northeast",
"lead_hours": 72,
"segment": "stub",
"mae_ours": 0.84,
"n_samples": 21,
"window_days": 90
},
{
"variable": "temp",
"region": "northwest",
"lead_hours": 24,
"segment": "stub",
"mae_ours": 0.85,
"n_samples": 15,
"window_days": 90
},
{
"variable": "temp",
"region": "northwest",
"lead_hours": 48,
"segment": "stub",
"mae_ours": 0.95,
"n_samples": 12,
"window_days": 90
},
{
"variable": "temp",
"region": "northwest",
"lead_hours": 72,
"segment": "stub",
"mae_ours": 0.89,
"n_samples": 9,
"window_days": 90
},
{
"variable": "temp",
"region": "south",
"lead_hours": 24,
"segment": "stub",
"mae_ours": 0.75,
"n_samples": 35,
"window_days": 90
},
{
"variable": "temp",
"region": "south",
"lead_hours": 48,
"segment": "stub",
"mae_ours": 0.95,
"n_samples": 28,
"window_days": 90
},
{
"variable": "temp",
"region": "south",
"lead_hours": 72,
"segment": "stub",
"mae_ours": 0.97,
"n_samples": 21,
"window_days": 90
},
{
"variable": "temp",
"region": "southeast",
"lead_hours": 24,
"segment": "stub",
"mae_ours": 0.92,
"n_samples": 40,
"window_days": 90
},
{
"variable": "temp",
"region": "southeast",
"lead_hours": 48,
"segment": "stub",
"mae_ours": 1.03,
"n_samples": 32,
"window_days": 90
},
{
"variable": "temp",
"region": "southeast",
"lead_hours": 72,
"segment": "stub",
"mae_ours": 1.25,
"n_samples": 24,
"window_days": 90
},
{
"variable": "temp",
"region": "southwest",
"lead_hours": 24,
"segment": "stub",
"mae_ours": 0.67,
"n_samples": 20,
"window_days": 90
},
{
"variable": "temp",
"region": "southwest",
"lead_hours": 48,
"segment": "stub",
"mae_ours": 0.79,
"n_samples": 16,
"window_days": 90
},
{
"variable": "temp",
"region": "southwest",
"lead_hours": 72,
"segment": "stub",
"mae_ours": 1,
"n_samples": 12,
"window_days": 90
},
{
"variable": "temp",
"region": "west",
"lead_hours": 24,
"segment": "stub",
"mae_ours": 1,
"n_samples": 25,
"window_days": 90
},
{
"variable": "temp",
"region": "west",
"lead_hours": 48,
"segment": "stub",
"mae_ours": 1.18,
"n_samples": 20,
"window_days": 90
},
{
"variable": "temp",
"region": "west",
"lead_hours": 72,
"segment": "stub",
"mae_ours": 1.39,
"n_samples": 15,
"window_days": 90
},
{
"variable": "wind",
"region": "midwest",
"lead_hours": 24,
"segment": "stub",
"mae_ours": 1.36,
"n_samples": 40,
"window_days": 90
},
{
"variable": "wind",
"region": "midwest",
"lead_hours": 48,
"segment": "stub",
"mae_ours": 1.43,
"n_samples": 32,
"window_days": 90
},
{
"variable": "wind",
"region": "midwest",
"lead_hours": 72,
"segment": "stub",
"mae_ours": 1.49,
"n_samples": 24,
"window_days": 90
},
{
"variable": "wind",
"region": "mountain",
"lead_hours": 24,
"segment": "stub",
"mae_ours": 0.89,
"n_samples": 15,
"window_days": 90
},
{
"variable": "wind",
"region": "mountain",
"lead_hours": 48,
"segment": "stub",
"mae_ours": 0.86,
"n_samples": 12,
"window_days": 90
},
{
"variable": "wind",
"region": "mountain",
"lead_hours": 72,
"segment": "stub",
"mae_ours": 0.83,
"n_samples": 9,
"window_days": 90
},
{
"variable": "wind",
"region": "northeast",
"lead_hours": 24,
"segment": "stub",
"mae_ours": 1.21,
"n_samples": 35,
"window_days": 90
},
{
"variable": "wind",
"region": "northeast",
"lead_hours": 48,
"segment": "stub",
"mae_ours": 1.15,
"n_samples": 28,
"window_days": 90
},
{
"variable": "wind",
"region": "northeast",
"lead_hours": 72,
"segment": "stub",
"mae_ours": 1.11,
"n_samples": 21,
"window_days": 90
},
{
"variable": "wind",
"region": "northwest",
"lead_hours": 24,
"segment": "stub",
"mae_ours": 1.37,
"n_samples": 15,
"window_days": 90
},
{
"variable": "wind",
"region": "northwest",
"lead_hours": 48,
"segment": "stub",
"mae_ours": 1.57,
"n_samples": 12,
"window_days": 90
},
{
"variable": "wind",
"region": "northwest",
"lead_hours": 72,
"segment": "stub",
"mae_ours": 1.68,
"n_samples": 9,
"window_days": 90
},
{
"variable": "wind",
"region": "south",
"lead_hours": 24,
"segment": "stub",
"mae_ours": 1.38,
"n_samples": 35,
"window_days": 90
},
{
"variable": "wind",
"region": "south",
"lead_hours": 48,
"segment": "stub",
"mae_ours": 1.5,
"n_samples": 28,
"window_days": 90
},
{
"variable": "wind",
"region": "south",
"lead_hours": 72,
"segment": "stub",
"mae_ours": 1.6,
"n_samples": 21,
"window_days": 90
},
{
"variable": "wind",
"region": "southeast",
"lead_hours": 24,
"segment": "stub",
"mae_ours": 1.26,
"n_samples": 40,
"window_days": 90
},
{
"variable": "wind",
"region": "southeast",
"lead_hours": 48,
"segment": "stub",
"mae_ours": 1.32,
"n_samples": 32,
"window_days": 90
},
{
"variable": "wind",
"region": "southeast",
"lead_hours": 72,
"segment": "stub",
"mae_ours": 1.46,
"n_samples": 24,
"window_days": 90
},
{
"variable": "wind",
"region": "southwest",
"lead_hours": 24,
"segment": "stub",
"mae_ours": 1.31,
"n_samples": 20,
"window_days": 90
},
{
"variable": "wind",
"region": "southwest",
"lead_hours": 48,
"segment": "stub",
"mae_ours": 1.29,
"n_samples": 16,
"window_days": 90
},
{
"variable": "wind",
"region": "southwest",
"lead_hours": 72,
"segment": "stub",
"mae_ours": 1.42,
"n_samples": 12,
"window_days": 90
},
{
"variable": "wind",
"region": "west",
"lead_hours": 24,
"segment": "stub",
"mae_ours": 1.24,
"n_samples": 25,
"window_days": 90
},
{
"variable": "wind",
"region": "west",
"lead_hours": 48,
"segment": "stub",
"mae_ours": 1.35,
"n_samples": 20,
"window_days": 90
},
{
"variable": "wind",
"region": "west",
"lead_hours": 72,
"segment": "stub",
"mae_ours": 1.49,
"n_samples": 15,
"window_days": 90
}
],
"historical_oos": {
"fit_date": "2026-08-03",
"note": "Offline out-of-sample metrics for the proprietary temperature nowcast, computed in the model repo on the fit's one-month holdout (°F, nowcast horizon, memory mode). NOT comparable to the live 24/48/72h lead scores above — reported separately so accumulated live pairs are never mixed with offline history.",
"stations": [
{
"station": "ORD",
"oos_rmse_f": 1.03,
"oos_mae_f": 0.78,
"oos_bias_f": 0.32,
"n_samples": 764
},
{
"station": "MDW",
"oos_rmse_f": 0.94,
"oos_mae_f": 0.69,
"oos_bias_f": 0.1,
"n_samples": 764
},
{
"station": "LAX",
"oos_rmse_f": 0.99,
"oos_mae_f": 0.77,
"oos_bias_f": 0.2,
"n_samples": 756
},
{
"station": "NYC",
"oos_rmse_f": 1.19,
"oos_mae_f": 0.79,
"oos_bias_f": 0.17,
"n_samples": 768
},
{
"station": "SEA",
"oos_rmse_f": 1.24,
"oos_mae_f": 0.93,
"oos_bias_f": -0.31,
"n_samples": 764
},
{
"station": "MIA",
"oos_rmse_f": 1.16,
"oos_mae_f": 0.86,
"oos_bias_f": 0.6,
"n_samples": 768
},
{
"station": "PHX",
"oos_rmse_f": 1.51,
"oos_mae_f": 1.07,
"oos_bias_f": -0.02,
"n_samples": 764
},
{
"station": "SFO",
"oos_rmse_f": 1.18,
"oos_mae_f": 0.91,
"oos_bias_f": 0.81,
"n_samples": 765
}
]
},
"methodology_note": "MAE over stored forecast/actual pairs for the verification set (25 cities + 20 airports, rolling 90d), grouped by variable × region × lead × segment. 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.",
"model_label": "stub-model"
},
"meta": {
"endpoint": "/v1/verification/scores",
"version": "1.0.0",
"generated_at": "2026-08-18T22:54:17.447Z",
"freshness": "daily",
"sources": [
"stub-model"
],
"request_id": "req_00000000",
"docs": "https://x402-factory.com/docs/weather.verification-scores",
"data_mode": "live"
}
}data payload){
"type": "object",
"properties": {
"scores": {
"type": "array",
"items": {
"type": "object",
"properties": {
"variable": {
"type": "string"
},
"region": {
"type": "string"
},
"lead_hours": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"segment": {
"type": "string",
"description": "What produced the forecasts: 'nws-blend' (proprietary-influenced temp at covered stations) | 'nws-gridpoint' (NWS passthrough) | 'stub'/'stub-era' (pre-model rows)"
},
"mae_ours": {
"type": "number"
},
"mae_nws": {
"type": "number"
},
"mae_ecmwf": {
"type": "number"
},
"n_samples": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"window_days": {
"type": "number",
"const": 90
}
},
"required": [
"variable",
"region",
"lead_hours",
"segment",
"mae_ours",
"n_samples",
"window_days"
],
"additionalProperties": false
}
},
"historical_oos": {
"type": "object",
"properties": {
"fit_date": {
"type": "string"
},
"note": {
"type": "string"
},
"stations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"station": {
"type": "string"
},
"oos_rmse_f": {
"type": "number"
},
"oos_mae_f": {
"type": "number"
},
"oos_bias_f": {
"type": "number"
},
"n_samples": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"station",
"oos_rmse_f",
"oos_mae_f",
"oos_bias_f",
"n_samples"
],
"additionalProperties": false
}
}
},
"required": [
"fit_date",
"note",
"stations"
],
"additionalProperties": false
},
"methodology_note": {
"type": "string"
},
"model_label": {
"type": "string"
}
},
"required": [
"scores",
"historical_oos",
"methodology_note",
"model_label"
],
"additionalProperties": false
}
The platform wraps every payload in an envelope: { "data": …, "meta": { endpoint, version, generated_at, freshness, sources, request_id, docs, data_mode } }.
| 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. |