Campaign flows are built in the dashboard UI — creating and editing flows via API is not available currently. The REST API provides operational control: triggering a run, pausing it, and resuming after a pause. Full API-driven campaign creation is on the roadmap.
Endpoints
| Endpoint | Method | Description |
|---|---|---|
POST /v1/campaigns/{id}/trigger | POST | Start a run for API-triggered campaigns |
POST /v1/campaigns/{id}/pause | POST | Pause a running campaign |
POST /v1/campaigns/{id}/resume | POST | Resume pending executions after a pause |
GET /v1/campaigns/{id}/status | GET | Current campaign state and execution counts |
POST /v1/campaigns/{id}/trigger
Starts a run for a campaign configured with an API trigger in the dashboard. Has no effect on campaigns with scheduled, event, or manual triggers.
Campaign id.
Optional. Prevents duplicate runs on retry — the same key within 24 hours returns the original run id instead of starting a new run.
| Status | Meaning |
|---|---|
| 202 | Run accepted; processing starts asynchronously. Returns { run_id, status: "RUNNING" } |
| 402 | Insufficient free balance for estimated audience cost |
| 404 | Campaign not found |
| 409 | Campaign already running, or not configured for API trigger |
POST /v1/campaigns/{id}/pause
Stops enqueuing new contact executions. Executions already in progress complete their current node before stopping.
Responses
| Status | Meaning |
|---|---|
| 200 | Paused. Returns { status: "PAUSED" }. |
| 409 | Campaign already paused or completed |
POST /v1/campaigns/{id}/resume
Resumes pending executions after a PAUSED, PAUSED_ERROR, or PAUSED_BALANCE state.
Behavior
- Enqueues tasks only for executions still pending — contacts already completed or failed are not re-run.
- Per-contact idempotency keys prevent double sends if the worker crashes between resume and execution.
- Validates balance vs. estimated cost for remaining audience before accepting.
| Pause state | Cause | Resolution |
|---|---|---|
PAUSED | Manual operator pause | Call resume directly |
PAUSED_ERROR | Provider outage / circuit breaker | Wait for provider recovery, then resume |
PAUSED_BALANCE | Free balance hit €0 | Top up balance, then resume |
| Status | Meaning |
|---|---|
| 200 | Resume accepted; processing continues asynchronously |
| 402 | Insufficient balance for remaining audience |
| 404 | Campaign not found |
| 409 | Campaign not in a resumable state |
GET /v1/campaigns/{id}/status
Returns the current campaign state and a breakdown of per-contact execution counts.
Campaign-level state:
DRAFT, SCHEDULED, RUNNING, PAUSED, PAUSED_ERROR, PAUSED_BALANCE, COMPLETED, COMPLETED_PARTIAL.Contacts where a SEND node determined the contact was ineligible — no consent, device not RCS-capable with
fallback: none, or channel not approved.Matches
status when paused: PAUSED, PAUSED_ERROR, or PAUSED_BALANCE.Related
Campaigns in depth
Node types, execution states, triggers, and idempotency.
Billing API
Balance and usage — check before triggering large runs.
Webhooks
Receive campaign events in real time.