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

# Emails and their lifecycle

> What happens to an email from the moment you send it: statuses, events, scheduling, cancellation and tracking.

Each email gets an `id` when you send it. Use that `id` to read its status, cancel a scheduled send, or match webhook events to the original message.

## Status

Sending returns a status:

| Status | Meaning |
| - | - |
| `sent` | Accepted by our sending infrastructure and handed off to the receiving server. |
| `scheduled` | Queued to send at `scheduled_at`. |

Later events describe what happened to the message. They arrive as [webhooks](/reference/webhooks) and are also visible on the email:

| Event | Meaning |
| - | - |
| `email.sent` | Accepted by sending infrastructure. |
| `email.delivered` | Accepted by the recipient's mail server. |
| `email.delivery_delayed` | The recipient's server is delaying delivery and will retry. |
| `email.bounced` | Delivery failed permanently. The address is suppressed. |
| `email.complained` | The recipient marked the message as spam. The address is suppressed. |
| `email.opened` | The tracking pixel loaded. |
| `email.clicked` | A tracked link was followed. |
| `email.unsubscribed` | The recipient used the unsubscribe link. |
| `email.failed` | We couldn't hand the message off. |
| `email.cancelled` | A scheduled email was cancelled before it sent. |

## Read an email

```bash theme={null}
curl https://api.sendflit.com/v1/emails/<email_id> \
  -H "Authorization: Bearer $SENDFLIT_KEY"
```

List recent emails with `GET /v1/emails`.

## Schedule an email

Pass an ISO 8601 timestamp as `scheduled_at`:

```json theme={null}
{
  "from": "reminders@yourdomain.com",
  "to": "user@example.com",
  "subject": "Your trial ends tomorrow",
  "html": "<p>...</p>",
  "scheduled_at": "2026-09-01T09:00:00Z"
}
```

Relative times such as "in one hour" aren't supported. Compute the timestamp in your code.

To cancel a scheduled email before it sends, use `DELETE /v1/emails/{id}`. The native API doesn't change a scheduled time; cancel it and send a new email. The [Resend-compatible API](/guides/switching-from-resend) also supports rescheduling.

## Recipients and content

* One address per `to`. Use `cc` and `bcc`, or send one email per recipient with the batch endpoint.
* Up to 10 attachments per email, 10 MB each.
* Use absolute URLs for images. Inline `cid:` images arrive as attachments.


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