Contents

API reference

Campaigns

API reference descriptions are provided in English to preserve the exact published contract.

List resumable campaign builder drafts

GET /v1/accounts/{AC}/campaign-builder-drafts

Required scope: `campaigns:read`.

Parameters

Parameters
NameTypeRequiredDescription
limitquery · integer (1–100)
cursorquery · string (max 2048 chars)
ACpath · string (AC… SID)yesAccount SID

Errors: 400, 401, 403, 404, 409, 422, 429, 500, 503 — see errors.

Create a resumable campaign builder draft

POST /v1/accounts/{AC}/campaign-builder-drafts

Required scope: `campaigns:write`.

Parameters

Parameters
NameTypeRequiredDescription
ACpath · string (AC… SID)yesAccount SID
Request body (4 fields)
Request body
NameTypeRequiredDescription
currentStepinteger (1–9)yes
dataobjectyes
namestring (max 256 chars)yes
versioninteger (1–)

Errors: 400, 401, 403, 404, 409, 422, 429, 500, 503 — see errors.

Fetch a campaign builder draft

GET /v1/accounts/{AC}/campaign-builder-drafts/{CD}

Required scope: `campaigns:read`.

Parameters

Parameters
NameTypeRequiredDescription
ACpath · string (AC… SID)yes
CDpath · string (CD… SID)yes

Errors: 400, 401, 403, 404, 409, 422, 429, 500, 503 — see errors.

Save campaign builder progress

PATCH /v1/accounts/{AC}/campaign-builder-drafts/{CD}

Required scope: `campaigns:write`.

Parameters

Parameters
NameTypeRequiredDescription
ACpath · string (AC… SID)yes
CDpath · string (CD… SID)yes
Request body (4 fields)
Request body
NameTypeRequiredDescription
currentStepinteger (1–9)yes
dataobjectyes
namestring (max 256 chars)yes
versioninteger (1–)

Errors: 400, 401, 403, 404, 409, 422, 429, 500, 503 — see errors.

Delete a campaign builder draft

DELETE /v1/accounts/{AC}/campaign-builder-drafts/{CD}

Required scope: `campaigns:write`.

Parameters

Parameters
NameTypeRequiredDescription
ACpath · string (AC… SID)yes
CDpath · string (CD… SID)yes

Errors: 400, 401, 403, 404, 409, 422, 429, 500, 503 — see errors.

List campaigns and authoritative planning state

GET /v1/accounts/{AC}/campaigns

List campaigns with their state and planning progress. Required scope: `campaigns:read`.

Parameters

Parameters
NameTypeRequiredDescription
limitquery · integer (1–100)
cursorquery · string (max 2048 chars)
statequery · "DRAFT" | "PENDING_APPROVAL" | "SCHEDULED" | "PLANNING" | "RUNNING" | "PAUSED" | "COMPLETING" | "COMPLETED" | "CANCELED" | "FAILED"
ACpath · string (AC… SID)yesAccount SID

Errors: 400, 401, 403, 404, 409, 422, 429, 500, 503 — see errors.

Create a campaign draft

POST /v1/accounts/{AC}/campaigns

Create a campaign draft: who receives which template, when, and how fast. Nothing is sent until the campaign is started. Required scope: `campaigns:write`.

Parameters

Parameters
NameTypeRequiredDescription
ACpath · string (AC… SID)yesAccount SID
Request body (21 fields)
Request body
NameTypeRequiredDescription
audienceobjectyes
budgetCapstring (pattern ^[0-9][0-9,]*(\.[0-9]+)?$, max 24 chars)Budget cap in the campaign currency's own units, for example "500" for JPY or "12.50" for GBP.
budgetCapMinorinteger (0–)
contentSidstring (HX… SID)yes
currencystring (pattern ^[A-Z]{3}$)
frequencyPolicyobject | null
headerMediaSidstring (ME… SID)Media sent as the header of an IMAGE, VIDEO or DOCUMENT template. Meta needs the header asset on every send; without this the asset the template was submitted with is used, and a campaign with neither cannot be submitted.
namestring (max 256 chars)yes
pacingobjectyes
pacing.perAccountPerMinuteinteger (1–1000000)
pacing.perSenderPerMinuteinteger (1–1000000)yes
requiresApprovalboolean
scheduleobjectyes
schedule.endAtstring (date-time)yes
schedule.quietHoursobject
schedule.startAtstring (date-time)yes
schedule.timezoneMode"sender" | "recipient"
senderPoolSidstring (SP… SID)
senderSidsstring (WA… SID)[]
transport"cloud_api" | "marketing_messages"
variablesMappingobjectTemplate placeholder → source. A source is a contact field path (displayName, locale, timezone, attributes.<key>) or `literal:<text>` for a fixed value; a placeholder with no entry reads attributes.<placeholder>. A contact whose sources resolve to no scalar is excluded with ADDRESSING_UNSUPPORTED and the failing placeholder in detail.

