---
title: "Send one email"
method: POST
path: "/emails"
tags: ["Emails and threads"]
---

# Send one email

`POST /emails`

## Request

- Base URL: `https://sendhq.cc/api/v1`
- URL: `https://sendhq.cc/api/v1/emails`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/sendhq/apis/sendhq-api/docs/emails/post.ts> (a function with typed inputs; its response is checked against the schema)

Send transactional HTML, text, or hosted-template content from a verified workspace domain. Direct sends may set message_class to marketing when enabled for the verified sender domain. Marketing adds managed unsubscribe headers unless a configured first-party integration supplies its own visible HTTPS one-click URL.

## Headers

- `Idempotency-Key` string

## Request body

- union
  - object
    - `from` string, required: Email address, optionally with a display name, on a verified workspace domain.
    - `to` union, required
      - string: Email address, optionally with a display name.
      - string[]
    - `cc` union
      - string: Email address, optionally with a display name.
      - string[]
    - `bcc` union
      - string: Email address, optionally with a display name.
      - string[]
    - `subject` string: Optional for raw-content sends; an omitted subject is sent empty. Hosted templates supply their published subject.
    - `html` string, required
    - `text` string
    - `reply_to` string, email
    - `headers` object
    - `message_class` 'transactional' | 'marketing'
    - `draft_id` string
    - `reply_to_email_id` string
    - `thread_id` string
    - `labels` string[]: Label names or lbl_ IDs to file the message under. Unknown names are created; replies in the conversation inherit them.
    - `template` union
      - object
        - `id` string, required
        - `key` string
        - `version_id` string
        - `versionId` string
        - `data` object
      - object
        - `id` string
        - `key` string, required
        - `version_id` string
        - `versionId` string
        - `data` object
  - object
    - `from` string, required: Email address, optionally with a display name, on a verified workspace domain.
    - `to` union, required
      - string: Email address, optionally with a display name.
      - string[]
    - `cc` union
      - string: Email address, optionally with a display name.
      - string[]
    - `bcc` union
      - string: Email address, optionally with a display name.
      - string[]
    - `subject` string: Optional for raw-content sends; an omitted subject is sent empty. Hosted templates supply their published subject.
    - `html` string
    - `text` string, required
    - `reply_to` string, email
    - `headers` object
    - `message_class` 'transactional' | 'marketing'
    - `draft_id` string
    - `reply_to_email_id` string
    - `thread_id` string
    - `labels` string[]: Label names or lbl_ IDs to file the message under. Unknown names are created; replies in the conversation inherit them.
    - `template` union
      - object
        - `id` string, required
        - `key` string
        - `version_id` string
        - `versionId` string
        - `data` object
      - object
        - `id` string
        - `key` string, required
        - `version_id` string
        - `versionId` string
        - `data` object
  - object
    - `from` string, required: Email address, optionally with a display name, on a verified workspace domain.
    - `to` union, required
      - string: Email address, optionally with a display name.
      - string[]
    - `cc` union
      - string: Email address, optionally with a display name.
      - string[]
    - `bcc` union
      - string: Email address, optionally with a display name.
      - string[]
    - `subject` string: Optional for raw-content sends; an omitted subject is sent empty. Hosted templates supply their published subject.
    - `html` string
    - `text` string
    - `reply_to` string, email
    - `headers` object
    - `message_class` 'transactional' | 'marketing'
    - `draft_id` string
    - `reply_to_email_id` string
    - `thread_id` string
    - `labels` string[]: Label names or lbl_ IDs to file the message under. Unknown names are created; replies in the conversation inherit them.
    - `template` union, required
      - object
        - `id` string, required
        - `key` string
        - `version_id` string
        - `versionId` string
        - `data` object
      - object
        - `id` string
        - `key` string, required
        - `version_id` string
        - `versionId` string
        - `data` object

## Response `201`

Successful response

- object
  - `id` string, required
  - `providerMessageId` string, required
  - `threadId` string, required

## Other responses

- `400`: Invalid request
- `401`: Missing or invalid authentication
- `402`: A paid entitlement is required for this recipient or feature
- `403`: The workspace, domain, policy, or suppression state forbids the operation
- `404`: Tenant-scoped resource not found
- `409`: Resource state or idempotency conflict
- `413`: Attachment count or bytes exceed the accepted limit
- `422`: Request validation or suppression check failed
- `423`: Sending is paused for this sender identity or workspace; the message gives the reason and how to appeal
- `429`: A monthly, daily, or trial usage limit was reached
- `500`: Unexpected server error
- `502`: An upstream provider operation failed
- `503`: A required provider or signing configuration is unavailable
- `default`: An error response using SendHQ's standard JSON envelope

---

[API](https://skmtc.dev/sendhq/apis/sendhq-api.md) - [All operations](https://skmtc.dev/sendhq/apis/sendhq-api/llms.txt) - [OpenAPI document](https://skmtc.dev/sendhq/apis/sendhq-api/revisions/98e39e48cb9a?raw)
