TL;DR: This error means you tried to set a per-WABA
override_callback_uribefore your app was subscribed to that WhatsApp Business Account'smessageswebhook. The fix is a two-step flow: first subscribe the app to the WABA, then override the callback URI. It is returned as Graph code 100 (OAuthException).
What This Error Means
The exact message is: "(#100) Before override the current callback uri, your app must be subscribed to receive messages for WhatsApp Business Account." On Meta's error table, code 100 is the generic "request included one or more unsupported or misspelled parameters" OAuthException; this override case is a specific code-100 message. Meta requires the app to be subscribed to the WABA (via POST /{waba-id}/subscribed_apps) before you can set or override its callback URI — a documented two-step sequence.
Where You See It
An immediate API error (HTTP 400) when calling /{waba-id}/subscribed_apps with override_callback_uri while not yet subscribed.
Common Causes
- Attempting subscription + callback override in a single call.
- Skipping the initial
subscribed_appssubscription step. - Missing
whatsapp_business_management/whatsapp_business_messagingpermissions.
How to Fix It
- First
POST /{waba-id}/subscribed_appsto subscribe your app to the WABA. - Then set the
override_callback_uri(andverify_token) in a second step. - Ensure your app has
whatsapp_business_managementandwhatsapp_business_messaging. - Confirm the
messageswebhook field is subscribed.
Webhook Verification Errors 2200 and 2201
Note:
2200/2201are Graph-webhook verification errors seen during callback setup. They are not part of the WhatsApp Cloud API error-code table; the exact wording below is reported by practitioners and in Graph webhook contexts — verify against your own logs.
- 2200 — Callback/subscription verification failed: Meta's GET verification to your callback URL failed (commonly "HTTP Status Code = 404 / Not Found", "Request Timeout / 408", or SSL/cURL errors). Your endpoint didn't respond correctly to the verification request.
- 2201 — Invalid
hub.challenge: your endpoint responded but didn't echo back the exacthub.challengevalue (e.g. it returned JSON or HTML instead of the raw token).
To pass verification, on the GET request confirm hub.mode == subscribe and hub.verify_token matches, then return the raw hub.challenge value with HTTP 200 — no JSON/HTML envelope.
How to Prevent It
- Always subscribe first, override second.
- Keep the callback endpoint publicly reachable over HTTPS and fast (avoid timeouts); never point Meta at localhost or private URLs.
- Exempt the verification path from aggressive rate limiting/proxy rewriting.
Related Errors
/docs/whatsapp-error-190— token expired during setup- WhatsApp Webhook Override
/docs/whatsapp-error-80007— WABA management rate limit- See the full error reference
FAQ
What does "Before override the current callback uri" mean? Subscribe your app to the WABA first, then override the callback URI.
What error code is it? Graph code 100 (OAuthException).
What are 2200 and 2201? Graph-webhook verification errors — 2200 is a callback/verification failure, 2201 is a hub.challenge mismatch. They're not in Meta's WhatsApp Cloud API error table.
Can I return JSON like { "challenge": "123" }? No — return the raw challenge value with HTTP 200.
How Dualhook Helps
This is the core of what Dualhook does, so the fix is largely handled for you. Dualhook connects your WABA via Meta Embedded Signup and manages the subscribe-then-override sequence on override_callback_uri, routing message-path webhooks straight to your endpoint while staying out of the message path and never reading or storing message content. It surfaces subscription state and webhook health so you can see if a WABA is unsubscribed or a callback verification is failing. See WhatsApp Webhook Override and Messaging Health Status.