Send a test event
Every endpoint has a test action that sends a synthetictest.ping event. Use it to verify your handler is reachable and responding correctly:
The
test.ping event type is synthetic — it’s only sent when you explicitly trigger a test. It won’t appear in your event subscriptions or filter settings.Test locally
To receive webhooks on your local machine during development, expose your local server to the internet using a tunnel.Using ngrok
Register the tunnel URL as an endpoint
secret from the response — you’ll need it for signature verification.Using webhook.site
If you just want to inspect webhook payloads without building a handler:- Go to webhook.site to get a temporary URL.
- Register it as a webhook endpoint via the API.
- Send a test event or wait for real events to arrive.
- Inspect the full request headers and body on the webhook.site dashboard.
Inspect delivery logs
View recent delivery attempts via the API:status field is one of:
| Status | Description |
|---|---|
delivered | Your endpoint returned 2xx. |
pending | Delivery is in progress or queued for retry. |
failed | All delivery attempts were exhausted. |
Replay failed events
If deliveries fail due to a temporary issue on your end (e.g., a deploy that caused downtime), you can replay them from the consumer portal:- Open the portal via
GET /v1/webhooks/portal. - Navigate to the failed deliveries.
- Click Replay to resend individual events or replay all failed events for a time range.
Debugging checklist
If webhooks aren’t arriving at your endpoint:Is the endpoint URL reachable?
Is the endpoint URL reachable?
Your endpoint must be publicly accessible over HTTPS. Local URLs like
http://localhost:3000 won’t work — use a tunnel like ngrok for local development.Is the endpoint returning 200?
Is the endpoint returning 200?
Check
GET /v1/webhooks/deliveries for the HTTP status code your endpoint returned. Non-2xx responses trigger retries.Is your handler responding within 15 seconds?
Is your handler responding within 15 seconds?
If your handler takes too long, the delivery times out and is retried. Return
200 immediately and process the event in the background.Is the endpoint active?
Is the endpoint active?
Check
GET /v1/webhooks/endpoints to verify the endpoint’s status is active. Endpoints are automatically disabled after repeated failures.Are you subscribed to the right event types?
Are you subscribed to the right event types?
If you set
filter_types when creating the endpoint, only those event types will be delivered. An empty filter_types array receives all events.Is signature verification failing?
Is signature verification failing?
If your handler rejects the signature, double-check that you’re using the raw request body (not a parsed-then-serialized version) and the correct signing secret.