# How Emailit works

> The Emailit mental model in one page. Workspaces, domains and API keys, the ways to send and receive, the life of an email, credits and sandbox mode.

This page explains the main pieces of Emailit and how they fit together. Read it once before you build anything. The rest of the docs assume you know these terms.

## Accounts and workspaces

Your **account** is you: an email address, a password, and optional two-factor authentication or passkeys. Everything you send lives in a workspace. One account can belong to several workspaces, and you switch between them with the workspace switcher at the top of the sidebar. A common setup is one workspace per product or per environment, for example `Acme` and `Acme Staging`.

Each workspace has its own:

| Resource | What it is |
| --- | --- |
| Sending domains | Domains you verify with DNS records so Emailit can send for them. Every From address must be on a verified sending domain. |
| API keys | Secrets that start with `secret_`. They authenticate the REST API, the MCP server and the SMTP relay. A key is either **Full Access** or **Sending Only**. |
| Members | The people who can open the workspace, as **Admin** or **Member**. Admins also manage settings, API keys, members and billing. |
| Billing | A plan, a credit balance, auto-refill settings and invoices. |
| Data | Emails, events, logs, contacts, audiences, templates, webhooks and suppressions. |

API keys, domains, contacts and credits belong to one workspace. An API key never works in a different workspace.

## Ways to send, and one way to receive

| Channel | Use it for | How |
| --- | --- | --- |
| REST API | Transactional email from your code: sign-ups, password resets, receipts | `POST https://api.emailit.com/v2/emails` with an API key, or an [SDK](/docs/sdks/) |
| SMTP relay | Apps, frameworks and tools that already speak SMTP | Host `smtp.emailit.com`, username `emailit`, your API key as the password |
| Campaigns and automations | Newsletters, announcements and onboarding sequences to your contacts | Built in the dashboard under **Email Marketing** |
| Inbound | Receiving email on your domain, for replies or support | An MX record on `inbound.<your domain>`. Each message fires `email.received`. |

Every channel uses the same verified domains and the same suppression list. The API and the SMTP relay also share API keys, request logs and one set of sending limits. To choose between the two, see [API or SMTP](/docs/get-started/api-or-smtp/).

## The life of an email

Every email follows the same path, whichever way you send it:

1. **Accepted.** The API or SMTP relay checks the request: a valid API key, a From address on a verified domain, sandbox rules, sending limits and credits. Each recipient becomes a separate email with its own `em_` ID and the status `accepted`, or `scheduled` if you set a send time. The API emits `email.accepted` or `email.scheduled`.
2. **Queued and checked.** A delivery worker picks the email up and checks it again. A recipient on your [suppression list](/docs/suppressions/) makes the email `suppressed`. A paused domain, a suspended workspace or an empty credit balance makes it `held`.
3. **Signed and scored.** Emailit signs the message with DKIM for your domain and sets the return path to `emailit.<your domain>`. If tracking is on, it rewrites links and adds an open pixel. Then it runs a spam check. A message that scores 7 or more is `held`, and the matched rules appear under **Spam Checks** on the email's page.
4. **Delivery attempts.** Emailit connects to the recipient's mail server. A permanent rejection (a 5xx reply) makes the email `bounced`. A temporary failure (a 4xx reply or a timeout) makes it `attempted`, and Emailit retries up to 7 times over about 21 hours before it gives up and marks it `bounced`.
5. **Delivered.** The receiving server accepted the message, so the email is `delivered`. A bounce report that arrives later can still turn it into `bounced`, and a spam complaint from the mailbox provider makes it `complained`. Bounced and complaining addresses can be added to your suppression list automatically.
6. **Opened and clicked.** If the domain has a verified [tracking subdomain](/docs/tracking/), opens make the email `loaded` and clicks make it `clicked`.

Each status change is recorded as an **event**. Events appear on the email's page and in **Email API → Events**. They're also sent to your [webhooks](/docs/webhooks/) as signed JSON, in batches of up to 100 events per request.

| Group | Statuses |
| --- | --- |
| On the way | `accepted`, `scheduled`, `attempted` |
| Arrived | `delivered`, `loaded`, `clicked`, `received` (inbound) |
| Stopped | `bounced`, `failed`, `rejected`, `suppressed`, `complained`, `canceled`, `held` |