Errors: 400, 401, 403, 404, 409, 422, 429, 500, 503 — see errors.

Fetch a campaign

GET /v1/accounts/{AC}/campaigns/{CP}

Fetch one campaign with its schedule, audience, counts and cost so far. Required scope: `campaigns:read`.

Parameters

Parameters
NameTypeRequiredDescription
ACpath · string (AC… SID)yes
CPpath · string (CP… SID)yes

Errors: 400, 401, 403, 404, 409, 422, 429, 500, 503 — see errors.

Delete a campaign draft

DELETE /v1/accounts/{AC}/campaigns/{CP}

Required scope: `campaigns:write`.

Parameters

Parameters
NameTypeRequiredDescription
ACpath · string (AC… SID)yes
CPpath · string (CP… SID)yes

Errors: 400, 401, 403, 404, 409, 422, 429, 500, 503 — see errors.

Approve a campaign

POST /v1/accounts/{AC}/campaigns/{CP}/approve

Required scope: `approvals:decide`.

Parameters

Parameters
NameTypeRequiredDescription
ACpath · string (AC… SID)yes
CPpath · string (CP… SID)yes
Request body (1 fields)
Request body
NameTypeRequiredDescription
reasonstring (max 512 chars)

Errors: 400, 401, 403, 404, 409, 422, 429, 500, 503 — see errors.

Record an idempotent campaign click or conversion

POST /v1/accounts/{AC}/campaigns/{CP}/attribution-events

Required scope: `campaigns:write`.

Parameters

Parameters
NameTypeRequiredDescription
ACpath · string (AC… SID)yes
CPpath · string (CP… SID)yes
Request body (8 fields)
Request body
NameTypeRequiredDescription
contactSidstring (CT… SID)
currencystring (pattern ^[A-Z]{3}$)
eventType"click" | "conversion"yes
externalEventIdstring (max 200 chars)yes
messageSidstring (SM… SID)
occurredAtstring (date-time)yes
propertiesobject
valueMinorinteger (0–)

Errors: 400, 401, 403, 404, 409, 422, 429, 500, 503 — see errors.

List campaign planning batches

GET /v1/accounts/{AC}/campaigns/{CP}/batches

Required scope: `campaigns:read`.

Parameters

Parameters
NameTypeRequiredDescription
limitquery · integer (1–100)
cursorquery · string (max 2048 chars)
ACpath · string (AC… SID)yes
CPpath · string (CP… SID)yes

Errors: 400, 401, 403, 404, 409, 422, 429, 500, 503 — see errors.

Cancel a campaign

POST /v1/accounts/{AC}/campaigns/{CP}/cancel

Cancel a campaign. Recipients not yet sent to are skipped; this cannot be undone. Required scope: `campaigns:write`.

Parameters

Parameters
NameTypeRequiredDescription
ACpath · string (AC… SID)yes
CPpath · string (CP… SID)yes
Request body (1 fields)
Request body
NameTypeRequiredDescription
reasonstring (max 512 chars)

Errors: 400, 401, 403, 404, 409, 422, 429, 500, 503 — see errors.

Set the frequency policy, money budget cap, account pacing and transport

PATCH /v1/accounts/{AC}/campaigns/{CP}/controls

Required scope: `campaigns:write`.

Parameters

