Documentation
Sendbaze API
One REST API for transactional email and SMS. Every send returns an id in milliseconds; delivery is asynchronous and reported by webhook and in the logs.
Base URL
All requests go to https://api.sendbaze.com/v1 over HTTPS. Requests and responses are JSON. Timestamps are ISO 8601 in UTC.
Authentication
Send your API key as a bearer token. Live keys start with sk_live_; test keys start with sk_test_, validate everything, return real-looking ids and never send or consume credits.
curl https://api.sendbaze.com/v1/emails \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{ ... }'Keys are shown once when created and stored only as a hash. Each key carries scopes: emails:send, sms:send, domains:write and read.
Your first send
send.ts
import { Sendbaze } from "@sendbaze/sdk";
const sendbaze = new Sendbaze({ apiKey: process.env.SENDBAZE_API_KEY! });
const { id } = await sendbaze.emails.send({
from: "orders@yourshop.co.za",
to: "thandi@example.com",
subject: "Your order #1042 has shipped",
html: "<p>Tracking: <b>CG123456789ZA</b></p>",
});
// id: "em_01j9..." — status arrives by webhookThe quickstart walks through domain verification, keys and the first live message in about ten minutes.
Where to go next
- API reference for every field on
POST /v1/emails,POST /v1/sms, the batch endpoints and message lookups. - Errors for the error envelope and every code the API returns.
- Webhooks for delivery, bounce, complaint and opt-out events and how to verify their signatures.
- SDKs for the TypeScript client.
Conventions
- Idempotency: send an
Idempotency-Keyheader on any POST and the same key returns the same id for 24 hours. See idempotency. - Rate limit: 100 requests per second per organisation. Above it the API returns
429with aRetry-Afterheader. - Every response carries an
x-request-id. Quote it when you write to support. - Phone numbers are E.164 (
+27821234567). The sender address may be bare orName <name@domain>.