Endpoints
Approve and Unapprove
subject, from_name, from_address, and reply_to_email to be populated; otherwise the API returns 400 Bad Request with error_code: "email_missing_required_headers". Set the missing headers via PATCH /v1/emails/{emailId} before retrying.
Optionally send {"version": <n>} as an optimistic-concurrency precondition — a mismatch with the newest completed version (normally equal to current_version) returns 409 Conflict with error_code: "approval_version_stale". While a generation is running, an approve without version is refused with 409 Conflict and error_code: "generation_in_progress" — it would silently pin the pre-generation content for your next send; passing version explicitly still approves that already-completed version mid-generation.
Unapproving is rejected while the email is scheduled in a blast (email_in_scheduled_blast) or used by an active flow (email_in_active_flow).
List Emails
Query Parameters
Responses contain
emails and next_cursor. An absent next_cursor means the list is exhausted. List items are the email object minus latest_generation_status and the content_path / plain_text_path fields — lists never inline HTML; fetch it per email via GET /v1/emails/{emailId}/content.
Retrieve an Email
200 OK
status is draft or approved. Creating a blank draft (201 Created) and metadata updates return this same shape.
Delete an Email
200 OK with {"email_id": "...", "deleted": true}. Deletion is blocked with 409 Conflict while the email is scheduled in a blast (email_in_scheduled_blast) or used by an active flow (email_in_active_flow).
Common Errors
Next: Manage Email Blasts
Send an approved email to an audience as a one-time blast.