Parameters
NameTypeRequiredDescription
ACpath · string (AC… SID)yes
CPpath · string (CP… SID)yes
Request body (6 fields)
Request body
NameTypeRequiredDescription
budgetCapstring (pattern ^[0-9][0-9,]*(\.[0-9]+)?$, max 24 chars) | null
budgetCapMinorinteger (0–) | null
frequencyPolicyobject | null
headerMediaSidstring (ME… SID) | null
perAccountPerMinuteinteger (1–1000000) | null
transport"cloud_api" | "marketing_messages"

Errors: 400, 401, 403, 404, 409, 422, 429, 500, 503 — see errors.

Dry-run campaign admission

POST /v1/accounts/{AC}/campaigns/{CP}/dry-run

Required scope: `campaigns:write`.

Parameters

Parameters
NameTypeRequiredDescription
ACpath · string (AC… SID)yes
CPpath · string (CP… SID)yes
Request body (1 fields)
Request body
NameTypeRequiredDescription
reasonstring (max 512 chars)

Errors: 400, 401, 403, 404, 409, 422, 429, 500, 503 — see errors.

List campaign exclusions

GET /v1/accounts/{AC}/campaigns/{CP}/exclusions

Required scope: `campaigns:read`.

Parameters

Parameters
NameTypeRequiredDescription
limitquery · integer (1–100)
cursorquery · string (max 2048 chars)
ACpath · string (AC… SID)yes
CPpath · string (CP… SID)yes

Errors: 400, 401, 403, 404, 409, 422, 429, 500, 503 — see errors.

Read campaign experiment, holdout and attribution configuration

GET /v1/accounts/{AC}/campaigns/{CP}/experiment

Required scope: `campaigns:read`.

Parameters

Parameters
NameTypeRequiredDescription
ACpath · string (AC… SID)yes
CPpath · string (CP… SID)yes

Errors: 400, 401, 403, 404, 409, 422, 429, 500, 503 — see errors.

Configure deterministic campaign variants and holdout

PUT /v1/accounts/{AC}/campaigns/{CP}/experiment

Required scope: `campaigns:write`.

Parameters

Parameters
NameTypeRequiredDescription
ACpath · string (AC… SID)yes
CPpath · string (CP… SID)yes
Request body (5 fields)
Request body
NameTypeRequiredDescription
attributionWindowDaysinteger (1–90)yes
enabledbooleanyes
holdoutBasisPointsinteger (0–5000)yes
primaryEvent"click" | "conversion"yes
variantsobject[]yes

Errors: 400, 401, 403, 404, 409, 422, 429, 500, 503 — see errors.

Report campaign outcomes and cost by variant with honest denominators

GET /v1/accounts/{AC}/campaigns/{CP}/experiment-report

Required scope: `campaigns:read`.

Parameters

Parameters
NameTypeRequiredDescription
ACpath · string (AC… SID)yes
CPpath · string (CP… SID)yes

Errors: 400, 401, 403, 404, 409, 422, 429, 500, 503 — see errors.

Pause a campaign

POST /v1/accounts/{AC}/campaigns/{CP}/pause

Pause a running campaign. Messages already handed to WhatsApp still deliver. Required scope: `campaigns:write`.

Parameters

Parameters
NameTypeRequiredDescription
ACpath · string (AC… SID)yes
CPpath · string (CP… SID)yes
Request body (1 fields)
Request body
NameTypeRequiredDescription
reasonstring (max 512 chars)

Errors: 400, 401, 403, 404, 409, 422, 429, 500, 503 — see errors.

Reject a campaign

POST /v1/accounts/{AC}/campaigns/{CP}/reject

Required scope: `approvals:decide`.

Parameters

Parameters
NameTypeRequiredDescription
ACpath · string (AC… SID)yes
CPpath · string (CP… SID)yes
Request body (1 fields)
Request body
NameTypeRequiredDescription
reasonstring (max 512 chars)

Errors: 400, 401, 403, 404, 409, 422, 429, 500, 503 — see errors.

Resume a campaign

POST /v1/accounts/{AC}/campaigns/{CP}/resume

Required scope: `campaigns:write`.

Parameters

Parameters
NameTypeRequiredDescription
ACpath · string (AC… SID)yes
CPpath · string (CP… SID)yes
Request body (1 fields)
Request body
NameTypeRequiredDescription
reasonstring (max 512 chars)

