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

# Send emails

> Recipients, content, tags and what happens after the 202.

Everything goes through [`POST /emails`](/api-reference/emails/send-an-email). This page covers the parts the reference doesn't explain.

## Sender

`from` takes a bare address or a display name with the address in angle brackets:

```json theme={null}
"from": "Acme Billing <billing@acme.com>"
```

With a live key, the address must belong to a [verified domain](/guides/domains). Any local part works: `billing@`, `no-reply@`, `team@`.

## Recipients

`to` takes one address or a list. `cc` and `bcc` take lists. An email can have up to 50 recipients in total, and each one costs a credit.

```json theme={null}
{
    "to": ["jane@example.com", "omar@example.com"],
    "cc": ["accounts@example.com"],
    "reply_to": "support@acme.com"
}
```

Addresses that hard-bounced or complained before are on your suppression list. PulseSend drops them from the email before sending and doesn't charge for them. If every recipient is suppressed, the call fails with `all_recipients_suppressed`.

## Content

Send `html`, `text`, or both. Without either, the call fails with `missing_body`. When you only send HTML, most clients are happy; sending a text version too helps a few spam filters.

## Tags and headers

`tags` are labels you choose, up to 10, to find emails later on the dashboard:

```json theme={null}
"tags": ["otp", "signup"]
```

`headers` adds custom headers, up to 20:

```json theme={null}
"headers": { "X-Entity-Ref-ID": "order-8812" }
```

## After the 202

The API stores the email, charges the credits and answers `202 Accepted` with `status: "queued"`. Delivery happens in the background:

```mermaid theme={null}
flowchart LR
  queued --> sent --> delivered --> complained
  queued --> failed
  queued --> canceled
  sent --> delivery_delayed --> delivered
  sent --> bounced
  delivery_delayed --> bounced
  sent --> failed
```

| Status | Meaning |
| - | - |
| `queued` | Accepted, waiting to be handed to the mail server. |
| `sent` | Handed over. Delivery is in progress. |
| `delivery_delayed` | The receiving server is deferring. It will keep trying. |
| `delivered` | Accepted by the recipient's server. |
| `bounced` | Rejected. Hard bounces add the address to your suppression list. |
| `complained` | The recipient marked it as spam. The address is suppressed. |
| `failed` | Couldn't be sent. Credits are refunded. |
| `canceled` | Canceled before sending. |

Follow these changes with [webhooks](/guides/webhooks), or fetch the email with [`GET /emails/{id}`](/api-reference/emails/retrieve-an-email).


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