---
title: "Send a draft"
method: POST
path: "/mailboxes/{address}/drafts/{uid}/send"
tags: ["Drafts"]
---

# Send a draft

`POST /mailboxes/{address}/drafts/{uid}/send`

## Request

- Base URL: `https://faivelo.com/api/v1`
- URL: `https://faivelo.com/api/v1/mailboxes/{address}/drafts/{uid}/send`
- Auth: HTTP bearer

Sends the draft as it stands now and removes it from Drafts. Goes through the same checks as sending directly, and counts against the monthly send limit. A draft with no recipient is a 422. Send `{ "sendAt": "..." }` to schedule it instead: the draft stays in Drafts and is sent at that time, as it stands then. Scheduling a draft that is already scheduled moves its time. Requires scope `mail:send`.

## Path parameters

- `address` string, required
- `uid` integer, required

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `sendAt` string, date-time: Send later instead of now: ISO 8601 with a timezone, at least one minute and at most 30 days ahead. The message waits in the mailbox's Drafts folder until then.

## Response `200`

Draft sent, or scheduled when `sendAt` was given

- object
  - `success` boolean
  - `data` SendMailResponse: Confirmation that the email was sent
    - `messageId` string: The Message-ID of the sent email
    - `sent` boolean
    - `hint` string: Present when the email went out with no display name, so recipients saw only the address. Says how to set one.
    - `replayed` boolean: Present and true when an Idempotency-Key matched an earlier request and nothing was sent again
    - `scheduled` object: Present when `sendAt` was given: the send is waiting, `sent` is false and there is no `messageId` yet
      - `id` string: Use it to cancel the send
      - `uid` integer: The draft that will be sent, in the Drafts folder
      - `sendAt` string, date-time
      - `status` 'scheduled' | 'sending' | 'retrying' | 'sent' | 'cancelled' | 'failed'
      - `reason` string: Why it was cancelled or failed
      - `messageId` string: Message-ID of the sent email, once sent
      - `createdAt` string, date-time

## Other responses

- `401`: Missing or invalid API key
- `402`: The account's plan does not include the API (`plan_required`)
- `403`: The key lacks the required scope
- `404`: Resource not found
- `422`: The draft has no recipient
- `429`: Rate limit exceeded

---

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