Timezone

List timezone transitions within an interval

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/transitions

Returns the UTC offset and abbreviation changes (daylight saving start/end, offset and abbreviation changes) of the timezone(s) covering a point between from and to. Zones come from timezone-boundary-builder polygons; offsets and transitions from tzdb (the release is reported as tzdb_version). Transition times are found to the second. No place_id or datasource is returned by this endpoint; the zone name is the IANA tzid (Place ID gp:tz:<tzid>, see ADR 0006).

Example: GET /timezone/transitions?lat=43.65&lon=-79.38&from=2027-01-01T00:00:00Z&to=2028-01-01T00:00:00Z&apiKey=YOUR_API_KEY

Deviation (approximated): The interval is (from, to] (a transition exactly at from is not listed, one exactly at to is), not [from, to).

Deviation (approximated): The maximum span is 50 years (50 x 366 days) and there is no restriction to 2025-01-01 through 2032-01-01; Geoapify limits the span to 366 days within that window.

Deviation (extra): timezones may contain several zones (overlapping polygons) or none; offsets are computed for the zone name directly.

Not supported

Nothing from Geoapify's parameter list is dropped; lat, lon, from and to are all required.

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
from*string

RFC 3339 start instant (exclusive). Percent-encode a + offset as %2B; an unencoded + that arrives as a space is repaired.

Deviation (approximated): exclusive, and not limited to 2025-01-01 or later.

Formatdate-time
to*string

RFC 3339 end instant (inclusive). Must not be before from; at most 50 years after it.

Deviation (approximated): inclusive, and not limited to 2032-01-01 or earlier.

Formatdate-time

Response Body

Transitions per covering timezone.

application/json
  1. response
lat*number

Echo of the query lat.

lon*number

Echo of the query lon.

from*string

Query from, normalised to UTC without fractional seconds.

Formatdate-time
to*string

Query to, normalised to UTC without fractional seconds.

Formatdate-time
tzdb_version*string

tzdb release the offsets and transitions come from.

timezones*array<>

Every zone polygon covering the point (normally one; two where polygons overlap; empty over open ocean or outside the data).

Example Request
curl -X GET 'https://api.data.graphitelab.ai/v1/timezone/transitions?lat=43.65&lon=-79.38&from=2027-01-01T00%3A00%3A00Z&to=2028-01-01T00%3A00%3A00Z'
Example Response
{  "lat": 43.65,  "lon": -79.38,  "from": "2027-01-01T00:00:00Z",  "to": "2028-01-01T00:00:00Z",  "tzdb_version": "2026f",  "timezones": [    {      "name": "America/Toronto",      "transitions": [        {          "at": "2027-03-14T07:00:00Z",          "before": {            "type": "standard",            "utc_offset": "-05:00",            "offset_seconds": -18000,            "abbreviation": "EST"          },          "after": {            "type": "daylightSaving",            "utc_offset": "-04:00",            "offset_seconds": -14400,            "abbreviation": "EDT"          },          "offset_change_seconds": 3600,          "kind": "daylight-start"        },        {          "at": "2027-11-07T06: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"        }      ]    }  ]}