503 feature_unavailable as unavailable on that host. Host availability is not guaranteed.
Configure an inactive draft
Create an email draft, attach subscribed contacts, then read its configuration. Set an explicitly authorized sender, a supported schedule, and up to ten existing template steps. Use the latest configurationrevision as expected_revision for changes. A saved template prompt is configuration; it does not generate or approve personalized content. The legacy direct contact endpoint still requires an email address.
Prepare local tasks
CallPOST /workspaces/{workspace_id}/campaigns/email/{campaign_id}/preparation with the current expected_revision and campaigns:generate. A 202 response returns an operation. Preparation creates isolated api_prepared task rows for at most 500 contact-step messages before any charge. It does not call AI, approve content, or schedule email.
Poll the operation with operations:read and campaigns:read. Continue only while progress can advance. Stop and inspect saved state at awaiting_user_action, needs_reconciliation, or a terminal status. A timeout or unknown outcome is not permission to submit another command; read the original operation and reuse its idempotency key and exact body only to replay that same logical request.
Generate only selected previews
List tasks withmessages:read, select 1–10 prepared task IDs, and call POST .../generations with the current campaign revision, those IDs, and confirm_credit_use: true. This consumes AI credits. Generation creates reviewable previews; it does not approve or send them. The operation write needs campaigns:generate.
Review each exact message
UseGET .../messages/{task_id} to inspect the saved preview. To edit it, send its preview_id and current message expected_revision with messages:write. Re-read and reconcile after stale_revision. Approve an exact preview separately with messages:approve; approval does not launch the campaign. Rejecting a preview can cancel later draft steps and cannot be undone through this API.
Review and launch
Read campaign configuration and use its current revision to createPOST .../reviews with campaigns:launch-email. A ready review is valid for five minutes; use expires_at as authoritative. If it expires or configuration changes, fetch the latest revision and create a fresh review.
Launch only after explicit operator confirmation. Submit the ready review_id and confirm_launch: true to POST .../launch. The 202 operation schedules approved messages through native sending within the configured windows; it does not start an immediate batch or prove delivery. Review creation and launch writes require campaigns:launch-email; polling launch receipts also needs operations:read and campaigns:read.
Poll the original operation and stop at awaiting_user_action, needs_reconciliation, or a terminal state. Inspect error_code, operation result, and campaign progress. Resolve the reported issue, reconcile local state, and create a fresh review before a new launch decision. Never automatically retry an unknown outcome. active means scheduled for native dispatch, not delivered; saved progress does not verify provider acceptance or delivery.

