For developers · REST API + SDKs

Send email with
one API call.

A REST API designed by people who have to use it. Idempotency keys, tagged sends, full event streams, and SDKs that look like the docs.

1curl 'https://api.sendly.now/emails' \
2 -X POST \
3 -H "Authorization: Bearer sk_live_…" \
4 -H "Idempotency-Key: ord_8f2a1c" \
5 -H "Content-Type: application/json" \
6 -d '{
7 "from": "Acme <hello@acme.com>",
8 "to": "jane@example.com",
9 "subject": "Welcome to Acme, Jane.",
10 "html": "<p>Your account is ready.</p>",
11 "tags": ["onboarding", "welcome"]
12 }'
200 OK·142 ms·fra-1
{ "id": "msg_8f2a1c4b9d", "status": "queued", "to": "jane@example.com", "tags": ["onboarding", "welcome"], "created_at": "2026-05-24T14:32:09Z" }
§ 02First-class DX

Built to send at scale.

A REST API with idempotency keys baked in, queued by region, retried with exponential backoff, and signed webhooks for every event. Nothing falls on the floor.

▸ 200 OKmsg_8f2a1c4b9d128 ms
▸ 200 OKmsg_8f2a1c4b9e141 ms
▸ 200 OKmsg_8f2a1c4b9f132 ms
▸ 200 OKmsg_8f2a1c4ba0119 ms
▸ 200 OKmsg_8f2a1c4ba1148 ms
▸ 200 OKmsg_8f2a1c4ba2137 ms
§ 03Webhooks

Every event,
as it happens.

HMAC-signed payloads, automatic retries with exponential backoff, dead-letter inspection. Server-Sent Events too if you'd rather stream straight to your dashboard.

TimeEventRecipientLat
14:32:09Deliveredjane@example.com · msg_8f2a1c142 ms
14:32:14Openedjane@example.com · gmail · iOS5.1 s
14:32:31Clickedjane@example.com · acme.com/setup22 s
14:32:40Deliverednoah@acme.io · msg_8f2a1c4ba0141 ms
14:32:41Bouncedold@archive.dev · hard · suppressed98 ms
14:32:55Openednoah@acme.io · outlook · macOS14.8 s
{
  "type": "email.delivered",
  "id": "evt_3d9c2b",
  "created_at": "2026-05-24T14:32:09Z",
  "data": {
    "email_id": "msg_8f2a1c4b9d",
    "to": "jane@example.com",
    "tags": ["onboarding", "welcome"],
    "latency_ms": 142
  }
}
§ 04Templates

Write emails in React.

First-class React Email support. Components, props, themes — the same toolchain you already use, rendered to inbox-perfect HTML on send.

welcome.tsx
receipt.tsx
invite.tsx
digest.tsx
 1// emails/welcome.tsx
 2import { Html, Heading, Text, Button } from '@react-email/components'
 3
 4export default function Welcome({ name, url }) {
 5  return (
 6    <Html>
 7      <Heading>Welcome to Acme, {name}.</Heading>
 8      <Text>Your account is ready. Here's what
 9            to do next…</Text>
10      <Button href={url}>Set up your domain</Button>
11    </Html>
12  )
13}
14
15Sent via sendly.emails.send({ react: <Welcome … /> })
welcome.tsx · 5,128 ch
Acme

Welcome to Acme, Jane.

Your account is ready. Here's what to do next — verify your sending domain and ship your first email in under five minutes.

If you get stuck, reply to this email and we'll write back personally.

Set up your domain →
Acme · Halifax NS · Unsubscribe
§ 05Broadcasts

Write, design, send.
No code required.

For the marketers on your team — a visual composer that produces the same React Email components your transactional pipeline already uses.

FromAcme <hello@acme.com>
ToAudience: Active users · 24,180 contacts
SubjectA new way to write to your customers.
B
I
U
H₁
H₂
HERO IMAGE · 1200 × 600

A new way to write to your customers.

This week, Sendly ships a visual composer alongside the React Email pipeline you already know. Same components, same theme tokens — now with a drag handle.

Designed for the marketers on your team. Reviewed by the engineers who own the codebase.

Read the announcement →
Styles
HeadlineNewsreader
BodyManrope · 15
Line height1.55
Colors
Palette
Spacing
Block ↑24
Block ↓24
Inline12
§ 06Audiences

One contact, complete history.

Every send, open, click and bounce attached to a single record. Build live segments on any property — they update the moment a contact changes.

search contacts…
+ Filter
Active
EmailSegmentEventsStatus
jane@example.comfounders1,284Active
noah@acme.iofounders · pro842Active
sam@hometeam.devtrial126Active
priya@studio.cofounders2,019Active
leo@minor.appchurned312Unsub
mira@orbit.sofounders · pro1,107Active
Active founders
tag="founders"
AND
opened_count>5
AND
last_seen>30d ago
Live count4,218
§ 07Deliverability

Reach inboxes, not spam.

DKIM, SPF and DMARC records generated for every domain you add. Continuous reputation monitoring, automatic suppression lists.

