WhatsApp Trigger Does Not Receive Events & Webhook Subscription Conflict (Self-hosted n8n)

Hi everyone,
I’m still experiencing this issue and haven’t been able to resolve it.
I have done additional testing:

  • Verified OAuth credentials.
  • Verified HTTPS/SSL.
  • Tested both Test URL and Production URL.
  • Published the workflow.
  • Confirmed Meta receives webhook events.
  • The workflow still fails with:
    “The WhatsApp App ID already has a webhook subscription.”
    Has anyone experienced this before or can suggest how to remove the existing webhook subscription or reset the WhatsApp Trigger?
    Any help would be greatly appreciated.
    Thank you.

Environment

  • n8n Version: Latest self-hosted version
  • Deployment: Docker
  • Hosting Provider: Hostinger VPS
  • Operating System: Ubuntu
  • Domain: https://n8n-teep.srv1761962.hstgr.cloud
  • HTTPS/SSL: Enabled and working
  • WhatsApp Integration: Meta WhatsApp Cloud API (OAuth)
  • AI Node: OpenAI Chat Model

Problem Description

I am trying to build a simple AI-powered WhatsApp auto-reply workflow.
Workflow:

WhatsApp Trigger
      ↓
AI Agent
      ↓
OpenAI Chat Model

The AI Agent is never executed because the WhatsApp Trigger never receives incoming events.

What Works

  • WhatsApp OAuth credentials connect successfully.
  • OAuth connection test is successful.
  • HTTPS domain is accessible.
  • Meta WhatsApp Cloud API test number works correctly.
  • I can send template messages successfully from the Meta Developer Dashboard.
  • Meta Developer Dashboard shows incoming webhook events under Check Test Webhooks.

What Does NOT Work

When I click Execute Step on the WhatsApp Trigger, it enters:

Listening for test event

I then send a WhatsApp message to the test number.
The trigger never receives the event and keeps waiting forever.
No execution is created.
The AI Agent never starts.

Additional Error

When I publish or execute the workflow, I receive the following error:

The WhatsApp App ID already has a webhook subscription.
Delete it or use another App before executing the trigger.
Due to WhatsApp API limitations, you can have just one trigger per App.

What I Have Already Tried

  • Recreated WhatsApp OAuth credentials.
  • Verified OAuth credentials are valid.
  • Tested both Test URL and Production URL.
  • Published the workflow.
  • Verified SSL certificate.
  • Confirmed Meta receives webhook events.
  • Rebuilt the workflow from scratch.
  • Tested with only a WhatsApp Trigger node.
  • Removed AI Agent from testing.
  • Verified the issue is not related to the OpenAI node.

Additional Information

I have another self-hosted n8n instance running on another Hostinger VPS.
It is possible that the same Meta WhatsApp App was previously connected to that instance.
I am unsure whether an old webhook subscription is preventing this new instance from registering its webhook.

Questions

  1. How can I identify which webhook is currently registered for my WhatsApp App?
  2. Is there a way to remove or replace the existing webhook subscription without creating a new Meta App?
  3. Does the WhatsApp Trigger automatically unregister old webhooks?
  4. Is there any command or API endpoint that I can use to manually reset the webhook registration?
  5. Are there any logs that I should check on my self-hosted n8n instance to diagnose why the webhook registration fails?

Expected Behaviour

Incoming WhatsApp messages should trigger the workflow immediately.

Actual Behaviour

The trigger remains in “Listening for test event” forever, and publishing the workflow produces the webhook subscription conflict error.
Any guidance would be greatly appreciated.
Thank you.
Here is the complete Details:

@Hussain_Farooq that errors exact, n8ns trigger checks your apps existing webhook subscription and bails when its callback_url doesnt match the url this trigger wants, and meta allows only one webhook per app. so meta is delivering your events to that other/old callback url, which is why the dashboard shows events but the trigger never sees them. fix: in your meta app dashboard go to WhatsApp > Configuration and delete the existing webhook callback (or set it to the exact url shown on the n8n trigger node), then activate the workflow so n8n registers its production url and make sure the messages field is subscribed. its one trigger per app, so if another flow or instance already registered a callback there thats your conflict.

To see exactly what is registered, you must use the Meta Graph API Explorer or curl. The subscription happens at the WhatsApp Business Account (WABA) level, not just the App level.

The Check: Run a GET request to the following endpoint: https://graph.facebook.com/v21.0/{your-waba-id}/subscribed_apps (Replace {your-waba-id} with your WhatsApp Business Account ID found in the Meta Business Settings).

If the response contains your App ID, that App is currently subscribed to receive events for that account, which is why n8n is blocked.

To “clear the path” for your new n8n instance, you need to unsubscribe the app from the WABA.

The Fix via Graph API:

  1. Go to the Meta Graph API Explorer.
  2. Select your App and ensure you have a System User Token or a Page Access Token with whatsapp_business_management permissions.
  3. Change the method to DELETE.
  4. Enter the endpoint: /{your-waba-id}/subscribed_apps
  5. Execute the request. This removes the App’s subscription to the WABA and releases the “lock.”

No, not reliably across different instances. While the node tries to update the webhook when you activate a workflow on the same instance, it cannot know about subscriptions created by a different server/VPS. When you moved to the new Hostinger VPS, the Meta API still remembered the callback URL from the old VPS.

If you prefer using the terminal, you can use these curl commands (replace placeholders):

To check current subscription:

curl -X GET "https://graph.facebook.com/v21.0/<WABA_ID>/subscribed_apps?access_token=<YOUR_TOKEN>"

To remove the subscription:

curl -X DELETE "https://graph.facebook.com/v21.0/<WABA_ID>/subscribed_apps?access_token=<YOUR_TOKEN>"

If the error persists after the API cleanup, check your Docker logs to see the exact raw error response from Meta:

docker logs -f <your-n8n-container-name>

Look for entries containing whatsapp or webhook registration. If you see a 400 Bad Request with a specific error code from Meta, it will confirm if the issue is a “duplicate subscription” or a “validation failure” (which happens if your WEBHOOK_URL env variable is incorrect).

If you want to get this working immediately, follow this exact sequence:

  1. Clean Meta: Run the DELETE request on /{waba-id}/subscribed_apps as described above.
  2. Clear n8n Internal State:
    • Open your workflow.
    • Delete the WhatsApp Trigger node entirely.
    • Save the workflow.
    • Refresh the browser page.
    • Re-add the WhatsApp Trigger node from scratch. (This forces n8n to forget any cached registration IDs).
  3. Verify Env Variables: Ensure your Docker environment variable WEBHOOK_URL is exactly https://n8n-teep.srv1761962.hstgr.cloud.
  4. Publish: “Publish” the workflow first, rather than clicking “Execute Step.” Activating the workflow is the most reliable way for n8n to register the Production URL.