FETCH402
← Protocol index

Resource / 258

healthy

Unnamed 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.

Eligibility
probeable
Failures
0
Last quote
2026-08-12 22:00:02 UTC
Last probe
2026-08-12 22:00:02 UTC
Payment requirements / accepts[] 3 options
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.

Probe evidence 1 recent
healthy 2026-08-12 22:00:02 UTC GET · HTTP 402 · 88ms · accepts 3 · base 2 ok
Request
GET https://api.invoket.com/weather/forecast/daily
Robots
error
Note
robots_error:{:robots_http_status, 404};http_402;accepts=3;base=2
Accepts fingerprint
cee94ad6aaec5f335c40a4a2f4aa2973c966c963d15802aa1282a5b2323bc6b8

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.

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