GuidesAPI ReferenceChangelog
GuidesAPI ReferenceChangelogLog In
Guides

Campaigns Endpoints

View and manage all your campaigns

📝

A Few Things to Know

Learn more about campaign management with our API here!

 

Endpoints

MethodEndpointDescription
POST/accounts/{accountId}/campaignsCreate a new campaign for the specified account.
GET/accounts/{accountId}/campaignsRetrieve all campaigns associated with the specified account.
GET/campaigns/{campaignId}Retrieve details of a specific campaign by its ID.
PUT/campaigns/{campaignId}Update details of a specific campaign by its ID.

📘

Info

Create Operations:

  • When using the POST method to create a resource, all Required fields must be included. Any Optional fields that are omitted will be set to their default values.

Update Operations:

  • When using the PUT method to update a resource, all Write fields can be specified. Omitting any of these fields is treated as setting them to null, where applicable.

Campaign Attributes

AttributeData TypeDescription
idstringCampaign ID

Accepted values: int64
Writeable? N / Nullable? N
accountId*stringAccount ID

Accepted values: int64
Writeable? N / Nullable? N
name*stringCampaign name; must be unique within an Account

Accepted values: up to 255-chars string
Writeable? Y / Nullable? N
typeenumCampaign type
If attribute is passed in the call, a value must be specified

Accepted values: auction, preferred
Default: auction
Writeable? Y / Nullable? N
budgetdecimalCampaign lifetime spend cap; uncapped if omitted or set to null.
Note that preferred campaign types cannot have budgets as these campaign types must be uncapped

Accepted values: equals/greater than zero
Default: null
Writeable? Y / Nullable? Y
budgetSpentdecimalAmount the campaign has already spent

Accepted values: equals/greater than zero
Default: 0.0
Writeable? N / Nullable? N
budgetRemainingdecimalAmount the campaign has remaining until cap is hit; null if budget is uncapped

Accepted values: between zero and budget
Default: null
Writeable? N / Nullable? Y
clickAttributionWindow*enumPost-click attribution window

Accepted values: 7D, 14D, 30D
Default: 30D
Writeable? Y / Nullable? N
viewAttributionWindow*enumPost-view attribution window

Accepted values: None,7D, 14D, 30D
Default: None
Writeable? Y / Nullable? N
clickAttributionScopeenumPost-click attribution scope

Accepted values: sameSku, sameSkuCategory, sameSkuCategoryBrand
Default: sameSkuCategory
Writeable? Y / Nullable? N
viewAttributionScopeenumPost-view attribution scope

Accepted values: sameSku, sameSkuCategory, sameSkuCategoryBrand
Default: sameSku
Writeable? Y / Nullable? N
drawableBalanceIdslistList of Balances the campaign is able to draw from; at least one balance is required for a campaign to start

Accepted values: list of balanceId
Default: []
Writeable? N / Nullable? N
statusenumCampaign status, derived from the status of Line Items it holds; active if at least one line item is active. To understand the conditions that will cause a status to change, check out our Campaigns Statuses page

Accepted values: active, inactive
Default: inactive
Writeable? N / Nullable? N
monthlyPacingdecimalThe maximum monthly spend allowed for the campaign in the currency of the account. The spend is constrained by remaining account balance and total budget of the campaign. Monthly budget spend reset monthly at the start of the month based on the account timezone

Accepted values: null or greater than zero
Default: null
Writeable? Y / Nullable? Y
dailyPacingdecimalThe maximum daily spend allowed for the campaign in the currency of the account, as long as not set to null and isAutoDailyPacing = false; otherwise no daily spend limit will be enforced

Accepted values: null or greater than zero
Default: null
Writeable? Y / Nullable? Y
isAutoDailyPacingbooleanAuto daily pacing flag for the campaign budget. The daily pacing value is automatically calculated with respect to the days left in the month for the account. The campaign's remaining account balance, total budget, and monthly pacing value are constrained by account's timezone and the campaign status. If auto daily pacing is enabled, dailyPacing value should be left empty (null).
Note the value may be affected by budget override. Daily budget spend is reset daily at the start of the day based on the account timezone. To activate, either campaign's endDate and budget or monthlyPacing must be specified, overwriting dailyPacing with the new respective pace (if not set previously)

Accepted values: true, false
Writeable? Y / Nullable? N
startDatetimestampCampaign start date. The campaign starts inactive if invalid start date is not today or end date is in previous day.

Accepted values: yyyy-mm-ddThh:mm:ss±hh:mm(in ISO-8601)
Default: creation timestamp
Writeable? Y / Nullable? Y

