Skip to main content
Campaign write endpoints require an advertiser API key with the campaigns permission. See Management API overview for base URL, authentication, and error format. All routes are org-scoped through the key. You can only read or mutate campaigns owned by a user in your organization.

Concepts

A campaign is the top-level container (name, brand, objective, schedule). Line items are the deliverable ad units under a campaign. In the database, line items are stored in the ads table; the API uses the term “line item” throughout.
Every campaign create requires user_id in the JSON body. The API key resolves to an organization, not a single user. Pass a UUID for a member of that org. A user_id outside your org returns 403 forbidden.
There is no org_id field on campaigns. Tenancy is enforced through campaigns.user_id and the org_users membership table.

Typical workflow

1

Validate (optional)

POST /v1/advertiser/campaigns/validate checks campaign and line item fields without writing.
2

Create

Create a campaign alone (POST /campaigns), a line item under an existing campaign (POST /campaigns/:id/line-items), or both atomically (POST /campaigns/compose).
3

Configure line items

Set budget, bids, targeting, and attach creatives on the line item subresource routes.
4

Activate

POST /v1/advertiser/campaigns/:id/activate validates the campaign has at least one line item and sets the campaign and its line items to active.
compose and duplicate run in a single database transaction. If any step fails, nothing is left behind.

Endpoints

Create a campaign

Required fields: name, brand_name, user_id. Response (201):

Compose a campaign and line item

Use compose when you want both records created together:
Response (201):

List and update line items

List line items under a campaign:
Update budget on a line item:

Activate

Activation requires at least one line item. The campaign and all its line items are set to active:

Value normalization

The API accepts common product terms and maps them to database constraints: Campaigns allow only active, paused, and completed. There is no draft status for campaigns; newly created campaigns start as paused. Line items may remain draft until activation.

Errors

OpenAPI reference

Field-level schemas (CampaignInput, LineItemInput, and others) live in the machine-readable contract:
Prefer the spec when this page and the running service diverge.