---
title: "Reply to a thread"
method: POST
path: "/api/v1/threads/{id}/reply"
tags: ["Sending"]
---

# Reply to a thread

`POST /api/v1/threads/{id}/reply`

## Request

- Base URL: `https://supermailos.com`
- URL: `https://supermailos.com/api/v1/threads/{id}/reply`
- Auth: HTTP bearer

Reply or reply-all, threaded with In-Reply-To/References, through the same send pipeline as the app (verified domain, suppression list, rate limits, warm-up, storage quota). Supports Idempotency-Key.

## Path parameters

- `id` string, required

## Headers

- `Idempotency-Key` string

## Request body

- ReplyRequest
  - `text` string: `text` or `html` is required.
  - `html` string
  - `replyAll` boolean: Reply to everyone on the last message (To + Cc).
  - `from` string, email: The conversation's mailbox or one of its aliases. Default: the address the mail arrived on.
  - `to` union: Override the computed recipients.
    - string
    - string[]
  - `cc` union: Added to the computed Cc.
    - string
    - string[]
  - `bcc` union
    - string
    - string[]
  - `subject` string: Default: `Re: <subject>`.
  - `quote` boolean: Append the previous message, quoted.
  - `idempotencyKey` string: Alternative to the Idempotency-Key header (/reply only).

## Response `202`

Accepted for delivery (or a replayed earlier response).

- union
  - SendResponse
    - `ok` true, required
    - `status` 'sent': Present on sends from an agent inbox.
    - `id` string, required: RFC Message-ID (kept for compatibility; same as `messageId`).
    - `messageId` string, required: RFC 5322 Message-ID of the sent message.
    - `emailId` string, nullable, required: Internal id of the stored Sent copy.
    - `threadId` string, required
    - `mailboxId` string, required
    - `from` string, email, required
  - PendingSendResponse: An agent inbox's email that waits for a person; nothing was sent yet.
    - `ok` true, required
    - `status` 'pending_approval', required
    - `approvalId` string, required: `GET /approvals/{approvalId}` for what became of it.
    - `reasons` string[], required: Why it waits, in plain words.
    - `expiresAt` string, date-time, required
    - `mailboxId` string, required
    - `from` string, email, required

## Other responses

- `400`: The request is malformed.
- `401`: Missing, invalid or revoked API key.
- `403`: The key lacks the scope (`missing_scope`) or the access (`forbidden`).
- `404`: Not found — or not reachable with this key.
- `409`: A request with this Idempotency-Key is still in progress.
- `413`: Body over 1 MB.
- `422`: Valid JSON the server can't act on (e.g. unverified domain, suppressed recipient, reused Idempotency-Key).
- `423`: Sending is paused for this mailbox or workspace.
- `429`: Too many requests.
- `502`: The mail server didn't accept the message; nothing was sent. Safe to retry.
- `507`: The mailbox is out of storage.

---

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