Send email from your product. Pay in Naira.
Transactional and marketing email through one API and one dashboard, at a fixed Naira price, so exchange rates are our problem, not yours.
3,000 free emails every month. No card required.
import { SendByte } from '@sendbyte/node';
const sendbyte = new SendByte(process.env.SENDBYTE_API_KEY);
await sendbyte.emails.send({
from: 'Adaeze Stores <receipts@shop.example.ng>',
to: 'amaka@example.ng',
subject: 'Receipt for ₦45,000',
html: '<p>Payment received. Thank you, Amaka.</p>',
}); import os
from sendbyte import SendByte
sendbyte = SendByte(os.environ["SENDBYTE_API_KEY"])
sendbyte.emails.send(
from_="Adaeze Stores <receipts@shop.example.ng>",
to="amaka@example.ng",
subject="Receipt for ₦45,000",
html="<p>Payment received. Thank you, Amaka.</p>",
) $sendbyte = new SendByte\Client(getenv('SENDBYTE_API_KEY'));
$sendbyte->emails->send([
'from' => 'Adaeze Stores <receipts@shop.example.ng>',
'to' => 'amaka@example.ng',
'subject' => 'Receipt for ₦45,000',
'html' => '<p>Payment received. Thank you, Amaka.</p>',
]); curl https://api.sendbyte.africa/v1/emails \
-H "Authorization: Bearer $SENDBYTE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "Adaeze Stores <receipts@shop.example.ng>",
"to": "amaka@example.ng",
"subject": "Receipt for ₦45,000",
"html": "<p>Payment received. Thank you, Amaka.</p>"
}' $ node send.ts
- sending receipt to amaka@example.ng
- 202 Accepted { "id": "em_8f2a91c4" }
- sent, waiting on mx.example.ng
- delivered in 1.2s 250 2.0.0 OK
Emails
- Delivered Receipt for ₦45,000 amaka@example.ng now
- Delivered Your sign-in code is 482913 tunde@example.ng 1m
- Delivered Welcome to Adaeze Stores chidi@example.com 3m
- Delivered Your order has shipped zainab@example.ng 12m
Receipt for ₦45,000, event trail
- 23:04:12.081 queued POST /v1/emails 202
- 23:04:12.310 sent handed to mx.example.ng
- 23:04:13.492 delivered 250 2.0.0 OK
- 23:04:13.530 webhook email.delivered to your endpoint, 200
Send from your language of choice, over plain REST, through the SMTP relay, or from an AI agent.
- Node.js
- Python
- PHP
- Go
- REST API
- SMTP relay
- MCP server
See what happened to every email.
Every send gets a timeline, from the moment the API accepts it to the receiving server's own reply. Search it, filter it, and export it when you need to prove what went out.
The email log
Opens and clicks sit on the same timeline as delivery, and every bounce shows the reason in the server's words.
Receipt for ₦45,000
receipts@shop.example.ng to amaka@example.ng
- Sent
- 23:04:12
- Delivered in
- ... 1.2s
- Opens
- 0 2
- Clicks
- 0 1
- Queued Accepted by the API 23:04:12
- Sent Handed to the receiving server 23:04:12
- Delivered 250 2.0.0 OK 23:04:13
- Opened Chrome on Android 23:06:41
- Clicked shop.example.ng/orders/4421 23:07:02
Earlier today
- Bounced Reset your password old-inbox@example.ng 550 5.1.1 user unknown
- Delivered Your August statement is ready ifeoma@example.ng Delivered in 0.9s
- Delivered Confirm your email address bola@example.com Opened twice
Domains, verified in one paste
We generate the exact SPF, DKIM, and DMARC records, then keep checking them after your domain verifies.
Bounces, handled for you
A hard bounce is suppressed automatically, so the next send to that address stops before it leaves. Lift it once the address is fixed.
- Templates
- MJML and Handlebars, versioned, with test sends.
- Scheduled sends
- Pass scheduled_at and we send it on time.
- Team roles
- Admin, developer, and viewer access for everyone on the project.
- CSV export
- Download your full send history whenever you need it.
Campaigns, from the same account.
Build lists, design a campaign, and send it to thousands of subscribers. Marketing mail goes out separately from your transactional mail, so a newsletter never puts a receipt at risk.
- Included on every plan, Free too, sized by subscribers and brands.
- Large sends go out in hourly batches that protect your reputation.
- Unsubscribes and bounces are processed automatically on every list.
September restock
Adaeze Stores · All customers · 12,480 subscribers
Sent so far
8,000 of 12,480
- Delivered
- 7,912
- Opened
- 3,104
- Clicked
- 611
- Unsubscribed
- 14
Example campaign. Figures are illustrative.
One price, in Naira. It stays put.
Monthly plans with the email allowance included, paid on your Naira card. A dollar-priced bill changes every time the exchange rate does. Ours does not.
A $20 plan, billed in dollars
₦29,764
at ₦0123456789,012345678901234567890123456789.01234567890123456789 to the dollar
SendByte Starter, billed in Naira
₦15,000
The same every month.
| Plan | Month 1 | Month 2 | Month 3 | Month 4 | Month 5 | Month 6 |
|---|---|---|---|---|---|---|
| $20 plan | ₦29,764 | ₦30,248 | ₦30,958 | ₦30,062 | ₦31,392 | ₦30,636 |
| SendByte Starter | ₦15,000 | ₦15,000 | ₦15,000 | ₦15,000 | ₦15,000 | ₦15,000 |
A dollar-priced plan converted at illustrative exchange rates.
| Plan | Per month | Emails included | Beyond the allowance | Also |
|---|---|---|---|---|
| Free Upgrade for more No card required | ₦0 | 3,000 | Upgrade for more | No card required |
| Startup ₦300 per 1,000 Unbranded emails | ₦2,000 | 6,000 | ₦300 per 1,000 | Unbranded emails |
| Starter ₦300 per 1,000 Email support | ₦15,000 | 50,000 | ₦300 per 1,000 | Email support |
| Growth ₦200 per 1,000 99.5% uptime SLA | ₦45,000 | 200,000 | ₦200 per 1,000 | 99.5% uptime SLA |
| Scale ₦200 per 1,000 99.9% uptime SLA | ₦200,000 | 1,000,000 | ₦200 per 1,000 | 99.9% uptime SLA |
Pay as you go instead: ₦300 per 1,000 emails from your wallet.
Built the way you would build it.
Your first email is under five minutes away, and the details hold up when you go to production.
- Signed webhooks
- Every event carries a SendByte-Signature header, and every SDK verifies it for you.
- One error shape
- Each error says what happened, how to fix it, and links to its own docs page.
- Safe retries
- Send with an idempotency key and retry freely. The same key sends once.
- A real sandbox
- Test keys work before you verify a domain, with full logs and no real delivery.
{
"type": "email.delivered",
"created_at": "2026-09-30T22:04:13Z",
"data": {
"email_id": "em_8f2a91c4",
"to": "amaka@example.ng",
"subject": "Receipt for ₦45,000",
"smtp_response": "250 2.0.0 OK"
}
} {
"error": {
"code": "validation_error",
"message": "The `to` field must be a valid email address.",
"docs_url": "https://docs.sendbyte.africa/errors/validation_error"
}
} await sendbyte.emails.send(payload, {
idempotencyKey: 'order-4421-receipt',
});
// Retry as often as you need.
// The same key sends exactly once. Your endpoint
- 22:04:13.541 POST /hooks/sendbyte
- 22:04:13.543 sendbyte-signature valid
- 22:04:13.579 200 OK in 38ms
import { verifyWebhookSignature } from '@sendbyte/node';
app.post('/hooks/sendbyte', (req, res) => {
const valid = verifyWebhookSignature(
process.env.SENDBYTE_WEBHOOK_SECRET,
req.headers['sendbyte-signature'],
req.rawBody,
);
if (!valid) return res.status(401).end();
const event = JSON.parse(req.rawBody);
res.status(200).end();
}); One plan for every channel.
Email is live today. SMS and WhatsApp are being built on the same API and dashboard, and they will arrive on the plan you already have.
- Live
Transactional email
Receipts, OTPs, and alerts that reach the inbox.
- Live
Marketing email
Newsletters and campaigns, without risking your receipts.
- Coming soon
SMS
One-time codes and alerts over SMS.
Get early access - Coming soon
WhatsApp
Reach customers on the app they already open.
Get early access
Questions
Something not covered here? Ask the team.
What is SendByte?
SendByte is an email platform for developers and the businesses they build for. One API and one dashboard send transactional email (receipts, one-time passcodes, password resets, alerts) and marketing email (newsletters and campaigns). Every plan is priced in Naira. SMS and WhatsApp are being built to run on the same API, dashboard, and bill.
Which channels can I use today, and what is coming?
Transactional email and marketing email are both live. SMS and WhatsApp are in build and will arrive on the same five plans, so nothing about your subscription changes when they launch. You can request early access to either one today.
How is SendByte different from Resend or SendGrid?
The price is fixed in Naira and you pay with a Naira card, so exchange-rate swings are our problem, not yours. Transactional and marketing email share one account and one bill, with marketing sent separately so a newsletter never puts your receipts at risk. The developer experience is built to the same standard: typed SDKs, signed webhooks, idempotent sends, a real sandbox, and a searchable log of every email.
How quickly can I send my first email?
Under five minutes. Sign up, copy your sandbox key, and send with a single API call. You do not need to set up a domain to start in sandbox mode.
Which languages and SDKs do you support?
A REST API plus official SDKs for Node.js, Python, PHP, and Go, an SMTP relay for anything that already speaks SMTP, and an MCP server for AI agents. Ruby is on the public roadmap. Every SDK ships with webhook signature verification.
Do I need a verified domain to start?
No. Sandbox sending works immediately with a test key, with full logs and no real delivery. A verified domain is required only for live sending, and we generate the exact SPF, DKIM, and DMARC records for you to paste.
How much does it cost?
The Free plan includes 3,000 emails a month with no card required. Paid plans start at ₦2,000 a month, and pay-as-you-go is ₦300 per 1,000 emails. Marketing email is included on every plan, including Free, sized by how many subscribers and brands you run.
Your first email is five minutes away.
3,000 free emails every month. No card required.