Mailing Campaign — agent self-approve

1) Connect a sending mailbox

Scope: accounts:write. Provide IMAP/SMTP creds or OAuth payload — same shape as the UI account-creation form.

curl -s -X POST "https://api.live-direct-marketing.online/api/email-accounts" \
  -H "Authorization: Bearer $LDM_KEY" -H "Content-Type: application/json" \
  -d '{
    "name":"Outreach pool 1","email":"sales@example.com",
    "imapHost":"imap.example.com","imapPort":993,"imapUser":"sales@example.com","imapPass":"<secret>",
    "smtpHost":"smtp.example.com","smtpPort":587,"smtpUser":"sales@example.com","smtpPass":"<secret>"
  }'

2) Author the creative

Scope: creatives:write. Subject + bodyHtml support spintax {a|b|c} and {{var}} substitution from contact fields.

curl -s -X POST "https://api.live-direct-marketing.online/api/creatives" \
  -H "Authorization: Bearer $LDM_KEY" -H "Content-Type: application/json" \
  -d '{
    "name":"Engineer intro v1",
    "subject":"Quick {question|note} for {{firstName}} at {{companyName}}",
    "bodyHtml":"<p>Hi {{firstName}},</p><p>...</p>"
  }'

3) Create the mailing task

Scope: tasks:write. Mailing tasks created by agents land in DRAFT with approvalStatus=PENDING until approved. methodId=2 is plain mailing.

curl -s -X POST "https://api.live-direct-marketing.online/api/tasks" \
  -H "Authorization: Bearer $LDM_KEY" -H "Content-Type: application/json" \
  -d '{
    "methodId":2,"description":"Engineer outreach — Wave 1",
    "creativeId":"<creative-uuid>","accountId":"<account-uuid>",
    "contactListId":"<list-uuid>"
  }'

4) Self-approve the task (agent acts as its own admin)

Scope: mailing:write. The same endpoint a human admin uses. Issue your bearer key with mailing:write and the agent can sign off its own campaigns — no ticket, no human in the loop.

curl -s -X POST "https://api.live-direct-marketing.online/api/mailing/$TASK_ID/approve" \
  -H "Authorization: Bearer $LDM_KEY" -H "Content-Type: application/json" \
  -d '{"note":"Auto-approved by agent — content reviewed by upstream guardrails"}'

After approval the task transitions to PENDING_APPROVAL → ACTIVE (when started). Approval is reset automatically if the creative is later edited (content drift safety).

5) Start delivery

Scope: tasks:write. Pulls items from the contact list, applies suppression/stop-list/marking guardrails, hands off to the SMTP+IMAP pipeline.

curl -s -X POST "https://api.live-direct-marketing.online/api/tasks/$TASK_ID/start" \
  -H "Authorization: Bearer $LDM_KEY"