NewTownsquare: end-to-end encrypted team chat for your organizationRead more ↗

Developers

Send email from your own code.

The why.email API sends the mail your software has to send — sign-in links, receipts, alerts, password resets. You add a domain, get an API key, and post the message. We handle the DNS records, the queueing, and the retries, and show you what happened to each one.

$POST https://api.why.email/v1/emails
@
Free plan
3,000
Emails a month, no card
Per request
100
Messages in one batch
Delivery logs
30 days
Of events on every plan
API

One request to send a message. And a record of what happened to it.

One request to send a message

A single HTTP endpoint takes the message and returns an id. You can send one at a time or up to 100 in a batch. There is a Go SDK and a TypeScript SDK, both with no dependencies beyond the standard library, if you would rather not write the HTTP call yourself.

POST /v1/emails
curl https://api.why.email/v1/emails \
  -H "Authorization: Bearer sk_live_..." \
  -d '{
    "from": "receipts@yourdomain.com",
    "to": ["ada@example.com"],
    "subject": "Your receipt",
    "text": "Thanks for your order."
  }'

{ "id": "em_3Kd91", "status": "queued" }

You can see what happened to it

Every send is logged with its result: queued, delivered, bounced, opened, complained. The console shows the log, and webhooks push the same events to your own server so your app can react — stop emailing an address that hard-bounced, mark an invoice as delivered.

console.why.email — logs
09:41:12ada@example.comdelivered
09:41:09ben@example.comdelivered
09:40:58chi@example.comopened
09:40:31old@example.combounced

Most of the work in sending email is not the sending.

These are the pieces you would otherwise build yourself.

Sending domains

We generate the DKIM, SPF, and DMARC records, then check them. Sending is blocked until the domain verifies, so you find out at setup rather than in someone's spam folder.

API keys

A key per environment. See when each was last used, and revoke one without touching the others.

Webhooks

Delivery, bounce, open, and complaint events posted to your endpoint. Signed so you can check they came from us, and retried if your server is down.

Suppression list

Addresses that hard-bounced or complained are held back automatically. Sending to them again does not hurt your domain's reputation.

Templates

Keep the message body in the console. Variables are filled in at send time, so copy changes do not need a deploy.

Deliverability checks

Your domain's DNS records, authentication results, and bounce rate in one view. See a problem before it becomes a pattern.

Pricing · 03 / 03

Two plans.

Priced on messages sent. Prices include everything above — the free plan is not missing features, only volume.

Free limit
Sending stops until the next period. No overage, so no bill
Past 50,000
₦0.50 per email on Pro, from credit you top up
Changing plans
Move between them at any time
Cancelling
Keep Pro until the period you paid for ends, then return to the free limits

Free

₦0
No card needed

For trying it out and for small side projects.

  • 3,000 emails a month
  • 100 emails a day
  • 1 sending domain
  • API keys, webhooks, and both SDKs
  • 30 days of delivery logs and events
  • Sending stops when you reach the limit — you can never run up a bill
Create an account

Pro

₦20,000
Per month

For sending you depend on.

  • 50,000 emails a month
  • No daily limit
  • ₦0.50 per email past 50,000, taken from credit you top up
  • 10 sending domains
  • API keys, webhooks, and both SDKs
  • 30 days of delivery logs and events
Start on Pro

Questions

Common questions.

Do I need a mailbox to use the API?
No. A developer account is separate from a mailbox. You sign up with an email address, verify it, and add a sending domain.
What happens when I hit the free limit?
Sending stops until the next period, or until you upgrade. There is no overage on the free plan, so it cannot produce a bill.
Can I receive mail through the API?
Replies to messages you sent are captured and kept for 30 days, and can be delivered to a webhook.
Which languages are supported?
There are official SDKs for Go and TypeScript. Everything else can use the HTTP API directly — it is plain JSON with a bearer token.

Send your first message.

Sign up, verify a domain, and you have a key. The free plan does not ask for a card.