For developers

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 reference
curl 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..."}

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.

No credit card10,000 emails freePay as you go