Every send creates a message — the record of truth for what SenderKit did with it. A message captures the recipient, the channel, the variables, which provider handled it, and a timeline of everything that happened. Because sending is asynchronous, the message is how you find out whether delivery actually succeeded.Documentation Index
Fetch the complete documentation index at: https://docs.senderkit.com/llms.txt
Use this file to discover all available pages before exploring further.
The message lifecycle
| Status | What it means | What triggers it |
|---|---|---|
queued | Accepted and recorded | The send() call |
rendered | Template + variables resolved | Background dispatcher |
sent | A provider accepted the message | Successful provider dispatch |
delivered | The provider confirmed delivery | Provider webhook |
failed | Delivery failed | Provider webhook, a config error, or retries exhausted |
opted_out | Recipient is unsubscribed/suppressed | Provider webhook |
The status enum also includes
dispatched. In the current pipeline a message moves
queued → rendered → sent, and the moment a provider accepts it is recorded as a
dispatched event on the message’s timeline while the status itself becomes
sent. Read sent as “handed to the provider.”rendered → sent → delivered) without calling a provider, so your logs look the same
as live without anything leaving the building.
Querying messages
List messages newest-first with cursor pagination, and filter bystatus, channel,
template, or your own metadata:
Retention
Messages are retained for a limited window and then deleted:- Free plan — 3 days
- Pro plan — 14 days
Sending
How a message gets created and dispatched.
Channels & Providers
Who delivered the message and how failures surface.