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.
| Name | In | Type | Required | Notes |
|---|---|---|---|---|
lat | query | number | yes | |
lon | query | number | yes | |
variable | query | string | yes | — one of "temp", "precip", "wind" |
hours | query | integer | no | (default: 72) |
curl "https://x402-factory.com/v1/forecast/probabilistic?lat=41.8781&lon=-87.6298&variable=temp&hours=48"
{
"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"
}
}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 } }.
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.
| 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. |