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

  • offset filters 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 by abbreviation instead, or use detail=full and read current.
  • detail=full trades 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=false is 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 +. For Etc/GMT+N zones, encode the + as %2B — e.g. Etc/GMT%2B5. A literal + in a URL decodes as a space and returns 404.
  • at answers historical and future questions. ?at=2026-01-15T12:00:00Z tells you what offset New York had in January; the dst.next_transition is computed relative to that moment too.
  • A zone with observes_dst: false still has a dst block — savings_seconds is 0 and next_transition is null, so your parsing code never branches.
  • The abbreviation and country links resolve to live Abbreviations and Countries endpoints.

A missing identifier returns 404. See Errors for the full list of responses.