Inbox-first
Reputation
Sending reputation tracked against Google Postmaster, Microsoft SNDS, and a panel of seed addresses — surfaced in your dashboard, not buried in a vendor portal.
Auto-suppress
Bounces & complaints
Hard bounces and complaints automatically suppress, never charged, never retried. Manual override is one click away.
TypeRecordTTLStatus
CNAMEsendly._domainkey.acme.com3600Verified
TXTacme.com → v=spf1 include:sendly…3600Verified
TXT_dmarc.acme.com → v=DMARC1; p=…3600Verified
CNAMEbounces.acme.com3600Verified
CNAMEtrack.acme.com3600Verified
§ 08Platform Features

Everything in your control.

Analytics
Intuitive analytics.
Sent, delivered, opened, clicked — bucketed per domain, per tag, per template, with daily and hourly resolution.
Logs
Detailed logs.
Every API call, every webhook delivery, every retry attempt — searchable by message ID, tag, or recipient.
200 POST /emails · msg_8f2a1c · 142ms
200 POST /emails · msg_8f2a1d · 138ms
429 POST /emails · rate_limit · 12ms
200 POST /emails · msg_8f2a1f · 156ms
200 GET /emails · 6 items · 24ms
Access
Scoped API keys.
Issue keys per environment, per domain, or sending-only. Hashed at rest, revocable in one click.
sk_live_prod_••••2a1cFULL
sk_live_send_••••8b42SEND
sk_live_eu_••••f193DOMAIN
Domains
Domain auth, in one click.
Add a domain, copy four DNS records, and Sendly verifies in the background. Multi-region SES included.
acme.comVERIFIED
mail.acme.euVERIFIED
tx.acme.coPENDING
Teams
Team management.
Invite by email, assign owner / admin / member roles.
amin@sendly.nowOwner
jane@acme.comAdmin
noah@acme.ioMember
+ 3 moreMember
Limits
Rate limits, visible.
Per-key request budgets surfaced live. No silent throttling — you see the meter before SES does.
Today · 68,402 / 100,00068%
Burst · 87 / 200 rps44%
§ 09SDKs

Your stack, first-class support.

Hand-written SDKs that mirror the docs verbatim. Type-safe end to end. Versioned in lockstep with the API.

Node.jsv0.2.0 · ESM + CJS
$ npm install sendly-sdk
import { Sendly } from 'sendly-sdk'

const sendly = new Sendly(process.env.SENDLY_KEY)

await sendly.emails.send({
  from: 'Acme <hello@acme.com>',
  to: 'jane@example.com',
  subject: 'Welcome.',
  react: <Welcome name="Jane" />
})
Pythonv0.1.0 · py 3.10+
$ pip install sendly-python
from sendly import Sendly

sendly = Sendly(key=os.environ['SENDLY_KEY'])

sendly.emails.send(
  from_='Acme <hello@acme.com>',
  to='jane@example.com',
  subject='Welcome.',
  html=render(welcome, name='Jane'),
)

Or keep the SDK you already run — Sendly speaks the transactional-send APIs of Resend, SendGrid, Postmark, Mailgun, and Plunk. Swap the base URL and the key. Migration guides

§ 10Quick start

Three lines.
One inbox.

Install the SDK, paste your API key, send. The dev-mode CLI watches your templates and renders live previews so you ship intentionally, not anxiously.

~/sendly · zsh
$ npm install sendly-sdk
+ added 1 package in 8s
$ npx sendly dev
Watching emails/ for changes…
Connected · sk_dev_••••2a1ceu-w1
welcome.tsx · rendered32 ms
http://localhost:3030/preview/welcome
$ curl localhost:3030/send?to=jane@example.com
✓ msg_8f2a1c4b9d · queued · 142 ms
✓ msg_8f2a1c4b9d · delivered
§ 11MCP

An endpoint for agents.

Sendly runs a remote Model Context Protocol server, so an AI client can work in your account directly. You choose what it may do: permissions that cannot be undone — sending mail, revoking API keys — are never granted by default. They sit unchecked behind a warning, and you tick them yourself.

ConnectSTREAMABLE HTTP
Sign in with OAuth
claude mcp add --transport http sendly https://app.sendly.now/api/mcp
Or hand it a secret key
claude mcp add --transport http sendly https://app.sendly.now/api/mcp \ --header "Authorization: Bearer sk_…"
OAuth suits a person connecting a desktop client — you approve the permissions on a consent screen. A secret key suits a headless or CI agent, where the key’s own permissions are what the agent may do. Sending-only pk_ keys are refused.
What you can grantPICK PER CONNECTION
Read your account
Domains, mailboxes, contacts, templates, campaigns, analytics, usage
Manage contacts & segments
Create, update, delete, and re-segment your audience
Manage templates & domains
Draft templates, add sending domains, run guided DNS setup
Build campaigns & webhooks
Campaign drafts, webhook endpoints, custom events
Send yourself a test email
Prove sending works from the sandbox. Reaches your own address and no one else
Send emailNeeds approval
One-off sends, and mailing a campaign to its whole audience
Run automationsNeeds approval
Edit and enable workflows that keep sending on their own
Create & delete mailboxesNeeds approval
Provision inboxes on a verified domain — deleting one erases every message it holds
Account administrationNeeds approval
Create, rotate and revoke API keys, create projects, edit your suppression list
An agent only sees the tools its grant covers — the rest are never registered. Withdraw a permission from Settings and the agent is refused on its next call.

Stamp something today.

A free API key, three lines of code, and your first message lands in seconds. No card, no overage email, no surprises.