Deliveries
Every notification Coalesce Quality sends to one of your integrations is recorded: the request as it was sent, the response your endpoint returned, how long it took, and — when nothing was sent at all — the reason. Open it under Settings > Integrations > your integration > Deliveries. The tab is available for every integration that receives notifications: webhooks, PagerDuty and Opsgenie. Everything below applies to all three, and everything visible there is also readable over the API — see Over the API. Deliveries are kept for 90 days.What a delivery is
One delivery is one event addressed to one integration. An event that matches three integrations produces three deliveries. They share an event id and each has its own delivery id. The event id is the sameevent_id your endpoint received in the webhook payload, so you can go from a payload you have in hand to the delivery that produced it — and to every other integration that got the same event.
Each delivery has one or more attempts. An attempt is one HTTP request and whatever came back.
Outcomes
A status code is not an outcome. A
500 that will be retried and a 500 that exhausted the retries are the same status and different outcomes, which is why the outcome is what to filter and alert on.
Retries
A failing delivery is retried up to 10 times with exponential backoff, over roughly 30 minutes.- Only a
2xxresponse counts as delivered. - A
400,404or422is treated as permanent and not retried: those say the request itself is wrong, and repeating it will not change the answer. - A
5xx, a timeout and a connection failure are retried. - A
3xxis not followed and is retried like any other transient failure. A delivery can carry credentials scoped to one host, so following a redirect could send them somewhere else. Point the integration at the final URL rather than at something that redirects.
Why nothing was sent
A delivery that sent nothing always records a reason. Each one names something specific to change.
This is the answer to “my alerting has gone quiet”. A workspace whose deliveries are all Skipped with Event type not subscribed is configured to send nothing, which looks identical to a broken endpoint until you read the reason.
Deliveries describe what happened after an event was routed to an integration. An alert that was suppressed before that, or that matched no ownership, produces no delivery at all — so an event you expected and cannot find here is a question about the alert configuration, not about the integration. Each delivery names the alert configuration that selected it, which is where to start.
Reading a request and a response
Expand a delivery to see each attempt: the method and URL, the request headers and body, the response status, headers and body, and the duration.Withheld header values
A header whose value carries a credential is reported by name but its value is never returned. That covers:- headers you marked secret on the integration,
- credentials Coalesce Quality holds for the destination, such as the Opsgenie API key,
- the standard credential-bearing names —
Authorization,Proxy-Authorization,Cookie,Set-Cookie,X-Api-Key,X-Auth-Token— whatever they contain, on the request or the response side.
Signature headers are shown in full
X-Coalesce-Signature and X-Coalesce-Timestamp are returned complete. The signature is a digest of the body and the timestamp is a timestamp; neither is your signing secret, and reproducing a verification that failed needs the exact bytes. See Verifying Webhook Signatures.
Bodies
A request body value the destination requires to be secret — a PagerDuty routing key, for instance — is replaced by a marker naming the field it stood in, so the record shows a value was sent rather than implying none was. The reported request size is the real one, before that substitution. A response body is kept up to a fixed size and marked as truncated past it, with the full size reported. The first error line is where the diagnostic value is.Redeliver
Redeliver sends a stored event again, to the same integration, with the same payload. The replay is a new delivery with its own id, linked to the original, and it appears in the feed like any other. It is signed with the integration’s current signing secret, not the one the original used. That makes it the way to confirm a secret rotation reached your receiver: rotate the secret, update your endpoint, redeliver an earlier event, and a Delivered outcome proves the new secret is accepted. There is no need to wait for a real alert, and no need to wait out the 24-hour dual-signing window to find out. Redeliver is rate-limited per integration, so a replay loop cannot hammer an endpoint. Over the limit it is refused rather than queued.Send test event
Send test event delivers a test payload and reports the real outcome, rather than only that it was sent. It is always sent, whatever event types the integration subscribes to. A test that silently matched no subscription would report exactly what a broken endpoint does, and telling those two apart is the only reason to run a test. On Opsgenie it opens a real alert, aliased so repeated tests do not stack up, because that is the only thing the integration does.Over the API
Everything above is available over the public API. Reading needs a token with Read Deliveries (SCOPE_DELIVERY_READ); replaying and testing need Send and Replay Deliveries (SCOPE_DELIVERY_EDIT). Create a token under API settings and get an access token as described in Getting Started.
The examples use the EU endpoint. For other regions use api.us.synq.io or api.au.synq.io.
List deliveries
pageInfo.lastId as pagination.cursor for the next page; an empty lastId means there are no more.
Omit integrationId for the whole workspace’s feed. Add includeRouting=true to get the alert configurations that selected each integration — it is off by default because it costs an extra read per delivery.
Filter by outcome
outcomes and statusCodes repeat, so -d outcomes=OUTCOME_FAILED -d outcomes=OUTCOME_SKIPPED matches either. eventTypes filters by event type name, and eventId narrows to a single event across every integration it reached.
Find every integration one event reached
eventId is the event_id from the webhook payload your endpoint received.
Fetch the attempts of a delivery
<delivery-id> is the id of a delivery from the list — an opaque value composed by the service. Pass it back as it came; do not build one yourself.
Replay a delivery
OUTCOME_PENDING:
Send a test delivery
Watch your own delivery failure rate
deliveries.
Related
- Using Webhooks — event types, payload schema, custom headers and signature verification.
- PagerDuty and Opsgenie — setting those integrations up.
- API Scopes — the full scope reference.