Campaigns end to end
Create the campaign, write the sequence, enroll a list, attach your mailboxes, launch. Every step is one call.
Nothing sends until you call launch. The same calls exist as CLI commands and MCP tools, so an agent can drive the whole flow with the user's go-ahead.
Check that a mailbox is connected
curl "https://app.argorant.com/api/v1/inboxes" -H "Authorization: Bearer $ARGORANT_API_KEY"No mailbox yet? Connect a Google Workspace in one step (guide) or Microsoft 365 in the app.
Create the campaign with its settings
curl -X POST "https://app.argorant.com/api/v1/campaigns" \
-H "Authorization: Bearer $ARGORANT_API_KEY" -H "Content-Type: application/json" \
-d '{
"name": "Q4 CFO outreach",
"daily_limit": 40, "per_mailbox_daily_limit": 20,
"timezone": "Europe/Berlin", "timezone_mode": "fixed",
"window_start": "08:00", "window_end": "17:00", "skip_weekends": true,
"gap_minutes_min": 60, "gap_minutes_max": 120,
"include_unsubscribe": true, "planned_start_date": "2026-10-01", "tags": ["q4"]
}'Every field is optional and can be changed later with PATCH /api/v1/campaigns/{id}. timezone_mode: "lead" sends in each recipient's local time. Campaigns send plain text; that is deliberate and the best-delivering format.
Write the sequence
curl -X POST "https://app.argorant.com/api/v1/campaigns/$ID/emails" \
-H "Authorization: Bearer $ARGORANT_API_KEY" -H "Content-Type: application/json" \
-d '{"emails":[
{"subject":"Quick question, {{first_name}}","body":"Hi {{first_name}},\n\nsaw {{company}} is hiring in finance. Worth a 10 minute call?\n\nBest"},
{"body":"Bumping this up in case it got buried.","delay_days":3,"same_thread":true}
]}'The first email needs a subject; follow-ups default to the same thread (Re: …) and wait delay_days after the previous one. Variables: {{first_name}}, {{last_name}}, {{company}}, {{title}} and any column you sent with the leads ({{plan}}). Spintax {a|b} varies phrasing per recipient. Add variants: [{ body: "…" }] to a step for A/B copy; variants rotate evenly.
Enroll the list
curl -X POST "https://app.argorant.com/api/v1/campaigns/$ID/leads" \
-H "Authorization: Bearer $ARGORANT_API_KEY" -H "Content-Type: application/json" \
-d '{"list_id": 1240}'
# → { "input_rows": 1240, "inserted": 1188, "duplicates_skipped": 12, "skipped_not_valid": 40, "queued_for_verification": 0 }Or pass rows with email, first_name, last_name, company, title. Every address is verified before it joins; only valid ones are enrolled unless include_catch_all is true.
Attach the senders
curl -X POST "https://app.argorant.com/api/v1/campaigns/$ID/senders" \
-H "Authorization: Bearer $ARGORANT_API_KEY" -H "Content-Type: application/json" \
-d '{"all_connected": true}'Or list specific emails. Sends rotate across senders within each mailbox's own daily limit.
Launch
curl "https://app.argorant.com/api/v1/campaigns/$ID" -H "Authorization: Bearer $ARGORANT_API_KEY" | jq .launch_blockers
curl -X POST "https://app.argorant.com/api/v1/campaigns/$ID/launch" -H "Authorization: Bearer $ARGORANT_API_KEY"launch_blockers is empty when the campaign can go. pause holds it, stop ends it, DELETE removes a non-active campaign entirely.
Watching it run
GET /api/v1/campaigns/{id}/analytics?days=30 returns a daily series (sent, replies, positive, bounces, unsubscribes) with totals and rates. GET /api/v1/campaigns/{id} carries the live counts. GET /api/v1/campaigns/{id}/leads?status=replied lists who answered; GET /api/v1/campaigns/{id}/replies gives the messages. Across all campaigns use the inbox.
Mailboxes and the blocklist
PATCH /api/v1/inboxes/{email} sets a mailbox's daily limit, warm-up, active state, name or timezone; DELETE disconnects it. POST /api/v1/blocklist with an address or domain suppresses matching leads everywhere in your workspace.
The same flow from the terminal
argorant campaigns create --name "Q4 CFO outreach" --daily-limit 40 --window 08:00-17:00 --timezone Europe/Berlin
argorant campaigns emails set "Q4 CFO" --step 1 --subject "Quick question, {{first_name}}" --body-file step1.txt
argorant campaigns emails set "Q4 CFO" --step 2 --body "Bumping this up." --delay-days 3
argorant campaigns leads add "Q4 CFO" --list 1240
argorant campaigns senders set "Q4 CFO" --all
argorant campaigns launch "Q4 CFO"