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 temporary billing compatibility
metadata from BillingParty. It is never a storefront or
execution type and is independent of campaign mode, BYOA, and protocol
connectivity. 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 eligible storefront inventory
Execute campaign
Launch into media buys