Describe the problem/error/question
<
Please share your workflow
(Select the nodes on your canvas and use the keyboard shortcuts CMD+C/CTRL+C and CMD+V/CTRL+V to copy and paste the workflow.)
Share the output returned by the last node
Information on your n8n setup
- n8n version:
- Database (default: SQLite):
- n8n EXECUTIONS_PROCESS setting (default: own, main):
- Running n8n via (Docker, npm, n8n cloud, desktop app):
- Operating system:
Well, you haven’t given a ton of info here, but the most common cause of this exact error is your response format — Meta needs the hub.challenge sent back as plain text, not JSON. So check your Respond to Webhook node and make sure “Respond With” is set to Text, not JSON, with the body just being {{$json.query["hub.challenge"]}} and nothing wrapping it. If it’s set to JSON that alone would cause this.
Other than that: make sure your workflow is active and using the production URL (not the test one, since Meta won’t be listening for you to click “test event”). Make sure it’s set to accept GET. Make sure the token matches exactly, no weird spaces or special characters. And check the execution log to make sure your nodes are actually going green when Meta tries to verify.
But if you’ve already got all that right, let me know what your Respond With is currently set to and what your Response Body expression looks like, and I can probably spot it from there.
dSavage covered the main suspects well. One small addition: after you fix the Respond With format and re-test, watch the Executions tab in real time (filter to “All” not just “Latest”) while Meta’s verification fires — it’s easy to miss the execution if it runs and completes instantly before you refresh. If you still see nothing appear there at all, double-check that the workflow URL you registered in Meta matches the production webhook URL exactly, including trailing slashes or lack thereof.
Thanks for your reply, I will check out yiur suggestions
Regards,
Stanley
Hey @Stanley_Wilson,
This error usually happens when Meta tries to send a GET verification challenge to your n8n webhook, but n8n doesn’t respond back with the expected hub.challenge token during the handshake.
Here are a few quick things to check:
- Workflow Status & URL Type:
- If you are using the Production Webhook URL, make sure the workflow is toggled to Active at the top right before hitting “Verify and Save” in Meta.
- If you are testing with the Test Webhook URL, click “Listen for Test Event” in n8n first, and then immediately click “Verify and Save” in Meta within the timeout window.
-
Verify Token Match:
Double-check that the “Verify Token” string in Meta’s dashboard matches 100% (character by character, case-sensitive) with the token configured inside your n8n Trigger node/Webhook node.
-
Trigger Node Setup:
If you are using a standard Webhook node (instead of the official WhatsApp/Meta Trigger node), make sure the node is set to handle GET requests for the verification step and returns {{ $json.query['hub.challenge'] }} as text.
If you’ve already verified these and it’s still failing, feel free to drop a screenshot of your n8n trigger node setup or send me a DM—I can help you troubleshoot the payload flow directly!
Confirm the workflow is active and that the caller uses the production URL rather than the temporary test URL. If n8n sits behind a proxy, check WEBHOOK_URL and forwarded host and protocol headers because an incorrect public base URL can register the wrong endpoint.