You can cancel an email while it's `scheduled`, `accepted` or `attempted`. You can retry a `held`, `bounced`, `failed` or `suppressed` email after you fix the cause. See [Email statuses](/docs/logs/email-statuses/) for what each status means.

## Credits

Emailit bills in credits. Each workspace has a balance made up of the credits included with its plan every month plus any credits you buy. Included credits are used first. Purchased credits never expire.

| Action | Credits |
| --- | --- |
| Email sent with the API or SMTP (per recipient) | 1 |
| Inbound email received | 1 |
| Campaign email (per recipient) | 2 |
| Automation run | 3 |
| Email verification (per address) | 5 |

If the balance can't cover a send, the API returns `402` and nothing is sent. Emails that reach the delivery queue without enough credits are `held`, and you can retry them after you add credits. Turn on [auto-refill](/docs/billing/auto-refill/) so production mail never stops. For plans and prices, see [Credits](/docs/billing/credits/) and the [pricing page](/pricing/).

## Sandbox and production access

Every new workspace starts in **sandbox mode**. In sandbox mode you can only send to the account email addresses of workspace members, and campaigns are blocked. Sending to anyone else fails: the API returns `403 unverified_workspace_recipient` and the SMTP relay replies `550`.

To send to real recipients, verify at least one sending domain. Then an Admin requests production access from the sandbox banner or from **Workspace → Settings → Requests**. The request asks what you send, your expected volume and how people opt in. The Emailit team reviews it and replies in the same request thread. See [Production access](/docs/workspaces/production-access/).

Every workspace also has [sending limits](/docs/limits/), shared by the API and SMTP. New workspaces can send 2 emails per second and 5,000 emails per day. Pro and Business workspaces get automatic increases based on sending health, and any workspace can request more from the **Sending Limits** card on the dashboard home page.

## The dashboard

The dashboard at [dash.emailit.com](https://dash.emailit.com) follows the same model. The sidebar has these sections, from top to bottom:

| Section | Page | What it's for |
| --- | --- | --- |
| Dashboard | | Setup checklist, quick actions, credits, daily volume, sending health and sending limits |
| Email Marketing | Overview | Contact growth and recent marketing activity |
| | Audiences | Named lists of subscribers that campaigns go to |
| | Contacts | Everyone in the workspace, with custom fields, import and export |
| | Campaigns | Build, test, schedule and report on campaigns |
| | Templates | Reusable designs for the API, automations and campaigns |
| | Forms | Sign-up forms (early access) |
| | Automations | Workflows triggered by contacts, dates and email events (beta) |
| Email API | Emails | Every outgoing and incoming email, with status, content and delivery attempts |
| | Analytics | Sends, bounces, complaints, opens and clicks over time |
| | Domains | Add domains, publish DNS records, check verification and tracking |
| | DMARC reports | Who sends mail as your domain (Pro and above) |
| | Events | The workspace event stream that webhooks receive |
| | Logs | Every API and SMTP request, with status codes and bodies |
| | API Keys | Create, rename, regenerate and delete keys, and see SMTP settings |
| | Webhooks | Endpoints, event selection and every delivery attempt |
| | Suppressions | Addresses Emailit won't send to, with CSV import and export |
| Email Verification | Emails | Check a single address before you send |
| | Lists | Check up to 10,000 addresses at once |
| Workspace | Billing | Plan, credits, auto-refill, add-ons and invoices |
| | Settings | Name, members, custom fields, data retention, suppression settings and requests |

Your account settings (profile, password, two-factor authentication and passkeys) and your referral link are in the account menu at the bottom of the sidebar.

## Next steps

  - [API quickstart](/docs/quickstart/api/): Add a domain, create a key and send your first email.
  - [SMTP quickstart](/docs/quickstart/smtp/): Connect any app or framework over SMTP.
  - [API or SMTP](/docs/get-started/api-or-smtp/): Compare the two ways to send transactional email.
  - [Go-live checklist](/docs/get-started/go-live/): Everything to do before you send to real recipients.

---
Source: https://emailit.com/docs/get-started/how-emailit-works/
