Testing & Debugging Webhooks
Fire a test payload, inspect the delivery log, and manually retry failed deliveries without waiting for the production trigger.
You don't need to wait for a real subscription to exercise a webhook endpoint. MemberPass has three tools for development and on-call.
Fire a synthetic delivery
From the dashboard: Settings → Webhooks → [endpoint] → Test fire. From the API:
curl -X POST https://api.memberpass.net/v1/webhook-endpoints/$ID/test \
-H "Authorization: Bearer $MP_TOKEN" \
-H "Idempotency-Key: $(uuidgen)"The test fire:
- Creates a pending delivery row with a synthetic
subscription.createdpayload. - Signs the payload with the current secret.
- Routes it through the same Horizon queue that real deliveries use.
- Returns the new
delivery_idso you can watch its progress.
The test-fire endpoint is rate-limited to 5/min per token — enough for development cadence, low enough that an accidental loop can't flood your target.
Inspect the delivery log
Every delivery (real or synthetic) shows up in Settings → Webhook Deliveries with:
- Endpoint name
- Event name
- Status (
pending/delivered/failed/dead) - HTTP status returned by your handler
- Response body excerpt (first 4KB)
- Number of attempts so far
- Created-at timestamp
Filter by status via the tab bar at the top. Use "Dead-lettered" to find rows that have exhausted retries.
Use webhook.site for a quick inspection
When you need to see exactly what we POST, the canonical move is:
- Visit webhook.site and copy the unique inbox URL.
- Register a MemberPass webhook endpoint pointing at it with whatever events you want to see.
- Trigger the flow (or fire a test delivery — see above).
- webhook.site shows the raw headers, body, and your response.
Tear down the inbox when you're done so test deliveries don't keep flowing.
Manually retry a failed or dead row
From the dashboard: Settings → Webhook Deliveries → Retry on a row. From the API:
curl -X POST https://api.memberpass.net/v1/webhook-deliveries/$DELIVERY_ID/retry \
-H "Authorization: Bearer $MP_TOKEN" \
-H "Idempotency-Key: $(uuidgen)"Retry resets status to pending, attempts to 0, and clears next_attempt_at. The job fires again on the next Horizon tick.
Common failure modes
| Symptom | Likely cause |
|---|---|
HTTP 401 or 403 from your handler | Signature verification rejecting payload — check you're using the latest secret and the raw body (not JSON-reparsed). |
Connection refused | Target service down, or behind a firewall the webhook worker can't reach. |
SSL handshake failed | Expired certificate or a custom CA. MemberPass validates the full chain. |
DNS resolution failed | Allowed-IPs check failed (if you set one) or DNS truly broken. |
| Delivery succeeds but downstream never fires | Your handler returned 200 but crashed before enqueuing the work. Queue it first, then respond. |
Related
How is this guide?