Campañas

ToolEndpoint RESTAnotaciones
list_campaignsGET /v1/campaignslectura, idempotente
get_campaignGET /v1/campaigns/{id}lectura, idempotente
create_campaignPOST /v1/campaignsescritura
update_campaignPATCH /v1/campaigns/{id}escritura
delete_campaignDELETE /v1/campaigns/{id}destructiva
send_campaignPOST /v1/campaigns/{id}/sendescritura
get_campaign_audienceGET /v1/campaigns/{id}/audiencelectura, idempotente
add_campaign_audiencePOST /v1/campaigns/{id}/audienceescritura
remove_campaign_audience_clientDELETE /v1/campaigns/{id}/audience/{phone}destructiva, idempotente
clear_campaign_audienceDELETE /v1/campaigns/{id}/audiencedestructiva

CRUD básico

list_campaigns

CampoTipoDefault
limit1-20050
pageTokenstring—
offset≥ 0 (máx 100000)0
sortBy"title" \| "creationDate" \| "lastUpdate"lastUpdate
sortDirection"asc" \| "desc"desc

pageToken es el cursor de la respuesta anterior y se prefiere sobre offset; no se combinan.

get_campaign / delete_campaign

Sólo requieren campaignId.

create_campaign

CampoTipoRequeridoDescripción
titlestringsí
category"marketing" \| "utility" \| "authentication"sí
platformstringnoDefault "whatsapp".
templateNamestringnoSi se incluye, el API rellena language, message, template automáticamente.
message, template, language, wabaIdstringnoSobreescribibles.
ownersstring[] (emails)no

update_campaign

Mismos campos que create_campaign (todos opcionales), más campaignId.


Audiencia

get_campaign_audience

CampoTipoDefault
campaignIdstringsí
limit1-50050
pageTokenstring—
offset≥ 0 (máx 100000)0
sortBy"name" \| "creationDate" \| "lastUpdate"lastUpdate
sortDirection"asc" \| "desc"desc

Prefiere pageToken, salvo con más de 30 etiquetas dinámicas: ahí no hay cursor y toca usar offset.

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

CampoRequerido
campaignIdsí
phoneNumbersí

clear_campaign_audience

Sólo campaignId. Vacía toda la audiencia.


send_campaign

Dispara el envío real. La sección template debe ser consistente con la plantilla configurada en la campaña.

CampoTipoRequeridoDescripción
campaignIdstringsí
channelIdstringsíCanal EMISOR (prefixedChannelId recomendado; teléfono/ID legacy aceptado).
responderAgentIdstringnoAgente que RESPONDE, independiente del canal.
template.namestringno
template.paramsstring[]no
template.type"image" \| "video" \| "document"no
template.filestring (URL)noHeader multimedia.
template.buttons[]objetonoSoporta sub_type: url \| phone_number \| quick_reply \| otp \| flow.
template.sendToProblematicbooleannoDefault false.
template.sendToUndeliverablebooleannoDefault false.
template.scheduledDatesstring[] ISO 8601noPara programar el envío.

Si no se especifica respondedor con un canal canónico, las conversaciones nuevas quedan initiated y sin agente. El default del canal no se hereda. El formato legacy (teléfono del agente) sí conserva ese agente. Los contactos bloqueados se excluyen siempre.