GroundTruth Campaigns API

The Campaigns API from GroundTruth — 6 operation(s) for campaigns.

Operations 9

GET /campaigns Get Campaigns #
POST /campaigns Create Campaign #
POST /campaigns/with_adgroups Create Campaign And Adgroups #
GET /campaigns/dashboard Get Campaigns Dashboard #
POST /campaigns/dashboard/export Export Campaigns Dashboard #
GET /campaigns/{campaign_id} Get Campaign #
PUT /campaigns/{campaign_id} Update Campaign #
DELETE /campaigns/{campaign_id} Delete Campaign #
POST /campaigns/{campaign_id}/ad_packages Create Ad Package #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/groundtruth-campaigns-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

groundtruth-campaigns-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Ads Manager Campaigns API
  description: Ads Manager API
  version: 1.0.0
servers:
- url: https://api-public.groundtruth.com
  description: Production
tags:
- name: Campaigns
paths:
  /campaigns:
    get:
      tags:
      - Campaigns
      summary: Get Campaigns
      description: Gets all campaigns in an account
      operationId: get_campaigns
      security:
      - api-key: []
      - user-id: []
      - session: []
      parameters:
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          maximum: 100
          exclusiveMinimum: 1
          description: Number of campaigns to limit response to
          default: 10
          title: Limit
        description: Number of campaigns to limit response to
      - name: page_num
        in: query
        required: false
        schema:
          type: integer
          minimum: 1
          description: Page number to retrieve. Starts at 1.
          default: 1
          title: Page Num
        description: Page number to retrieve. Starts at 1.
      - name: sort_order
        in: query
        required: false
        schema:
          $ref: '#/components/schemas/SortOrder'
          description: Sorts campaigns by name
          default: asc
        description: Sorts campaigns by name
      - name: updated_since
        in: query
        required: false
        schema:
          anyOf:
          - type: integer
          - type: 'null'
          description: Limits results to campaigns updated since a unix timestamp
          title: Updated Since
        description: Limits results to campaigns updated since a unix timestamp
      - name: tenant_id
        in: query
        required: true
        schema:
          type: integer
          title: Tenant Id
      - name: account_id
        in: query
        required: true
        schema:
          type: integer
          title: Account Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CampaignsModel'
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Bad Request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Forbidden
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Not Found
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Internal Server Error
    post:
      tags:
      - Campaigns
      summary: Create Campaign
      description: Creates a campaign
      operationId: create_campaign
      security:
      - api-key: []
      - user-id: []
      - session: []
      parameters:
      - name: tenant_id
        in: query
        required: true
        schema:
          type: integer
          title: Tenant Id
      - name: account_id
        in: query
        required: true
        schema:
          type: integer
          title: Account Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateCampaignModel'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CampaignModel'
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Bad Request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Forbidden
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Not Found
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Internal Server Error
  /campaigns/with_adgroups:
    post:
      tags:
      - Campaigns
      summary: Create Campaign And Adgroups
      description: Creates a campaign and ad groups together
      operationId: create_campaign_and_adgroups
      security:
      - api-key: []
      - user-id: []
      - session: []
      parameters:
      - name: tenant_id
        in: query
        required: true
        schema:
          type: integer
          title: Tenant Id
      - name: account_id
        in: query
        required: true
        schema:
          type: integer
          title: Account Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateCampaignAndAdgroupsModel'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CampaignAndAdgroupsModel'
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Bad Request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Forbidden
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Not Found
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Internal Server Error
  /campaigns/dashboard:
    get:
      tags:
      - Campaigns
      summary: Get Campaigns Dashboard
      description: Gets campaigns in a tenant
      operationId: get_campaigns_dashboard
      security:
      - api-key: []
      - user-id: []
      - session: []
      parameters:
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          maximum: 100
          exclusiveMinimum: 1
          description: Number of campaigns to limit response to
          default: 10
          title: Limit
        description: Number of campaigns to limit response to
      - name: page_num
        in: query
        required: false
        schema:
          type: integer
          minimum: 1
          description: Page number to retrieve. Starts at 1.
          default: 1
          title: Page Num
        description: Page number to retrieve. Starts at 1.
      - name: sort_by
        in: query
        required: false
        schema:
          $ref: '#/components/schemas/CampaignDashboardSortField'
          description: Field to sort campaigns by (non-reporting columns only)
          default: name
        description: Field to sort campaigns by (non-reporting columns only)
      - name: sort_order
        in: query
        required: false
        schema:
          $ref: '#/components/schemas/SortOrder'
          description: Sort order
          default: asc
        description: Sort order
      - name: start_date
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date
          - type: 'null'
          description: Include campaigns that overlap this range start (end_date >= start_date or open-ended). Also used as reporting metrics start date (YYYY-MM-DD).
          title: Start Date
        description: Include campaigns that overlap this range start (end_date >= start_date or open-ended). Also used as reporting metrics start date (YYYY-MM-DD).
      - name: end_date
        in: query
        required: false
        schema:
          anyOf:
          - type: string
            format: date
          - type: 'null'
          description: Include campaigns that overlap this range end (start_date <= end_date). Also used as reporting metrics end date (YYYY-MM-DD).
          title: End Date
        description: Include campaigns that overlap this range end (start_date <= end_date). Also used as reporting metrics end date (YYYY-MM-DD).
      - name: status
        in: query
        required: false
        schema:
          anyOf:
          - type: array
            items:
              $ref: '#/components/schemas/CampaignDashboardStatus'
          - type: 'null'
          description: Filter by campaign statuses
          title: Status
        description: Filter by campaign statuses
      - name: account_ids
        in: query
        required: false
        schema:
          anyOf:
          - type: array
            items:
              type: integer
          - type: 'null'
          description: Filter by account ID(s)
          title: Account Ids
        description: Filter by account ID(s)
      - name: organization_ids
        in: query
        required: false
        schema:
          anyOf:
          - type: array
            items:
              type: integer
          - type: 'null'
          description: Filter by organization ID(s)
          title: Organization Ids
        description: Filter by organization ID(s)
      - name: objectives
        in: query
        required: false
        schema:
          anyOf:
          - type: array
            items:
              $ref: '#/components/schemas/Objective'
          - type: 'null'
          description: Filter by ad group objectives. Returns campaigns with at least one matching ad group.
          title: Objectives
        description: Filter by ad group objectives. Returns campaigns with at least one matching ad group.
      - name: search
        in: query
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          description: Search by campaign name or ID
          title: Search
        description: Search by campaign name or ID
      - name: tenant_id
        in: query
        required: true
        schema:
          type: integer
          title: Tenant Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CampaignsDashboardModel'
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Bad Request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Forbidden
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Not Found
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Internal Server Error
  /campaigns/dashboard/export:
    post:
      tags:
      - Campaigns
      summary: Export Campaigns Dashboard
      description: Exports campaigns in a tenant as an Excel file
      operationId: export_campaigns_dashboard
      security:
      - api-key: []
      - user-id: []
      - session: []
      parameters:
      - name: tenant_id
        in: query
        required: true
        schema:
          type: integer
          title: Tenant Id
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExportCampaignsDashboardRequestModel'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Bad Request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Forbidden
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Not Found
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Internal Server Error
  /campaigns/{campaign_id}:
    get:
      tags:
      - Campaigns
      summary: Get Campaign
      description: Gets a campaign
      operationId: get_campaign
      security:
      - api-key: []
      - user-id: []
      - session: []
      parameters:
      - name: campaign_id
        in: path
        required: true
        schema:
          type: integer
          title: Campaign Id
      - name: tenant_id
        in: query
        required: true
        schema:
          type: integer
          title: Tenant Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CampaignModel'
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Bad Request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Forbidden
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Not Found
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Internal Server Error
    put:
      tags:
      - Campaigns
      summary: Update Campaign
      description: Updates a campaign
      operationId: update_campaign
      security:
      - api-key: []
      - user-id: []
      - session: []
      parameters:
      - name: campaign_id
        in: path
        required: true
        schema:
          type: integer
          title: Campaign Id
      - name: tenant_id
        in: query
        required: true
        schema:
          type: integer
          title: Tenant Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateCampaignModel'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CampaignModel'
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Bad Request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Forbidden
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Not Found
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Internal Server Error
    delete:
      tags:
      - Campaigns
      summary: Delete Campaign
      description: Deletes a campaign
      operationId: delete_campaign
      security:
      - api-key: []
      - user-id: []
      - session: []
      parameters:
      - name: campaign_id
        in: path
        required: true
        schema:
          type: integer
          title: Campaign Id
      - name: tenant_id
        in: query
        required: true
        schema:
          type: integer
          title: Tenant Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponseModel'
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Bad Request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Forbidden
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Not Found
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Internal Server Error
  /campaigns/{campaign_id}/ad_packages:
    post:
      tags:
      - Campaigns
      summary: Create Ad Package
      description: Creates an ad package
      operationId: create_ad_package
      security:
      - api-key: []
      - user-id: []
      - session: []
      parameters:
      - name: campaign_id
        in: path
        required: true
        schema:
          type: integer
          title: Campaign Id
      - name: tenant_id
        in: query
        required: true
        schema:
          type: integer
          title: Tenant Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAdPackageModel'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreatedAdPackageModel'
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Bad Request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Forbidden
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Not Found
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseModel'
          description: Internal Server Error