⚠️ Note: if time/timezone designators are not provided, the default value to be considered will be 00:00:00+00:00 (i.e., midnight in UTC - account timezone not taken in consideration here)
endDatetimestampCampaign end date. The campaign starts inactive if invalid start date is not today or end date is in previous day

Accepted values: yyyy-mm-ddThh:mm:ss±hh:mm(in ISO-8601)
Default: null
Writeable? Y / Nullable? Y

⚠️ Note: if time/timezone designators are not provided, the default value to be considered will be 00:00:00+00:00 (i.e., midnight in UTC - account timezone not taken in consideration here)
createdAttimestampTimestamp of campaign creation, in UTC

Accepted values: yyyy-mm-ddThh:mm:ss±hh:mm(in ISO-8601)
Writeable? N / Nullable? N
updatedAttimestampTimestamp of last campaign update, in UTC

Accepted values: yyyy-mm-ddThh:mm:ss±hh:mm(in ISO-8601)
Writeable? N / Nullable? N
companyNamestringThis optional field, exclusively accessible to marketplaces within the European Union (in compliance with the Digital Service Act - DSA), will display the name of the company associated with the advertisement.

Accepted values: up to 255-chars string
Writeable? Y / Nullable? Y
onBehalfCompanyNamestringThis optional field, exclusively accessible to marketplaces within the European Union (in compliance with the Digital Service Act - DSA), will display the name of the company (on behalf of companyName) associated with the advertisement

Accepted values: up to 255-chars string
Writeable? Y / Nullable? Y

* Required

📑

Digital Service Act (DSA)

In compliance with the Digital Services Act (DSA), marketplaces within the European Union will receive information about the company name associated with each advertisement.


Create a Campaign

This endpoint creates a new campaign in the specified account.

https://api.criteo.com/{version}/retail-media/accounts/{accountId}/campaigns

Sample Request

curl -L -X POST 'https://api.criteo.com/{version}/retail-media/accounts/5/campaigns' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <MY_ACCESS_TOKEN>' \
-d '{
    "data": {
        "type": "<string>",
        "attributes": {
            "name": "Valentine Day Sale",
            "isAutoDailyPacing": false,
            "startDate": "2024-02-12",
            "endDate": "2024-02-15",
            "type": "auction",
            "drawableBalanceIds": [
                "142000305654435840"
            ],
            "clickAttributionWindow": "30D",
            "viewAttributionWindow": "None",
            "budget": 100,
            "monthlyPacing": 50,
            "dailyPacing": 10,
            "clickAttributionScope": "sameSkuCategory",
            "viewAttributionScope": "sameSkuCategory",
            "companyName": "Test Company A",
            "onBehalfCompanyName": "Test Company B"
        }
    }
}'
import http.client
import json

conn = http.client.HTTPSConnection("api.criteo.com")
payload = json.dumps({
  "data": {
    "type": "<string>",
    "attributes": {
      "name": "Valentine Day Sale",
      "isAutoDailyPacing": False,
      "startDate": "2024-02-12",
      "endDate": "2024-02-15",
      "type": "auction",
      "drawableBalanceIds": [
        "142000305654435840"
      ],
      "clickAttributionWindow": "30D",
      "viewAttributionWindow": "None",
      "budget": 100,
      "monthlyPacing": 50,
      "dailyPacing": 10,
      "clickAttributionScope": "sameSkuCategory",
      "viewAttributionScope": "sameSkuCategory",
      "companyName": "Test Company A",
      "onBehalfCompanyName": "Test Company B"
    }
  }
})
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer <MY_ACCESS_TOKEN>'
}
conn.request("POST", "/{version}/retail-media/accounts/5/campaigns", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"data\":{\"type\":\"<string>\",\"attributes\":{\"name\":\"Valentine Day Sale\",\"isAutoDailyPacing\":false,\"startDate\":\"2024-02-12\",\"endDate\":\"2024-02-15\",\"type\":\"auction\",\"drawableBalanceIds\":[\"142000305654435840\"],\"clickAttributionWindow\":\"30D\",\"viewAttributionWindow\":\"None\",\"budget\":100,\"monthlyPacing\":50,\"dailyPacing\":10,\"clickAttributionScope\":\"sameSkuCategory\",\"viewAttributionScope\":\"sameSkuCategory\",\"companyName\":\"Test Company A\",\"onBehalfCompanyName\":\"Test Company B\"}}}");
Request request = new Request.Builder()
  .url("https://api.criteo.com/{version}/retail-media/accounts/5/campaigns")
  .method("POST", body)
  .addHeader("Content-Type", "application/json")
  .addHeader("Accept", "application/json")
  .addHeader("Authorization", "Bearer <MY_ACCESS_TOKEN>")
  .build();
