GET /v1/forecast/probabilistic

$0.03realtimetier: datacache 900sEngine B — Weather Intelligence

Hourly p10/p25/p50/p75/p90 bands for one variable at a coordinate. Temperature bands come from the model's empirical calibration; precipitation and wind bands are NWS-derived approximations, disclosed in the response's method label. Metric units (°C, mm, kph). Horizons cap at 168h. Use it to reason about uncertainty, not just point values.

Parameters

NameInTypeRequiredNotes
latquerynumberyes
lonquerynumberyes
variablequerystringyes — one of "temp", "precip", "wind"
hoursqueryintegerno (default: 72)

Example

curl "https://x402-factory.com/v1/forecast/probabilistic?lat=41.8781&lon=-87.6298&variable=temp&hours=48"

Example response

{
  "data": {
    "hourly": [
      {
        "t": "2026-07-18T12:00:00.000Z",
        "p10": 28.9,
        "p25": 29.7,
        "p50": 30.5,
        "p75": 31.3,
        "p90": 32.1
      },
      {
        "t": "2026-07-18T13:00:00.000Z",
        "p10": 28.1,
        "p25": 28.8,
        "p50": 29.7,
        "p75": 30.6,
        "p90": 31.3
      },
      {
        "t": "2026-07-18T14:00:00.000Z",
        "p10": 26.7,
        "p25": 27.5,
        "p50": 28.4,
        "p75": 29.3,
        "p90": 30.1
      },
      {
        "t": "2026-07-18T15:00:00.000Z",
        "p10": 25.3,
        "p25": 26.1,
        "p50": 27,
        "p75": 27.9,
        "p90": 28.7
      },
      {
        "t": "2026-07-18T16:00:00.000Z",
        "p10": 24.1,
        "p25": 25,
        "p50": 25.9,
        "p75": 26.8,
        "p90": 27.7
      },
      {
        "t": "2026-07-18T17:00:00.000Z",
        "p10": 23.8,
        "p25": 24.6,
        "p50": 25.6,
        "p75": 26.6,
        "p90": 27.4
      },
      {
        "t": "2026-07-18T18:00:00.000Z",
        "p10": 21.9,
        "p25": 22.8,
        "p50": 23.8,
        "p75": 24.8,
        "p90": 25.7
      },
      {
        "t": "2026-07-18T19:00:00.000Z",
        "p10": 22.4,
        "p25": 23.3,
        "p50": 24.3,
        "p75": 25.3,
        "p90": 26.2
      },
      {
        "t": "2026-07-18T20:00:00.000Z",
        "p10": 21.2,
        "p25": 22.1,
        "p50": 23.1,
        "p75": 24.1,
        "p90": 25
      },
      {
        "t": "2026-07-18T21:00:00.000Z",
        "p10": 20.6,
        "p25": 21.6,
        "p50": 22.6,
        "p75": 23.6,
        "p90": 24.6
      },
      {
        "t": "2026-07-18T22:00:00.000Z",
        "p10": 20.7,
        "p25": 21.6,
        "p50": 22.7,
        "p75": 23.8,
        "p90": 24.7
      },
      {
        "t": "2026-07-18T23:00:00.000Z",
        "p10": 22.2,
        "p25": 23.2,
        "p50": 24.3,
        "p75": 25.4,
        "p90": 26.4
      },
      {
        "t": "2026-07-19T00:00:00.000Z",
        "p10": 22,
        "p25": 23,
        "p50": 24.1,
        "p75": 25.2,
        "p90": 26.2
      },
      {
        "t": "2026-07-19T01:00:00.000Z",
        "p10": 23.6,
        "p25": 24.7,
        "p50": 25.8,
        "p75": 26.9,
        "p90": 28
      },
      {
        "t": "2026-07-19T02:00:00.000Z",
        "p10": 23.9,
        "p25": 24.9,
        "p50": 26.1,
        "p75": 27.3,
        "p90": 28.3
      },
      {
        "t": "2026-07-19T03:00:00.000Z",
        "p10": 25.9,
        "p25": 27,
        "p50": 28.2,
        "p75": 29.4,
        "p90": 30.5
      },
      {
        "t": "2026-07-19T04:00:00.000Z",
        "p10": 26.7,
        "p25": 27.8,
        "p50": 29,
        "p75": 30.2,
        "p90": 31.3
      },
      {
        "t": "2026-07-19T05:00:00.000Z",
        "p10": 27.6,
        "p25": 28.7,
        "p50": 29.9,
        "p75": 31.1,
        "p90": 32.2
      },
      {
        "t": "2026-07-19T06:00:00.000Z",
        "p10": 28.8,
        "p25": 29.9,
        "p50": 31.2,
        "p75": 32.5,
        "p90": 33.6
      },
      {
        "t": "2026-07-19T07:00:00.000Z",
        "p10": 28.9,
        "p25": 30,
        "p50": 31.3,
        "p75": 32.6,
        "p90": 33.7
      },
      {
        "t": "2026-07-19T08:00:00.000Z",
        "p10": 29.8,
        "p25": 31,
        "p50": 32.3,
        "p75": 33.6,
        "p90": 34.8
      },
      {
        "t": "2026-07-19T09:00:00.000Z",
        "p10": 29.7,
        "p25": 30.9,
        "p50": 32.2,
        "p75": 33.5,
        "p90": 34.7
      },
      {
        "t": "2026-07-19T10:00:00.000Z",
        "p10": 29.8,
        "p25": 31,
        "p50": 32.4,
        "p75": 33.8,
        "p90": 35
      },
      {
        "t": "2026-07-19T11:00:00.000Z",
        "p10": 28.5,
        "p25": 29.7,
        "p50": 31.1,
        "p75": 32.5,
        "p90": 33.7
      },
      {
        "t": "2026-07-19T12:00:00.000Z",
        "p10": 28.2,
        "p25": 29.5,
        "p50": 30.9,
        "p75": 32.3,
        "p90": 33.6
      },
      {
        "t": "2026-07-19T13:00:00.000Z",
        "p10": 27.5,
        "p25": 28.8,
        "p50": 30.2,
        "p75": 31.6,
        "p90": 32.9
      },
      {
        "t": "2026-07-19T14:00:00.000Z",
        "p10": 25.5,
        "p25": 26.8,
        "p50": 28.2,
        "p75": 29.6,
        "p90": 30.9
      },
      {
        "t": "2026-07-19T15:00:00.000Z",
        "p10": 24.3,
        "p25": 25.6,
        "p50": 27.1,
        "p75": 28.6,
        "p90": 29.9
      },
      {
        "t": "2026-07-19T16:00:00.000Z",
        "p10": 23.4,
        "p25": 24.7,
        "p50": 26.2,
        "p75": 27.7,
        "p90": 29
      },
      {
        "t": "2026-07-19T17:00:00.000Z",
        "p10": 22,
        "p25": 23.4,
        "p50": 24.9,
        "p75": 26.4,
        "p90": 27.8
      },
      {
        "t": "2026-07-19T18:00:00.000Z",
        "p10": 21.4,
        "p25": 22.8,
        "p50": 24.3,
        "p75": 25.8,
        "p90": 27.2
      },
      {
        "t": "2026-07-19T19:00:00.000Z",
        "p10": 20.8,
        "p25": 22.2,
        "p50": 23.8,
        "p75": 25.4,
        "p90": 26.8
      },
      {
        "t": "2026-07-19T20:00:00.000Z",
        "p10": 20.8,
        "p25": 22.2,
        "p50": 23.8,
        "p75": 25.4,
        "p90": 26.8
      },
      {
        "t": "2026-07-19T21:00:00.000Z",
        "p10": 19.9,
        "p25": 21.4,
        "p50": 23,
        "p75": 24.6,
        "p90": 26.1
      },
      {
        "t": "2026-07-19T22:00:00.000Z",
        "p10": 20.2,
        "p25": 21.7,
        "p50": 23.3,
        "p75": 24.9,
        "p90": 26.4
      },
      {
        "t": "2026-07-19T23:00:00.000Z",
        "p10": 21.4,
        "p25": 22.9,
        "p50": 24.6,
        "p75": 26.3,
        "p90": 27.8
      },
      {
        "t": "2026-07-20T00:00:00.000Z",
        "p10": 21.5,
        "p25": 23,
        "p50": 24.7,
        "p75": 26.4,
        "p90": 27.9
      },
      {
        "t": "2026-07-20T01:00:00.000Z",
        "p10": 22.5,
        "p25": 24,
        "p50": 25.7,
        "p75": 27.4,
        "p90": 28.9
      },
      {
        "t": "2026-07-20T02:00:00.000Z",
        "p10": 23,
        "p25": 24.6,
        "p50": 26.3,
        "p75": 28,
        "p90": 29.6
      },
      {
        "t": "2026-07-20T03:00:00.000Z",
        "p10": 23.9,
        "p25": 25.4,
        "p50": 27.2,
        "p75": 29,
        "p90": 30.5
      },
      {
        "t": "2026-07-20T04:00:00.000Z",
        "p10": 24.7,
        "p25": 26.3,
        "p50": 28.1,
        "p75": 29.9,
        "p90": 31.5
      },
      {
        "t": "2026-07-20T05:00:00.000Z",
        "p10": 26.3,
        "p25": 27.9,
        "p50": 29.7,
        "p75": 31.5,
        "p90": 33.1
      },
      {
        "t": "2026-07-20T06:00:00.000Z",
        "p10": 27,
        "p25": 28.7,
        "p50": 30.5,
        "p75": 32.3,
        "p90": 34
      },
      {
        "t": "2026-07-20T07:00:00.000Z",
        "p10": 27,
        "p25": 28.7,
        "p50": 30.5,
        "p75": 32.3,
        "p90": 34
      },
      {
        "t": "2026-07-20T08:00:00.000Z",
        "p10": 27.8,
        "p25": 29.5,
        "p50": 31.4,
        "p75": 33.3,
        "p90": 35
      },
      {
        "t": "2026-07-20T09:00:00.000Z",
        "p10": 28.2,
        "p25": 29.9,
        "p50": 31.8,
        "p75": 33.7,
        "p90": 35.4
      },
      {
        "t": "2026-07-20T10:00:00.000Z",
        "p10": 28.1,
        "p25": 29.8,
        "p50": 31.7,
        "p75": 33.6,
        "p90": 35.3
      },
      {
        "t": "2026-07-20T11:00:00.000Z",
        "p10": 27.3,
        "p25": 29.1,
        "p50": 31,
        "p75": 32.9,
        "p90": 34.7
      }
    ],
    "exceedance_helpers": {
      "p_temp_above": "For exact exceedance probabilities use GET /v1/climate-events/probability with condition=temp_above and your threshold."
    },
    "model_run_at": "2026-07-18T12:00:00.000Z"
  },
  "meta": {
    "endpoint": "/v1/forecast/probabilistic",
    "version": "1.0.0",
    "generated_at": "2026-08-18T22:54:16.976Z",
    "freshness": "realtime",
    "sources": [
      "stub-model"
    ],
    "request_id": "req_00000000",
    "docs": "https://x402-factory.com/docs/weather.forecast-probabilistic",
    "data_mode": "live"
  }
}

Response schema (data payload)

{
  "type": "object",
  "properties": {
    "hourly": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "t": {
            "type": "string"
          },
          "p10": {
            "type": "number"
          },
          "p25": {
            "type": "number"
          },
          "p50": {
            "type": "number"
          },
          "p75": {
            "type": "number"
          },
          "p90": {
            "type": "number"
          }
        },
        "required": [
          "t",
          "p10",
          "p25",
          "p50",
          "p75",
          "p90"
        ],
        "additionalProperties": false
      }
    },
    "exceedance_helpers": {
      "type": "object",
      "properties": {
        "p_any_precip_24h": {
          "type": "number",
          "minimum": 0,
          "maximum": 1
        },
        "p_temp_above": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "model_run_at": {
      "type": "string"
    }
  },
  "required": [
    "hourly",
    "exceedance_helpers",
    "model_run_at"
  ],
  "additionalProperties": false
}

The platform wraps every payload in an envelope: { "data": …, "meta": { endpoint, version, generated_at, freshness, sources, request_id, docs, data_mode } }.

Payment (x402)

Unpaid requests receive 402 with payment requirements (accepts). Pay $0.03 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.

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.