Launch Outbound
Outbound
Launch Outbound
Validate and launch a draft Outbound execution.
POST
Launch Outbound
CLI:
After a successful launch:
Overview
The call is synchronous about validation (returns 400 if the draft is not ready) but asynchronous about sending: once it returns200, a Trigger.dev task owns the work. Poll GET /api/campaigns/:id for progress.
The status transitions atomically via compare-and-swap: draft -> launching, then inside the background task launching -> active. Only one launch can run at a time; a second concurrent call returns 409.
Error reference
AI agent notes
Before calling this endpoint, verify the draft is ready:
GET /api/campaigns/:id->statusmust be"draft"GET /api/campaigns/:id/leads?status=pending->totalmust be greater than zero; review the actual recipients, not only an aggregate on the Outbound row- At least one sender account is attached
- Every sendable sequence node has non-empty content and no unresolved personalization placeholder
- For email: senders are
activeand have a configured sending inbox - For LinkedIn: the connected account resolves through the sending backend
- Present the channel, sender identity, pending recipient count, and final sequence to the human and obtain explicit launch approval
GET /api/campaigns/{id} first when you need to inspect the draft before launch; this endpoint still performs final readiness checks and returns a specific blocker when launch is not allowed.- Status is
"launching"immediately; do not re-launch. - Within about 2 minutes the background task transitions to
"active"and begins staggered sends. - Poll
GET /api/campaigns/:idevery 30 seconds until status is"active", then at 1-5 minute cadence for progress. stats.totalis set at launch; counters such assent,replied, andbouncedincrement as contacts execute.
400, do not retry the same request. Surface the blocker, correct the draft, repeat the readiness checks, and ask for confirmation again if the recipient set, sender, or sequence changed. On 409, fetch the Outbound before deciding whether another launch is needed. On 500, the server restores draft; verify that state before one retry.
Idempotency: retrying the same call is safe. The background task is keyed by campaignId + updated_at, and on any failure the server rolls back writes.
Stopping: use POST /api/campaigns/:id/pause to halt mid-flight; POST /api/campaigns/:id/resume to continue.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Campaign UUID
Response
Launch dispatched. Background task is running.
Available options:
true Always "Campaign launch started" on success
Trigger.dev run identifier.
Required range:
0 <= x <= 9007199254740991Required range:
0 <= x <= 9007199254740991