| Phone type | Description | SMS OTP | Voice OTP | Actions |
|---|---|---|---|---|
Mobile (recommended) | Assigned to mobile devices/SIMs | Standard | Standard | Enable International reception of SMS/Calls, ensure device is connected to Cellular Network, Grant App permissions |
Fixed line | Assigned to physical locations (landline) | Not Recommended | Standard | Enable International reception of SMS/Calls, ensure line is ready for incoming calls and disable call forwarding or IVR features |
Freephone | Toll-Free, recipient pays | Not Recommended | Standard | Ensure with Phone provider that the number is able to receive International SMS/Calls, check that line is ready for incoming calls and disable call forwarding or IVR features |
Premium rate | Higher charges for special services | Not Recommended | Standard | Ensure with Phone provider that the number is able to receive International SMS/Calls, check that line is ready for incoming calls and disable call forwarding or IVR features |
Shared cost | Cost shared between caller and recipient | Not Recommended | Not Recommended | Ensure with Phone provider that the number is able to receive International SMS/Calls, check that line is ready for incoming calls and disable call forwarding or IVR features |
Universal access | Reachable globally for customer service | Not Recommended | Standard | Ensure with Phone provider that the number is able to receive International SMS/Calls, check that line is ready for incoming calls and disable call forwarding or IVR features |
Personal number | Assigned to individuals, not tied to device | Not Recommended | Not Recommended | Ensure with Phone provider that the number is able to receive International SMS/Calls, check that line is ready for incoming calls and disable call forwarding or IVR features |
VoIP | Internet telephony, not tied to physical line | Not Recommended | Standard | Confirm that the VoIP provider supports international SMS/calls for OTPs; check provisioning and account settings; keep app/service running and notifications enabled; ensure device is online and permissions granted |
Inbound only | Only accept incoming calls/messages | Not Recommended | Standard | Ensure with Phone provider that the number is able to receive International SMS/Calls, check that line is ready for incoming calls and disable call forwarding or IVR features |
Pager | Assigned to pagers (rare) | Not supported | Not supported | Not supported |
M2M/IoT | Machine-to-machine, smart devices | Not Recommended | Not Recommended | Ensure device and SIM are allowed for incoming International SMS/calls |
status field on your WhatsApp Business Phone Number ID. See the GET /<WHATSAPP_BUSINESS_PHONE_NUMBER_ID> reference for a list of returnable status values and their meanings.curl 'https://graph.facebook.com/v25.0/106540352242922?fields=status' \
-H 'Authorization: Bearer EAAJB...'
{ "status": "CONNECTED", "id": "106540352242922" }



