2xx response within the request timeout.
Request timeout
Each webhook request has a 10 second timeout. If your endpoint does not complete inside that window, the attempt is marked failed.Default retry schedule
The current default environment setting is:| Attempt | Timing |
|---|---|
| 1 | Immediate |
| 2 | 2 seconds later |
| 3 | 4 seconds later |
| 4 | 8 seconds later |
Environment-specific retry counts
If an environment defineswebhookRetries, total attempts become:
What counts as success?
Any2xx response:
200 OK201 Created202 Accepted204 No Content
What counts as failure?
Any of the following:- non-
2xxresponse - connection failure
- DNS failure
- TLS failure
- timeout after 10 seconds
Important behavior: all non-2xx responses retry
Current implementation retries every non-2xx response while attempts remain.
So the following all count as retryable failed attempts:
400401403404409422429500503
Delivery logs
Every attempt is stored in the delivery log with fields such as:eventIdeventTypeendpointIdendpointUrlattemptstatusstatusCodeerrorresponseBodydeliveredAt
API-only sync
Delivery logs are created for endpoint delivery attempts. If a tenant has no matching webhook endpoint, has webhook delivery disabled, or chooses to rely on APIs only, use List sync events instead. Sync events are recorded before endpoint matching and delivery decisions. Poll this API with thesync.read scope to catch up on missed or undelivered events, then deduplicate
by eventId or payload.id.
Manual replay
Stored deliveries can be replayed manually from the dashboard. Public API-key replay endpoints are not exposed yet. Current rules:- the log entry must exist
- the endpoint must still exist
- the endpoint must still be
active
- downstream receiver outages
- delayed ingestion on the tenant side
- partial data loss in the receiving system
- controlled replay of a known event window
Filtered manual replay
In addition to replaying one delivery at a time, Zquence supports filtered manual replay from the dashboard. Use this when you want to replay only a subset of webhook events instead of replaying every stored row. Example filter:Supported filters
- tenant
- environment
- endpoint
- event type
- status
- date range
How it works
- Filters narrow the delivery-log set before replay.
- If you provide a status filter, only that delivery state is replayed.
- If you do not provide a status filter, any matching delivery state can be replayed.
- Zquence deduplicates by
endpointId + eventId, so repeated logged attempts for the same event are only queued once. - Deleted or disabled endpoints are skipped and reported in the response summary.
- Replayed events are signed again with the endpoint’s current signing secret.
What replay does and does not do
Replay does:- re-send the stored webhook event to the tenant’s configured endpoint
- preserve the existing event envelope and signing model
- allow targeted recovery for specific event types and time windows
- update historical records inside Zquence
- bypass endpoint status checks
- send to deleted or disabled endpoints
Response summary
Filtered replay returns a summary including:matchedqueuedskipped- per-item results for skipped deliveries such as
endpoint_not_foundorendpoint_disabled
Recommended receiver behavior
- Return
200after verification and queueing. - Do not do long-running work before responding.
- Deduplicate by
event.id. - Log failures on your side together with
event.idandX-Zquence-Webhook-Id.