API Reference
Campaigns API
Create and manage WhatsApp broadcast campaigns on Vobiz - send bulk outbound messages via Meta-approved templates to segmented contact audiences at scale.
POST
Campaigns API
Prerequisites: Campaigns require an approved template (you pass its
template_id) and either contact tags or explicit contact IDs as the audience. See Templates API and Contacts API.https://api.vobiz.ai/api/v1/messaging
Authentication: Every request requires X-Auth-ID: MA_XXXXXXXX and X-Auth-Token: <token> headers (a Bearer JWT is also accepted). Set Content-Type: application/json on requests with a body. Get your credentials from console.vobiz.ai.
Campaign lifecycle
draft → scheduled → sending → paused → completed / cancelled / failed
List campaigns
status query parameter.
| Query param | Default | Description |
|---|---|---|
status | — | Filter by campaign status |
page | 1 | Page number |
limit | 20 | Page size (max 100) |
cURL
200 OK
Create campaign
template_id (a UUID, not a template name). Choose the audience with audience_type: use tags plus audience_tags, or contact_ids plus audience_contact_ids. Set scheduled_at for a future send, or omit it to send immediately.
Request body
| Field | Required | Description |
|---|---|---|
channel_id | Yes | Channel (UUID) to send from |
name | Yes | Campaign display name |
template_id | Yes | UUID of an approved template |
template_components | Yes | Meta component structure for the template |
audience_type | Yes | tags or contact_ids |
audience_tags | Conditional | Array of contact tags. Required when audience_type is tags |
audience_contact_ids | Conditional | Array of contact IDs. Required when audience_type is contact_ids |
variable_mappings | No | Object mapping template variables to contact fields |
recipient_variables | No | Object: { "<contact_id>": { "<key>": "<value>" } } per-recipient values |
scheduled_at | No | RFC3339 datetime (UTC) for a scheduled send |
cURL
201 Created
Get campaign
cURL
Campaign actions
Control campaign execution. All three usePOST with no request body and return the updated Campaign.
| Endpoint | Description |
|---|---|
POST /campaigns/{id}/pause | Pause a sending campaign. Sending stops immediately. |
POST /campaigns/{id}/resume | Resume a paused campaign. |
POST /campaigns/{id}/cancel | Permanently cancel. Cannot be undone. |
cURL - pause
Delete campaign
204 No Content.
cURL
204 No Content
List campaign recipients
status and page with page / limit.
cURL
200 OK
Campaign object
| Field | Type | Description |
|---|---|---|
id | UUID | Campaign ID |
channel_id | UUID | Channel the campaign sends from |
name | string | Campaign display name |
template_id | UUID | Approved template used |
template_name | string | Resolved template name |
template_lang | string | Template language code |
status | string | draft, scheduled, sending, paused, completed, cancelled, or failed |
total_recipients | int | Total recipients resolved for the audience |
sent_count | int | Messages sent |
delivered_count | int | Messages delivered |
read_count | int | Messages read |
failed_count | int | Messages failed |
skipped_count | int | Recipients skipped |
batch_size | int | Recipients per batch |
batch_delay_ms | int | Delay between batches (ms) |
pause_reason | string | Reason if paused |
scheduled_at | RFC3339 | Scheduled send time (UTC) |
started_at | RFC3339 | When sending started (UTC) |
completed_at | RFC3339 | When sending completed (UTC) |
created_at | RFC3339 | Creation timestamp (UTC) |
updated_at | RFC3339 | Last update timestamp (UTC) |
Campaign recipient object
| Field | Type | Description |
|---|---|---|
id | UUID | Recipient row ID |
campaign_id | UUID | Parent campaign |
contact_id | UUID | Contact targeted |
phone_number | string | Recipient phone (E.164) |
variables | object | Per-recipient template variables |
status | string | queued, sent, delivered, read, failed, or skipped |
meta_message_id | string | Meta message ID (when sent) |
error_code | string | Meta error code (on failure) |
error_desc | string | Meta error description (on failure) |
sent_at | RFC3339 | Sent timestamp (UTC) |
delivered_at | RFC3339 | Delivered timestamp (UTC) |
read_at | RFC3339 | Read timestamp (UTC) |
created_at | RFC3339 | Creation timestamp (UTC) |
updated_at | RFC3339 | Last update timestamp (UTC) |