Time zone from coordinates

Turn coordinates into an IANA time zone such as Europe/Warsaw and its offset from UTC at any moment, with daylight saving time worked out. Ask for one point, up to 10,000 at once, or a whole route, which comes back cut into the stretches of each zone it crosses.

curl https://geo.runningcat.dev/v1/timezones -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"points": [[6.869, 45.924], [-73.98, 40.75]], "at": "2026-11-07T12:00:00Z"}'
Example request

For points

{ "timezones": [ { "tz": "Europe/Paris", "offsetMin": 60 }, { "tz": "America/New_York", "offsetMin": -300 } ] }

offsetMin is minutes east of UTC at at, or now when it is left out. At sea, where no country's zone applies, the answer is the nautical zone, such as Etc/GMT-1, so every point gets a zone.

Along a route

POST /v1/route/timezones takes a GeoJSON route and returns each zone it passes with the kilometres where it starts and ends, for trip planners and ride logs that cross borders: [{"tz", "fromKm", "toKm", "offsetMin"}].

With the place name

GET /v1/where?lon=&lat=&lang= gives the country, region, town and nearest place for a point, the administrative areas it lies in, and its time zone, in the language you ask for where OpenStreetMap has the name. POST /v1/where takes up to 1,000 points.

Price

A batch counts as one request, whatever its size. The free plan gives 500 requests a day, also for commercial apps; Developer is $14.99 a month for 5,000 a day.

Credits: time zone boundaries from timezone-boundary-builder (ODbL); places © OpenStreetMap contributors (ODbL).

The free plan gives 500 requests a day, for commercial apps too. Create an account with Google or your email and make your keys right away.