Documentation
Getting started
SnappyMails exposes a complete, Brevo-compatible public API for sending transactional email, syncing contacts and lists, tracking behavioral events, triggering visual workflows, running A/B split-tested campaigns, and sending WhatsApp messages.
Base URL
All public endpoints live under a single base URL:
https://app.snappymails.comRequests and responses are JSON (Content-Type: application/json), timestamps are RFC 3339 and IDs are strings. The transactional endpoint accepts the same payload as Brevo's POST /v3/smtp/email, so in most cases migrating is a matter of changing the host and the API key.
Create an API key
- Create an account (or sign in) and verify your email address — sending is blocked with
403 email_not_verifieduntil the owner's email is confirmed. - Add and verify a sender domain under Sender domains. The
sender.emailof every message must belong to a verified domain. - Open API Keys & SMTP in the portal and create a key. The full key (
sm_live_…) is shown only once; store it in a secret manager or environment variable.
Keep keys server-side
Permissions
When creating a key you can restrict it to specific permissions. A key created without any permission has full access to every endpoint below.
| Permission | Allows |
|---|---|
smtp:send | Sending email with POST /v3/smtp/email, POST /v1/tx/send and the SMTP relay (as the SMTP password). |
templates:read | Listing templates with GET /v3/smtp/templates. |
contacts:write | Creating, updating, listing and managing contacts & lists via /v3/contacts*. |
events:write | Tracking custom behavioral events via POST /v3/events and POST /v1/events (and triggering active automation workflows). |
whatsapp:send | Sending and reading WhatsApp messages via /v1/whatsapp/*. |
Calling an endpoint with a key that lacks the required permission returns 403. See Authentication for details.
Your first request
Export your key as SNAPPYMAILS_API_KEY and send an email. Every example in these docs reads the key from that environment variable.
export SNAPPYMAILS_API_KEY="sm_live_..."curl -X POST 'https://app.snappymails.com/v3/smtp/email' \
-H "api-key: $SNAPPYMAILS_API_KEY" \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"sender": {
"name": "Acme Shop",
"email": "no-reply@acme.com"
},
"to": [
{
"email": "jane@example.com",
"name": "Jane Doe"
}
],
"subject": "Hello from SnappyMails",
"htmlContent": "<p>Hi {{ params.NAME }}, your first email is on its way!</p>",
"params": {
"NAME": "Jane"
}
}'A successful call returns 201 Created with the message id you can use to look the message up later:
{
"messageId": "<3f1c2a9e-8b7d-4d61-9a63-0c2f5e7b1d44@snappymails>"
}Next steps
Prefer generating a client? Download the OpenAPI 3.1 specification.