# X_NOTIFY_DELIVERY_FAILED

## Means

a channel did not accept the delivery

## Typical cause

a channel's `deliver` threw. Wrapped rather than rethrown so the dead-letter row carries a stable code and names the channel — a raw provider error names only itself. The ledger row is settled `failed` first and stays re-claimable, so the job's own retry policy decides whether it goes out again. Rendered through `renderThrowable`, never `${cause}`: a provider rejection is routinely an object whose `toString` throws

## Fix

`x jobs list --json` for the run, then `x jobs show <id> --json` — the failing step is `deliver:<channel>`, and `meta.channel` names it

[Notifications](/error-codes#notifications)
