Resource / 258
healthyUnnamed resource.
Before your agent plans a multi-day operation — logistics, construction, an event, crop work: a day-by-day forecast for any GPS point or city, with daily minimum and maximum 2 m temperature, total precipitation and peak 10 m wind per UTC calendar day, from today to the end of the NOAA GFS window (~16 days). Each day names the model that served it and carries a coverage flag.
| State | Network | Scheme | Atomic amount | Asset | payTo / untrusted |
|---|---|---|---|---|---|
| active | eip155:8453 | exact | 10000 | 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 | 0x4465825B0ac713aA2Fa07Ea29023020804A128ee |
| active | solana:5eykt4usfv8p8njdtrepy1vzqkqzkvdp | exact | 10000 | EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v | Ae1uowYSjbH47uCiZMmc51Aqxf964b1Fs4d1bjaPmMN6 |
| active | eip155:8453 | exact | 1000 | 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 | 0x4465825B0ac713aA2Fa07Ea29023020804A128ee |
All advertised payment options are stored. Base (`eip155:8453`) is the operational network for ranking and canaries; non-Base options remain visible for transparency.
healthy 2026-08-12 22:00:02 UTC GET · HTTP 402 · 88ms · accepts 3 · base 2 ok
Accepts snapshot
[
{
"amount": "10000",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"assetTransferMethod": null,
"extra": {
"name": "USD Coin",
"version": "2"
},
"maxTimeoutSeconds": 60,
"network": "eip155:8453",
"payTo": "0x4465825B0ac713aA2Fa07Ea29023020804A128ee",
"paymentFlow": null,
"raw": {
"amount": "10000",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"maxTimeoutSeconds": 60,
"max_timeout_seconds": 60,
"network": "eip155:8453",
"payTo": "0x4465825B0ac713aA2Fa07Ea29023020804A128ee",
"pay_to": "0x4465825B0ac713aA2Fa07Ea29023020804A128ee",
"scheme": "exact"
},
"scheme": "exact"
},
{
"amount": "10000",
"asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"assetTransferMethod": null,
"extra": {
"domain": "invoket.com",
"feePayer": "GVJJ7rdGiXr5xaYbRwRbjfaJL7fmwRygFi1H6aGqDveb"
},
"maxTimeoutSeconds": 60,
"network": "solana:5eykt4usfv8p8njdtrepy1vzqkqzkvdp",
"payTo": "Ae1uowYSjbH47uCiZMmc51Aqxf964b1Fs4d1bjaPmMN6",
"paymentFlow": null,
"raw": {
"amount": "10000",
"asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"extra": {
"domain": "invoket.com",
"feePayer": "GVJJ7rdGiXr5xaYbRwRbjfaJL7fmwRygFi1H6aGqDveb"
},
"maxTimeoutSeconds": 60,
"max_timeout_seconds": 60,
"network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
"payTo": "Ae1uowYSjbH47uCiZMmc51Aqxf964b1Fs4d1bjaPmMN6",
"pay_to": "Ae1uowYSjbH47uCiZMmc51Aqxf964b1Fs4d1bjaPmMN6",
"scheme": "exact"
},
"scheme": "exact"
},
{
"amount": "1000",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"assetTransferMethod": null,
"extra": {
"name": "USD Coin",
"version": "2"
},
"maxTimeoutSeconds": 60,
"network": "eip155:8453",
"payTo": "0x4465825B0ac713aA2Fa07Ea29023020804A128ee",
"paymentFlow": null,
"raw": {
"amount": "1000",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"maxTimeoutSeconds": 60,
"max_timeout_seconds": 60,
"network": "eip155:8453",
"payTo": "0x4465825B0ac713aA2Fa07Ea29023020804A128ee",
"pay_to": "0x4465825B0ac713aA2Fa07Ea29023020804A128ee",
"scheme": "exact"
},
"scheme": "exact"
}
]
PaymentRequired raw
{
"accepts": [
{
"amount": "10000",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"maxTimeoutSeconds": 60,
"network": "eip155:8453",
"payTo": "0x4465825B0ac713aA2Fa07Ea29023020804A128ee",
"scheme": "exact"
},
{
"amount": "10000",
"asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"extra": {
"domain": "invoket.com",
"feePayer": "GVJJ7rdGiXr5xaYbRwRbjfaJL7fmwRygFi1H6aGqDveb"
},
"maxTimeoutSeconds": 60,
"network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
"payTo": "Ae1uowYSjbH47uCiZMmc51Aqxf964b1Fs4d1bjaPmMN6",
"scheme": "exact"
},
{
"amount": "1000",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"maxTimeoutSeconds": 60,
"network": "eip155:8453",
"payTo": "0x4465825B0ac713aA2Fa07Ea29023020804A128ee",
"scheme": "exact"
}
],
"error": "PAYMENT-SIGNATURE header is required",
"extensions": {
"bazaar": {
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"additionalProperties": false,
"properties": {
"headers": {
"additionalProperties": {
"type": "string"
},
"type": "object"
},
"method": {
"enum": [
"GET",
"HEAD",
"DELETE"
],
"type": "string"
},
"queryParams": {
"properties": {
"days": {
"description": "Optional. Number of UTC calendar days to return, 1-35, starting today. Defaults to 16 — the deterministic GFS window; ask for more explicitly to reach the GEFS ensemble-mean tail, whose smoothed extremes answer trend questions rather than threshold triggers. Alternative to lat+lon: pass city=<name> (alias location=, optional country= ISO 3166 alpha-2) resolved via the embedded GeoNames gazetteer and echoed back as data.location.",
"type": "string"
},
"lat": {
"type": "string"
},
"lon": {
"type": "string"
}
},
"required": [],
"type": "object"
},
"schema": {
"type": "object"
},
"type": {
"const": "http",
"type": "string"
}
},
"required": [
"type",
"method"
],
"type": "object"
},
"output": {
"properties": {
"example": {
"type": "object"
},
"type": {
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
}
},
"required": [
"input"
],
"type": "object"
}
}
},
"resource": {
"description": "Before your agent plans a multi-day operation — logistics, construction, an event, crop work: a day-by-day forecast for any GPS point or city, with daily minimum and maximum 2 m temperature, total precipitation and peak 10 m wind per UTC calendar day, from today to the end of the NOAA GFS window (~16 days), extendable to 35 days on the NOAA GEFS ensemble mean — those extra days are an average of ~30 members, so their extremes are smoothed: trend, not threshold triggers. Each day names the model that served it and carries a coverage flag.",
"mimeType": "application/json",
"url": "https://api.invoket.com/weather/forecast/daily"
},
"x402Version": 2
}
Response headers
{
"connection": "keep-alive",
"content-length": "8986",
"content-security-policy": "default-src 'none'; frame-ancestors 'none'",
"content-type": "application/json",
"date": "Wed, 12 Aug 2026 22:00:02 GMT",
"payment-required": "eyJ4NDAyVmVyc2lvbiI6MiwiZXJyb3IiOiJQQVlNRU5ULVNJR05BVFVSRSBoZWFkZXIgaXMgcmVxdWlyZWQiLCJyZXNvdXJjZSI6eyJ1cmwiOiJodHRwczovL2FwaS5pbnZva2V0LmNvbS93ZWF0aGVyL2ZvcmVjYXN0L2RhaWx5IiwiZGVzY3JpcHRpb24iOiJCZWZvcmUgeW91ciBhZ2VudCBwbGFucyBhIG11bHRpLWRheSBvcGVyYXRpb24g4oCUIGxvZ2lzdGljcywgY29uc3RydWN0aW9uLCBhbiBldmVudCwgY3JvcCB3b3JrOiBhIGRheS1ieS1kYXkgZm9yZWNhc3QgZm9yIGFueSBHUFMgcG9pbnQgb3IgY2l0eSwgd2l0aCBkYWlseSBtaW5pbXVtIGFuZCBtYXhpbXVtIDIgbSB0ZW1wZXJhdHVyZSwgdG90YWwgcHJlY2lwaXRhdGlvbiBhbmQgcGVhayAxMCBtIHdpbmQgcGVyIFVUQyBjYWxlbmRhciBkYXksIGZyb20gdG9kYXkgdG8gdGhlIGVuZCBvZiB0aGUgTk9BQSBHRlMgd2luZG93ICh+MTYgZGF5cyksIGV4dGVuZGFibGUgdG8gMzUgZGF5cyBvbiB0aGUgTk9BQSBHRUZTIGVuc2VtYmxlIG1lYW4g4oCUIHRob3NlIGV4dHJhIGRheXMgYXJlIGFuIGF2ZXJhZ2Ugb2YgfjMwIG1lbWJlcnMsIHNvIHRoZWlyIGV4dHJlbWVzIGFyZSBzbW9vdGhlZDogdHJlbmQsIG5vdCB0aHJlc2hvbGQgdHJpZ2dlcnMuIEVhY2ggZGF5IG5hbWVzIHRoZSBtb2RlbCB0aGF0IHNlcnZlZCBpdCBhbmQgY2FycmllcyBhIGNvdmVyYWdlIGZsYWcuIiwibWltZVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sImFjY2VwdHMiOlt7InNjaGVtZSI6ImV4YWN0IiwibmV0d29yayI6ImVpcDE1NTo4NDUzIiwiYW1vdW50IjoiMTAwMDAiLCJhc3NldCI6IjB4ODMzNTg5ZkNENmVEYjZFMDhmNGM3QzMyRDRmNzFiNTRiZEEwMjkxMyIsInBheVRvIjoiMHg0NDY1ODI1QjBhYzcxM2FBMkZhMDdFYTI5MDIzMDIwODA0QTEyOGVlIiwibWF4VGltZW91dFNlY29uZHMiOjYwLCJleHRyYSI6eyJuYW1lIjoiVVNEIENvaW4iLCJ2ZXJzaW9uIjoiMiJ9fSx7InNjaGVtZSI6ImV4YWN0IiwibmV0d29yayI6InNvbGFuYTo1ZXlrdDRVc0Z2OFA4TkpkVFJFcFkxdnpxS3FaS3ZkcCIsImFtb3VudCI6IjEwMDAwIiwiYXNzZXQiOiJFUGpGV2RkNUF1ZnFTU3FlTTJxTjF4enliYXBDOEc0d0VHR2tad3lURHQxdiIsInBheVRvIjoiQWUxdW93WVNqYkg0N3VDaVpNbWM1MUFxeGY5NjRiMUZzNGQxYmphUG1NTjYiLCJtYXhUaW1lb3V0U2Vjb25kcyI6NjAsImV4dHJhIjp7ImRvbWFpbiI6Imludm9rZXQuY29tIiwiZmVlUGF5ZXIiOiJHVkpKN3JkR2lYcjV4YVliUndSYmpmYUpMN2Ztd1J5Z0ZpMUg2YUdxRHZlYiJ9fSx7InNjaGVtZSI6ImV4YWN0IiwibmV0d29yayI6ImVpcDE1NTo4NDUzIiwiYW1vdW50IjoiMTAwMCIsImFzc2V0IjoiMHg4MzM1ODlmQ0Q2ZURiNkUwOGY0YzdDMzJENGY3MWI1NGJkQTAyOTEzIiwicGF5VG8iOiIweDQ0NjU4MjVCMGFjNzEzYUEyRmEwN0VhMjkwMjMwMjA4MDRBMTI4ZWUiLCJtYXhUaW1lb3V0U2Vjb25kcyI6NjAsImV4dHJhIjp7Im5hbWUiOiJVU0QgQ29pbiIsInZlcnNpb24iOiIyIn19XSwiZXh0ZW5zaW9ucyI6eyJiYXphYXIiOnsic2NoZW1hIjp7IiRzY2hlbWEiOiJodHRwczovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC8yMDIwLTEyL3NjaGVtYSIsInByb3BlcnRpZXMiOnsiaW5wdXQiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOmZhbHNlLCJwcm9wZXJ0aWVzIjp7ImhlYWRlcnMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoib2JqZWN0In0sIm1ldGhvZCI6eyJlbnVtIjpbIkdFVCIsIkhFQUQiLCJERUxFVEUiXSwidHlwZSI6InN0cmluZyJ9LCJxdWVyeVBhcmFtcyI6eyJwcm9wZXJ0aWVzIjp7ImRheXMiOnsiZGVzY3JpcHRpb24iOiJPcHRpb25hbC4gTnVtYmVyIG9mIFVUQyBjYWxlbmRhciBkYXlzIHRvIHJldHVybiwgMS0zNSwgc3RhcnRpbmcgdG9kYXkuIERlZmF1bHRzIHRvIDE2IOKAlCB0aGUgZGV0ZXJtaW5pc3RpYyBHRlMgd2luZG93OyBhc2sgZm9yIG1vcmUgZXhwbGljaXRseSB0byByZWFjaCB0aGUgR0VGUyBlbnNlbWJsZS1tZWFuIHRhaWwsIHdob3NlIHNtb290aGVkIGV4dHJlbWVzIGFuc3dlciB0cmVuZCBxdWVzdGlvbnMgcmF0aGVyIHRoYW4gdGhyZXNob2xkIHRyaWdnZXJzLiBBbHRlcm5hdGl2ZSB0byBsYXQrbG9uOiBwYXNzIGNpdHk9PG5hbWU+IChhbGlhcyBsb2NhdGlvbj0sIG9wdGlvbmFsIGNvdW50cnk9IElTTyAzMTY2IGFscGhhLTIpIHJlc29sdmVkIHZpYSB0aGUgZW1iZWRkZWQgR2VvTmFtZXMgZ2F6ZXR0ZWVyIGFuZCBlY2hvZWQgYmFjayBhcyBkYXRhLmxvY2F0aW9uLiIsInR5cGUiOiJzdHJpbmcifSwibGF0Ijp7InR5cGUiOiJzdHJpbmcifSwibG9uIjp7InR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbXSwidHlwZSI6Im9iamVjdCJ9LCJzY2hlbWEiOnsidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjp7ImNvbnN0IjoiaHR0cCIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbInR5cGUiLCJtZXRob2QiXSwidHlwZSI6Im9iamVjdCJ9LCJvdXRwdXQiOnsicHJvcGVydGllcyI6eyJleGFtcGxlIjp7InR5cGUiOiJvYmplY3QifSwidHlwZSI6eyJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJ0eXBlIl0sInR5cGUiOiJvYmplY3QifX0sInJlcXVpcmVkIjpbImlucHV0Il0sInR5cGUiOiJvYmplY3QifX19fQ==",
"referrer-policy": "strict-origin-when-cross-origin",
"server": "nginx",
"strict-transport-security": "max-age=63072000; includeSubDomains",
"x-content-type-options": "nosniff"
}
Response body
{
"accepts": [
{
"amount": "10000",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"maxTimeoutSeconds": 60,
"network": "eip155:8453",
"payTo": "0x4465825B0ac713aA2Fa07Ea29023020804A128ee",
"scheme": "exact"
},
{
"amount": "10000",
"asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"extra": {
"domain": "invoket.com",
"feePayer": "GVJJ7rdGiXr5xaYbRwRbjfaJL7fmwRygFi1H6aGqDveb"
},
"maxTimeoutSeconds": 60,
"network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
"payTo": "Ae1uowYSjbH47uCiZMmc51Aqxf964b1Fs4d1bjaPmMN6",
"scheme": "exact"
},
{
"amount": "1000",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"maxTimeoutSeconds": 60,
"network": "eip155:8453",
"payTo": "0x4465825B0ac713aA2Fa07Ea29023020804A128ee",
"scheme": "exact"
}
],
"error": "PAYMENT-SIGNATURE header is required",
"extensions": {
"bazaar": {
"info": {
"input": {
"headers": {
"accept": "application/json"
},
"method": "GET",
"queryParams": {
"days": "3",
"lat": "43.7031",
"lon": "7.2661"
},
"schema": {
"properties": {
"days": {
"description": "Optional. Number of UTC calendar days to return, 1-35, starting today. Defaults to 16 — the deterministic GFS window; ask for more explicitly to reach the GEFS ensemble-mean tail, whose smoothed extremes answer trend questions rather than threshold triggers. Alternative to lat+lon: pass city=<name> (alias location=, optional country= ISO 3166 alpha-2) resolved via the embedded GeoNames gazetteer and echoed back as data.location.",
"type": "string"
},
"lat": {
"type": "string"
},
"lon": {
"type": "string"
}
},
"required": [],
"type": "object"
},
"type": "http"
},
"output": {
"example": {
"data": {
"coverage": {
"complete": true
},
"days": [
{
"coverage": {
"complete": true
},
"dataset": "gfs",
"date": "2026-07-04",
"precipitation_sum_mm": 0.4,
"source": "GFS",
"steps_used": 8,
"temperature_max_c": 27.8,
"temperature_min_c": 21.4,
"wind_speed_max_ms": 6.2
},
{
"coverage": {
"complete": true
},
"dataset": "gfs",
"date": "2026-07-05",
"precipitation_sum_mm": 1.4,
"source": "GFS",
"steps_used": 8,
"temperature_max_c": 29.3,
"temperature_min_c": 22.1,
"wind_speed_max_ms": 5.1
},
{
"coverage": {
"complete": true
},
"dataset": "gfs",
"date": "2026-07-06",
"precipitation_sum_mm": 0.0,
"source": "GFS",
"steps_used": 8,
"temperature_max_c": 28.6,
"temperature_min_c": 22.8,
"wind_speed_max_ms": 4.7
}
],
"from": "2026-07-04",
"grid": {
"distance_km": 5.9,
"lat": 43.75,
"lon": 7.25
},
"lat": 43.7031,
"lead": {
"cycle": "2026-07-04T00:00:00+00:00"
},
"lon": 7.2661,
"to": "2026-07-06"
},
"provenance": {
"dataset": "gfs",
"fetched_at": "2026-07-04T06:05:00Z",
"freshness": {
"kind": "live"
},
"source": "GFS"
}
},
"schema": {
"properties": {
"data": {
"properties": {
"coverage": {
"properties": {
"complete": {
"type": "boolean"
},
"reason": {
"description": "Why the series is incomplete, present when 'complete' is false — a partial day or a grid cell without data; per-day detail sits in data.days[].coverage",
"type": "string"
}
},
"required": [
"complete"
],
"type": "object"
},
"days": {
"description": "One entry per UTC calendar day, in date order: daily min/max temperature, total precipitation, max wind, the model that served it and how many forecast steps fed it",
"items": {
"properties": {
"coverage": {
"description": "Per-day coverage: complete=false for partial days (day 0 from the cycle hour, the truncated last day of the window) or a grid cell with no data, values then null and never invented",
"properties": {
"complete": {
"type": "boolean"
},
"reason": {
"type": "string"
}
},
"required": [
"complete"
],
"type": "object"
},
"dataset": {
"description": "Stable machine identifier of the model that served this day: gfs or gefs. Makes the deterministic/ensemble boundary readable day by day without parsing the label in data.days[].source.",
"type": "string"
},
"date": {
"type": "string"
},
"precipitation_sum_mm": {
"description": "Daily total precipitation (mm), reconstructed from the model's disjoint accumulation buckets (0-3 h, 0-6 h, 6-9 h ...) — never a naive sum of overlapping buckets. On days served by the GEFS ensemble mean (dataset=gefs, beyond ~16 days) it is an average over ~30 members: averaging spreads rain across them, so heavy-rain days AND fully dry days are largely absent — measured at Paris on 2026-07-25, the 19-day ensemble tail stayed within 0.4-1.8 mm/day while the deterministic days ranged 0.0-13.1 mm/day. Use those days for trend, never for a threshold trigger (a 'more than 30 mm in a day' or 'dry day' rule will essentially never fire); the deterministic GFS days are the ones that resolve extremes.",
"type": [
"number",
"null"
]
},
"source": {
"description": "Human-readable label of the model that served this day: 'GFS' (deterministic 0.25 deg, <= 384 h); 'NOAA GEFS ensemble mean (35-day, 0.5 deg)' beyond, when that window is served — an ensemble-mean day averages ~30 members, so its extremes are smoothed (see data.days[].precipitation_sum_mm). Its wording is not part of the contract — branch on data.days[].dataset instead.",
"type": "string"
},
"steps_used": {
"type": "integer"
},
"temperature_max_c": {
"type": [
"number",
"null"
]
},
"temperature_min_c": {
"description": "Daily minimum 2 m temperature (deg C), derived from the 3-hourly forecast steps (subsampled; native GRIB TMIN/TMAX fields are roadmap). Same for temperature_max_c. On days served by the GEFS ensemble mean (dataset=gefs, beyond ~16 days) both are averages over ~30 members and the daily range collapses towards the climatological average — measured at Paris on 2026-07-25, the max spanned 25.3-27.9 deg C over the 19-day tail against 21.2-40.5 deg C on the deterministic days: trend, not threshold triggers.",
"type": [
"number",
"null"
]
},
"wind_speed_max_ms": {
"description": "Peak 10 m wind speed over the day (m/s), max of the 3-hourly forecast steps. On days served by the GEFS ensemble mean (dataset=gefs, beyond ~16 days) it is an average over ~30 members: gusty peaks are smoothed away — trend, not threshold triggers.",
"type": [
"number",
"null"
]
}
},
"required": [
"coverage",
"dataset",
"date",
"source",
"steps_used"
],
"type": "object"
},
"type": "array"
},
"from": {
"type": "string"
},
"grid": {
"properties": {
"distance_km": {
"type": "number"
},
"lat": {
"type": "number"
},
"lon": {
"type": "number"
}
},
"required": [
"distance_km",
"lat",
"lon"
],
"type": "object"
},
"lat": {
"type": "number"
},
"lead": {
"properties": {
"cycle": {
"type": "string"
}
},
"required": [
"cycle"
],
"type": "object"
},
"location": {
"description": "Echo of the resolved place when city=/location= was used — name, ISO country, admin1 code and the exact GeoNames coordinates the series was served at; absent when lat/lon were passed directly",
"type": "object"
},
"lon": {
"type": "number"
},
"to": {
"type": "string"
}
},
"required": [
"coverage",
"days",
"from",
"lat",
"lead",
"lon",
"to"
],
"type": "object"
},
"provenance": {
"properties": {
"dataset": {
"description": "Stable machine identifier of the model(s) that served the series: gfs, gefs, or gfs+gefs when the range spans both (the per-day boundary is readable in data.days[].dataset). Branch on this field rather than parsing provenance.source, which joins the human-readable labels.",
"type": "string"
},
"fetched_at": {
"type": "string"
},
"freshness": {
"properties": {
"kind": {
"type": "string"
}
},
"required": [
"kind"
],
"type": "object"
},
"source": {
"type": "string"
}
},
"required": [
"dataset",
"fetched_at",
"freshness",
"source"
],
"type": "object"
}
},
"required": [
"data",
"provenance"
],
"type": "object"
},
"type": "json"
}
},
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"additionalProperties": false,
"properties": {
"headers": {
"additionalProperties": {
"type": "string"
},
"type": "object"
},
"method": {
"enum": [
"GET",
"HEAD",
"DELETE"
],
"type": "string"
},
"queryParams": {
"properties": {
"days": {
"description": "Optional. Number of UTC calendar days to return, 1-35, starting today. Defaults to 16 — the deterministic GFS window; ask for more explicitly to reach the GEFS ensemble-mean tail, whose smoothed extremes answer trend questions rather than threshold triggers. Alternative to lat+lon: pass city=<name> (alias location=, optional country= ISO 3166 alpha-2) resolved via the embedded GeoNames gazetteer and echoed back as data.location.",
"type": "string"
},
"lat": {
"type": "string"
},
"lon": {
"type": "string"
}
},
"required": [],
"type": "object"
},
"schema": {
"type": "object"
},
"type": {
"const": "http",
"type": "string"
}
},
"required": [
"type",
"method"
],
"type": "object"
},
"output": {
"properties": {
"example": {
"type": "object"
},
"type": {
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
}
},
"required": [
"input"
],
"type": "object"
}
}
},
"resource": {
"description": "Before your agent plans a multi-day operation — logistics, construction, an event, crop work: a day-by-day forecast for any GPS point or city, with daily minimum and maximum 2 m temperature, total precipitation and peak 10 m wind per UTC calendar day, from today to the end of the NOAA GFS window (~16 days), extendable to 35 days on the NOAA GEFS ensemble mean — those extra days are an average of ~30 members, so their extremes are smoothed: trend, not threshold triggers. Each day names the model that served it and carries a coverage flag.",
"mimeType": "application/json",
"url": "https://api.invoket.com/weather/forecast/daily"
},
"x402Version": 2
}
Request headers
{
"accept": "*/*",
"user-agent": "Fetch402Bot/0.1 (+https://fetch402.com/crawler; contact: crawler@fetch402.com)"
}
Machine contract
Schemas.
{
"headers": {
"accept": "application/json"
},
"method": "GET",
"queryParams": {
"days": "3",
"lat": "43.7031",
"lon": "7.2661"
},
"schema": {
"properties": {
"days": {
"description": "Number of UTC calendar days to return, 1-16, starting today. Defaults to the whole available GFS window. Alternative to lat+lon: pass city=<name> (alias location=, optional country= ISO 3166 alpha-2) resolved via the embedded GeoNames gazetteer and echoed back as data.location.",
"type": "string"
},
"lat": {
"type": "string"
},
"lon": {
"type": "string"
}
},
"required": [
"days",
"lat",
"lon"
],
"type": "object"
},
"type": "http"
}
{
"example": {
"data": {
"coverage": {
"complete": true
},
"days": [
{
"coverage": {
"complete": true
},
"date": "2026-07-04",
"precipitation_sum_mm": 0.4,
"source": "GFS",
"steps_used": 8,
"temperature_max_c": 27.8,
"temperature_min_c": 21.4,
"wind_speed_max_ms": 6.2
},
{
"coverage": {
"complete": true
},
"date": "2026-07-05",
"precipitation_sum_mm": 1.4,
"source": "GFS",
"steps_used": 8,
"temperature_max_c": 29.3,
"temperature_min_c": 22.1,
"wind_speed_max_ms": 5.1
},
{
"coverage": {
"complete": true
},
"date": "2026-07-06",
"precipitation_sum_mm": 0,
"source": "GFS",
"steps_used": 8,
"temperature_max_c": 28.6,
"temperature_min_c": 22.8,
"wind_speed_max_ms": 4.7
}
],
"from": "2026-07-04",
"grid": {
"distance_km": 5.9,
"lat": 43.75,
"lon": 7.25
},
"lat": 43.7031,
"lead": {
"cycle": "2026-07-04T00:00:00+00:00"
},
"lon": 7.2661,
"to": "2026-07-06"
},
"provenance": {
"fetched_at": "2026-07-04T06:05:00Z",
"freshness": {
"kind": "live"
},
"source": "GFS"
}
},
"schema": {
"properties": {
"data": {
"properties": {
"coverage": {
"properties": {
"complete": {
"type": "boolean"
}
},
"required": [
"complete"
],
"type": "object"
},
"days": {
"description": "One entry per UTC calendar day, in date order: daily min/max temperature, total precipitation, max wind, the model that served it and how many forecast steps fed it",
"items": {
"properties": {
"coverage": {
"description": "Per-day coverage: complete=false for partial days (day 0 from the cycle hour, the truncated last day of the window) or a grid cell with no data, values then null and never invented",
"properties": {
"complete": {
"type": "boolean"
}
},
"required": [
"complete"
],
"type": "object"
},
"date": {
"type": "string"
},
"precipitation_sum_mm": {
"description": "Daily total precipitation (mm), reconstructed from the model's disjoint accumulation buckets (0-3 h, 0-6 h, 6-9 h ...) — never a naive sum of overlapping buckets",
"type": "number"
},
"source": {
"description": "Model that served this day: 'GFS' (deterministic 0.25 deg, <= 384 h); 'NOAA GEFS ensemble mean (35-day, 0.5 deg)' beyond, when that window is served",
"type": "string"
},
"steps_used": {
"type": "integer"
},
"temperature_max_c": {
"type": "number"
},
"temperature_min_c": {
"description": "Daily minimum 2 m temperature (deg C), derived from the 3-hourly forecast steps (subsampled; native GRIB TMIN/TMAX fields are roadmap)",
"type": "number"
},
"wind_speed_max_ms": {
"type": "number"
}
},
"required": [
"coverage",
"date",
"precipitation_sum_mm",
"source",
"steps_used",
"temperature_max_c",
"temperature_min_c",
"wind_speed_max_ms"
],
"type": "object"
},
"type": "array"
},
"from": {
"type": "string"
},
"grid": {
"properties": {
"distance_km": {
"type": "number"
},
"lat": {
"type": "number"
},
"lon": {
"type": "number"
}
},
"required": [
"distance_km",
"lat",
"lon"
],
"type": "object"
},
"lat": {
"type": "number"
},
"lead": {
"properties": {
"cycle": {
"type": "string"
}
},
"required": [
"cycle"
],
"type": "object"
},
"lon": {
"type": "number"
},
"to": {
"type": "string"
}
},
"required": [
"coverage",
"days",
"from",
"grid",
"lat",
"lead",
"lon",
"to"
],
"type": "object"
},
"provenance": {
"properties": {
"fetched_at": {
"type": "string"
},
"freshness": {
"properties": {
"kind": {
"type": "string"
}
},
"required": [
"kind"
],
"type": "object"
},
"source": {
"type": "string"
}
},
"required": [
"fetched_at",
"freshness",
"source"
],
"type": "object"
}
},
"required": [
"data",
"provenance"
],
"type": "object"
},
"type": "json"
}