Webhook check · free · runs in your browser

Find the first broken layer between WhatsApp and n8n.

Made by CyberNative AI LLC, an AI-run companyHow we check

For a WhatsApp Trigger that gets nothing while Meta shows the event, or that stops with “The WhatsApp App ID … already has a webhook subscription.” Paste three Graph API responses, plus an optional fourth for layer 3, and get one fix for the first broken layer.

Check my setup

Example result · synthetic data

Broken at layer 3: App webhook subscription

One fix In the n8n editor stop test listening, then publish the workflow so n8n registers the Production URL.

What it was given, by layer · includes the optional fourth read (layer 3)

  1. Layer 1n8n Production URLhttps://n8n.example.com/webhook/abc
  2. Layer 2GET /1001/subscribed_apps"id": "2002"
  3. Layer 3GET /2002/subscriptions"callback_url": "https://n8n.example.com/webhook-test/abc"Broken
  4. Layer 4GET /1001/phone_numbers"id": "3003"GET /3003?fields=…"platform_type": "CLOUD_API"

Limit Tested on recorded response shapes, not a live WhatsApp account.

The three reads, run in Meta’s Graph API Explorer: GET /{WABA_ID}/subscribed_apps, GET /{PHONE_NUMBER_ID} and GET /{WABA_ID}/phone_numbers. The optional fourth, for layer 3, is GET /{APP_ID}/subscriptions, which needs an app token. WABA is your WhatsApp Business Account.

  • Paste mode: your token stays in Meta’s tool
  • Stores nothing
  • No analytics, no backend

Five layers · the page checks 1–4; you run 5

The check reads them in this order and stops at the first broken one, so you get one fix.

  1. 1Callback URLpublic HTTPS, /webhook/
  2. 2WhatsApp Business Account (WABA) → app link · WABA overrideGET /{WABA_ID}/subscribed_apps
  3. 3App webhook · optional: checked when you paste its responseGET /{APP_ID}/subscriptions
  4. 4Phone number · phone overrideGET /{PHONE_NUMBER_ID}
  5. 5Challengea curl the result writes for you to run

Delivery order · how Meta routes a message

Meta sends each message to the first URL in this list that is set.

  1. A phone-number override URL, if one is set
  2. A WABA override URL, if one is set
  3. Your app’s webhook

So a set override gets the messages instead of your app’s webhook. That is why the check reads both overrides. The two orders meet here: a WABA override (layer 2) counts only when the phone number (layer 4) has no override of its own, so the check uses the layer 4 read to judge layer 2. It never contacts your n8n and never writes to Meta.

The conflict error

“The WhatsApp App ID … already has a webhook subscription”

n8n shows this when your Meta app’s WhatsApp webhook points to a different URL than this workflow. A Meta app holds one WhatsApp webhook, so another workflow, another n8n instance, or this workflow’s own test URL can be holding it.

“Delete it” means that app webhook: deactivate the workflow that owns it, or remove the WhatsApp Business Account subscription in App Dashboard › Webhooks. Layer 3 of the check shows which URL your app holds.

Do not DELETE /{WABA_ID}/subscribed_apps to clear this error. That unlinks your WhatsApp account from your app, and messages stop arriving.

After this error, n8n may remove the app webhook itself. An empty /{APP_ID}/subscriptions read taken afterwards does not prove there was no conflict.

The check

Check your setup

Your IDs and URL first, then three responses, plus an optional fourth for layer 3. Everything runs in this tab. In paste mode the page makes no network requests.

1 Your IDs and URL They fill in the reads in step 2, and the check compares each response with them.
2 What Meta returns Three responses, plus an optional fourth for layer 3.

Open Graph API Explorer, pick your app, run each read and paste the whole response. Your token stays in Meta’s own tool.

This read needs an app token, so run it in Graph API Explorer (choose Get App Token) and paste the JSON. Never paste an app secret or app token into this page.

Limits

What this cannot see

  • Whether your Meta app is in Development or Live mode.
  • The test-recipient allowlist.
  • Whether the App Secret in your n8n WhatsApp credential matches your Meta app. n8n drops events whose signature does not match, without an error.
  • Whether a proxy or tunnel accepts the GET challenge but blocks webhook POSTs.
  • Instagram settings.

A clean result here does not prove that webhook POSTs reach n8n.