GET /climate/point
Returns historical climate variables for one GPS point and one date: 2 m temperature, total precipitation and 10 m wind, served from ERA5 reanalysis data decoded from GRIB into a local grid store. The runtime lookup is local, so a covered point resolves in milliseconds without an account or API key.
This is useful when an agent needs climate evidence it cannot regenerate from
text alone: insurance parametric checks, agriculture analysis, energy planning
or logistics decisions tied to a dated location. See the live
/catalog for the authoritative endpoint listing and price.
x402 golden rule: the agent pays for the answer to its question. A
well-formed and covered request is a successful answer -> 200, even when a
requested variable is null because the grid cell has a data gap. Requests the
service cannot answer - invalid coordinates, invalid date, an uncovered date or
an unknown variable - leave the 200 range.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
lat | number | yes | Latitude in decimal degrees, from -90 to 90 |
lon | number | yes | Longitude in decimal degrees, from -180 to 180 |
date | string | yes | UTC date to query, format YYYY-MM-DD |
variables | string | no | Comma-separated subset of temperature, precipitation, wind; all by default |
GET /climate/point?lat=48.8566&lon=2.3522&date=2024-07-14
Use variables to reduce the payload when the agent only needs one family:
GET /climate/point?lat=48.8566&lon=2.3522&date=2024-07-14&variables=temperature,wind
200 response - UnifiedResponse
{
"data": { ... },
"provenance": {
"source": "era5-copernicus",
"fetched_at": "2026-06-20T12:00:00Z",
"freshness": { "kind": "snapshot", "as_of": "2026-06-19T00:00:00Z" }
}
}
provenance.source: stable identifier of the served store source, typicallyera5-copernicus.freshness.kind:snapshotfor ERA5 reanalysis;as_ofis the store production date that backed the answer.- ERA5 values are derived from Copernicus Climate Change Service information.
Fields of data
| Field | Type | Description |
|---|---|---|
lat | number | Latitude exactly echoed from the request |
lon | number | Longitude exactly echoed from the request |
date | string | Date exactly echoed in YYYY-MM-DD form |
temperature | object | Requested 2 m temperature; omitted when not requested |
precipitation | object | Requested total precipitation; omitted when not requested |
wind | object | Requested 10 m wind; omitted when not requested |
grid | object | Effective grid cell used for the answer; omitted if no cell served |
coverage | object | Completeness marker for the requested variables |
temperature
| Field | Type | Description |
|---|---|---|
celsius | number | null | 2 m temperature in Celsius |
precipitation
| Field | Type | Description |
|---|---|---|
total_mm | number | null | Daily total precipitation in millimetres |
wind
| Field | Type | Description |
|---|---|---|
speed_ms | number | null | 10 m wind speed in metres per second |
direction_deg | number | null | Meteorological direction in degrees: 0 = north, 90 = east |
grid
| Field | Type | Description |
|---|---|---|
lat | number | Latitude of the representative grid cell |
lon | number | Longitude of the representative grid cell |
distance_km | number | Distance from the requested point to that cell |
coverage
coverage tells the agent whether every requested variable was actually
available at the served grid cell.
| Field | Type | Description |
|---|---|---|
complete | bool | true when all requested variables have values |
reason | string | Present when complete: false, naming the missing family data |
Example - covered point
{
"data": {
"lat": 48.8566,
"lon": 2.3522,
"date": "2024-07-14",
"temperature": { "celsius": 22.4 },
"precipitation": { "total_mm": 1.2 },
"wind": { "speed_ms": 4.8, "direction_deg": 216.9 },
"grid": { "lat": 48.75, "lon": 2.25, "distance_km": 13.42 },
"coverage": { "complete": true }
},
"provenance": {
"source": "era5-copernicus",
"fetched_at": "2026-06-20T12:00:00Z",
"freshness": { "kind": "snapshot", "as_of": "2026-06-19T00:00:00Z" }
}
}
Example - covered date, missing variable value
A requested date can be covered while a grid cell still has a missing value for
one family. That remains a successful answer: the value is null and
coverage.complete explains the gap.
{
"data": {
"lat": 48.8566,
"lon": 2.3522,
"date": "2024-07-14",
"temperature": { "celsius": null },
"precipitation": { "total_mm": 1.2 },
"wind": { "speed_ms": 4.8, "direction_deg": 216.9 },
"grid": { "lat": 48.75, "lon": 2.25, "distance_km": 13.42 },
"coverage": {
"complete": false,
"reason": "no data at this grid cell for: temperature"
}
},
"provenance": {
"source": "era5-copernicus",
"fetched_at": "2026-06-20T12:00:00Z",
"freshness": { "kind": "snapshot", "as_of": "2026-06-19T00:00:00Z" }
}
}
Coverage honesty
ERA5 is a gridded reanalysis, not a weather station reading. The response is the nearest or interpolated grid value for the served cell, with a typical global mesh of about 0.25 degrees. Daily values are aggregate values from the store, not sub-hourly observations.
The historical window is finite and moves with the ingested store. A date inside
that window can return 200 with null values and coverage.complete: false
when the grid has a local gap. A date outside the window returns 400
OUT_OF_RANGE, because the service cannot answer the request.
Errors
Only requests the service cannot answer leave the 200 range.
| Status | code | Case |
|---|---|---|
| 400 | INVALID_COORDS | lat/lon missing, non-numeric or outside valid bounds |
| 400 | INVALID_DATE | date missing or not formatted as YYYY-MM-DD |
| 400 | OUT_OF_RANGE | Requested date is outside the covered store window |
| 400 | INVALID_VARIABLE | variables contains a family outside the supported set |
| 500 | INTERNAL | Internal error (detail logged, not exposed) |
{ "error": "invalid date '14-07-2024', expected YYYY-MM-DD", "code": "INVALID_DATE" }
{ "error": "requested date is outside the covered window 2021-01-01..2026-06-20", "code": "OUT_OF_RANGE" }
See also
GET /weather/forecast- point weather forecast from GFS, for future dates and lead times.- For agents - discovery surfaces, the live
/catalogand how settlement works.