POST /<PHONE_NUMBER_ID>/settings endpoint to enable Calling API features on a business phone number.POST /<PHONE_NUMBER_ID>/settings
| Placeholder | Description | Sample Value |
|---|---|---|
<PHONE_NUMBER_ID>Integer | Required ID of the business phone number for which you are updating Calling API settings. | 106540352242922 |
{ "calling": { "status": "ENABLED", "call_icon_visibility": "DEFAULT", "call_icons": { "restrict_to_user_countries": [ "US", "BR" ] }, "call_hours": { "status": "ENABLED", "timezone_id": "America/Manaus", "weekly_operating_hours": [ { "day_of_week": "MONDAY", "open_time": "0400", "close_time": "1020" }, { "day_of_week": "TUESDAY", "open_time": "0108", "close_time": "1020" } ], "holiday_schedule": [ { "date": "2026-01-01", "start_time": "0000", "end_time": "2359" } ] }, "callback_permission_status": "ENABLED", "sip": { "status": "ENABLED | DISABLED (default)", "servers": [ { "hostname": SIP_SERVER_HOSTNAME, "port": SIP_SERVER_PORT, "request_uri_user_params": { "KEY1": "VALUE1", "KEY2": "VALUE2" } } ] }, "audio": { "additional_codecs": ["PCMA", "PCMU"] } } }
| Parameter | Description | Sample Value |
|---|---|---|
statusString | Optional Enable or disable the Calling API for the given business phone number. | “ENABLED”“DISABLED” |
call_icon_visibilityString | Optional Configure whether the WhatsApp call button icon displays for users when chatting with the business. | |
call_iconsString | Optional Configure whether WhatsApp call button icon displays for users when chatting with the business. | |
call_hoursJSON object | Optional Allows you to specify and trigger call settings for incoming calls based on your timezone, business operating hours, and holiday schedules. Any previously configured values in call_hours will be replaced with the values passed in the request body of this API call. | |
callback_permission_statusString | Optional Configure whether a WhatsApp user is prompted with a call permission request after calling your business. Note: The call permission request is triggered from either a missed or connected call. | “ENABLED”“DISABLED” |
sipJSON object | Optional Configure call signaling via signal initiation protocol (SIP). Note: When SIP is enabled, you cannot use calling related endpoints and will not receive calling related webhooks. | |
audioJSON object | Optional Configure call audio codec settings. Opus is the default codec and is always present. |
|
status parameter is set to “ENABLED”, calling features are enabled for the business phone number. WhatsApp client applications will render the call button icon in both the business chat and business chat profile.status parameter is set to “DISABLED”, calling features are disabled, and both the business chat and business chat profile do not display the call button icon.status will update the call button icon in existing business chats in near real-time when the business phone number is in the WhatsApp user’s contacts.call_icon_visibility parameter. Note: Disabling call button icon visibility does not disable a WhatsApp user’s ability to make unsolicited calls to your business.DEFAULT
DISABLE_ALL