components:
  schemas:
    BudgetModel-Input:
      properties:
        start_date:
          type: string
          format: date
          title: Start Date
        end_date:
          anyOf:
          - type: string
            format: date
          - type: 'null'
          title: End Date
        budget:
          anyOf:
          - type: number
            minimum: 0.0
          - type: string
            pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Budget
          description: If budget is at the campaign level, this will be 0
      type: object
      required:
      - start_date
      - end_date
      - budget
      title: BudgetModel
    CreateUpdateCTVPremiumCategoryModel:
      properties:
        id:
          type: integer
          title: Id
      type: object
      required:
      - id
      title: CreateUpdateCTVPremiumCategoryModel
    BudgetLevel:
      oneOf:
      - const: campaign
        title: CAMPAIGN
      - const: adgroup
        title: ADGROUP
      type: string
      enum:
      - campaign
      - adgroup
      title: BudgetLevel
      x-enum-varnames:
      - CAMPAIGN
      - ADGROUP
    CreateCampaignAndAdgroupsModel:
      properties:
        campaign:
          $ref: '#/components/schemas/CreateCampaignModel'
        adgroups:
          items:
            $ref: '#/components/schemas/CreateAdgroupModel'
          type: array
          title: Adgroups
      type: object
      required:
      - campaign
      title: CreateCampaignAndAdgroupsModel
    CreateUpdateAudioStreamingGenreModel:
      properties:
        id:
          type: integer
          title: Id
      type: object
      required:
      - id
      title: CreateUpdateAudioStreamingGenreModel
    LookalikeAudienceScale:
      oneOf:
      - const: 1
        title: SCALE_2X
      - const: 3
        title: SCALE_4X
      - const: 5
        title: SCALE_6X
      - const: 9
        title: SCALE_10X
      type: integer
      enum:
      - 1
      - 3
      - 5
      - 9
      title: LookalikeAudienceScale
      x-enum-varnames:
      - SCALE_2X
      - SCALE_4X
      - SCALE_6X
      - SCALE_10X
    CampaignBudgetType:
      oneOf:
      - const: 0
        title: LIFETIME
      - const: 3
        title: DAILY
      type: integer
      enum:
      - 0
      - 3
      title: CampaignBudgetType
      x-enum-varnames:
      - LIFETIME
      - DAILY
    NeighborhoodModel:
      properties:
        id:
          type: string
          title: Id
        name:
          type: string
          title: Name
        type:
          $ref: '#/components/schemas/NeighborhoodTargetType'
        sensitivity:
          anyOf:
          - $ref: '#/components/schemas/Sensitivity'
          - type: 'null'
        location_group_metadata:
          anyOf:
          - $ref: '#/components/schemas/app__api__models__LocationGroupMetadata'
          - type: 'null'
      type: object
      required:
      - id
      - name
      - type
      title: NeighborhoodModel
    DriveToLocationType:
      oneOf:
      - const: brand
        title: BRAND
      - const: location_group
        title: LOCATION_GROUP
      type: string
      enum:
      - brand
      - location_group
      title: DriveToLocationType
      x-enum-varnames:
      - BRAND
      - LOCATION_GROUP
    BillingSource:
      oneOf:
      - const: 1
        title: XAD
      - const: 2
        title: DART
      - const: 3
        title: AARKI
      - const: 4
        title: BEINTO
      - const: 5
        title: BONZAI
      - const: 6
        title: BRIDGETRACK
      - const: 7
        title: CELTRA
      - const: 8
        title: EYERETURN
      - const: 9
        title: FLASHTALKING
      - const: 10
        title: JIVOX
      - const: 11
        title: KATANA
      - const: 12
        title: LIN_MEDIA
      - const: 13
        title: MEDIALETS
      - const: 14
        title: MEDIAMIND_SIZMEK
      - const: 15
        title: MIXPO
      - const: 16
        title: PHLUANT
      - const: 17
        title: POINTROLL
      - const: 18
        title: SIMPLYTICS
      - const: 19
        title: ATLAS
      - const: 20
        title: MEDIAPLEX
      - const: 21
        title: S4M_NGINX
      - const: 22
        title: TRUEFFECTS
      - const: 24
        title: INNOVID
      - const: 25
        title: VINDICO
      - const: 26
        title: ADFORM
      - const: 31
        title: ADGEAR
      - const: 32
        title: MIAOZHEN
      - const: 36
        title: IQMOBILE
      - const: 41
        title: ADOBE_ANALYTICS
      type: integer
      enum:
      - 1
      - 2
      - 3
      - 4
      - 5
      - 6
      - 7
      - 8
      - 9
      - 10
      - 11
      - 12
      - 13
      - 14
      - 15
      - 16
      - 17
      - 18
      - 19
      - 20
      - 21
      - 22
      - 24
      - 25
      - 26
      - 31
      - 32
      - 36
      - 41
      title: BillingSource
      x-enum-varnames:
      - XAD
      - DART
      - AARKI
      - BEINTO
      - BONZAI
      - BRIDGETRACK
      - CELTRA
      - EYERETURN
      - FLASHTALKING
      - JIVOX
      - KATANA
      - LIN_MEDIA
      - MEDIALETS
      - MEDIAMIND_SIZMEK
      - MIXPO
      - PHLUANT
      - POINTROLL
      - SIMPLYTICS
      - ATLAS
      - MEDIAPLEX
      - S4M_NGINX
      - TRUEFFECTS
      - INNOVID
      - VINDICO
      - ADFORM
      - ADGEAR
      - MIAOZHEN
      - IQMOBILE
      - ADOBE_ANALYTICS
    AgeRange:
      oneOf:
      - const: 18-24
        title: _18_24
      - const: 25-34
        title: _25_34
      - const: 35-44
        title: _35_44
      - const: 45-54
        title: _45_54
      - const: 55-64
        title: _55_64
      - const: 65-999
        title: _65_UP
      - const: unknown
        title: UNKNOWN
      type: string
      enum:
      - 18-24
      - 25-34
      - 35-44
      - 45-54
      - 55-64
      - 65-999
      - unknown
      title: AgeRange
      x-enum-varnames:
      - _18_24
      - _25_34
      - _35_44
      - _45_54
      - _55_64
      - _65_UP
      - UNKNOWN
    CampaignDashboardSortField:
      oneOf:
      - const: name
        title: NAME
      - const: id
        title: ID
      - const: account_id
        title: ACCOUNT_ID
      - const: account_name
        title: ACCOUNT_NAME
      - const: organization_id
        title: ORGANIZATION_ID
      - const: organization_name
        title: ORGANIZATION_NAME
      - const: status
        title: STATUS
      - const: days_remaining
        title: DAYS_REMAINING
      - const: start_date
        title: START_DATE
      - const: end_date
        title: END_DATE
      - const: salesforce_number
        title: SALESFORCE_NUMBER
      - const: budget
        title: BUDGET
      - const: pacing
        title: PACING
      type: string
      enum:
      - name
      - id
      - account_id
      - account_name
      - organization_id
      - organization_name
      - status
      - days_remaining
      - start_date
      - end_date
      - salesforce_number
      - budget
      - pacing
      title: CampaignDashboardSortField
      x-enum-varnames:
      - NAME
      - ID
      - ACCOUNT_ID
      - ACCOUNT_NAME
      - ORGANIZATION_ID
      - ORGANIZATION_NAME
      - STATUS
      - DAYS_REMAINING
      - START_DATE
      - END_DATE
      - SALESFORCE_NUMBER
      - BUDGET
      - PACING
    CreateUpdateDriveToLocationModel:
      properties:
        id:
          type: string
          title: Id
        type:
          $ref: '#/components/schemas/DriveToLocationType'
      type: object
      required:
      - id
      - type
      title: CreateUpdateDriveToLocationModel
    app__api__routes__adgroups__models__CTVPremiumCategoryModel:
      properties:
        id:
          type: integer
          title: Id
        name:
          type: string
          title: Name
      type: object
      required:
      - id
      - name
      title: CTVPremiumCategoryModel
    ProximityMode:
      oneOf:
      - const: in_store
        title: IN_STORE
      - const: on_lot
        title: ON_LOT
      - const: retail_block
        title: RETAIL_BLOCK
      - const: radial
        title: RADIAL
      type: string
      enum:
      - in_store
      - on_lot
      - retail_block
      - radial
      title: ProximityMode
      x-enum-varnames:
      - IN_STORE
      - ON_LOT
      - RETAIL_BLOCK
      - RADIAL
    NeighborhoodType:
      oneOf:
      - const: business
        title: BUSINESS
      - const: residential
        title: RESIDENTIAL
      type: string
      enum:
      - business
      - residential
      title: NeighborhoodType
      x-enum-varnames:
      - BUSINESS
      - RESIDENTIAL
    LocationGroupType:
      oneOf:
      - const: 0
        title: BUSINESS
      - const: 1
        title: RESIDENTIAL
      type: integer
      enum:
      - 0
      - 1
      title: LocationGroupType
      x-enum-varnames:
      - BUSINESS
      - RESIDENTIAL
    CreateUpdateAudioPodcastTopicModel:
      properties:
        id:
          type: integer
          title: Id
      type: object
      required:
      - id
      title: CreateUpdateAudioPodcastTopicModel
    app__api__routes__adgroups__models__PublisherCategoryModel:
      properties:
        id:
          type: integer
          title: Id
        name:
          type: string
          title: Name
      type: object
      required:
      - id
      - name
      title: PublisherCategoryModel
    CreateUpdateTrackingPixelModel:
      properties:
        id:
          type: integer
          title: Id
      type: object
      required:
      - id
      title: CreateUpdateTrackingPixelModel
    PacingMode:
      oneOf:
      - const: 0
        title: DEFAULT
      - const: 1
        title: ACCELERATED
      - const: 2
        title: ASAP
      type: integer
      enum:
      - 0
      - 1
      - 2
      title: PacingMode
      x-enum-varnames:
      - DEFAULT
      - ACCELERATED
      - ASAP
    CreateUpdateAdPackageModel:
      properties:
        id:
          type: integer
          title: Id
      type: object
      required:
      - id
      title: CreateUpdateAdPackageModel
    CampaignAndAdgroupsModel:
      properties:
        campaign:
          $ref: '#/components/schemas/CampaignModel'
        adgroups:
          items:
            $ref: '#/components/schemas/AdgroupModel'
          type: array
          title: Adgroups
      type: object
      required:
      - campaign
      - adgroups
      title: CampaignAndAdgroupsModel
    CreateUpdateOnPremiseLocationModel:
      properties:
        id:
          type: string
          title: Id
        type:
          $ref: '#/components/schemas/OnPremiseLocationType'
        proximity:
          anyOf:
          - $ref: '#/components/schemas/ProximityMode'
          - type: 'null'
        radius:
          anyOf:
          - type: number
          - type: 'null'
          title: Radius
      type: object
      required:
      - id
      - type
      title: CreateUpdateOnPremiseLocationModel
    CreateCampaignModel:
      properties:
        name:
          type: string
          maxLength: 256
          minLength: 1
          title: Name
        budget:
          anyOf:
          - type: number
            exclusiveMaximum: 1000000.0
            exclusiveMinimum: 0.0
          - type: string
            pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          - type: 'null'
          title: Budget
        budget_padding:
          anyOf:
          - type: number
            exclusiveMaximum: 100000000.0
            minimum: 0.0
          - type: string
            pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          - type: 'null'
          title: Budget Padding
        budget_level:
          $ref: '#/components/schemas/BudgetLevel'
        budget_type:
       

# --- truncated at 32 KB (101 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/groundtruth/refs/heads/main/openapi/groundtruth-campaigns-api-openapi.yml