Timezones
Time zones are the core of the API: every IANA zone with live offsets, DST state, and upcoming transitions.
At a glance
| Endpoint | What you get |
|---|---|
GET /v1/timezones |
Paginated, filterable list — concise rows built for pickers and tables. |
GET /v1/timezones/{iana} |
One zone in full detail: live time, standard offset, next DST transition. |
List time zones
GET /v1/timezones
Returns a paginated list of time zones. By default each row is concise — enough to render a list or populate a picker.
Example — power a timezone picker
Your user picked United States in a settings form; show them their country's zones in a friendly order:
curl "https://api.timezone.io/v1/timezones?country=us&sort=display_name" \
-H "Authorization: Bearer YOUR_API_TOKEN"
{
"data": [
{
"iana": "America/Adak",
"display_name": "Adak",
"country": { "code": "US", "name": "United States" },
"current": {
"utc_offset": "-09:00",
"abbreviation": "HDT",
"is_dst": true
},
"observes_dst": true,
"links": {
"self": "https://api.timezone.io/v1/timezones/America/Adak"
}
},
{
"iana": "America/Anchorage",
"display_name": "Anchorage",
"country": { "code": "US", "name": "United States" },
"current": {
"utc_offset": "-08:00",
"abbreviation": "AKDT",
"is_dst": true
},
"observes_dst": true,
"links": {
"self": "https://api.timezone.io/v1/timezones/America/Anchorage"
}
}
],
"meta": {
"current_page": 1,
"per_page": 50,
"total": 29,
"tzdb_version": "2025.2",
"generated_at": "2026-06-12T09:00:00+00:00"
},
"links": {
"first": "https://api.timezone.io/v1/timezones?country=us&sort=display_name&page=1",
"last": "https://api.timezone.io/v1/timezones?country=us&sort=display_name&page=1",
"prev": null,
"next": null
}
}
(Remaining 27 rows trimmed.) Show users the display_name and keep the iana value for
your database — nobody picks "America/Indiana/Indianapolis" off a menu.
Query parameters
| Parameter | Type | Description |
|---|---|---|
country |
string | ISO 3166-1 alpha-2 country code. Case-insensitive (fr, US). |
observes_dst |
boolean | true/false (also 1/0). Keep only zones that do or don't observe DST. |
q |
string | Search across the IANA identifier and display name. Max 100 characters. |
sort |
string | iana, display_name, or offset. Prefix with - for descending (e.g. -offset). Default iana. |
offset |
string | Filter by standard UTC offset, within ±14:00. Accepts -04:00 or bare minutes like -240. |
abbreviation |
string | Filter by abbreviation/code such as EST or CET. Case-insensitive, max 10 characters. |
is_mainland |
boolean | true/false. Keep only mainland (or outlying) zones. |
detail |
string | concise (default) or full. full returns the detail shape per row. |
per_page |
integer | Results per page, 1–500. Default 50. |
page |
integer | Page number, 1 or greater. Default 1. |
Going deeper
offsetfilters on the standard offset, not the current one — a zone observing DST right now still matches its winter offset. To find zones currently at a given offset, filter byabbreviationinstead, or usedetail=fulland readcurrent.detail=fulltrades payload size for round trips. One request for a country's zones with full DST detail beats N follow-up lookups — see rate limits.- Combine filters freely; they AND together (
?country=us&observes_dst=falseis the set of US zones that never change their clocks).
Retrieve a time zone
GET /v1/timezones/{iana}
Fetch a single zone by its IANA identifier (for example America/New_York). The slash in
the identifier is part of the path.
Example — warn users about an upcoming clock change
A scheduling app wants to flag that a recurring 9 am New York meeting will shift for
European invitees when the US falls back. dst.next_transition says exactly when and by
how much:
curl https://api.timezone.io/v1/timezones/America/New_York \
-H "Authorization: Bearer YOUR_API_TOKEN"
{
"data": {
"iana": "America/New_York",
"display_name": "New York",
"observes_dst": true,
"is_mainland": true,
"coordinates": { "latitude": 40.71416, "longitude": -74.00638 },
"country": { "code": "US", "name": "United States" },
"current": {
"datetime": "2026-06-12T05:00:00-04:00",
"utc_datetime": "2026-06-12T09:00:00Z",
"utc_offset": "-04:00",
"utc_offset_seconds": -14400,
"abbreviation": "EDT",
"name": "Eastern Daylight Time",
"is_dst": true
},
"standard": {
"utc_offset": "-05:00",
"utc_offset_seconds": -18000,
"abbreviation": "EST",
"name": "Eastern Standard Time"
},
"dst": {
"savings_seconds": 3600,
"next_transition": {
"type": "fall_back",
"at": "2026-11-01T06:00:00Z",
"utc_offset_after": "-05:00",
"abbreviation_after": "EST",
"clock_change_seconds": -3600
}
},
"links": {
"self": "https://api.timezone.io/v1/timezones/America/New_York",
"country": "https://api.timezone.io/v1/countries/US",
"abbreviation": "https://api.timezone.io/v1/abbreviations/EDT",
"web": "https://timezone.io/iana/America/New_York"
}
},
"meta": {
"tzdb_version": "2025.2",
"generated_at": "2026-06-12T09:00:00+00:00"
}
}
Reading it: on November 1, 2026 at 06:00 UTC the zone falls back (clock_change_seconds
is -3600), after which it is EST at -05:00. Your 9 am New York meeting lands an hour
later for everyone whose zone doesn't change that week.
Query parameters
| Parameter | Type | Description |
|---|---|---|
at |
string | Compute the time-dependent fields at a specific moment instead of now. Accepts an ISO-8601 datetime (2026-01-15T12:00:00Z) or a Unix timestamp in seconds within years 2000–2100 (1768478400); use ISO-8601 for moments outside that range. |
Response fields
The response is grouped into blocks:
| Block | Description |
|---|---|
current |
Live local time, offset, abbreviation, friendly name, and DST flag. |
standard |
The zone's standard (non-DST) offset, abbreviation, and name. |
dst |
DST savings and the next_transition (or null if none in the next 5 years). |
coordinates |
Latitude and longitude (either may be null). |
links |
Related API URLs plus web, the human-readable page on timezone.io. |
Going deeper
- Percent-encode
+. ForEtc/GMT+Nzones, encode the+as%2B— e.g.Etc/GMT%2B5. A literal+in a URL decodes as a space and returns404. atanswers historical and future questions.?at=2026-01-15T12:00:00Ztells you what offset New York had in January; thedst.next_transitionis computed relative to that moment too.- A zone with
observes_dst: falsestill has adstblock —savings_secondsis0andnext_transitionisnull, so your parsing code never branches. - The
abbreviationandcountrylinks resolve to live Abbreviations and Countries endpoints.
A missing identifier returns 404. See Errors for the full list of
responses.