What Timezone IDs Are
timezone_id is a numeric identifier returned on WhatsApp Business Account (WABA) objects and other Meta API resources. It maps to a named timezone constant (e.g. ID 7 = TZ_AMERICA_NEW_YORK).
There are 591 timezones in the table. Meta uses the numeric ID in API responses but accepts IANA timezone names (e.g. America/New_York) on input fields like call_hours.timezone_id.
Where They Appear
| Field | Type | Notes |
|---|---|---|
WABA timezone_id | Numeric (read) | Returned on GET /<WABA_ID>?fields=timezone_id |
call_hours.timezone_id | String IANA name (write) | e.g. "America/Manaus" — not the numeric ID |
| Other Meta API resources | Numeric or string depending on endpoint | Always check the field's documented type |
The asymmetry — numeric on read, IANA string on write for call_hours — is intentional. Use the named constants on the right side of the lookup table when you need to set a timezone, and use the numeric ID returned by the API when you need to interpret one.
Lookup Table
The full list has 591 entries — too long to mirror here. Reference Meta's official table:
https://developers.facebook.com/docs/whatsapp/cloud-api/reference/timezones
The constant naming convention is consistent: TZ_<REGION>_<CITY>, all caps, slashes in the IANA name replaced with underscores. So:
| IANA name | Constant | ID |
|---|---|---|
America/New_York | TZ_AMERICA_NEW_YORK | 7 |
Europe/Vienna | TZ_EUROPE_VIENNA | 12 |
Asia/Dubai | TZ_ASIA_DUBAI | 8 |
Common Timezones
| ID | Constant | IANA name |
|---|---|---|
| 0 | TZ_UNKNOWN | — |
| 1 | TZ_AMERICA_LOS_ANGELES | America/Los_Angeles |
| 2 | TZ_AMERICA_DENVER | America/Denver |
| 3 | TZ_PACIFIC_HONOLULU | Pacific/Honolulu |
| 4 | TZ_AMERICA_ANCHORAGE | America/Anchorage |
| 5 | TZ_AMERICA_PHOENIX | America/Phoenix |
| 6 | TZ_AMERICA_CHICAGO | America/Chicago |
| 7 | TZ_AMERICA_NEW_YORK | America/New_York |
| 8 | TZ_ASIA_DUBAI | Asia/Dubai |
| 12 | TZ_EUROPE_VIENNA | Europe/Vienna |
| 588 | TZ_UNIVERSAL | UTC |
| 589 | TZ_W_SU | W-SU (Moscow time, legacy alias) |
| 590 | TZ_ZULU | Zulu (UTC) |
| 591 | TZ_AMERICA_COYHAIQUE | America/Coyhaique |
| 592 | TZ_NUM_TIMEZONES | (sentinel — not a real zone) |
For the full mapping consult Meta's reference page above. The total table runs 0 to 592.
Look Up via API
To check what timezone a WABA is in:
GET /<WABA_ID>?fields=timezone_id
{ "id": "102290129340398", "timezone_id": 7 }
To set the timezone on call_hours (uses the IANA name, not the numeric ID):
POST /<PHONE_NUMBER_ID>/settings
{
"calling": {
"call_hours": {
"status": "ENABLED",
"timezone_id": "America/New_York",
"weekly_operating_hours": [/* ... */]
}
}
}
If you store both the numeric ID and the IANA name in your code, keep them in a single mapping table to avoid drift. Meta updates the table over time (new IDs append at the end — TZ_AMERICA_COYHAIQUE at 591 was added recently for example).