Response response = client.newCall(request).execute();
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://api.criteo.com/{version}/retail-media/accounts/5/campaigns');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setHeader(array(
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer <TOKEN>'
));
$request->setBody('{"data":{"type":"<string>","attributes":{"name":"Valentine Day Sale","isAutoDailyPacing":false,"startDate":"2024-02-12","endDate":"2024-02-15","type":"auction","drawableBalanceIds":["142000305654435840"],"clickAttributionWindow":"30D","viewAttributionWindow":"None","budget":100,"monthlyPacing":50,"dailyPacing":10,"clickAttributionScope":"sameSkuCategory","viewAttributionScope":"sameSkuCategory","companyName":"Test Company A","onBehalfCompanyName":"Test Company B"}}}');
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}

Sample Response

{
    "data": {
        "id": "544937665113018368",
        "type": "RetailMediaCampaignV202301",
        "attributes": {
            "accountId": "5",
            "promotedBrandIds": [],
            "budgetSpent": 0.00000000,
            "budgetRemaining": 100.00000000,
            "status": "inactive",
            "createdAt": "2024-02-12T17:47:43+00:00",
            "updatedAt": "2024-02-12T17:47:43+00:00",
            "type": "auction",
            "drawableBalanceIds": [
                "142000305654435840"
            ],
            "clickAttributionWindow": "30D",
            "viewAttributionWindow": "1D",
            "name": "Valentine Day Sale",
            "budget": 100.00000000,
            "monthlyPacing": 50.00000000,
            "dailyPacing": 10.00000000,
            "isAutoDailyPacing": false,
            "startDate": "2024-02-12T00:00:00+00:00",
            "endDate": "2024-02-15T00:00:00+00:00",
            "clickAttributionScope": "sameSkuCategory",
            "viewAttributionScope": "sameSkuCategory",
            "companyName": "Test Company A",
            "onBehalfCompanyName": "Test Company B"
        }
    }
}

Get All Campaigns By Account Id

This endpoint lists all campaigns in the specified account. Results are paginated.

https://api.criteo.com/{version}/retail-media/accounts/{accountId}/campaigns

Sample Request

curl -L -X GET 'https://api.criteo.com/{version}/retail-media/accounts/5/campaigns' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <MY_ACCESS_TOKEN>'
import requests

url = "https://api.criteo.com/{version}/retail-media/accounts/4/campaigns"

payload={}
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer <MY_ACCESS_TOKEN>'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();

MediaType mediaType = MediaType.parse("text/plain");

RequestBody body = RequestBody.create(mediaType, "");

Request request = new Request.Builder()
  .url("https://api.criteo.com/{version}/retail-media/accounts/4/campaigns")
  .method("GET", body)
  .addHeader("Accept", "application/json")
  .addHeader("Authorization", "Bearer <MY_ACCESS_TOKEN>")
  .build();

Response response = client.newCall(request).execute();
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://api.criteo.com/{version}/retail-media/accounts/4/campaigns');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));

$request->setHeader(array(
  'Accept' => 'application/json',
  'Authorization' => 'Bearer <MY_ACCESS_TOKEN>'
));

try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}

catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}

Sample Response

{
    "metadata": {
        "totalItemsAcrossAllPages": 306,
        "currentPageSize": 2,
        "currentPageIndex": 8,
        "totalPages": 153,
        "nextPage": "https://api.criteo.com/{version}/retail-media/accounts/5/campaigns?pageIndex=9&pageSize=2",
        "previousPage": "https://api.criteo.com/{version}/retail-media/accounts/5/campaigns?pageIndex=7&pageSize=2"
    },
    "data": [
        {
            "id": "360028769027026944",
            "type": "RetailMediaCampaignV202301",
            "attributes": {
                "accountId": "5",
                "promotedBrandIds": [],
                "budgetSpent": 0.00000000,
                "budgetRemaining": null,
                "status": "inactive",
                "createdAt": "2022-09-20T11:45:47+00:00",
                "updatedAt": "2023-09-12T13:50:06+00:00",
                "type": "preferred",
                "drawableBalanceIds": [],
                "clickAttributionWindow": "14D",
                "viewAttributionWindow": "14D",
                "name": "Spring Sale 1",
                "budget": null,
                "monthlyPacing": null,
                "dailyPacing": null,
                "isAutoDailyPacing": false,
                "startDate": null,
                "endDate": null,
                "clickAttributionScope": "sameSkuCategory",
                "viewAttributionScope": "sameSkuCategory",
                "companyName": null,
                "onBehalfCompanyName": null
            }
        },
        {
            "id": "360029773808807936",
            "type": "RetailMediaCampaignV202301",
            "attributes": {
                "accountId": "5",
                "promotedBrandIds": [
                    "82539",
                    "105804",
                    "113465",
                    "117905",
                    "120242",
                    "125722",
                    "126509",
                    "135449",
                    "190104",
                    "2000000201",
                    "2000002375",
                    "2000002969"
                ],
                "budgetSpent": 0.00000000,
                "budgetRemaining": 555.00000000,
                "status": "inactive",
                "createdAt": "2022-09-20T11:49:47+00:00",
                "updatedAt": "2023-09-12T13:50:06+00:00",
                "type": "auction",
                "drawableBalanceIds": [],
                "clickAttributionWindow": "30D",
                "viewAttributionWindow": "1D",
                "name": "Spring Sales 2",
                "budget": 555.00000000,
                "monthlyPacing": null,
                "dailyPacing": null,
                "isAutoDailyPacing": false,
                "startDate": "2022-09-20T04:00:00+00:00",
                "endDate": "2022-09-21T03:59:59+00:00",
                "clickAttributionScope": "sameSkuCategory",
                "viewAttributionScope": "sameSku",
                "companyName": null,
                "onBehalfCompanyName": null
            }
        }
    ]
}

