---
title: "Create a campaign"
method: POST
path: "/campaigns"
tags: ["Campaigns"]
---

# Create a campaign

`POST /campaigns`

## Request

- Base URL: `https://www.fandom.ai/api/v1`
- URL: `https://www.fandom.ai/api/v1/campaigns`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/skilledstars/apis/super-fans-enterprise-api/docs/campaigns/post.ts> (a function with typed inputs; its response is checked against the schema)

Creates the campaign exactly as the app's New campaign form does. Audiences you pass are attached and start generating targeting right away. Nothing is sent to Google Ads.

Scope: `campaigns:write`.

Send an `Idempotency-Key` header to make retries safe.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `name` string, required
  - `campaignType` 'SEARCH' | 'DEMAND_GEN' | 'VIDEO' | 'DISPLAY', required: Google Ads campaign type.
  - `objective` string: What the campaign should achieve and for whom. Drives targeting.
  - `brandId` string: Fills the brand's name, website and description into the campaign.
  - `audienceIds` string[]
  - `googleAdsCustomerId` string: A connected Google Ads account to create it in later. See List Google Ads accounts.
  - `budget` number: Daily budget.
  - `biddingStrategy` 'MAXIMIZE_CONVERSIONS' | 'MAXIMIZE_CONVERSION_VALUE' | 'TARGET_CPA' | 'TARGET_ROAS' | 'TARGET_CPC' | 'TARGET_SPEND' | 'MANUAL_CPC': Google Ads bidding strategy.
  - `industry` string
  - `language` string: Language code. Default `en`.
  - `locations` string[]: Country or region codes, e.g. `["US"]`. Default `["US"]`.
  - `successMetrics` string[]

## Response `201`

Success

- object
  - `id` string, required
  - `name` string, required
  - `status` string, required: `draft`, `loading` (collecting data), `ready` or `error`.
  - `objective` string, required
  - `brandId` string, nullable, required
  - `brand` object, required
    - `name` string, required
    - `website` string, required
    - `description` string, required
  - `industry` string, required
  - `language` string, required
  - `locations` string[], required
  - `successMetrics` string[], required
  - `campaignType` string, nullable, required
  - `budget` number, nullable, required: In the account's currency.
  - `budgetType` 'daily' | 'total', nullable, required
  - `endDate` string, nullable, required
  - `biddingStrategy` string, nullable, required
  - `targetCpa` number, nullable, required
  - `targetRoas` number, nullable, required
  - `audiences` object[], required
    - `id` string, required: This audience's slot on the campaign. Stable; use it for targeting.
    - `name` string, required
    - `audienceId` string, nullable, required: The saved audience, or null for the campaign's own primary audience.
    - `dataStoreIds` string[], required
  - `googleAds` object, required
    - `customerId` string, nullable, required
    - `accountName` string, nullable, required
    - `campaignId` string, nullable, required: Set once the campaign exists in Google Ads.
    - `status` string, nullable, required
  - `url` string, required: Opens the campaign in Fandom.
  - `createdAt` string, nullable, required
  - `updatedAt` string, nullable, required

## Other responses

- `400`: The request is missing something or has a bad value. The message says what.
- `401`: No API key, or the key is wrong or revoked.
- `402`: The workspace's plan doesn't include this.
- `403`: The key doesn't have the scope, or isn't allowed this campaign or account.
- `409`: The current state doesn't allow this (for example, it's already done or still generating).
- `429`: More than 120 requests in a minute. Wait and retry.

## Changes

- **2026-10-07** `dfe5b1c3d84f`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/skilledstars/apis/super-fans-enterprise-api/changes/campaigns/post.md)

---

[API](https://skmtc.dev/skilledstars/apis/super-fans-enterprise-api.md) - [All operations](https://skmtc.dev/skilledstars/apis/super-fans-enterprise-api/llms.txt) - [OpenAPI document](https://skmtc.dev/skilledstars/apis/super-fans-enterprise-api/revisions/6c1a68a75970?raw)
