---
title: "Author a new outbound email draft"
method: POST
path: "/v1/email/drafts"
tags: ["email-drafts"]
---

# Author a new outbound email draft

`POST /v1/email/drafts`

## Request body

- CreateDraftRequest — Create a new email draft. ``mode`` must currently be ``human_only`` — ``copilot`` is reserved on the data layer but the authoring path is out of scope for v1.
  - `session_id` string, uuid, required
  - `account_id` string, uuid, required
  - `agent_id` string, uuid, nullable
  - `mode` 'human_only' | 'copilot', required
  - `in_reply_to_turn_id` string, uuid, nullable
  - `subject` string, required
  - `body_html` string, required
  - `body_text` string, nullable
  - `to` EmailAddress[], required
    - `address` string, required
    - `name` string, nullable
  - `cc` EmailAddress[]
    - `address` string, required
    - `name` string, nullable
  - `bcc` EmailAddress[]
    - `address` string, required
    - `name` string, nullable
  - `reply_to` EmailAddress[]
    - `address` string, required
    - `name` string, nullable

## Response `201`

Successful Response

- DraftResponse — One draft row, including the v1 audit snapshot when present. ``evidence_snapshot`` is exposed as the raw dict from ``metadata_["evidence_snapshot"]`` — the shape is captured by ``EVIDENCE_SCHEMA_VERSION`` so consumers can branch on it.
  - `id` string, uuid, required
  - `organization_id` string, uuid, required
  - `session_id` string, uuid, required
  - `account_id` string, uuid, required
  - `agent_id` string, uuid, nullable, required
  - `in_reply_to_turn_id` string, uuid, nullable, required
  - `mode` 'human_only' | 'copilot', required
  - `status` 'draft' | 'submitted' | 'approved' | 'sending' | 'sent' | 'failed' | 'discarded', required
  - `approval_state` 'unsubmitted' | 'pending' | 'approved' | 'rejected' | 'auto_approved', required
  - `subject` string, required
  - `body_html` string, required
  - `body_text` string, nullable, required
  - `to` EmailAddress[], required
    - `address` string, required
    - `name` string, nullable
  - `cc` EmailAddress[], required
    - `address` string, required
    - `name` string, nullable
  - `bcc` EmailAddress[], required
    - `address` string, required
    - `name` string, nullable
  - `reply_to` EmailAddress[], required
    - `address` string, required
    - `name` string, nullable
  - `approved_by_member_id` string, uuid, nullable, required
  - `approved_at` string, date-time, nullable, required
  - `sent_turn_id` string, uuid, nullable, required
  - `evidence_snapshot` object, nullable, required
  - `auto_send_reason` string, nullable, required
  - `discarded_by_member_id` string, uuid, nullable, required
  - `discarded_at` string, nullable, required
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required

## Other responses

- `400` — Bad request
- `401` — Authentication required
- `422` — Validation Error

---

[API](https://skmtc.net/oneloop-hq/apis/feather-api.md) · [All operations](https://skmtc.net/oneloop-hq/apis/feather-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/oneloop-hq/feather-api/versions/888bdd5c076e/schema)
