Overview
This covers end-to-end WABA integration using Meta Graph API. Dualhook automates most of these steps, but this is the underlying model.
Required Inputs
BUSINESS_ID— from your Meta Business PortfolioWABA_ID— from your WhatsApp Business AccountPHONE_NUMBER_ID— from your phone number- Meta app credentials (
APP_ID,APP_SECRET) - A valid access token with WhatsApp permissions
- Webhook URL + verify token
Integration Flow
- Validate token and permissions.
- Discover WABA and phone number IDs.
- Subscribe app and configure Webhook Override.
- Send a test message.
- Verify webhook delivery and statuses.
Validate Access Token
curl -X GET "https://graph.facebook.com/<GRAPH_VERSION>/debug_token?input_token=<ACCESS_TOKEN>&access_token=<APP_ID>|<APP_SECRET>"
{
"data": {
"app_id": "123456789012345",
"type": "USER",
"is_valid": true,
"expires_at": 0,
"scopes": [
"whatsapp_business_management",
"whatsapp_business_messaging"
]
}
}
List WABAs for a Business
curl -X GET "https://graph.facebook.com/<GRAPH_VERSION>/<BUSINESS_ID>/owned_whatsapp_business_accounts?fields=id,name" \
-H "Authorization: Bearer <ACCESS_TOKEN>"
{
"data": [
{ "id": "102290129340398", "name": "Acme Primary WABA" }
]
}
List Phone Numbers
curl -X GET "https://graph.facebook.com/<GRAPH_VERSION>/<WABA_ID>/phone_numbers?fields=id,display_phone_number,verified_name,name_status,quality_rating" \
-H "Authorization: Bearer <ACCESS_TOKEN>"
{
"data": [
{
"id": "123456789012345",
"display_phone_number": "15550001234",
"verified_name": "Acme Inc",
"name_status": "APPROVED",
"quality_rating": "GREEN"
}
]
}
Subscribe and Configure Override
curl -X POST "https://graph.facebook.com/<GRAPH_VERSION>/<WABA_ID>/subscribed_apps" \
-H "Authorization: Bearer <ACCESS_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"override_callback_uri":"https://api.yourcompany.com/webhooks/whatsapp",
"verify_token":"your-verify-token",
"subscribed_fields":["messages","history","smb_message_echoes"]
}'
{
"success": true
}
Validation Checklist
- Token is valid and has required scopes.
- Correct
WABA_IDandPHONE_NUMBER_IDare selected. subscribed_appsreturns success.- Incoming message webhooks arrive at your endpoint.
- Outbound status updates are received for test sends.
Dualhook sets and maintains webhook override configuration automatically. Message traffic remains Meta → your endpoint directly.