---
title: "Send a transactional email"
method: POST
path: "/emails"
tags: ["Emails"]
---

# Send a transactional email

`POST /emails`

## Request

- Base URL: `https://api.tinysend.com/v1`
- URL: `https://api.tinysend.com/v1/emails`
- Auth: HTTP bearer

One-off email to a single recipient, sent synchronously from a mailbox via the Postmark transactional stream. The from address must be an existing mailbox (root tinysend.com or a verified custom domain). Supports Idempotency-Key header — a repeated key returns the original send instead of sending twice.

## Request body

- object
  - `from` string, email: Sending mailbox address. Optional with a mailbox-scoped key (defaults to its mailbox), required with a project-wide key.
  - `to` string, email, required
  - `subject` string, required
  - `html` string
  - `text` string
  - `reply_to` string, email
  - `tag` string: Free-form tag, filterable (stored as source_tag).
  - `metadata` object: User-controlled key-values, passed to Postmark and echoed in its webhooks (max ~10 fields).

## Response `200`

Duplicate Idempotency-Key — original send returned, nothing sent

- object
  - `id` string, required
  - `status` string, required
  - `from` string, required
  - `to` string, required
  - `subject` string, nullable, required
  - `provider_message_id` string, nullable, required
  - `created_at` string, nullable, required

## Other responses

- `201`: Email sent
- `402`: Plan limit exceeded — upgrade, enable overage, or pay inline via MPP
- `422`: Validation / mailbox / domain error
- `502`: Provider rejected the send — safe to retry with the same Idempotency-Key

---

[API](https://skmtc.dev/tinysend/apis/tinysend-api.md) · [All operations](https://skmtc.dev/tinysend/apis/tinysend-api/llms.txt) · [OpenAPI document](https://skmtc.dev/tinysend/apis/tinysend-api/revisions/2dc68ac83332?raw)
