List per-recipient deliveries
Returns the per-recipient, per-device delivery rows for one broadcast - the answer to “did customer X receive it, on which device, and why not”.
A customer holding the pass on two platforms appears twice (one row per device). Rows settle from pending to delivered/failed as the fan-out drains; a cleanup sweep marks anything stranded as failed, so the collection always reaches a terminal state.
Common patterns:
- Failed-only audit:
?status=failed- each row carries the provider error - Per-customer check:
?customer_id=cus_... - Re-target failures: collect
customer_ids from failed rows and send a follow-up broadcast withaudience.customer_ids
See Pagination.
Scope: notifications:read.
Authorizations
Your secret API key as a Bearer token: Authorization: Bearer vxn_sk_.... Keys are created and scoped in the dashboard - see Authentication.
Path Parameters
Notification identifier (ntf_ prefix).
^ntf_[A-Za-z0-9]+$Query Parameters
Filter: pending, delivered, failed.
pending, delivered, failed Filter: apple_wallet, google_wallet.
apple_wallet, google_wallet One recipient's rows.
^cus_[A-Za-z0-9]+$Page size, 1-100. Default 25.
1 <= x <= 100Cursor - the ntd_ id of the last row on the previous page (forward). Numeric offset or page parameters are not supported; cursors are the only supported paging mechanism.
^ntd_[A-Za-z0-9]+$Reverse cursor - rows before this ntd_ id.
^ntd_[A-Za-z0-9]+$Response
Paginated delivery rows.
Cursor-paginated per-recipient delivery rows.
Always "list".
"list"Delivery rows.
True when more pages exist.
Cursor for the next page in the direction you are already paging, or null when this page ends the collection. has_more: true always comes with a non-null next_cursor.
Feed it back to the SAME parameter you used: starting_after when paging forward (the default), or ending_before when paging backward. Treat it as opaque and do not parse it.
You no longer need to take the last object's id yourself. That still works and is unchanged, but deriving the cursor from the page put the burden of knowing the sort direction on you, and it broke silently on any endpoint whose cursor is not the object id.
"cus_iofv5j4hn6bphinmmyat27tc5y"
Stable collection URL.
"/v1/notifications/ntf_01J9P0G7K9C0RYHXJ2K7A4N5MZ/deliveries"