# Send Reply Draft

> Send the stored draft to the lead as a real email.

<Note>
  **Beta.** This endpoint is not in production yet and may change before it ships.
</Note>

<Warning>This sends a real email immediately, from the account that received the reply. It cannot be recalled.</Warning>

The send goes through the same checks as [Send Reply](/api-reference/inbox/send-reply) plus the dashboard's: the account must be active and connected, the lead must not have unsubscribed, and the workspace must be under its monthly send limit. Edit the text first with [Update Reply Draft](/api-reference/inbox/update-draft).

Calling this again for a draft that was already sent sends nothing and returns the first message ID with `alreadySent: true`. Two simultaneous calls send once; the other gets a `409` with `detail.code` of `draft_send_in_progress`. If the SMTP send fails the draft is released and can be sent again.

## Path Parameters

<ParamField path="reply_id" type="string" required>The thread (reply) ID.</ParamField>

## Response

<ResponseField name="data" type="object">
  <Expandable title="Send result">
    <ResponseField name="success" type="boolean">Whether the draft was sent.</ResponseField>
    <ResponseField name="messageId" type="string">SMTP message ID.</ResponseField>
    <ResponseField name="alreadySent" type="boolean">`true` when this call sent nothing because an earlier call already sent the draft.</ResponseField>
  </Expandable>
</ResponseField>

<RequestExample>
```bash cURL
curl -X POST "https://api.foxreach.io/api/v1/inbox/threads/rpl_abc123/draft/send" \
  -H "X-API-Key: otr_your_key"
```
</RequestExample>

## Errors

| Status | Description |
|--------|-------------|
| `400` | Account inactive or disconnected, or the lead unsubscribed |
| `403` | Key does not have write scope |
| `404` | Thread not found |
| `409` | No ready draft, draft dismissed, thread answered by hand, or a send is in progress |
| `429` | Workspace monthly send limit reached |
| `500` | SMTP send failed. The draft stays sendable |

## Rate Limit

- **100 requests per minute, shared by every `expensive` call in your workspace.** Fixed 60-second window.
- Every response includes `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset` (unix epoch seconds) and `X-RateLimit-Bucket` (`expensive`).
- A `429` response includes a `Retry-After` header (seconds until the bucket resets).

For client-side patterns (`Retry-After`, exponential backoff, monitoring `X-RateLimit-Remaining`), see [Rate Limiting](/rate-limiting).
