History and troubleshooting
Every request that reaches a webhook is recorded - accepted or rejected. History is the first place to look when something did not happen.
Reading an invocation
Open History and click an entry. You get the timestamp, status, caller, duration, the payload, the (masked) request headers, the query string, and for failures the error and every retry attempt.
| Status | Meaning |
|---|---|
| Pending | Accepted and queued, not yet delivered to Flow |
| Success | Shopify Flow accepted the trigger |
| Failed | Delivery failed permanently - the detail page shows why |
The Invoked by column tells you where a call came from: User (an external system),
Flow (a Flow action calling the webhook), Test (the Test button) or CURL.
Rejections, and what each one means
A rejected request never reaches Flow. The response body carries a machine-readable code:
| Code | HTTP | What went wrong | Fix |
|---|---|---|---|
webhook_not_found |
404 | Short code unknown | Check the URL; the webhook may have been deleted |
webhook_disabled |
400 | Webhook is switched off | Enable it on the webhook page |
unauthorized |
401 | Token missing or wrong | Check the token and the header name |
missing_signature |
401 | HMAC mode, no signature header | Send the signature header your preset expects |
invalid_signature |
401 | Signature did not match | Confirm the signing secret and that the body is unmodified in transit |
auth_not_configured |
401 | Auth mode set but no token saved | Save a token on the webhook |
mapping_field_missing |
400 | A mapped field is absent from the payload | Send the field, or unmap it |
payload_too_large |
413 | Flow payload over 50KB | Send less, or turn off the request-data toggles |
quota_exceeded |
400 | Plan limit reached | See Plans and usage |
Live Request Inspector
While you have a webhook open in the editor, the inspector shows requests arriving in real time - including rejected ones, with the reason. This is by far the fastest way to debug a sender: fire a request and watch it land.
Suppressed duplicates also appear here, labelled as such - see Duplicate delivery protection.
Replay
Any past invocation can be replayed from its detail page. Replay re-sends the same payload through the same webhook.
Two things it is very good for:
- Building a Flow workflow. Record events on the Webhook Trigger, then replay a real call so Flow learns your actual field names.
- Recovering from a broken workflow. Fix the workflow, then replay the events that ran while it was wrong.
Replays are marked as such in history and do not count toward your plan.
Common situations
Calls arrive but the workflow does not run. Almost always the Webhook ID condition. A Webhook Trigger workflow receives events from every webhook you own, so it needs a condition matching the specific webhook id - see Create your first webhook.
The workflow runs twice. Either two workflows use the Webhook Trigger without distinct conditions, or your sender is retrying. History tells you which: two entries means two requests arrived. Turn on Duplicate delivery protection.
Nothing in History at all. The request never reached us. Check the URL and short code, and that your sender is not failing TLS or DNS on its side.
Status stuck on Pending. Delivery is retried with backoff; a permanent failure flips to Failed with the reason. If it stays pending unusually long, check status.codecreationlabs.cloud.

