Timezone

Get the timezone and UTC offset at an instant

Signed in? Open this endpoint in the dashboard playground, which uses your organization automatically. Signed out, use Try in Playground below with your API key.

GET
/timezone

Returns the zone(s) whose timezone-boundary-builder polygon covers the point, with offset, abbreviation, local time and the next transition after at. Polygons come from the full (not "now") release; offsets and transitions come from Node ICU pinned to the same tzdb release (tzdb_version). More than one zone can be returned at a disputed boundary. The response has no place_id or datasource.

Deviation (extra): any instant is accepted, not only 2025-01-01 through 2031-12-31; next_transition looks ahead 5 years from at.

Deviation (approximated): type is derived by comparing the offset with the smaller of the zone's January and July offsets of that year; abbreviation and offset come from ICU rather than a bundled table. Timestamps (at, local_time, transition at) have whole seconds and no fractional part, unlike Geoapify's .000.

Not supported: none; every upstream parameter is handled.

Authorization

queryapiKey<token>

Your API key from the dashboard, sent as ?apiKey=<key>.

Query Parameters

lat*number

Latitude.

Range-90 <= value <= 90
lon*number

Longitude.

Range-180 <= value <= 180
at?string

RFC 3339 instant with an offset (Z or +HH:MM). Defaults to now. Percent-encode + as %2B (an unencoded + before HH:MM is tolerated).

Deviation (extra): not limited to 2025-2031.

Formatdate-time

Response Body

Timezone information.

application/json
  1. response
lat*number
lon*number
at*string

The instant used, UTC, whole seconds (the request at, or now).

Formatdate-time
tzdb_version*string

tzdb release Node's ICU actually loaded (pinned to the release of the boundary polygons).

timezones*array<>

One zone normally; more than one at a disputed boundary. Empty where no polygon covers the point (open ocean is covered by Etc/GMT zones in the release, so this is rare).

Example Request
curl -X GET 'https://api.data.graphitelab.ai/v1/timezone?lat=45.42&lon=-75.69&at=2026-07-01T12%3A00%3A00Z'
Example Response
{  "lat": 45.42,  "lon": -75.69,  "at": "2026-07-01T12:00:00Z",  "tzdb_version": "2026f",  "timezones": [    {      "name": "America/Toronto",      "type": "daylightSaving",      "utc_offset": "-04:00",      "offset_seconds": -14400,      "abbreviation": "EDT",      "local_time": "2026-07-01T08:00:00-04:00",      "next_transition": {        "at": "2026-11-01T06:00:00Z",        "before": {          "type": "daylightSaving",          "utc_offset": "-04:00",          "offset_seconds": -14400,          "abbreviation": "EDT"        },        "after": {          "type": "standard",          "utc_offset": "-05:00",          "offset_seconds": -18000,          "abbreviation": "EST"        },        "offset_change_seconds": -3600,        "kind": "daylight-end"      }    }  ]}