Trello webhooks fail differently from most providers'. They are not registered to an app — each webhook belongs to the API token that created it, they run a reachability probe before the webhook even exists, and the signature covers your callback URL as well as the body. Each of those is a distinct way to end up staring at a handler that never runs. Here is the debugging order that resolves nearly every case.
Before touching your server, ask Trello for its side of the story. Every webhook object reports its own health:
curl "https://api.trello.com/1/tokens/{token}/webhooks?key={key}&token={token}"
[ { "id": "…", "description": "Sprint board sync",
"idModel": "…", "callbackURL": "https://…",
"active": true,
"consecutiveFailures": 0,
"firstConsecutiveFailDate": null } ]
Three outcomes, three different problems:
consecutiveFailures climbing → Trello is calling you and
your endpoint is failing; skip to cause 4.callbackURL at a capture bin (below) and watch what
actually arrives.This is the #1 cause of “the webhook worked for months and then silently
stopped”. A Trello webhook lives and dies with the token that created it: when that
token is revoked (user deauthorizes the Power-Up/app, an admin rotates credentials) or
expires, the webhook stops firing — silently. No error, no email, nothing to see
on your server, and the webhook no longer appears under
/1/tokens/{token}/webhooks.
Fix: mint a fresh token, recreate the webhook with it, and monitor. If your integration creates tokens with an expiry, put webhook recreation in the token-refresh path — not just the token.
Webhook creation runs a synchronous probe: Trello sends a plain HEAD
request to your callbackURL and the creation call fails with
400: URL not reachable unless it gets a 200 back during the POST.
Two common ways to fail it:
A capture bin answers HEAD with 200 out of the box, so creating the webhook against a bin URL always succeeds — useful to separate “my creation call is wrong” from “my endpoint is wrong”.
Responding 410 Gone to a delivery doesn't just fail it —
Trello deletes the webhook outright. A misconfigured proxy, a framework
that maps a missing route to 410, or a copy-pasted “gone” handler will
permanently unhook you. If your webhook keeps vanishing shortly after creation, grep your
edge logs for 410s before suspecting anything else.
active: false almost always means
something was broken for a full month — check
firstConsecutiveFailDate for when it started, then fix the endpoint and
recreate the webhook.Trello signs every delivery with base64 HMAC-SHA1 over the raw body
concatenated with the callbackURL, in the X-Trello-Webhook header,
keyed by your application secret:
expected = base64( HMAC_SHA1( key = app_secret, message = raw_body + callbackURL ) )
Two traps follow directly from that construction:
req.url after a proxy rewrote the
host, stripped a query parameter, or changed the scheme.JSON.stringify(req.body), which only matches while your JSON parser
round-trips byte-identically (key order, unicode escapes, big numbers). Use the raw
request body.A Hookden bin can verify this scheme live — it knows its own URL, so selecting the Trello scheme in bin settings shows a ✓/✗ badge per delivery, something generic HMAC testers structurally can't do. There's also a client-side signature debugger with a Trello mode for offline checking.
curl -X POST "https://api.trello.com/1/webhooks/?key={key}&token={token}" \
-d "callbackURL=https://hookden.pages.dev/h/YOUR-BIN" \
-d "idModel={board_id}" -d "description=debug"
If this fails, the problem is your key/token/idModel — not your server.action/model/webhook envelope, the
X-Trello-Webhook header, exact bytes. (See a
realistic sample payload.)Also worth knowing: deliveries come only from 104.192.142.240/28 if you
allowlist, and if your own code writes to Trello, pass
X-Trello-Client-Identifier on API calls and skip actions that echo it back —
otherwise your webhook handler and your API writes can loop.
Related: retry-schedule comparison across 26 providers, webhooks to localhost for developing the handler behind the bin, and the Trello payload example with a verifying signature.
No signup needed. Or from your terminal: curl https://hookden.pages.dev/new
← All guides · Signature debugger · Payload examples · Docs · Hookden vs webhook.site