Get a Specific Campaign

This endpoint retrieves the specified campaign.

https://api.criteo.com/{version}/retail-media/campaigns/{campaignId}

Sample Request

curl -L -X GET 'https://api.criteo.com/{version}/retail-media/campaigns/1240' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <MY_ACCESS_TOKEN>'
import http.client

conn = http.client.HTTPSConnection("api.criteo.com")
payload = ''
headers = {
  'Accept': 'application/json',
  'Authorization': 'Bearer <MY_ACCESS_TOKEN>'
}
conn.request("GET", "/{version}/retail-media/campaigns/1240", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder()
  .url("https://api.criteo.com/{version}/retail-media/campaigns/1240")
  .method("GET", body)
  .addHeader("Accept", "application/json")
  .addHeader("Authorization", "Bearer <MY_ACCESS_TOKEN>")
  .build();
Response response = client.newCall(request).execute();
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://api.criteo.com/{version}/retail-media/campaigns/1240');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setHeader(array(
  'Accept' => 'application/json',
  'Authorization' => 'Bearer MY_ACCESS_TOKEN>'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}

Sample Response

{
    "data": {
        "id": "544937665113018368",
        "type": "RetailMediaCampaignV202301",
        "attributes": {
            "accountId": "5",
            "promotedBrandIds": [],
            "budgetSpent": 0.00000000,
            "budgetRemaining": null,
            "status": "inactive",
            "createdAt": "2024-02-12T17:47:43+00:00",
            "updatedAt": "2024-02-12T17:56:04+00:00",
            "type": "auction",
            "drawableBalanceIds": [
                "142000305654435840"
            ],
            "clickAttributionWindow": "30D",
            "viewAttributionWindow": "1D",
            "name": "Valentine Day Sale",
            "budget": null,
            "monthlyPacing": 50.00000000,
            "dailyPacing": null,
            "isAutoDailyPacing": false,
            "startDate": "2024-02-12T00:00:00+00:00",
            "endDate": "2024-02-15T00:00:00+00:00",
            "clickAttributionScope": "sameSku",
            "viewAttributionScope": "sameSku",
            "companyName": "ABC Test Company",
            "onBehalfCompanyName": "ABC Test Company"
        }
    }
}

Update a Specific Campaign

This endpoint allows you to update a specified campaign. The following example demonstrates how to switch to an uncapped campaign budget and modify the post-view attribution window.

https://api.criteo.com/{version}/retail-media/campaigns/{campaignId}

Sample Request

curl -L -X PUT 'https://api.criteo.com/{version}/retail-media/campaigns/544937665113018368' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <TOKEN>' \
-d '{
	"data": {
    "id": "544937665113018368",
    "type": "UpdateCampaign",
        "attributes": {
            "name": "Valentine Day Sale",
            "isAutoDailyPacing": false,
            "startDate": "2024-02-12",
            "endDate": "2024-02-15",
            "type": "auction",
            "drawableBalanceIds": [
                "142000305654435840"
            ],
            "clickAttributionWindow": "30D",
            "viewAttributionWindow": "1D",
            "budget": null,
            "monthlyPacing": 50,
            "dailyPacing": 10,
            "clickAttributionScope": "sameSku",
            "viewAttributionScope": "sameSku",
            "companyName": "ABC Test Company",
            "onBehalfCompanyName": "ABC Test Company"
        }
	}
}'
import http.client
import json

