If you're booking a call or showing support hours, "what's the offset for this country" is the wrong question — most large countries span several. Here's both directions: a country's offsets, and every country on a given offset.
A country's time zones
curl "https://countries.dev/alpha/US?fields=name,timezones"{
"name": "United States of America",
"timezones": ["UTC-12:00", "UTC-11:00", "UTC-10:00", "UTC-09:00", "UTC-08:00", "UTC-07:00", "UTC-06:00", "UTC-05:00", "UTC-04:00", "UTC+10:00", "UTC+12:00"]
}Offsets are plain UTC±HH:MM strings, so they sort and compare without a date library. The territories are why the US list runs from Guam to American Samoa.
Every country on an offset
Pass the offset straight into /timezone:
curl "https://countries.dev/timezone/UTC+01:00?fields=name"This returns 50 countries — most of continental Europe plus a swathe of West and Central Africa. URL-encode the + as %2B if your client doesn't:
curl "https://countries.dev/timezone/UTC%2B01:00?fields=name"Grouping a contact list
Offsets as strings make bucketing trivial:
const byOffset = {};
for (const c of contacts) {
const country = await fetch(
`https://countries.dev/alpha/${c.countryCode}?fields=timezones`,
).then((r) => r.json());
(byOffset[country.timezones[0]] ??= []).push(c);
}Want the full list of offsets in use, with a count per offset? That's the time zones reference endpoint.
Written by
Dov Azencot
At
Thu Jun 25 2026