Errors: 400, 401, 403, 404, 409, 422, 429, 500, 503 — see errors.

Create a draft campaign for retryable failed recipients

POST /v1/accounts/{AC}/campaigns/{CP}/retry-eligible

Required scope: `campaigns:write`.

Parameters

Parameters
NameTypeRequiredDescription
ACpath · string (AC… SID)yes
CPpath · string (CP… SID)yes
Request body (1 fields)
Request body
NameTypeRequiredDescription
namestring (max 256 chars)

Errors: 400, 401, 403, 404, 409, 422, 429, 500, 503 — see errors.

Evaluate the current campaign authorization decision without mutating it

GET /v1/accounts/{AC}/campaigns/{CP}/review

Required scope: `campaigns:read`.

Parameters

Parameters
NameTypeRequiredDescription
ACpath · string (AC… SID)yes
CPpath · string (CP… SID)yes

Errors: 400, 401, 403, 404, 409, 422, 429, 500, 503 — see errors.

Acknowledge an allowed campaign review snapshot

POST /v1/accounts/{AC}/campaigns/{CP}/review/acknowledge

Required scope: `campaigns:write`.

Parameters

Parameters
NameTypeRequiredDescription
ACpath · string (AC… SID)yes
CPpath · string (CP… SID)yes
Request body (2 fields)
Request body
NameTypeRequiredDescription
acknowledgeCostbooleanyes
acknowledgeLivebooleanyes

Errors: 400, 401, 403, 404, 409, 422, 429, 500, 503 — see errors.

Edit a draft or scheduled campaign window

PATCH /v1/accounts/{AC}/campaigns/{CP}/schedule

Required scope: `campaigns:write`.

Parameters

Parameters
NameTypeRequiredDescription
ACpath · string (AC… SID)yes
CPpath · string (CP… SID)yes
Request body (5 fields)
Request body
NameTypeRequiredDescription
endAtstring (date-time)yes
perSenderPerMinuteinteger (1–1000000)
quietHoursobject | null
startAtstring (date-time)yes
timezoneMode"sender" | "recipient"yes

Errors: 400, 401, 403, 404, 409, 422, 429, 500, 503 — see errors.

Start a campaign

POST /v1/accounts/{AC}/campaigns/{CP}/start

Start a campaign. It must have passed review; a campaign that needs approval waits for it. Required scope: `campaigns:write`.

Parameters

Parameters
NameTypeRequiredDescription
ACpath · string (AC… SID)yes
CPpath · string (CP… SID)yes
Request body (1 fields)
Request body
NameTypeRequiredDescription
reasonstring (max 512 chars)

Errors: 400, 401, 403, 404, 409, 422, 429, 500, 503 — see errors.

Submit a campaign

POST /v1/accounts/{AC}/campaigns/{CP}/submit

Required scope: `campaigns:write`.

Parameters

Parameters
NameTypeRequiredDescription
ACpath · string (AC… SID)yes
CPpath · string (CP… SID)yes
Request body (1 fields)
Request body
NameTypeRequiredDescription
reasonstring (max 512 chars)

Errors: 400, 401, 403, 404, 409, 422, 429, 500, 503 — see errors.

Send a billed campaign sample to at most 10 contacts

POST /v1/accounts/{AC}/campaigns/{CP}/test-send

Required scope: `campaigns:write`.

Parameters

Parameters
NameTypeRequiredDescription
ACpath · string (AC… SID)yes
CPpath · string (CP… SID)yes
Request body (1 fields)
Request body
NameTypeRequiredDescription
contactSidsstring (CT… SID)[]yes

Errors: 400, 401, 403, 404, 409, 422, 429, 500, 503 — see errors.

Withdraw a pending campaign approval request

POST /v1/accounts/{AC}/campaigns/{CP}/withdraw

Required scope: `campaigns:write`.

Parameters

Parameters
NameTypeRequiredDescription
ACpath · string (AC… SID)yes
CPpath · string (CP… SID)yes

Errors: 400, 401, 403, 404, 409, 422, 429, 500, 503 — see errors.