Create a standalone campaign
Changed onCreates an empty campaign, paused, so you can add ad sets and ads to it afterwards.
Creates a campaign WITHOUT its first ad set / ad, on the platform of the given accountId. Ad sets join it later via existingCampaignId on the create endpoints. Platform notes: on Meta a budget here is campaign-level (CBO) by definition; omit it for ABO (each ad set carries its own budget), and specialAdCategories is Meta-only (400 elsewhere); bidStrategy is Meta and Google (400 elsewhere), and Google also accepts portfolioBidStrategyId instead. Google, X and OpenAI require a budget (422 without one; OpenAI accepts daily or lifetime, Google only budgetType: daily). On OpenAI goal sets the campaign objective, and conversions needs an active standard conversion event on the account. On Reddit goal is one of traffic, awareness, conversions, video_views or lead_generation (422 otherwise) and the budget is optional: with one, the campaign uses Reddit's campaign budget optimization and carries the pixel (see promotedObject, which then needs customEventType for conversions), daily or lifetime (a lifetime budget needs endDate, 400 otherwise). startDate / endDate set the campaign's schedule and need that campaign budget (400 without one). Without a budget, each ad set carries its own budget and dates. LinkedIn creates the campaign GROUP (our campaign level) and rejects a budget, which lives on the campaign (ad set) level there; it comes back status: DRAFT. Created PAUSED (TikTok DISABLE) unless status: ACTIVE where the platform supports it.
Idempotency: send an Idempotency-Key header to make retries safe.
Request
- Base URL: https://zernio.com/api
- URL: https://zernio.com/api/v1/ads/campaigns
- Auth: HTTP bearer
Headers
Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409. Only 2xx responses are stored, so a request that failed with a 4xx can be retried with a corrected body under the SAME key.
Request body
Example request
{
"locationTargetingType": "presence"
}Response
Campaign validation passed without creating a campaign.
Changes
- info
added the non-success response with the status
- info
- info
added the new optional request property
- info
added the new optional request property
- info