POST /api/v2/buyer/campaigns
For discovery and performance, creates a campaign in DRAFT status for the
given advertiser. You set flight dates and budget up front; products, creatives,
and audiences attach afterward. The legacy routingType field is not a
campaign input; it is derived per media buy as compatibility metadata for the
current execution path and is independent of campaign mode, BYOA, protocol
connectivity, and settlement. Execute the campaign later to turn it into live
media buys.
Every campaign budget is GROSS: budget.total is the all-in amount the buyer pays, with the Interchange fee inside it. Every budget downstream is gross too — media buy and package budgets allocate against budget.total directly, and the media/fee split is derived per media buy at the fee terms locked when that buy is created (readable via its budget_breakdown — see Budgets and fees). There is no fee-model input at creation — the campaign object has no feeType field.
Request
Parameters
Response
status: "DRAFT". campaign.campaignId is the stable identifier you pass to every sibling operation. Routing is decided per media buy at execution time — a campaign has no routing type of its own. When the request included a discoveryId, the response also carries productGroups, budgetContext, and summary from the discovery session.
Errors
400 VALIDATION_ERROR— missing required field, malformedflightDates, or non-positivebudget.total.404 NOT_FOUND—advertiserIddoes not exist or is not visible to the authenticated account.
Related
Campaign tasks
All campaign operations
Campaign overview
Fields, lifecycle, and concepts
Auto-select products
Populate a campaign from decisioned inventory
Execute campaign
Launch into media buys