conn = http.client.HTTPSConnection("api.criteo.com")
payload = json.dumps({
  "data": {
    "id": "544937665113018368",
    "type": "UpdateCampaign",
    "attributes": {
      "name": "Valentine Day Sale",
      "isAutoDailyPacing": "false",
      "startDate": "2024-02-12",
      "endDate": "2024-02-15",
      "type": "auction",
      "drawableBalanceIds": [
        "142000305654435840"
      ],
      "clickAttributionWindow": "30D",
      "viewAttributionWindow": "1D",
      "budget": None,
      "monthlyPacing": "50",
      "dailyPacing": "10",
      "clickAttributionScope": "samesku",
      "viewAttributionScope": "samesku",
      "companyName": "ABC Test Company",
      "onBehalfCompanyName": "ABC Test Company"
    }
  }
})
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer <TOKEN>'
}
conn.request("PUT", "/{version}/retail-media/campaigns/544937665113018368", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"data\":{\"id\":\"544937665113018368\",\"type\":\"UpdateCampaign\",\"attributes\":{\"name\":\"Valentine Day Sale\",\"isAutoDailyPacing\":\"false\",\"startDate\":\"2024-02-12\",\"endDate\":\"2024-02-15\",\"type\":\"auction\",\"drawableBalanceIds\":[\"142000305654435840\"],\"clickAttributionWindow\":\"30D\",\"viewAttributionWindow\":\"1D\",\"budget\":null,\"monthlyPacing\":\"50\",\"dailyPacing\":\"10\",\"clickAttributionScope\":\"samesku\",\"viewAttributionScope\":\"samesku\",\"companyName\":\"ABC Test Company\",\"onBehalfCompanyName\":\"ABC Test Company\"}}}");
Request request = new Request.Builder()
  .url("https://api.criteo.com/{version}/retail-media/campaigns/544937665113018368")
  .method("PUT", body)
  .addHeader("Content-Type", "application/json")
  .addHeader("Accept", "application/json")
  .addHeader("Authorization", "Bearer <TOKEN>")
  .build();
Response response = client.newCall(request).execute();
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://api.criteo.com/{version}/retail-media/campaigns/544937665113018368');
$request->setMethod(HTTP_Request2::METHOD_PUT);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setHeader(array(
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'Authorization' => 'Bearer<TOKEN>'
));
$request->setBody('{"data":{"id":"544937665113018368","type":"UpdateCampaign","attributes":{"name":"Valentine Day Sale","isAutoDailyPacing":"false","startDate":"2024-02-12","endDate":"2024-02-15","type":"auction","drawableBalanceIds":["142000305654435840"],"clickAttributionWindow":"30D","viewAttributionWindow":"1D","budget": null,"monthlyPacing":"50","dailyPacing":"10","clickAttributionScope":"samesku","viewAttributionScope":"samesku","companyName":"ABC Test Company","onBehalfCompanyName":"ABC Test Company"}}}');
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}

Sample Response

{
    "data": {
        "id": "544937665113018368",
        "type": "RetailMediaCampaignV202301",
        "attributes": {
            "accountId": "5",
            "promotedBrandIds": [],
            "budgetSpent": 0.00000000,
            "budgetRemaining": null,
            "status": "inactive",
            "createdAt": "2024-02-12T17:47:43+00:00",
            "updatedAt": "2024-02-12T17:56:04+00:00",
            "type": "auction",
            "drawableBalanceIds": [
                "142000305654435840"
            ],
            "clickAttributionWindow": "30D",
            "viewAttributionWindow": "1D",
            "name": "Valentine Day Sale",
            "budget": null,
            "monthlyPacing": 50.00000000,
            "dailyPacing": null,
            "isAutoDailyPacing": false,
            "startDate": "2024-02-12T00:00:00+00:00",
            "endDate": "2024-02-15T00:00:00+00:00",
            "clickAttributionScope": "sameSku",
            "viewAttributionScope": "sameSku",
            "companyName": "ABC Test Company",
            "onBehalfCompanyName": "ABC Test Company"
        }
    }
}

Responses

ResponseDescription
🟢200Call completed with success
🟢201Campaign was created successfully
🔴 400Validation Error - one or more required field was not found. Confirm if all required fields are present in the API call

Invalid isautodailypacing - Cannot turn on IsAutoDailyPacing and add a DailyPacing value

IsAutoDailyPacing and Daily Pacing can not be active at the same time. Passing this in the call will return a 400 error

Invalid budget - Budget is not allowed for the Preferred campaign.