---
title: "/2026-01/marketing-solutions/campaigns"
method: POST
path: "/2026-01/marketing-solutions/campaigns"
tags: ["Campaign"]
---

# /2026-01/marketing-solutions/campaigns

`POST /2026-01/marketing-solutions/campaigns`

## Request

- Base URL: `https://api.criteo.com`
- URL: `https://api.criteo.com/2026-01/marketing-solutions/campaigns`
- Auth: OAuth 2
  - Authorization code: `https://api.criteo.com/oauth2`
  - Client credentials
  - Token URL: `https://api.criteo.com/oauth2/token` scopes: `MarketingSolutions_Campaign_Manage`
- TypeScript: <https://skmtc.dev/criteo/apis/criteo-api/docs/2026-01/marketing-solutions/campaigns/post.ts> (a function with typed inputs; its response is checked against the schema)

Create the specified campaign
            
A campaign, or in other words a marketing campaign, is an entity that defines advertising objectives and success criteria.

## Request body

- CreateCampaignRequest: Data model for an input resources
  - `data` CreateCampaignResource: Data model for a Resource
    - `attributes` CreateCampaign: Campaign create model.
      - `advertiserId` string, nullable, required: Advertiser ID this campaign belongs to (string-encoded integer).
      - `budgetAutomation` BudgetAutomation: Budget automation, lets users configure budgets once at the campaign level while Criteo dynamically routes spend toward the best-performing ad sets. If "enabled" is omitted and only "budgetConfiguration" is provided, "enabled" defaults to false — budget automation will not be activated. To activate budget automation at creation, "enabled" must be explicitly set to true along with a valid "budgetConfiguration". If the entire "budgetAutomation" object is omitted from the create request, the campaign is created with budget automation disabled.
        - `budgetConfiguration` BudgetAutomationConfiguration, nullable: Configuration for budget automation. Only meaningful when "enabled" is true. When "enabled" is false or omitted, this field is ignored.
          - `adSetObjectives` 'conversions' | 'revenue' | 'visits' | 'videoViews': The ad set optimization objective for budget automation. Determines how the automated budget allocates spend across ad sets in the campaign. - "conversions": optimize for conversion events. - "revenue": optimize for revenue. - "visits": optimize for site visits. - "videoViews": optimize for completed video views.
        - `enabled` boolean: Whether budget automation is active for this marketing campaign. - true: budget automation is enabled and "budgetConfiguration" must be provided with a valid objective. - false (default when omitted): budget automation is disabled; "budgetConfiguration" is ignored if provided.
      - `goal` 'Unspecified' | 'Acquisition' | 'Retention', required: Goal of the campaign Serialized values are {Unspecified}, {Acquisition} and {Retention}. Acquisition and retention are defined as follows: - Acquisition: campaign with the goal of acquiring new customers. The success of an acquisition campaign is measured by the number of new customers it brings. - Retention: campaign with the goal of retaining existing customers. The success of a retention campaign is measured by the number of existing customers it retains.
      - `name` string, nullable, required: Name of the campaign
      - `spendLimit` CreateCampaignSpendLimit, required: Spend limit configuration for a marketing campaign. Controls how much can be spent and the renewal cadence. When spendLimitType is "capped": spendLimitAmount and spendLimitRenewal are required. When spendLimitType is "uncapped": spendLimitAmount is null and spendLimitRenewal is "undefined".
        - `spendLimitAmount` number, double, nullable: Maximum spend amount in the advertiser's currency per renewal period. Non-null when capped. null when uncapped.
        - `spendLimitRenewal` 'undefined' | 'daily' | 'monthly' | 'lifetime': The period over which the spend limit is consumed. - "daily", "monthly": spend limit resets at the start of each period. - "lifetime": spend limit covers the entire campaign duration without resetting. - "undefined": only used when spendLimitType is "uncapped" (no renewal applies).
        - `spendLimitType` 'capped' | 'uncapped', required: Controls whether the campaign has a spending limit. - "capped": spending is limited to spendLimitAmount. Requires spendLimitAmount (non-null) and spendLimitRenewal (not "undefined"). - "uncapped": no spending limit. spendLimitAmount is null and spendLimitRenewal is "undefined".
    - `type` string: Canonical type name of the entity

## Response `201`

The campaign that has been created and errors / warnings

