Skip to content
天気Now 日本語

API reference.
Every endpoint and field.

Rendered from the same OpenAPI 3.1 document the API serves, so this page cannot drift from the thing it describes.

Interactive reference  OpenAPI 3.1 document 

GET /v1/weather/latest

Latest observation

The newest stored observation from the station nearest the coordinate. No freshness policy is applied: observed_at is always returned so the caller can judge staleness itself.

Query parameters

lat number · double optional
Latitude in decimal degrees. Omit together with lon to use the location the edge derives from the request's IP address; the response says which was used.
e.g. 35.69
lon number · double optional
Longitude in decimal degrees. Omit together with lat to use the location the edge derives from the request's IP address.
e.g. 139.7

Responses

200
The newest observation for the nearest station.
400
A parameter is missing or malformed — absent lat/lon, a non-numeric or out-of-range coordinate, a timestamp that is not RFC 3339, or a to earlier than from.
404
No station within the service radius of the coordinate — this is how points outside Japan are rejected — or no observation retained for the requested station and time.
500
Something failed server-side. The detail is in the server log, not here.
503
The station list has not loaded yet, so no coordinate can be resolved.
GET /v1/weather/history

Observations over a time range

Every retained observation for the nearest station between from and to, oldest first.

A from older than the retention window is silently clamped to the earliest retained instant rather than rejected; the echoed from and retention_days explain the shortfall.

Query parameters

lat number · double optional
Latitude in decimal degrees. Omit together with lon to use the location the edge derives from the request's IP address; the response says which was used.
e.g. 35.69
lon number · double optional
Longitude in decimal degrees. Omit together with lat to use the location the edge derives from the request's IP address.
e.g. 139.7
from string · date-time required
Start of the range, RFC 3339. Clamped to the retention window.
e.g. 2026-09-12T00:00:00Z
to string · date-time required
End of the range, RFC 3339. Must not be before from.
e.g. 2026-09-12T06:00:00Z

Responses

200
The observations retained in the range. count may be 0.
400
A parameter is missing or malformed — absent lat/lon, a non-numeric or out-of-range coordinate, a timestamp that is not RFC 3339, or a to earlier than from.
404
No station within the service radius of the coordinate — this is how points outside Japan are rejected — or no observation retained for the requested station and time.
500
Something failed server-side. The detail is in the server log, not here.
503
The station list has not loaded yet, so no coordinate can be resolved.
GET /v1/weather/at

Observation at a point in time

The reading current at at for the nearest station.

at is floored to the enclosing ten-minute boundary, never rounded up: the reading current at 14:23 is the one from 14:20. If nothing was stored for that boundary, the preceding 30 minutes are searched; beyond that the station was down and the answer is 404.

Both the requested instant and the reading's own observed_at are returned so any gap between them is visible.

Query parameters

lat number · double optional
Latitude in decimal degrees. Omit together with lon to use the location the edge derives from the request's IP address; the response says which was used.
e.g. 35.69
lon number · double optional
Longitude in decimal degrees. Omit together with lat to use the location the edge derives from the request's IP address.
e.g. 139.7
at string · date-time required
The instant of interest, RFC 3339. Floored to a ten-minute boundary.
e.g. 2026-09-12T01:23:00Z

Responses

200
The reading current at the requested instant.
400
A parameter is missing or malformed — absent lat/lon, a non-numeric or out-of-range coordinate, a timestamp that is not RFC 3339, or a to earlier than from.
404
No station within the service radius of the coordinate — this is how points outside Japan are rejected — or no observation retained for the requested station and time.
500
Something failed server-side. The detail is in the server log, not here.
503
The station list has not loaded yet, so no coordinate can be resolved.
GET /v1/weather/now

Every reporting station, right now

One reading per station: the newest each one has, for the whole AMeDAS network in a single response. Intended for maps and dashboards that need the country at a glance rather than one point.

A station whose newest reading is more than 30 minutes old is left out entirely rather than returned with a stale value, so count varies between calls. Stations report on their own schedule, so the entries do not share one timestamp — each carries its own observed_at, and the top-level observed_at is simply the newest among them.

No coordinate is involved, so entries carry no distance_km.

Query parameters

No parameters.

Responses

200
The current state of every reporting station.
500
Something failed server-side. The detail is in the server log, not here.
503
The station list has not loaded yet, so no coordinate can be resolved.

Rate limits

There is no key and no per-caller quota. One edge rule stands between the API and a client stuck in a loop: 50 requests every 10 seconds, counted per IP address per Cloudflare location, across every /v1/weather/ path.

Go over it and the edge answers 429 until the ten-second window clears; nothing is banned for longer than that. The count is taken before the cache is consulted, so responses served from the edge count the same as ones that reach the origin. If you are fanning out over many stations at once, keep the burst under fifty. These numbers describe how the service is run today, not a guarantee: the limit, and the endpoints themselves, may change without notice, and the service is provided as is with no uptime commitment.

Response fields

Station

The station the coordinate resolved to. Readings are this station's, not the requested point's — `distance_km` is how far apart those are.

id string
JMA station number.
name string
Station name in Japanese.
name_en string
Station name romanised.
lat number · double
Station latitude, 5 decimal places.
lon number · double
Station longitude, 5 decimal places.
altitude_m integer | null
Station elevation in metres, or null if JMA does not publish one.
distance_km number · double
Great-circle distance from the requested coordinate, 2 decimal places.

Observation

One ten-minute reading. Every measurement is nullable: null means the station has no such sensor or did not report it, and is never a substitute for zero.

observed_at string · date-time
When the reading was taken, UTC, on a ten-minute boundary.
temp_c number | null
Air temperature, °C.
humidity_pct number | null
Relative humidity, percent.
pressure_hpa number | null
Sea-level pressure, hPa.
wind_ms number | null
Wind speed, m/s.
wind_direction_deg number | null
Wind direction in degrees clockwise from north, the direction the wind blows from.
precipitation_10m_mm number | null
Precipitation over the preceding 10 minutes, mm.
precipitation_1h_mm number | null
Precipitation over the preceding hour, mm.
precipitation_3h_mm number | null
Precipitation over the preceding 3 hours, mm.
precipitation_24h_mm number | null
Precipitation over the preceding 24 hours, mm.
sun_10m_min number | null
Sunshine during the preceding 10 minutes, minutes.
sun_1h_h number | null
Sunshine during the preceding hour, hours.
snow_cm number | null
Snow depth on the ground, cm.
visibility_m number | null
Horizontal visibility, metres.

Coordinate

The coordinate the answer was computed from, and where it came from.

lat number · double
lon number · double
source string
Whether the coordinate came from the query or from IP geolocation.

NowStation

A station in the all-stations snapshot, with its own newest reading. There is no `distance_km`: no coordinate was asked for.

id string
JMA station number.
name string
Station name in Japanese.
name_en string
Station name romanised.
lat number · double
Station latitude, 5 decimal places.
lon number · double
Station longitude, 5 decimal places.
altitude_m integer | null
Station elevation in metres, or null if JMA does not publish one.
observation object
One ten-minute reading. Every measurement is nullable: null means the station has no such sensor or did not report it, and is never a substitute for zero.

Error

error string
A human-readable message. Not a stable machine-readable code.