Delivery statuses

What each delivery outcome means, and which ones you should act on.

Every event produces one delivery attempt per connected destination, and each attempt records its own status. Five statuses exist, and they are genuinely different situations — reading skipped as a failure, or suppressed as a bug, sends you debugging the wrong thing.

The five statuses

StatusMeaningYour move
sentThe platform accepted the event.Nothing.
skippedNot applicable — no mapping, or consent withheld it.Check mapping and consent config.
retryingA transient failure; the attempt will be repeated.Wait. Investigate only if it persists.
failedA permanent failure. No further attempts.Act — this conversion is lost.
suppressedWithheld by traffic-quality rules. Never offered to the platform.Review your risk actions.

sent

The platform returned a success. Note the limit of that claim: the platform accepted your event, which is not the same as matching it to a user. How matchable it was is match quality, and no platform reports per-event match results back.

skipped

Nothing was wrong — the event just didn’t apply to this destination. Two common causes:

  • No mapping. Google Ads is mapping-only: it sends nothing unless the event name is mapped to a conversion action. An unmapped event at Google is normal and expected, not an error.
  • Consent. With enforcement on, a denied required category skips the send. Defaults are ad_user_data and ad_storage. See Consent & privacy.

Skipped events are never retried, because nothing about them would change.

retrying

A transient failure — a timeout, a 5xx, or a 429. The attempt is repeated automatically. A brief burst of retrying during a platform incident is the system working correctly.

Sustained retrying on one destination is worth investigating: it usually means you’re being rate-limited rather than that the platform is down.

failed

Permanent. No further attempts will be made, and the conversion did not reach the platform.

This is the status to alarm on. A rising failed count almost always means one of two things: a credential problem, or a payload the platform rejects for every event of that shape. Both keep failing until you fix them.

suppressed

The event was withheld by traffic quality rules — it was never offered to the platform at all. This is distinct from failed: nothing broke, a rule chose this.

A non-trivial suppressed rate is healthy on ad traffic. A sudden spike means either a genuine fraud event or a rule you just changed catching real conversions.

Error codes

A failed or retrying attempt carries a DispatchErrorCode:

  • AUTH_ERROR — a 401 or 403. Credentials are wrong, expired, or the grant was revoked. Reconnect the destination.
  • API_ERROR — the platform rejected the request. Usually a payload the platform won’t accept.
  • TIMEOUT — no response in time.
  • NETWORK_ERROR — the request didn’t complete.
  • TRANSFORM_ERROR — the event couldn’t be built into a valid payload before it ever left. Never retried — the same input produces the same broken payload every time. Fix the event, not the destination.

Retryable vs permanent

The classification is mechanical:

ResponseOutcome
2xxsent
429 or 5xxRetryable → retrying
401 / 403AUTH_ERROR
Any other 4xxPermanent → failed

A 401 that survives a token refresh is treated as permanent. If refreshing the token and retrying still gets rejected, the grant itself is dead — retrying further just burns attempts against a revoked authorization.

Transform failures never retry, regardless of anything else.

Platform quirks worth knowing

TikTok answers with 200 and puts the real result in the body’s code field. Retryable codes are 40100, 40101, 40500, 50000, 50001; every other non-zero code is permanent. A failed TikTok delivery therefore never corresponds to a non-2xx HTTP status.

Reddit is the only destination with an age cap. Events older than seven days are rejected outright — relevant if you backfill historical conversions or if a queue backs up for days. Reddit also expects millisecond timestamps where every other platform uses seconds.

An unsubscribed workspace records every event but dispatches none of them. Delivery is the paid part — if you see no delivery attempts whatsoever across all destinations, check the subscription before debugging any of the above.