- CampaignV23Q1Response: Data model for response resource
  - `data` CampaignV23Q1Resource, nullable: Data model for a Resource
    - `attributes` CampaignV23Q1, nullable: Campaign read model The {id} field is the campaign identifier (string-encoded integer).
      - `advertiserId` string, nullable: Advertiser id of the campaign (string-encoded integer)
      - `budgetAutomation` CampaignBudgetAutomationV23Q1, nullable: Budget automation, also known as automated budget or budget pacing, lets users configure KPIs and budgets once at the campaign level while Criteo dynamically routes spend toward the best-performing ad sets. When enabled is false, automatedBudgetConfiguration is null. When enabled is true, automatedBudgetConfiguration.adSetOptimizationObjective is expected.
        - `automatedBudgetConfiguration` AutomatedBudgetConfigurationV23Q1, nullable: Detailed configuration used when campaign budget automation is enabled.
          - `adSetOptimizationObjective` 'conversions' | 'revenue' | 'visits' | 'videoViews', nullable: Optimization objective used to automate budget allocation across ad sets. Expected when budgetAutomation.enabled is true. Possible values are "conversions", "revenue", "visits", and "videoViews".
        - `enabled` boolean, nullable: Whether budget automation is enabled for this campaign. This field is always present in the response.
      - `goal` 'unspecified' | 'acquisition' | 'retention', nullable: Goal of the campaign Serialized values are {unspecified}, {acquisition} and {retention}. Acquisition and retention are defined as follows: - Acquisition: campaign with the goal of acquiring new customers. The success of an acquisition campaign is measured by the number of new customers it brings. - Retention: campaign with the goal of retaining existing customers. The success of a retention campaign is measured by the number of existing customers it retains.
      - `id` string, nullable: Id of the entity (duplicate of the parent id).
      - `name` string, nullable: Name of the campaign
      - `spendLimit` CampaignSpendLimitV23Q1, nullable: Campaign spend-limit configuration. A capped spend limit restricts campaign spending per renewal period. An uncapped spend limit does not impose a spending ceiling.
        - `spendLimitAmount` NillableDecimal, nullable: Placeholder object for value for which "null" is a valid business value
          - `value` number, double, nullable: The value. If missing or null the value is set to "null"
        - `spendLimitRenewal` 'undefined' | 'daily' | 'monthly' | 'lifetime', nullable: The period over which the campaign spend limit is applied. When spendLimitType is "capped", this is "daily", "monthly", or "lifetime". When spendLimitType is "uncapped", this is "undefined".
        - `spendLimitType` 'capped' | 'uncapped', nullable: Controls whether the campaign has a spend limit. "capped" returns a non-null spendLimitAmount.value and a spendLimitRenewal of "daily", "monthly", or "lifetime". "uncapped" returns spendLimitAmount.value as null and spendLimitRenewal as "undefined".
    - `id` string, nullable: Id of the entity
    - `type` string, nullable: Canonical type name of the entity
  - `errors` CommonProblem[], nullable
    - `code` string, nullable: A machine-readable error code, expressed as a string value.
    - `detail` string, nullable: A human-readable explanation specific to this occurrence of the problem
    - `instance` string, nullable: A URI that identifies the specific occurrence of the problem.
    - `source` object, nullable: A machine-readable structure to reference to the exact location(s) causing the error(s)
    - `stackTrace` string, nullable
    - `title` string, nullable: A short human-readable description of the problem type
    - `traceId` string, nullable: The request correlation ID this problem comes from.
    - `traceIdentifier` string, nullable: The request correlation ID this problem comes from. (deprecated, use traceId instead)
    - `type` 'unknown' | 'access-control' | 'authentication' | 'authorization' | 'availability' | 'deprecation' | 'quota' | 'validation', nullable: The problem's category.
  - `warnings` CommonProblem[], nullable
    - `code` string, nullable: A machine-readable error code, expressed as a string value.
    - `detail` string, nullable: A human-readable explanation specific to this occurrence of the problem
    - `instance` string, nullable: A URI that identifies the specific occurrence of the problem.
    - `source` object, nullable: A machine-readable structure to reference to the exact location(s) causing the error(s)
    - `stackTrace` string, nullable
    - `title` string, nullable: A short human-readable description of the problem type
    - `traceId` string, nullable: The request correlation ID this problem comes from.
    - `traceIdentifier` string, nullable: The request correlation ID this problem comes from. (deprecated, use traceId instead)
    - `type` 'unknown' | 'access-control' | 'authentication' | 'authorization' | 'availability' | 'deprecation' | 'quota' | 'validation', nullable: The problem's category.

---

[API](https://skmtc.dev/criteo/apis/criteo-api.md) - [All operations](https://skmtc.dev/criteo/apis/criteo-api/llms.txt) - [OpenAPI document](https://skmtc.dev/criteo/apis/criteo-api/revisions/c1721589426a?raw)
