> ## Documentation Index
> Fetch the complete documentation index at: https://docs.deliveryman.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart

> Send your first email, check its status and read the reply

In this guide you send an email, check that it was delivered, read the reply and set up a webhook to get events.

## Before you start

You need:

* A domain connected to your Deliveryman AI account that has finished setup and its initial warmup.
* An API key. To create one, go to **Integrations** in the dashboard, open **Deliveryman API Keys** and click **Manage**.

> [!WARNING]
>
> **Strongly recommended:** leave 5 to 10 minutes between emails sent from the same domain. Sending many emails from one domain in a short time can hurt your domain and IP reputation.

**1. Send an email**

Call [Send Email](https://docs.deliveryman.ai/api-reference/email/send-email.md) with a `from`, `to`, `subject` and either `html_content` or `plain_text_content`.

`from` can be a full email address, or just a domain. With a domain, Deliveryman picks one of that domain's email accounts for you.

```bash theme={null}
curl -X POST https://api.deliveryman.ai/api/v2/send/ \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "draftss.com",
    "to": "alex@draftss.com",
    "subject": "Quick question about your onboarding flow",
    "plain_text_content": "Hi Alex, do you have 15 minutes this week?"
  }'
```

The response includes the email's `message_id`. Save it. You use it to look the email up, to match webhook events, and to reply in the same thread. It's also sent with the email in the `X-Deliveryman-Message-Id` header.

```json theme={null}
{
  "from": "jane@draftss.com",
  "message_id": "em_9f2c4a7b1e0d3c5a8b6f4e21",
  "to": "alex@draftss.com",
  "status": "queued",
  "subject": "Quick question about your onboarding flow",
  "scheduled_for": null,
  "sent_on": "2026-09-17T10:00:00Z"
}
```

If you send again from the same domain before its send interval has passed, you get `202` with `status: "scheduled"` and a `scheduled_for` time instead. The email goes out on its own at that time, and you get a `sent` webhook. A scheduled email can't be replied to until it has gone out. See [Rate limits](https://docs.deliveryman.ai/rate-limits.md) for details.

Open tracking is off by default and click tracking is on. Set `open_tracking` and `click_tracking` to change that. Tracking only applies to HTML emails.

**2. Check the delivery status**

Fetch the email with [Retrieve Sent Email](https://docs.deliveryman.ai/api-reference/email/retrieve-sent-email.md), or list recent emails with [List Sent Emails](https://docs.deliveryman.ai/api-reference/email/list-sent-emails.md).

```bash theme={null}
curl "https://api.deliveryman.ai/api/v2/email/?message_id=em_9f2c4a7b1e0d3c5a8b6f4e21" \
  -H "X-Api-Key: YOUR_API_KEY"
```

`status` starts as `queued` and changes as the recipient's mail server responds:

| Status | Meaning |
| - | - |
| `queued` | Accepted and waiting for the recipient's mail server to accept it. |
| `delivered` | The recipient's mail server accepted it. |
| `failed` | It couldn't be delivered because of a problem on the sending side. The recipient isn't suppressed. |
| `bounced` | The recipient's mail server rejected it, and the address was added to your suppression list. |

The same response lists the email's `opens`, `clicks`, `bounce` and `replies`.

**3. Read replies**

[List Replies](https://docs.deliveryman.ai/api-reference/inbox/list-replies.md) returns the conversations that got a reply, most recent first. Each one holds the email you sent and every reply received in its thread.

```bash theme={null}
curl "https://api.deliveryman.ai/api/v2/inbox/?domain=draftss.com&limit=20&offset=0" \
  -H "X-Api-Key: YOUR_API_KEY"
```

To answer a reply, call Send Email again with the reply's `message_id` as `reply_to_message_id`. Your answer is threaded under the original conversation in the recipient's mail client, and later replies show up in the same inbox thread. You still pass `from`, `to` and `subject` as usual.

**4. Find what you can send from**

[List Domains](https://docs.deliveryman.ai/api-reference/domains/list-domains.md) returns the domains connected to your account and whether each one can send right now.

```bash theme={null}
curl "https://api.deliveryman.ai/api/v2/domains/?limit=20&offset=0" \
  -H "X-Api-Key: YOUR_API_KEY"
```

[List Domain Emails](https://docs.deliveryman.ai/api-reference/domains/list-domain-emails.md) returns the email accounts on a specific domain. Use it to pick a `from` value instead of hardcoding one.

```bash theme={null}
curl "https://api.deliveryman.ai/api/v2/domains/emails/?domain=draftss.com&limit=20&offset=0" \
  -H "X-Api-Key: YOUR_API_KEY"
```

**5. Get events on your webhook**

Instead of polling, add a webhook URL in the dashboard to get `sent`, `failed`, `open`, `click`, `bounce`, `unsubscribe` and `reply` events as they happen. See [Webhooks](https://docs.deliveryman.ai/webhooks.md) to set it up.

## Keep your list clean

* Use [Verify Email](https://docs.deliveryman.ai/api-reference/email-verification/verify-email.md) to check that an address exists before you send to it.
* Bounced and unsubscribed addresses are added to your [suppression list](https://docs.deliveryman.ai/api-reference/suppression-list/list-suppressed-emails.md) automatically, and emails to them are rejected with `422`. You can also add and remove entries yourself.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.