Email messaging model
Understand how immediate, scheduled, and campaign email share messages, contacts, conversations, templates, and events.
Every email Samva sends or receives is a message. An immediate send, a scheduled send, and each recipient of a campaign run all create messages the same way, so they share one set of records and one stream of events. Learn the model once and it applies to every way you send.
One message per email
A send returns a message ID (msg_…). That ID follows the email through its lifecycle: the message
status you read from the API, the entries in Observe → Activity, and the messageId in every
message event all refer to it. An inbound reply is a
message too, with its own ID.
email.send() in the SDK and POST /v1/messages create the same message.
Email and the messages API explains the two request
shapes and when to use each.
Shared records
Messages point at records your organization keeps across sends:
- Contacts. Address a send to
{ contactId }instead of repeating an email address. Samva keeps each contact's identities, tags, and status. - Conversations. An inbound reply threads into the conversation of the email it answers, and a
send with a
conversationIdcontinues that thread. - Templates. Reference a published, versioned template by
templateIdortemplateSluginstead of sending inline content. - Events. Delivery outcomes, inbound email, and changes to contacts and conversations arrive at your webhook endpoints as signed events.
Scheduled and campaign email
A scheduled email creates its message when it dispatches,
and the scheduled message then reports that messageId. A campaign run creates one message per recipient.
From that point both behave exactly like an immediate send: the same statuses, suppression checks,
delivery events, and reply threading.
Related
Related documentation
Platform
Learn the email messaging model and receive signed webhook events for delivery, inbound email, and changes.
Contact events (Preview)
Preview · Available to selected organizations. Record custom contact events, retry them safely, and read each contact's event timeline through the SDK, REST API, CLI, or MCP.