Get started

Manzo follows Resend's API. If you have used Resend, you know most of this already. This page covers your first email and what differs. Moving an existing app? Follow the migration guide.

Get an account

We set up every account with you. Email us and we will add your first domain together and give you a sign-in.

Send your first email

Use the official Resend SDK with our base URL. You need a verified domain and an API key.

send.ts
import { Resend } from "resend";

const resend = new Resend(process.env.MANZO_API_KEY, {
  baseUrl: "https://manzo.dev",
});

const { data, error } = await resend.emails.send({
  from: "Your app <hi@yourapp.com>",
  to: "ada@example.com",
  subject: "Your sign-in code",
  html: "<p>Your code is 482913.</p>",
});

Or call the API directly:

curl
curl -X POST https://manzo.dev/emails \
  -H "Authorization: Bearer $MANZO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "Your app <hi@yourapp.com>",
    "to": "ada@example.com",
    "subject": "Your sign-in code",
    "html": "<p>Your code is 482913.</p>"
  }'

A successful send returns {"id": "..."}. Find the email in your log by that ID, or call GET /emails/:id.

What is the same as Resend

  • Request and response shapes for emails, batches, domains, API keys, templates, contacts, segments, broadcasts and webhooks.
  • Error names and status codes, so the SDK's error handling keeps working.
  • Rate limit headers and Idempotency-Key.
  • Webhook event names, payloads and signatures.

We test these with the official Node SDK on every change.

What differs

  • Open and click tracking is not available yet. Domains refuse open_tracking or click_tracking set to true.
  • There is no SMTP relay and no inbound email.
  • Email bodies are not stored, so GET /emails/:id returns null for html and text.
  • We send from one region in the United States.
  • Attachments can total 25 MB on each email.