Skip to Content
Quickstart

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.
Last updated on