---
title: "Send a single email message"
method: POST
path: "/v2/email/send"
tags: ["email-send-v2"]
---

# Send a single email message

`POST /v2/email/send`

## Request

- Base URL: `https://api.tracklysms.com/api`
- URL: `https://api.tracklysms.com/api/v2/email/send`
- Auth: API key in header `X-Api-Key`

All gates (rate limit, idempotency, validation, domain, sender resolution,
sandbox, suppression, Kafka publish) run inside accept_email. This adapter
parses the request, delegates, and maps typed exceptions to HTTP responses.

## Request body

- EmailSendRequest
  - `from` EmailFrom, required
    - `email` string, required: Sender email address
    - `name` string: Sender display name
  - `headers` object: Custom email headers
  - `html` string: HTML body
  - `idempotency_key` string: Idempotency key (max 255 chars, 24h TTL)
  - `metadata` object: Custom metadata key-value pairs
  - `reply_to` string: Reply-To address
  - `send_at` string, date-time: Scheduled send time (ISO 8601 UTC)
  - `subject` string, required: Email subject line
  - `text` string: Plain text body
  - `to` string, required: Recipient email address
  - `tracking` EmailTracking
    - `clicks` boolean: Track link clicks
    - `opens` boolean: Track opens

## Response `202`

Email accepted

- EmailSendResponse
  - `messageId` string: Email message ID
  - `status` string: Message status (queued, scheduled, simulated)

## Other responses

- `400`: Validation error
- `401`: Authentication error
- `429`: Rate limit exceeded

---

[API](https://skmtc.dev/tracklysms/apis/trackly-sms-api.md) · [All operations](https://skmtc.dev/tracklysms/apis/trackly-sms-api/llms.txt) · [OpenAPI document](https://skmtc.dev/tracklysms/apis/trackly-sms-api/revisions/ac1ad22cb2a9?raw)
