- Send a campaign message delivers the template to one recipient and charges the wallet.
- Validate a campaign call checks the call and quotes its price without sending or charging.
Dedicated keys
Webhook campaigns use their own keys, not the organization API keys. Generate them on the campaign’s API Keys tab: enter a key label, then select Generate key. Each key is bound to its campaign and lists its label, prefix, Created, and Last used dates. Revoke stops every integration that uses the key at once. The full key is shown once at creation.Contract locking
The Contract tab shows the exact contract for your campaign’s template as a Postman collection, OpenAPI 3.1.0, and cURL. Tars pins the template version when the campaign is created. If the template changes after that, calls fail with409 template_version_drift.
While the campaign has at least one key, its template, parameters, and WhatsApp number cannot be edited. Revoke every key, or clone the campaign, to change them.
Lifecycle
Campaign status drives two error codes that matter most for client logic. A409 campaign_paused is retryable, because a paused campaign can become active again. A 410 campaign_gone means the campaign is cancelled or failed. That state is terminal, so a well-behaved client stops calling the endpoint.
The Activity tab records every call with its status, error code, request ID, and cost. A call to a paused campaign is recorded too, as a failed call with campaign_paused.
Errors: RFC 9457 problem details
Failures on/send return Content-Type: application/problem+json with this body. The /validate operation answers with its own ok, code, and errors shape, and only the status matches the catalog.
Branch on
retryable, not on the status number.
The codes rate_limited, meta_rate_limited, and meta_unavailable carry a Retry-After header in seconds. The code campaign_paused carries no header, and channel_unavailable does not always carry one. Use your own backoff when the header is missing.
Rate limits and charges
Sends are limited to 120 per minute for each organization and campaign key pair, with a burst capacity of 200. Over-limit calls return429 with code rate_limited and a Retry-After header. Validate calls are not rate limited.
A send is charged before it goes out, and a send that then fails is refunded automatically. Sends on a WhatsApp number in Staging mode are not charged.
