Testing and replay
Send test events, resend a single delivery, and replay everything that failed while your server was down.
Send a test event
On an endpoint in Developers → Webhooks, choose Send test event and pick an event type.
- The test is a real delivery: same envelope, same headers, signed with the endpoint's real secret. If your verification passes on it, it will pass on real events.
- Its
payloadis a valid example of the event you picked, so your real handler runs on it end to end. Pick nothing and you get the neutralwebhook.testping. - It is marked
"test": true, on the envelope and in the payload, so your handler can recognise it and skip side effects. - The result (status, latency, your response) appears at once in the delivery log.
Local development
Your laptop is not on the public internet, so Gauge cannot reach localhost. Use a tunnel that
gives you a public HTTPS URL for a local port (for example cloudflared tunnel --url http://localhost:3000
or ngrok http 3000) and register that URL as a separate endpoint. Delete it when you are done.
Use a test key and a sandbox App while developing: events about
sandbox data arrive with "livemode": false.
Resend one delivery
Open any delivery in the log and choose Resend. Gauge sends it again as a new delivery, with
the same event id, so your deduplication still works.
Replay failed deliveries
After an outage, replay everything that did not land: on the endpoint, choose Replay failed and pick a start time.
- Every delivery that failed or went dead since then is sent again, newest first, as new deliveries with their original event ids.
- At most 100 deliveries per replay, and the start time can be up to 7 days back. If more than 100 qualify, the result says so: run it again for the rest.
- Deliveries already resent are skipped.
- A workspace can run 20 replays an hour, shared with
POST /v2/events/{id}/redeliver.
From code: the event log
Every event delivered to an endpoint on API version 2026-10-21 or later is kept for 30 days,
with the exact body that was (or would be) delivered.
GET /v2/events(scopeevents:read) lists them, newest first, filtered bytype(an exact name orfamily.*),since(ISO time) andconversationId. Message and conversation events are listed only for conversations the key's member can see.GET /v2/events/{id}returns one, as{ id, type, conversationId, createdAt, data }, wheredatais the envelope.POST /v2/events/{id}/redeliver(scopewebhooks:write, with anIdempotency-Key) sends it again, as a new delivery with the same eventid, to every endpoint that received it, or to one with{ "endpointId": "…" }. The answer is{ "redelivered": 1, "deliveries": [{ "id", "endpointId" }] }.
Redelivery spends the same budget as Replay in the console: 20 an hour per workspace. Over it,
429 rate_limited with reason webhook_replay_limit.
POST /v2/webhook-endpoints/{id}/test sends a test event from code, exactly like Send test event.