Skip to content

Send your first transactional email

Create an API key with the email scope, verify a sending domain and call the email API at https://email.eza.co.ke. The sending request format works with existing Resend SDKs after you change the base URL.

Transactional email is for password resets, receipts, sign-in codes and app notifications. It is Beta: included and supported, but not covered by uptime credits.

  • Beta
  • Sending API
  • SMTP relay

API key

Create an email API key

  1. Open your Organisation in the dashboard and go to API keys.
  2. Create a key with only the email scope.
  3. Store it as EZA_EMAIL_KEY in your app’s environment variables.

Use a separate key for each app. If one key leaks, you revoke it without touching the others.

.env
EZA_EMAIL_URL=https://email.eza.co.keEZA_EMAIL_KEY=ez_email_your_key_here

Pending engineering: API key prefixes are not final. Keep the ez_email_your_key_here placeholder until they are.

Sending domain

Verify a sending domain

Add a sending subdomain such as mail.yourapp.co.ke, then add the DNS records Eza shows. Eza requires SPF, DKIM and DMARC before you can send to external recipients.

Until the domain is verified, you can send only to members of your Organisation. That is enough to test the integration.

Verify a sending domain

Send

Send with the Resend SDK

Install the resend package and point it at Eza with the baseUrl option.

Terminal
npm install resend
reset-password.ts
import { Resend } from 'resend' const email = new Resend(process.env.EZA_EMAIL_KEY, {  baseUrl: process.env.EZA_EMAIL_URL}) await email.emails.send({  from: 'no-reply@yourapp.co.ke',  to: 'user@example.com',  subject: 'Reset your password',  html: '<p>Use your password reset link.</p>'})

Send HTML, plain text or both. If you send only HTML, Eza generates a plain-text version.

Pending engineering: confirm the full list of compatible sending endpoints and response schemas before publishing. The sample stays valid only while Eza tracks the public Resend SDK contract.

SMTP

Or send through SMTP

Frameworks with built-in mail support can use SMTP relay at smtp.eza.co.ke instead. The username is eza and the password is your email API key.

Laravel .env
MAIL_MAILER=smtpMAIL_HOST=smtp.eza.co.keMAIL_PORT=587MAIL_USERNAME=ezaMAIL_PASSWORD=${EZA_EMAIL_KEY}MAIL_ENCRYPTION=tls
Read the SMTP guide

Delivery events

Track delivery

Add a webhook endpoint to receive email.delivered, email.bounced and email.complained events. Eza webhooks are signed with Eza-Signature and are not Resend-compatible.

Receive email events

FAQ

Transactional email questions

Does my app need to run on Eza?

No. Any app with an Eza API key that has the email scope can send, wherever it runs.

Can I send newsletters?

No. Newsletters, marketing campaigns, promotional bulk email and purchased contact lists are not allowed.

What happens if my Organisation is suspended?

New sends return org_suspended. Messages accepted before suspension are still delivered, and scheduled sends are cancelled. On an overdue but limited account, sending continues.