> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fandom.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Create in Google Ads

> Creates the campaign in Google Ads, paused, exactly as the campaign page does. Nothing spends until someone turns it on in Google Ads. Targeting goes over when the app syncs.

Scope: `google-ads:write`.

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



## OpenAPI

````yaml /api-reference/openapi.json post /campaigns/{campaignId}/google-ads
openapi: 3.1.0
info:
  title: Fandom API
  version: 1.0.0
  description: >-
    Campaigns, targeting, audiences, data stores, brands and Audience
    Exploration. The same operations are available as MCP tools at /mcp.
servers:
  - url: https://fandom-api-preview.vercel.app/api/v1
  - url: https://www.fandom.ai/api/v1
security:
  - bearerAuth: []
tags:
  - name: Workspace
    description: What's in the workspace.
  - name: Campaigns
    description: Campaigns, as the app's Marketing section shows them.
  - name: Targeting
    description: Keywords, segments, topics and websites for each audience on a campaign.
  - name: Google Ads
    description: Connected accounts, performance, and creating campaigns in Google Ads.
  - name: Audiences
    description: Saved audiences you can attach to campaigns.
  - name: Data stores
    description: >-
      YouTube channels and videos, with their comments, that audiences are built
      from.
  - name: Brands
    description: Brands that campaigns belong to.
  - name: Audience Exploration
    description: >-
      Who an audience is on YouTube: the channels they watch and how they group.
      Invite-only for now.
paths:
  /campaigns/{campaignId}/google-ads:
    post:
      tags:
        - Google Ads
      summary: Create in Google Ads
      description: >-
        Creates the campaign in Google Ads, paused, exactly as the campaign page
        does. Nothing spends until someone turns it on in Google Ads. Targeting
        goes over when the app syncs.


        Scope: `google-ads:write`.


        Send an `Idempotency-Key` header to make retries safe.
      operationId: create_google_ads_campaign
      parameters:
        - name: campaignId
          in: path
          required: true
          description: Campaign id.
          schema:
            type: string
            pattern: ^[a-f0-9]{24}$
        - name: Idempotency-Key
          in: header
          required: false
          description: >-
            Any unique string. Repeating a request with the same key returns the
            first result instead of doing it twice.
          schema:
            type: string
            maxLength: 200
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                customerId:
                  type: string
                  pattern: ^\d{3}-?\d{3}-?\d{4}$
                  description: >-
                    The account to create it in. Defaults to the campaign's
                    account.
              additionalProperties: false
            example:
              customerId: '1234567890'
      responses:
        '201':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                  name:
                    type: string
                  status:
                    type: string
                    description: '`draft`, `loading` (collecting data), `ready` or `error`.'
                  objective:
                    type: string
                  brandId:
                    type:
                      - string
                      - 'null'
                  brand:
                    type: object
                    properties:
                      name:
                        type: string
                      website:
                        type: string
                      description:
                        type: string
                    required:
                      - name
                      - website
                      - description
                    additionalProperties: false
                  industry:
                    type: string
                  language:
                    type: string
                  locations:
                    type: array
                    items:
                      type: string
                  successMetrics:
                    type: array
                    items:
                      type: string
                  campaignType:
                    type:
                      - string
                      - 'null'
                  budget:
                    type:
                      - number
                      - 'null'
                    description: In the account's currency.
                  budgetType:
                    anyOf:
                      - type: string
                        enum:
                          - daily
                          - total
                      - type: 'null'
                  endDate:
                    type:
                      - string
                      - 'null'
                  biddingStrategy:
                    type:
                      - string
                      - 'null'
                  targetCpa:
                    type:
                      - number
                      - 'null'
                  targetRoas:
                    type:
                      - number
                      - 'null'
                  audiences:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          description: >-
                            This audience's slot on the campaign. Stable; use it
                            for targeting.
                        name:
                          type: string
                        audienceId:
                          type:
                            - string
                            - 'null'
                          description: >-
                            The saved audience, or null for the campaign's own
                            primary audience.
                        dataStoreIds:
                          type: array
                          items:
                            type: string
                      required:
                        - id
                        - name
                        - audienceId
                        - dataStoreIds
                      additionalProperties: false
                  googleAds:
                    type: object
                    properties:
                      customerId:
                        type:
                          - string
                          - 'null'
                      accountName:
                        type:
                          - string
                          - 'null'
                      campaignId:
                        type:
                          - string
                          - 'null'
                        description: Set once the campaign exists in Google Ads.
                      status:
                        type:
                          - string
                          - 'null'
                    required:
                      - customerId
                      - accountName
                      - campaignId
                      - status
                    additionalProperties: false
                  url:
                    type: string
                    description: Opens the campaign in Fandom.
                  createdAt:
                    type:
                      - string
                      - 'null'
                  updatedAt:
                    type:
                      - string
                      - 'null'
                required:
                  - id
                  - name
                  - status
                  - objective
                  - brandId
                  - brand
                  - industry
                  - language
                  - locations
                  - successMetrics
                  - campaignType
                  - budget
                  - budgetType
                  - endDate
                  - biddingStrategy
                  - targetCpa
                  - targetRoas
                  - audiences
                  - googleAds
                  - url
                  - createdAt
                  - updatedAt
                additionalProperties: false
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/PaymentRequired'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/RateLimited'
        '502':
          $ref: '#/components/responses/UpstreamError'
components:
  responses:
    BadRequest:
      description: >-
        The request is missing something or has a bad value. The message says
        what.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: No API key, or the key is wrong or revoked.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    PaymentRequired:
      description: The workspace's plan doesn't include this.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: >-
        The key doesn't have the scope, or isn't allowed this campaign or
        account.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: Nothing with that id in this workspace.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Conflict:
      description: >-
        The current state doesn't allow this (for example, it's already done or
        still generating).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    RateLimited:
      description: More than 120 requests in a minute. Wait and retry.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    UpstreamError:
      description: >-
        Google Ads didn't answer as expected. The message says whether anything
        changed.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
              description: Stable, machine-readable.
              examples:
                - not_found
            message:
              type: string
              description: Plain-language explanation.
            requestId:
              type: string
              description: Quote this when asking for help.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: An API key from Settings → API access, starting with `fnd_`.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.