For developers
An email API that stays out of your way.
Send receipts, password resets and alerts from your app with one HTTP request or over SMTP. Webhooks tell you what happened, and AI agents can send through MCP.
Send your first email
One request. Any language.
Create an API key in the dashboard, verify your domain, and send. The response gives you an id to look the email up later.
curl -X POST https://app.getozi.com/api/v1/emails \
-H "Authorization: Bearer $OZI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "[email protected]",
"from": "[email protected]",
"subject": "Your order is confirmed",
"html": "<p>Thanks for your order!</p>"
}'const response = await fetch("https://app.getozi.com/api/v1/emails", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.OZI_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
to: "[email protected]",
from: "[email protected]",
subject: "Your order is confirmed",
html: "<p>Thanks for your order!</p>",
}),
});
const { emailId } = await response.json();import os
import requests
response = requests.post(
"https://app.getozi.com/api/v1/emails",
headers={"Authorization": f"Bearer {os.environ['OZI_API_KEY']}"},
json={
"to": "[email protected]",
"from": "[email protected]",
"subject": "Your order is confirmed",
"html": "<p>Thanks for your order!</p>",
},
)
print(response.json()["emailId"])body := strings.NewReader(`{
"to": "[email protected]",
"from": "[email protected]",
"subject": "Your order is confirmed",
"html": "<p>Thanks for your order!</p>"
}`)
req, _ := http.NewRequest("POST", "https://app.getozi.com/api/v1/emails", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("OZI_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)What you get
Everything around the send, too.
REST API
Send one email or a batch, schedule, reschedule and cancel. Manage contacts, lists and domains from code.
SMTP relay
Already sending over SMTP? Use smtp.getozi.com on ports 465, 587, 2465 or 2587 with your API key as the password.
Webhooks
Signed calls to your endpoint for every delivery, bounce, open, click and complaint, plus incoming mail.
Request logs
Every API request with its status, timing and the key that made it, to debug without guessing.
Safe retries
Send an idempotency key and a retried request never sends the same email twice.
Integrations
Connect Vercel and Supabase in a few clicks, and use Ozi for your auth emails.
Let your AI agents send email.
Ozi runs an MCP server, so assistants like Claude and your own agents can send email, check whether it arrived and keep contacts up to date. They use the same API key, limits and domains as your app.
send_email
Send an email from one of your domains
get_email
Check what happened to an email
list_emails
See recent emails and their status
list_domains
List the domains it can send from
list_contact_books
Find your contact lists
add_contact
Add or update a contact
Questions, answered
Something else? Email us and a person will answer.
Which languages are supported?
Any language that can make an HTTP request, since the API is plain JSON over HTTPS. If your framework already sends email over SMTP, point it at Ozi instead and change nothing else.
How do I know an email was delivered?
Register a webhook and Ozi calls your endpoint as each email is sent, delivered, opened, clicked, bounced or complained about. Every delivery attempt is logged, and failed ones can be sent again.
Can I send in bulk or schedule emails?
Yes. Send a batch in one request, schedule an email for later, and reschedule or cancel it before it goes.
What is MCP?
The Model Context Protocol is how AI assistants and agents use outside tools. Add Ozi's MCP server to an agent and it can send email, check on it and manage contacts, with the same API key and limits as your app.
Get an API key in two minutes.
Sign up free, verify your domain and send your first email from code today.