Send email in one typed call.
Password resets, receipts, invites, and alerts go out from your domain with one call. Every send comes back as events you can act on, so a missing login link is something you see, not something a user reports.
A 200 from the API only means the request was accepted. What your user needs is the email in their inbox, and what you need is to know when it didn't get there.
Send, retry, schedule, and hear back.
Call send.
From the TypeScript SDK (async/await or Effect), REST, the CLI, or hosted MCP. Other languages use the public OpenAPI document.
Retry without doubles.
Send an idempotency key. A retried request inside 24 hours returns the first result.
Schedule it if it can wait.
Set a send time. Cancel or resume it before it goes.
Hear what happened.
Sent, delivered, bounced, complained, and failed events reach your webhook, signed and retried up to 8 times. Opens and clicks on tracked sends do too.
import { createClient } from "samva";
const samva = createClient({ apiKey: process.env.SAMVA_API_KEY! });
const message = await samva.email.send(
{
to: "ada@example.com",
subject: "Reset your password",
html: "<p>Use this link to choose a new password.</p>",
text: "Use this link to choose a new password.",
},
{ idempotencyKey: "password-reset-4417" },
);- One typed call
- 24-hour idempotency
- Signed events with 8 retries
- OpenAPI 3.1 at /v1/openapi.json
Comparing providers? Read the transactional email API checklist.
Read next: Send email with Node.js · Send email with Python · Replace Amazon SES · Samva vs Amazon SES · Changelog
Common questions.
What counts as transactional email?
Email a person triggers or expects: sign-in links, password resets, receipts, invites, and alerts. Samva also sends announcements to a list through campaigns.
Which languages can I use?
The TypeScript SDK, plain REST from any language, or a client generated from the OpenAPI document.
What happens if my request times out and I retry?
Use an idempotency key. Samva returns the original result for 24 hours instead of sending a second email.
How do I know an email arrived?
Subscribe to delivery webhooks. Each event is signed so you can verify it came from Samva.
The rest of the email API.
Send email in one typed call
Transactional email from the SDK, REST, CLI, or your agent through MCP. Retries are safe.
Replies land in your app
Receive on your domain, parsed and threaded to the email it answers, delivered as a signed webhook.
Change the email without a deploy
Versioned templates in Git. Review the diff, publish that version.
Know why an email did or didn't land
SPF and DKIM on your domain, suppression you can see, events for every send.
Send the announcement too
Campaigns go to a list of contacts from the same templates and domain.
An inbox for your AI agent
A mailbox your agent reads and replies from, with a key that reaches only it.