Quickstart
You need a day3 account. Nothing else.
Mint a key
In the app, open API keys and create one. You must be an organization admin. The key is shown once; day3 stores only its SHA-256 hash.
Leave the elevated scopes off. The base grant covers transactional sends and everything list-related.
export DAY3_API_KEY="day3_live_xxxxxxxxxxxxxxxxxxxx"Read it from the environment. Never commit it, never paste it into a prompt.
Check that it works
curl https://go.day3.app/api/v1/audiences \
-H "Authorization: Bearer $DAY3_API_KEY"200 with a data array: the key is live. 401 invalid_api_key: mistyped or
revoked.
Send
Every new organization gets a test address on a day3-owned domain, so your
first send needs no DNS. Find it under Sending, on the card above the domain
list. It looks like acme@sandbox.day3.app.
curl -X POST https://go.day3.app/api/v1/emails \
-H "Authorization: Bearer $DAY3_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"from": "Acme <acme@sandbox.day3.app>",
"to": ["you@example.com"],
"subject": "Hello from day3",
"html": "<p>It works.</p>"
}'Send it to yourself. The test address only reaches members of your own organization, because its reputation is shared with every day3 account. Full rules: the day3 test address.
You get back the Email object with status: "queued". Delivery is
async and usually lands in seconds:
{
"id": "eml_0dz4k9x2v7q1",
"object": "email",
"from": "Acme <acme@sandbox.day3.app>",
"to": ["you@example.com"],
"subject": "Hello from day3",
"status": "queued",
"sandbox": true,
"created_at": "2026-08-21T09:00:00.000Z",
"sent_at": null,
"delivered_at": null
}Poll GET /emails/{id} to watch it reach delivered, or use
webhooks and let day3 tell you.
Verify your own domain
To reach anyone outside your organization, verify a sending domain under
Sending. Then any local part works with no sender setup: noreply@,
receipts@, hello@.
"from": "Acme <noreply@yourdomain.com>"That is the only line that changes. An unverified domain returns
403 domain_not_verified. Verify it; don’t retry.
On a free plan
Free organizations send in sandbox mode: real email, only to members of your
organization, 100 emails a month. Responses carry "sandbox": true. Anyone else
is 403 sandbox_recipient_not_allowed.
Upgrading lifts both limits with no code change. Your sandbox integration is already the production integration.
One thing does change: the test address stops working on upgrade, because it only carries sandbox mail. Verify your own domain first and the switch is one line.
Next
- Emails: the full sending contract, including multiple recipients, custom headers and tags.
- Conventions: pagination, idempotency, rate limits. Read it before you write an import script.
- Migrate a list: moving off another provider.
- Automations: start a welcome series from your backend.