n8n self-hosted via Docker Desktop (Windows)
Using WhatsApp Trigger node, OAuth credential (Client ID/Secret from my own Meta app)
Tunneling with ngrok free plan (ngrok http 5678)
Meta app type: Business, App Mode switched to Live
Phone number is registered and verified under the app (successfully received a test message via “Step 1. Try it out”)
Describe the problem/error/question
Get the WhatsApp Trigger’s webhook to validate with Meta so I can activate/publish the workflow. On Meta’s side (Configure Webhooks under WhatsApp > Step 2. Production setup):
The callback URL or verify token couldn’t be validated. Please verify the provided information or try again later. (#N/A:WBxP-1834050340-2428660136)
On n8n’s side, when trying to Publish/Activate:
Workflow could not be published. Error in node “WhatsApp Trigger”: Bad request - please check your parameters. (Show Details just says “Invalid parameter”, no specific field named) Already tried: confirmed ngrok tunnel is live before each attempt, used the production webhook URL (not -test), verify token is a plain word not a URL, tried both the general Webhooks page and the WhatsApp-specific Configure Webhooks page, recreated the OAuth credential from scratch, switched App Mode from Development to Live, tried clicking ‘Listen for test event’ immediately before verifying on Meta’s side, cleared and re-saved the callback fields between attempts. Also found a related closed thread from earlier this year with the same error, unresolved there too.
What is the error message (if any)?
Problem running workflow
Bad request - please check your parameters
Show Details
Invalid parameter
Please share your workflow
Share the output returned by the last node
N/A
Information on your n8n setup
- n8n version: 2.31.6
- Database (default: SQLite): SQLite (default)
- n8n EXECUTIONS_PROCESS setting (default: own, main): Default
- Running n8n via (Docker, npm, n8n cloud, desktop app): Docker
- Operating system: Windows
Did you configure WEBHOOK_URL to the ngrok subdomain?
Hi @Rasheed_Alia Welcome!
“Invalid parameter” with no field named is Meta rejecting the callback_url n8n handed it, because that URL isn’t HTTPS. Unless you override it, n8n builds the URL from N8N_PROTOCOL, N8N_HOST and N8N_PORT, which on Docker Desktop comes out as http://localhost:5678/. Set the override to your full ngrok URL, scheme included and with a trailing slash, then restart the container:
N8N_WEBHOOK_URL=https://your-subdomain.ngrok-free.app/
Pasting the bare subdomain without https:// in front gives the same “Invalid parameter”, so the scheme matters. On the free plan that URL changes every time the tunnel restarts, so it needs updating and a restart each time.
Leave Meta’s Configure Webhooks fields alone. The WhatsApp Trigger registers the subscription itself on publish and uses the trigger node’s own id as the verify token, so a token you type in on Meta’s side can never match, which is what that callback validation error is.
One more thing worth ruling out alongside the WEBHOOK_URL fix above: ngrok’s free tier serves an interstitial “you are about to visit” warning page to callers it doesn’t recognize as a normal browser, and Meta’s verification request is exactly that kind of caller. If that page is what actually reaches Meta instead of n8n’s response, you would see this exact symptom, a generic invalid parameter rejection with no field named, because Meta is not getting the response format it expects either way.
Quick way to check: curl the production ngrok URL from a terminal that has never opened it in a browser (a fresh shell, not the one where you already clicked through the ngrok warning once, since ngrok remembers that per browser). If you get ngrok’s HTML warning page back instead of an n8n response, that is the actual blocker, and either the ngrok-skip-browser-warning header, a paid ngrok plan, or switching to Cloudflare Tunnel (also free, no interstitial) will get past it.