curl 'https://graph.facebook.com/v25.0/106540352242922/' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer EAAJB...' \
-d '
{
"pin": "150954"
}'
{ "success": true }
max_phone_numbers_per_business set to your new cap.POST request to PHONE_NUMBER_ID/request_code. In your call, include your chosen verification method and language.| Endpoint | Authentication |
|---|---|
/PHONE_NUMBER_ID/request_code | Authenticate yourself with a system user access token. If you are requesting the code on behalf of another business, the access token needs to have Advanced Access to the whatsapp_business_management permission. |
| Name | Description |
|---|---|
code_methodstring | Required. Chosen method for verification. Supported options:
|
languagestring | Required. The language’s two-character language code code. For example: "en". |
curl -X POST 'https://graph.facebook.com/v25.0/106540352242922/request_code?code_method=SMS&language=en_US' \
-H 'Authorization: Bearer EAAJB...'
POST request to PHONE_NUMBER_ID/verify_code.| Endpoint | Authentication |
|---|---|
/PHONE_NUMBER_ID/verify_code | Authenticate yourself with a system user access token. If you are requesting the code on behalf of another business, the access token needs to have Advanced Access to the whatsapp_business_management permission. |
| Name | Description |
|---|---|
codenumeric string | Required. The code you received after calling FROM_PHONE_NUMBER_ID/request_code. |
curl -X POST \
'https://graph.facebook.com/v25.0/FROM_PHONE_NUMBER_ID/verify_code' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-F 'code=000000'
{ "success": true }
+), hyphens (-), parenthesis ((,)), and spaces are supported in send message requests.91) and you send a message to the following customer phone number in various formats:| Number In Send Message Request | Number Message Delivered To | Outcome |
|---|---|---|
+16315551234 | +16315551234 | Correct number |
+1 (631) 555-1234 | +16315551234 | Correct number |
(631) 555-1234 | +916315551234 | Potentially wrong number |
1 (631) 555-1234 | +9116315551234 | Potentially wrong number |
137000, notifying you of the failure and mismatch.POST /<WHATSAPP_BUSINESS_PHONE_NUMBER>/settings{ "user_identity_change" : { "enable_identity_key_check": <ENABLE_IDENTITY_KEY_CHECK> }
<ENABLE_IDENTITY_KEY_CHECK> to true to enable identity check, or false to disable it.curl 'https://graph.facebook.com/v25.0/106850078877666/settings' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer EAAJB...' \
-d '
{
"user_identity_change": {
"enable_identity_key_check": true
}
}'
{ "success": true }
recipient_identity_key_hash hash value matches the customer’s current hash.curl 'https://graph.facebook.com/v25.0/106850078877666/messages' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer EAAJB...' \
-d '
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "+16505551234",
"recipient_identity_key_hash": "DF2lS5v2W6x=",
"type": "text",
"text": {
"preview_url": false,
"body": "Your latest statement is attached. See... "
}
}'
contacts object, such as the text messages webhook, the customer’s hash is assigned to the identity_key_hash property.recipient_identity_key_hash property in the statuses object.GET /<WHATSAPP_BUSINESS_PHONE_NUMBER_ID>?fields=throughputlast_onboarded_time, which is based on when the user completed onboarding for Embedded Signup. If not specified, the default order is descending.curl -X GET "https://graph.facebook.com/<API_VERSION>/<WABA_ID>/phone_numbers?access_token=<ACCESS_TOKEN>"
{ "data": [ { "verified_name": "Jasper's Market", "display_phone_number": "+1 631-555-5555", "id": "1906385232743451", "quality_rating": "GREEN" }, { "verified_name": "Jasper's Ice Cream", "display_phone_number": "+1 631-555-5556", "id": "1913623884432103", "quality_rating": "NA" } ] }
curl -X GET "https://graph.facebook.com/<API_VERSION>/<WABA_ID>/phone_numbers?access_token=<SYSTEM_USER_ACCESS_TOKEN>]&sort=['last_onboarded_time_ascending']"
{ "data": [ { "verified_name": "Jasper's Ice Cream", "display_phone_number": "+1 631-555-5556", "id": "1913623884432103", "quality_rating": "NA" }, { "verified_name": "Jasper's Market", "display_phone_number": "+1 631-555-5555", "id": "1906385232743451", "quality_rating": "GREEN" } ] }
account_mode. This filtering option is currently being tested in beta mode. Not all developers have access to it.| Name | Description |
|---|---|
field | Value: account_mode |
operator | Value: EQUAL |
value | Values: SANDBOX, LIVE |
curl -i -X GET "https://graph.facebook.com/<API_VERSION>/<WABA_ID>/phone_numbers?filtering=[{"field":"account_mode","operator":"EQUAL","value":"SANDBOX"}]&access_token=<ACCESS_TOKEN>
{ "data": [ { "id": "1972385232742141", "display_phone_number": "+1 631-555-1111", "verified_name": "John’s Cake Shop", "quality_rating": "UNKNOWN", } ], "paging": { "cursors": { "before": "abcdefghij", "after": "klmnopqr" } } }
GET https://graph.facebook.com/<API_VERSION>/<PHONE_NUMBER_ID>
curl \ 'https://graph.facebook.com/v15.0/105954558954427/' \ -H 'Authorization: Bearer EAAFl...'
{ "code_verification_status" : "VERIFIED", "display_phone_number" : "15555555555", "id" : "105954558954427", "quality_rating" : "GREEN", "verified_name" : "Support Number" }
fields=name_status as a query string parameter to get the status of a display name associated with a specific phone number. This field is currently in beta and not available to all developers.curl \ 'https://graph.facebook.com/v15.0/105954558954427?fields=name_status' \ -H 'Authorization: Bearer EAAFl...'
{ "id" : "105954558954427", "name_status" : "AVAILABLE_WITHOUT_REVIEW" }
name_status value can be one of the following:APPROVED: The name has been approved.AVAILABLE_WITHOUT_REVIEW: The display name is ready to use without review.DECLINED: The name has not been approved.EXPIRED: The phone number’s certificate has expired and cannot be used to register the phone number for API use.PENDING_REVIEW: Your name request is under review.NONE: The phone number does not have a certificate and cannot be used to register the phone number for API use.