---
title: "Edit a draft (only allowed while status='draft')"
method: PATCH
path: "/v1/email/drafts/{draft_id}"
tags: ["email-drafts"]
---

# Edit a draft (only allowed while status='draft')

`PATCH /v1/email/drafts/{draft_id}`

## Path parameters

- `draft_id` string, uuid, required

## Request body

- UpdateDraftRequest — Partial update — only fields explicitly set are touched. ``None`` on an optional list is "no change"; passing an empty list clears that recipient list.
  - `subject` string, nullable
  - `body_html` string, nullable
  - `body_text` string, nullable
  - `to` EmailAddress[], nullable
    - `address` string, required
    - `name` string, nullable
  - `cc` EmailAddress[], nullable
    - `address` string, required
    - `name` string, nullable
  - `bcc` EmailAddress[], nullable
    - `address` string, required
    - `name` string, nullable
  - `reply_to` EmailAddress[], nullable
    - `address` string, required
    - `name` string, nullable

## Response `200`

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
- `404` — Resource not found
- `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)