call_icons setting, you can specify the countries where these icons should show up."call_icons": { "restrict_to_user_countries": [ "US", "BR" ] }
| Parameter | Description | Sample Values |
|---|---|---|
restrict_to_user_countriesList of Strings | Optional Restrict the visibility of call icons to these countries. NOTE: For example if you restrict it to “US,” then it will apply to all the people who have a US registered phone number. These people could be physically located inside or outside of the USA. | Restrict to US and Brazil:
No restriction:
|
call_hours setting, you can specify the timezone, business operating hours, and holiday schedules that will be enforced for all user-initiated calls.callback_permission_status is ENABLED. The user will also be shown the next available calling slot on the option screen.
"call_hours": { "status": "ENABLED", "timezone_id": "America/Manaus", "weekly_operating_hours": [ { "day_of_week": "MONDAY", "open_time": "0400", "close_time": "1020" }, { "day_of_week": "TUESDAY", "open_time": "0108", "close_time": "1020" } ], "holiday_schedule": [ { "date": "2026-01-01", "start_time": "0000", "end_time": "2359" } ] }
| Parameter | Description | Sample Values | ||
|---|---|---|---|---|
statusString | Required Enable or disable the call hours for the business. If call hours are disabled, the business is considered open all 24 hours of the day, 7 days a week. | “ENABLED”“DISABLED” | ||
timezone_idString | Required The timezone that the business is operating within. | “America/Menominee”“Asia/Singapore” | ||
weekly_operating_hoursList of JSON object | Required The operating hours schedule for each day of the week. Each entry is a JSON object with 3 key/value pairs: day_of_week — (Enum) [Required]The day of the week. Can take one of seven values: "MONDAY", “TUESDAY”, “WEDNESDAY”, “THURSDAY”, “FRIDAY”, “SATURDAY”, “SUNDAY”
Opening and closing times represented in 24 hour format, for example "1130" = 11:30AM
|
| ||
holiday_scheduleString | Optional An optional override to the weekly schedule. Up to 20 overrides can be specified. Note: If holiday_schedule is not passed in the request, then the existing holiday_schedule will be deleted and replaced with an empty schedule.date — (String) [Required]Date for which you want to specify the override. YYYY-MM-DD format.
Opening and closing times represented in 24 hour format, for example, ”1130” = 11:30AM
|
|
"audio": { "additional_codecs": ["PCMA", "PCMU"] }
| Parameter | Description | Sample Values |
|---|---|---|
additional_codecsList of Strings | Optional Enable additional audio codecs. Supported values: "PCMA" (G.711 A-law), "PCMU" (G.711 µ-law). Opus is always enabled by default and cannot be removed. After enabling additional codecs, they can be selected during SDP codec negotiation according to RFC 3264. |
No additional codecs:
|
{ "success": true }
call_hourscall_hours is a past datecall_hoursweekly_operating_hours in call_hours cannot be emptyholiday_schedule for call_hours is invalidweekly_operating_hours schedule in call_hourscall_hours is not allowedGET /<PHONE_NUMBER_ID>/settings
| Parameter | Description | Sample Value |
|---|---|---|
<PHONE_NUMBER_ID>Integer | Required ID of the business phone number for which you are getting Calling API settings. | 106540352242922 |
whatsapp_business_management: Advanced access is required to use the API for end business clients{ "calling": { "status": "ENABLED", "call_icon_visibility": "DEFAULT", "callback_permission_status": "ENABLED", "call_hours": { "status": "ENABLED", "timezone_id": "[REDACTED]", "weekly_operating_hours": [ { "day_of_week": "MONDAY", "open_time": "0400", "close_time": "1020" }, { "day_of_week": "TUESDAY", "open_time": "0108", "close_time": "1020" } ], "holiday_schedule": [ { "date": "2026-01-01", "start_time": "0000", "end_time": "2359" } ] }, "sip": { "status": "ENABLED", "servers": [ { "hostname": "[REDACTED]", "sip_user_password": "[REDACTED]" } ] }, "audio": { "additional_codecs": ["PCMA", "PCMU"] } }, <Other non-calling feature configuration...> }
GET /<PHONE_NUMBER_ID>/settings?include_sip_credentials=true
{ "calling": { ... // other calling api settings "sip": { "status": "ENABLED", "servers": [ { "hostname": "sip.example.com", "sip_user_password": "{SIP_USER_PASSWORD}" } ] } } }
GET /<PHONE_NUMBER_ID>/settings endpoint returns Calling API settings, along with other configuration information for your WhatsApp business phone number.{ "calling": { ... // other calling api settings "restrictions": { "restrictions_list": [ { "type": "[RESTRICTED_BUSINESS_INITIATED_CALLING|RESTRICTED_USER_INITIATED_CALLING]", "reason": "Business|User initiated calling capability has been temporarily disabled for this phone number due to high negative feedback from users.", "expiration": 1754072386 } ] } } }
| Parameter | Description |
|---|---|
<restrictions>JSON Object | The restrictions object contains the following values:
restriction_list (JSON Object): list of currently imposed restrictions with the following values
type (string) - for calling restriction, this would have the value of RESTRICTED_BUSINESS_INITIATED_CALLING or RESTRICTED_USER_INITIATED_CALLINGreason (string) - description of restrictionexpiration (Integer) - The UNIX time at which the restriction will expire in UTC timezone |

account_settings_update to get notified on updates to phone number settings.account_settings_update field.whatsapp_business_management permission to receive the webhooks. Using access token for the same app, if you’re able to get settings successfully, your app is good to receive the webhooks too.{
"object": "whatsapp_business_account",
"entry": [
{
"id": "whatsapp-business-account-id",
"changes": [
{
"value": {
"messaging_product": "whatsapp",
"timestamp": "1671644824",
"type": "[phone_number_settings]",
"phone_number_settings": {
"phone_number_id": "phone-number-id",
"calling": {
"status": "ENABLED",
"call_icon_visibility": "DEFAULT",
"callback_permission_status": "ENABLED",
"call_hours": {
"status": "ENABLED",
"timezone_id": "[REDACTED]",
"weekly_operating_hours": [
{
"day_of_week": "MONDAY",
"open_time": "0400",
"close_time": "1020"
},
{
"day_of_week": "TUESDAY",
"open_time": "0108",
"close_time": "1020"
}
],
"holiday_schedule": [
{
"date": "2026-01-01",
"start_time": "0000",
"end_time": "2359"
}
]
},
"sip": {
"status": "ENABLED",
"servers": [
{
"hostname": "[REDACTED]",
"port": SIP_SERVER_PORT
}
]
}
}
}
},
"field": "account_settings_update"
}
]
}
]
}
| Placeholder | Description |
|---|---|
messaging_productString | Always whatsapp for now |
timestampInteger | Time when the settings got updated |
typeString | Type of the change. Currently only PHONE_NUMBER_SETTINGS |
phone_number_settingsObject | This field is present if the type is PHONE_NUMBER_SETTINGS. Currently only calling sub-field under this is supported. |
phone_number_settings.phone_number_idString | The phone number id, whose settings got updated |
phone_number_settings.callingObject | This is present only if fields related to calling are updated. It’s null otherwise. When present, the payload is same as Get settings API |
account_update field:{ "object": "whatsapp_business_account", "entry": [ { "id": "0", "time": 1623862418, "changes": [ { "field": "account_update", "value": { "phone_number": "PN", "event": "ACCOUNT_VIOLATION", "violation_info": { "violation_type": "[LOW_BUSINESS_INITIATED_CALLING_QUALITY|LOW_USER_INITIATED_CALLING_QUALITY]", } } } ] } ] }
account_update field:{ "object": "whatsapp_business_account", "entry": [ { "id": "0", "time": 1641848059, "changes": [ { "field": "account_update", "value": { "phone_number": "PN", "event": "ACCOUNT_RESTRICTION", "restriction_info": [ { "restriction_type": "RESTRICTED_BUSINESS_INITIATED_CALLING", "expiration": 1641848057 } ] } } ] } ] }
account_update field:{ "object": "whatsapp_business_account", "entry": [ { "id": "0", "time": 1641848059, "changes": [ { "field": "account_update", "value": { "phone_number": "PN", "event": "ACCOUNT_RESTRICTION", "restriction_info": [ { "restriction_type": "RESTRICTED_USER_INITIATED_CALLING", "expiration": 1641848057 } ] } } ] } ] }
[ { "object": "whatsapp_business_account", "entry": [ { "id": "0", "time": 1641848059, "changes": [ { "field": "account_update", "value": { "phone_number": "16505552771", "event": "ACCOUNT_VIOLATION", "violation_info": { "violation_type": "USER_INITIATED_CALLS_LOW_PICKUP_RATE", "remediation": "Please identify and address the cause of user-initiated calls not being picked up and make sure the business is properly resourced to handle expected call volumes." } } } ] } ] } ]
[ { "object": "whatsapp_business_account", "entry": [ { "id": "0", "time": 1641848059, "changes": [ { "field": "account_update", "value": { "phone_number": "16505552771", "event": "ACCOUNT_RESTRICTION", "restriction_info": [ { "restriction_type": "RESTRICTED_USER_INITIATED_CALLING_CALL_BUTTON_HIDDEN", "remediation": "The call button has been hidden due to low pickup rates. Please identify and address the cause of user-initiated calls not being picked up. Next, display the calling buttons by either working with your partner or going to WhatsApp Manager > Account tools > Phone numbers > select Phone number > Calls > toggle on Display call buttons" } ] } } ] } ] } ]