Skip to content

Quickstart

This guide takes you from zero to a delivered email. Five steps.

  1. Create an account and an API key.

    Sign in to the dashboard at https://dashboard.3ava.com. Go to API Keys → Create. Give it the name quickstart and pick full_access. Copy the key — it starts with am_ — and save it. You won’t see it again.

  2. Add a sending domain.

    In the dashboard, go to Domains → Add Domain and enter the domain you want to send from (e.g. mail.yourcompany.com). 3AVA Mail generates a DKIM keypair and shows you four DNS records to add: SPF, DKIM, DMARC, and an optional MX record for inbound replies.

    Add the records with your DNS provider, wait a few minutes for propagation, then click Verify.

  3. Send the email.

    Terminal window
    curl -X POST https://mail.3ava.com/api/emails \
    -H "Authorization: Bearer am_YOUR_KEY" \
    -H "Content-Type: application/json" \
    -d '{
    "from": "Onboarding <[email protected]>",
    "to": ["[email protected]"],
    "subject": "Hello from 3AVA Mail",
    "html": "<p>It works.</p>"
    }'

    You get back:

    {
    "id": "a1b2c3d4-...",
    "status": "queued",
    "created_at": "2026-04-22T22:30:00Z"
    }
  4. Confirm delivery.

    The email is queued, picked up by a worker, sent through your SMTP pool, and accepted by the recipient’s MTA. Within a few seconds the dashboard shows it as delivered.

    You can also poll the API:

    Terminal window
    curl https://mail.3ava.com/api/emails/a1b2c3d4-... \
    -H "Authorization: Bearer am_YOUR_KEY"
  5. Wire a webhook (optional but recommended).

    So your app knows when something is delivered, bounced, or opened — without polling.

    Terminal window
    curl -X POST https://mail.3ava.com/api/webhooks \
    -H "Authorization: Bearer am_YOUR_KEY" \
    -H "Content-Type: application/json" \
    -d '{
    "url": "https://yourapp.com/webhooks/amdy",
    "events": ["email.delivered", "email.bounced", "email.complained"]
    }'

    The response includes a signing_secret (starts with whsec_) — store it. Use it to verify webhook signatures.