Campaigns
| Tool | REST endpoint | Annotations |
list_campaigns | GET /v1/campaigns | read-only, idempotent |
get_campaign | GET /v1/campaigns/{id} | read-only, idempotent |
create_campaign | POST /v1/campaigns | write |
update_campaign | PATCH /v1/campaigns/{id} | write |
delete_campaign | DELETE /v1/campaigns/{id} | destructive |
send_campaign | POST /v1/campaigns/{id}/send | write |
get_campaign_audience | GET /v1/campaigns/{id}/audience | read-only, idempotent |
add_campaign_audience | POST /v1/campaigns/{id}/audience | write |
remove_campaign_audience_client | DELETE /v1/campaigns/{id}/audience/{phone} | destructive, idempotent |
clear_campaign_audience | DELETE /v1/campaigns/{id}/audience | destructive |
Basic CRUD
list_campaigns
| Field | Type | Default |
limit | 1-200 | 50 |
offset | ≥ 0 | 0 |
sortBy | "title" \| "creationDate" \| "lastUpdate" | lastUpdate |
sortDirection | "asc" \| "desc" | desc |
get_campaign / delete_campaign
Both only require campaignId.
create_campaign
| Field | Type | Required | Description |
title | string | yes | |
category | "marketing" \| "utility" \| "authentication" | yes | |
platform | string | no | Default "whatsapp". |
templateName | string | no | If included, the API fills in language, message, and template automatically. |
message, template, language, wabaId | string | no | Overridable. |
owners | string[] (emails) | no | |
update_campaign
Same fields as create_campaign (all optional), plus campaignId.
Audience
get_campaign_audience
| Field | Type | Default |
campaignId | string | yes |
limit | 1-500 | 50 |
offset | ≥ 0 | 0 |
sortBy | "name" \| "creationDate" \| "lastUpdate" | lastUpdate |
sortDirection | "asc" \| "desc" | desc |
add_campaign_audience
{
"name": "add_campaign_audience",
"arguments": {
"campaignId": "promo_julio",
"clients": [
{ "phoneNumber": "+521234567890", "name": "Ana López" },
{ "phoneNumber": "+529876543210", "name": "Beto Pérez" }
]
}
}
remove_campaign_audience_client
| Field | Required |
campaignId | yes |
phoneNumber | yes |
clear_campaign_audience
Only campaignId. Empties the entire audience.
send_campaign
Triggers the actual send. The template section must be consistent with the template configured on the campaign.
| Field | Type | Required | Description |
campaignId | string | yes | |
channelId | string | yes | SENDER channel the campaign is sent from (prefixedChannelId, e.g. wb-123). |
responderAgentId | string | no | Agent that RESPONDS to replies, decoupled from the channel. If omitted, the channel's defaultAgentId is used. |
template.name | string | no | |
template.params | string[] | no | |
template.type | "image" \| "video" \| "document" | no | |
template.file | string (URL) | no | Media header. |
template.buttons[] | object | no | Supports sub_type: url \| phone_number \| quick_reply \| otp \| flow. |
template.sendToProblematic | boolean | no | Default true. |
template.sendToUndeliverable | boolean | no | Default true. |
template.scheduledDates | string[] ISO 8601 | no | To schedule the send. |