GET /v1/verification/scores

freedailytier: 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.

Parameters

NameInTypeRequiredNotes
variablequerystringno — one of "temp", "wind"
regionquerystringno
lead_hoursqueryintegerno

Example

curl "https://x402-factory.com/v1/verification/scores"

Example response

{
  "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"
  }
}

Response schema (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 } }.

Errors

StatusCodeMeaning
400INVALID_PARAMSInput failed validation; message lists the offending fields.
404NOT_FOUNDNo matching resource; suggestion may point to a sibling endpoint.
410RESOLVEDMarket/event settled; body includes a resolution summary.
503STALE_DATAUpstream feed down; stale data is never silently served beyond 2× cache TTL.
500INTERNALOur bug. The request_id helps us find it.