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.
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.
apiKey<token>Your API key from the dashboard, sent as ?apiKey=<key>.
lat*numberLatitude.
-90 <= value <= 90lon*numberLongitude.
-180 <= value <= 180from*stringRFC 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.
date-timeto*stringRFC 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.
date-timeTransitions per covering timezone.
application/json- response
lat*numberEcho of the query lat.
lon*numberEcho of the query lon.
from*stringQuery from, normalised to UTC without fractional seconds.
date-timeto*stringQuery to, normalised to UTC without fractional seconds.
date-timetzdb_version*stringtzdb 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).
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'{ "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" } ] } ]}