Skip to main content

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.

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.

The message lifecycle

StatusWhat it meansWhat triggers it
queuedAccepted and recordedThe send() call
renderedTemplate + variables resolvedBackground dispatcher
sentA provider accepted the messageSuccessful provider dispatch
deliveredThe provider confirmed deliveryProvider webhook
failedDelivery failedProvider webhook, a config error, or retries exhausted
opted_outRecipient is unsubscribed/suppressedProvider 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.”
In test mode, SenderKit synthesizes this lifecycle (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 by status, channel, template, or your own metadata:
const { data, nextCursor } = await senderkit.messages.list({
  status: "failed",
  channel: "email",
});
The API also supports a live tail (a Server-Sent Events stream) for watching sends in real time. See the API Reference, the TypeScript SDK, and the CLI for the full surface.
Attach metadata (e.g. { userId: "usr_123", orderId: "ord_9" }) when you send. It’s indexed, so you can later filter messages down to a single user or order.

Retention

Messages are retained for a limited window and then deleted:
  • Free plan — 3 days
  • Pro plan — 14 days
Don’t treat SenderKit as your long-term audit log. If you need history beyond your plan’s retention window, export or persist messages in your own system, and use metadata to correlate them with your records.

Sending

How a message gets created and dispatched.

Channels & Providers

Who delivered the message and how failures surface.