An email API you can read in one sitting.
One JSON endpoint to send, five official SDKs, SMTP for everything else, and docs that fit on a few pages. $0.30 per 1,000 emails, with nothing to upgrade to.
Send your first email
Verify a domain, create a key, and POST. The response gives you a message ID you can look up later.
Send email referencecurl https://api.tosend.com/v2/emails \
-H "Authorization: Bearer tsend_..." \
-H "Content-Type: application/json" \
-d '{
"from": {"email": "hello@yourapp.com", "name": "Your App"},
"to": [{"email": "user@example.com"}],
"subject": "Your login link",
"html": "<p>Click to sign in.</p>"
}'
# 200 OK
# {"message_id": "a1b2c3d4e5f6789..."} Official SDKs
Each one covers sending, batches, attachments and account info, plus an Admin API client.
What the API covers
-
Send and batch
Up to 50 recipients per email, or 100 emails in one batch request. HTML, text or both; a text version is generated when you send only HTML.
Docs -
Attachments and headers
Attachments up to 10 MB per email, custom headers, reply-to, CC and BCC. Your List-Unsubscribe header is passed through untouched.
Docs -
Signed webhooks
Bounce and complaint events posted to your URL, signed with HMAC-SHA256 when you set a secret.
Docs -
Keys per domain
Limit a sending key to one domain, so each app can only send as itself. Revoke any key at any time.
Docs -
Admin API
Manage domains, logs, suppressions, webhooks, keys and client teams from code, with scoped admin keys.
Docs -
SMTP when you need it
For frameworks and tools that only speak SMTP: TLS on 465 and 587, with 2465 and 2587 for networks that block the standard ports.
Docs
Docs your AI assistant can read
Every docs page is also published as plain Markdown: add index.md to its URL. llms.txt lists them all, so a coding assistant can load the whole API in one go.
What we don't do
No open or click tracking, no inbound email, no stored templates and no dedicated IPs. If you need those, another provider is a better fit today.
Developer questions
What are the rate limits?
Up to 100 requests a second on the send endpoint and 10 a second on the batch endpoint, per team, measured over 10 seconds. Over the limit you get a 429 with a Retry-After header.
Which webhook events do you send?
Bounced and complaint. We don't send delivery, open or click events, and webhooks aren't retried today, so treat them as notifications and use the Admin API to look up an email's status.
Can I use it with Laravel's mailer?
Yes. The Laravel package adds a tosend mail driver: set MAIL_MAILER=tosend and your existing Mailables send through toSend.
Do you support templates?
No stored templates. Render the email in your app, with React Email, Blade, Jinja or anything else, and send the HTML.
Is there a sandbox?
Your first 10,000 emails are free, which covers most testing. Send to addresses you control, since real sends count toward your bounce and complaint rates.
Are the SDKs open source?
Yes. All five are on GitHub under the tosend organisation.
Ready to send? Your first 10,000 are on us.
Every feature included. No tiers. For one website, one app, or fifty client sites.