Skip to main content
A campaign is one flight of advertising under a project. Creating it is the moment money is committed, so it is worth understanding what each field decides.
Creating a campaign commits its entire budget from your balance. Not a hold per placement — the whole amount, at once.

Creating one

Destination URL placeholders

Three placeholders are substituted per placement, so your own reporting can tell campaigns and channels apart under the parameter names it already reads: They may sit anywhere — query string or path alike, including a bot deeplink payload:
Names are case-insensitive and stored lower-cased, so the value the API returns can differ from the one you sent in exactly that way.
Any other {name} is rejected with a 400. An unknown placeholder cannot be filled in and would reach the published post as literal text.
Because a URL carrying a placeholder is not a well-formed URI, this field is deliberately not validated as one.

Asking for a budget spread

Each day comes back with an amount and a recommendation: The response may also carry an insight — a sentence explaining the shape of the suggestion.

What can change afterwards

Almost nothing. PATCH /api/v1/campaigns/{campaignId} accepts only approvalMode — you can hand approval to an operator or take it back, and that is all. Copy, budget, dates, channels and destination are fixed at creation. To change anything else, archive the campaign and create a new one.

Status and lifecycle

A campaign’s own status is one of ACTIVE, COMPLETED or ARCHIVED. The interesting movement happens on its placements.
DELETE /api/v1/campaigns/{campaignId} answers with a DeletionResult whose outcome is DELETED or ARCHIVED — a campaign with history behind it is archived rather than removed.