Maya
maya@example.com
To: support@reply.acme.com
Re: Your order A-1042
Could you update the delivery address?
I've attached the details.
Thanks,
Maya
delivery-address.pdf
PDF · 18 KB
Email for product teams. Receive on a domain you own. Samva parses each reply, threads it into a conversation, and posts it to your webhook. Fetch the thread by id from your app or a coding agent.
The sender, the reply, and the conversation it belongs to. See the email beside the fields your app receives.
Maya
maya@example.com
To: support@reply.acme.com
Could you update the delivery address?
I've attached the details.
Thanks,
Maya
delivery-address.pdf
PDF · 18 KB
POST /webhooks/samva
Example event · excerpt
{
"type": "message.received",
"data": {
"messageId": "msg_7q2xk9mvt4znw8rh",
"channel": "email",
"direction": "inbound",
"from": "maya@example.com",
"to": "support@reply.acme.com",
"subject": "Re: Your order A-1042",
"conversationId": "conv_8r3ym2nkv5xpq9tw",
"hasAttachments": true,
"isAutoReply": false,
"body": "Could you update the delivery address? I've attached the details. Thanks, Maya"
}
}Verify the webhook signature before using these fields. The body contains HTML when available, otherwise text.
Enable receiving on your domain and route incoming email to your registered webhook.
Check the signature, then use messageId and conversationId to connect the reply to your app.
Fetch the email for attachment metadata and content links, or the conversation for its history.
Enable receiving for your verified domain and publish the inbound records Samva provides. Check existing mailbox routing before changing MX records; use a dedicated subdomain to keep your current inbox separate.
Enable inbound emailSubscribe to message.received and verify the webhook signature before processing it. Fetch the message and its conversation to read the full reply. Use the webhook-id request header to process each event once, even when delivery is retried.
Fetch the conversation before responding. Send your response with email.inReplyToMessageId set to the Samva message id you are answering. Your app decides when and what to send.
Ready to build it? Follow the inbound parsing guide for the receive, verify, thread, and reply flow, then run the runnable cookbook.
Inbound mail arrives already parsed, so your handler works with fields, not raw mail.
One conversation keeps every message, sent and received, in a thread you can fetch by id.
Verify the signature against the raw body before you act on it. A non-2xx response gets retried by the delivery queue.
Each one arrives as the same event shape.
A customer's reply lands back in your app, threaded to the ticket that started it.
A conversationId groups related email. Reply using the message id you are answering.
A hasAttachments flag tells you a reply carried a file before you open it.
Use isAutoReply to filter detected automated responses from a queue meant for people.
Point your domain's mail records at Samva once. From there, replies are parsed, threaded into conversations, and delivered to your app as signed webhooks.
Samva threads a reply by its references, falling back to subject and participants, and starts a new conversation when nothing matches. Threading is part of the data model, so related mail stays in one conversation instead of a mailbox you reconcile yourself.
The message id, sender, subject when present, conversation id, attachment and auto-reply flags, and the body when available. Fetch email details for attachment metadata and stored content links. Verify the webhook signature before processing the event.
At an address on a domain you have verified with Samva. Once the domain's records are published and verified, mail sent to it routes to Samva for parsing and delivery to your endpoint.
Sign up and route replies into your app as signed events.