Version 2025.04 Release Notes
Version 2025.04 of the Criteo Retail Media API is live as of April 22nd, 2025 and will be supported until April 28th, 2026. A new Postman collection for 2025.04 is also available in the Criteo Postman workspace.
New SDK Release
A new SDK version will be available for the
2025.04
release.
This version introduces new capabilities to Criteo Retail Media API and changes to existing endpoints. This page aims at listing all changes that happened endpoint per endpoint. Only endpoints with changes are listed here.
The changes of versions 2025.04
are:
- a new base URL,
- updated Terms & Conditions
- a new endpoint for Private Market Child Accounts,
- a new Seller Search endpoint for Marketplace seller accounts,
- a new endpoint for CPC Min Bid
- new metrics within the analytics endpoints,
- removal of older keyword endpoints to provide a clearer path toward the comprehensive keyword endpoints
New Base URL
With the introduction of this new version, the base URL will now change from the old base URL:
https://api.criteo.com/2025-01/retail-media/{endpoint}
to the new base URL:
https://api.criteo.com/2025-04/retail-media/{endpoint}
What's New
Updated Terms & Conditions
We've introduced an updated Terms & Conditions page, which focuses on the below key areas:
- Agreement Scope: The terms apply to the use of Criteo's APIs and are complementary to any main agreements with Criteo or its affiliates.
- Acceptance: Users must accept these terms to access and use the APIs, and corporate entities must ensure authorized personnel accept on their behalf.
- Definitions: Important terms such as "Affiliate," "API Terms," "Applicable Laws," "Criteo Materials," and "Data Protection Laws" are clearly defined.
- Compliance: Users must comply with technical requirements and specifications provided by Criteo.
- Supplemental Terms: Depending on API usage, additional terms and conditions may be required.
You can find the new Terms & Conditions here.
Private Market Child Accounts
In version 2025.04
, we've introduced a new endpoint that is used to view all private market child accounts within a private market retailer account. By calling this endpoint, retailers can retrieve information about all child accounts associated with their given accountId
.
Updated Endpoints
The following new catalog endpoint can be found below:
Verb | Endpoint | Description |
---|---|---|
GET | /account-management/accounts/{accountId}/private-market-child-accounts | Get private market child accounts that are associated with the given retailer account |
Sample Response
For Private Market Child Accounts:
{
"metadata": {
"count": 4,
"offset": 0,
"limit": 25
},
"data": [
{
"id": "680xxxxxxxxxxxxxxxx",
"type": "RetailMediaChildAccount",
"attributes": {
"name": "test 1",
"companyName": "test 1",
"onBehalfCompanyName": "test 1",
"type": "Demand",
"subType": "Brand",
"countryIds": [
"US"
],
"currencyId": "USD",
"timeZone": "UTC"
}
},
{
"id": "680xxxxxxxxxxxxxxxx",
"type": "RetailMediaChildAccount",
"attributes": {
"name": "test 2",
"companyName": "test 2",
"onBehalfCompanyName": "test 2",
"type": "Demand",
"subType": "Brand",
"countryIds": [
"US"
],
"currencyId": "USD",
"timeZone": "UTC"
}
},
{
"id": "680xxxxxxxxxxxxxxxx",
"type": "RetailMediaChildAccount",
"attributes": {
"name": "test 3",
"companyName": "test 3",
"onBehalfCompanyName": "test 3",
"type": "Demand",
"subType": "Brand",
"countryIds": [
"US"
],
"currencyId": "USD",
"timeZone": "UTC"
}
},
{
"id": "700xxxxxxxxxxxxxxxx",
"type": "RetailMediaChildAccount",
"attributes": {
"name": "test 4",
"companyName": "test 4",
"onBehalfCompanyName": "test 4",
"type": "Demand",
"subType": "Seller",
"countryIds": [
"US"
],
"currencyId": "USD",
"timeZone": "UTC"
}
}
],
"warnings": [],
"errors": []
}
Seller Search
In version 2025.04
, we've introduced a new marketplace seller search endpoint that is focused on providing a programmatic way to identify all marketplace sellers (and, consequently, retailers) associated with the respective account. This endpoint enables the ability for users to leverage the appropriate information to support campaign activations.
Updated Endpoints Includes
The following new catalog endpoint can be found below:
Verb | Endpoint | Description |
---|---|---|
POST | /accounts/sellers/search | Search for Sellers, associated with retailers, given an account ID |
Sample Request
ForSeller Search:
curl --location 'https://api.criteo.com/2025-04/retail-media/accounts/sellers/search' \
--header 'Content-Type: application/json' \
--header 'Accept: text/plain' \
--header 'Authorization: Bearer ****' \
--data '{
"data": {
"attributes": {
"accountIds": [
"667xxxxxxxxxxxxxxxx",
"524xxxxxxxxxxxxxxxx"
],
"includeDetails": true
},
"type": "SellerSearch"
}
}'
import http.client
import json
conn = http.client.HTTPSConnection("api.criteo.com")
payload = json.dumps({
"data": {
"attributes": {
"accountIds": [
"667xxxxxxxxxxxxxxxx",
"524xxxxxxxxxxxxxxxx"
],
"includeDetails": true
},
"type": "SellerSearch"
}
})
headers = {
'Content-Type': 'application/json',
'Accept': 'text/plain',
'Authorization': '••••••'
}
conn.request("POST", "/2025-04/retail-media/accounts/sellers/search", 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, "{\n \"data\": {\n \"attributes\": {\n \"accountIds\": [\n \"667xxxxxxxxxxxxxxxx\",\n \"524xxxxxxxxxxxxxxxx\"\n ],\n \"includeDetails\": true\n },\n \"type\": \"<string>\"\n }\n}");
Request request = new Request.Builder()
.url("https://api.criteo.com/2025-04/retail-media/accounts/sellers/search")
.method("POST", body)
.addHeader("Content-Type", "application/json")
.addHeader("Accept", "text/plain")
.addHeader("Authorization", "Bearer ****")
.build();
Response response = client.newCall(request).execute();
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.criteo.com/2025-04/retail-media/accounts/sellers/search',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data": {
"attributes": {
"accountIds": [
"667xxxxxxxxxxxxxxxx",
"524xxxxxxxxxxxxxxxx"
],
"includeDetails": true
},
"type": "SellerSearch"
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Accept: text/plain',
'Authorization: Bearer ****'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Sample Response
For Seller Search:
{
"data": [
{
"type": "SellerSearchResult",
"attributes": {
"accountId": "667xxxxxxxxxxxxxxxx",
"sellers": [
{
"sellerId": "5e0xxxxxxxxxxxxxxxx",
"retailerId": 1234,
"name": Seller1
}
]
}
},
{
"type": "SellerSearchResult",
"attributes": {
"accountId": "524xxxxxxxxxxxxxxxx",
"sellers": [
{
"sellerId": "1xxxxxxxx",
"retailerId": 123,
"name": Seller2
}
]
}
}
],
"warnings": [],
"errors": []
}
CPC Min Bid
In version 2025.04
, we've introduced a new CPC Min Bid endpoint that is focused on providing a cleaner way to identify what the minimum bid will be when a selection of Sponsored Products are used for the intention of adding them to a line item.
Line items have bid settings, and in order to set the right one, you will need to know what the minimum bid is for your products, as well as the highest minimum bid, because the highest one will be the minimum for your line item.
Updated Endpoints Includes
The following new catalog endpoint can be found below:
Verb | Endpoint | Description |
---|---|---|
POST | /retailers/{retailerId}/cpc-min-bids | Search for min bid CPC defined by collection of SKU IDs |
Sample Request
ForCPC Min Bids:
curl --location 'https://api.criteo.com/2025-04/retail-media/retailers/{retailerId}/cpc-min-bids' \
--header 'Content-Type: application/json' \
--header 'Accept: text/plain' \
--header 'Authorization: Bearer ****' \
--data '{
"data": {
"attributes": {
"skuIds": [
"a1b2c3",
"d4e5f6",
"g7h8i9"
]
},
"type": "CpcMinBidsRequest"
}
}'
import http.client
import json
conn = http.client.HTTPSConnection("api.criteo.com")
payload = json.dumps({
"data": {
"attributes": {
"skuIds": [
"a1b2c3",
"d4e5f6",
"g7h8i9"
]
},
"type": "CpcMinBidsRequest"
}
})
headers = {
'Content-Type': 'application/json',
'Accept': 'text/plain',
'Authorization': 'Bearer ****'
}
conn.request("POST", "/2025-04/retail-media/retailers/{retailerId/cpc-min-bids", 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, "{\n \"data\": {\n \"attributes\": {\n \"skuIds\": [\n \"a1b2c3\",\n \"d4e5f6\",\n \"g7h8i9\"\n ]\n },\n \"type\": \"CpcMinBidsRequest\"\n }\n}");
Request request = new Request.Builder()
.url("https://api.criteo.com/2025-04/retail-media/retailers/{retailerId}/cpc-min-bids")
.method("POST", body)
.addHeader("Content-Type", "application/json")
.addHeader("Accept", "text/plain")
.addHeader("Authorization", "Bearer ****")
.build();
Response response = client.newCall(request).execute();
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.criteo.com/2025-04/retail-media/retailers/{retailerId}/cpc-min-bids',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data": {
"attributes": {
"skuIds": [
"a1b2c3",
"d4e5f6",
"g7h8i9"
]
},
"type": "CpcMinBidsRequest"
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Accept: text/plain',
'Authorization: Bearer ****'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Sample Response
For CPC Min Bids:
{
"data": {
"type": "CpcMinBidsResponse",
"attributes": {
"overallMinBid": 0.5000,
"skuMinBids": [
{
"skuId": "a1b2c3",
"minBid": 0.3500
},
{
"skuId": "d4e5f6",
"minBid": 0.4500
},
{
"skuId": "g7h8i9",
"minBid": 0.5000
}
]
}
},
"warnings": [],
"errors": []
}
New Metrics
In version 2025.04, we've introduced new metrics within the analytics endpoints.
The updated analytics endpoints provide users with deeper, more comprehensive insights, enabling them to explore data more effectively. Additionally, the introduction of new report types empowers users to make more informed, data-driven decisions by offering tailored, actionable insights that better align with your strategic goals.
In the latest version, you now have the flexibility to generate metrics with a focus on win rate to allow users to more precisely measure auction success rates. The win rate metric is only available to Sponsored Products via the DSP API today and is defined as the number of SKU slots that won at the auction divided by the number of SKUs that participated in the auction.
There are also new metrics with a focus on video designed to provide deeper insights into our performance and impact. These metrics are available in flexible reporting only and can be accessed via line-item reporting only via the DSP API. These metrics are also available via the SSP API.
Updated Endpoints Includes
The following new reporting changes apply for both the asynchronous campaign and line-item endpoints for report generation:
Verb | Endpoint | Description |
---|---|---|
POST | /reports/campaigns | Create a Campaign Report Request |
POST | /reports/line-items | Create a Line Item Report Request |
POST | /reports/revenue | Create a Revenue Report Request |
It should be noted that when you call for the
winRate
metric, you will be required to either call for thecampaignType
object and filter tosponsoredProducts
or include thecampaignTypeName
dimension. This is due to the calculation for Sponsored Product & Onsite Display being different. As a result, it will be important as it relates to efficient reporting to include this object or dimension when calling for the metric. Omitting either of these when calling for thewinRate
metric will result in an error.
Sample Request for Win Rate without campaignType
Object
campaignType
ObjectFor Campaign Report:
curl --location 'https://api.criteo.com/2025-04/retail-media/reports/campaigns' \
--header 'Content-Type: application/json' \
--header 'Accept: text/plain' \
--header 'Authorization: Bearer ****' \
--data '{
"data": {
"attributes": {
"endDate": "2025-04-22",
"startDate": "2025-04-01",
"campaignType": "all",
"clickAttributionWindow": "none",
"dimensions": [
"campaignName",
"campaignId"
],
"format": "csv",
"id": "1234",
"metrics": [
"impressions",
"clicks",
"winRate"
],
"reportType": "summary",
"salesChannel": "all",
"timezone": "UTC",
"viewAttributionWindow": "none"
},
"type": "AsyncCampaignsReportRequest"
}
}'
import http.client
import json
conn = http.client.HTTPSConnection("api.criteo.com")
payload = json.dumps({
"data": {
"attributes": {
"endDate": "2025-04-22",
"startDate": "2025-04-01",
"campaignType": "all",
"clickAttributionWindow": "none",
"dimensions": [
"campaignName",
"campaignId"
],
"format": "csv",
"id": "1234",
"metrics": [
"impressions",
"clicks",
"winRate"
],
"reportType": "summary",
"salesChannel": "all",
"timezone": "UTC",
"viewAttributionWindow": "none"
},
"type": "AsyncCampaignsReportRequest"
}
})
headers = {
'Content-Type': 'application/json',
'Accept': 'text/plain',
'Authorization': 'Bearer ****'
}
conn.request("POST", "/2025-04/retail-media/reports/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, "{\n \"data\": {\n \"attributes\": {\n \"endDate\": \"2025-04-22\",\n \"startDate\": \"2025-04-01\",\n \"campaignType\": \"all\",\n \"clickAttributionWindow\": \"none\",\n \"dimensions\": [\n \"campaignName\",\n \"campaignId\"\n ],\n \"format\": \"csv\",\n \"id\": \"1234\",\n \"metrics\": [\n \"impressions\",\n \"clicks\",\n \"winRate\"\n ],\n \"reportType\": \"summary\",\n \"salesChannel\": \"all\",\n \"timezone\": \"UTC\",\n \"viewAttributionWindow\": \"none\"\n },\n \"type\": \"AsyncCampaignsReportRequest\"\n }\n}");
Request request = new Request.Builder()
.url("https://api.criteo.com/2025-04/retail-media/reports/campaigns")
.method("POST", body)
.addHeader("Content-Type", "application/json")
.addHeader("Accept", "text/plain")
.addHeader("Authorization", "Bearer ****")
.build();
Response response = client.newCall(request).execute();
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.criteo.com/2025-04/retail-media/reports/campaigns',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data": {
"attributes": {
"endDate": "2025-04-22",
"startDate": "2025-04-01",
"campaignType": "all",
"clickAttributionWindow": "none",
"dimensions": [
"campaignName",
"campaignId"
],
"format": "csv",
"id": "1234",
"metrics": [
"impressions",
"clicks",
"winRate"
],
"reportType": "summary",
"salesChannel": "all",
"timezone": "UTC",
"viewAttributionWindow": "none"
},
"type": "AsyncCampaignsReportRequest"
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Accept: text/plain',
'Authorization: Bearer ****'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Sample Response for Win Rate without campaignType
Object
campaignType
ObjectForBoth:
Generating a campaign and line-item report will generate a reportId
.
Once the report is done, use the GET | /retail-media/reports/{reportId}/output
to download results.
{
"warnings": [],
"errors": [
{
"traceId": "0ec574b04465214f64431be3d5321954",
"traceIdentifier": "0ec574b04465214f64431be3d5321954",
"type": "validation",
"code": "win-rate-metric-not-allowed",
"instance": "/v2/reports/async/line-items",
"title": "WinRate metric is only supported for SponsoredProducts campaigns.",
"detail": "Please provide either the 'campaignTypeName' in dimensions or filter on SponsoredProducts using the 'campaignType' filter."
}
]
}
Sample Request for Win Rate with campaignType
Object
campaignType
ObjectFor Campaign Report:
curl --location 'https://api.criteo.com/2025-04/retail-media/reports/campaigns' \
--header 'Content-Type: application/json' \
--header 'Accept: text/plain' \
--header 'Authorization: Bearer ****' \
--data '{
"data": {
"attributes": {
"endDate": "2025-04-22",
"startDate": "2025-04-01",
"campaignType": "sponsoredProducts",
"clickAttributionWindow": "none",
"dimensions": [
"campaignName",
"campaignId"
],
"format": "csv",
"id": "1234",
"metrics": [
"impressions",
"clicks",
"winRate"
],
"reportType": "summary",
"salesChannel": "all",
"timezone": "UTC",
"viewAttributionWindow": "none"
},
"type": "AsyncCampaignsReportRequest"
}
}'
import http.client
import json
conn = http.client.HTTPSConnection("api.criteo.com")
payload = json.dumps({
"data": {
"attributes": {
"endDate": "2025-04-22",
"startDate": "2025-04-01",
"campaignType": "sponsoredProducts",
"clickAttributionWindow": "none",
"dimensions": [
"campaignName",
"campaignId"
],
"format": "csv",
"id": "1234",
"metrics": [
"impressions",
"clicks",
"winRate"
],
"reportType": "summary",
"salesChannel": "all",
"timezone": "UTC",
"viewAttributionWindow": "none"
},
"type": "AsyncCampaignsReportRequest"
}
})
headers = {
'Content-Type': 'application/json',
'Accept': 'text/plain',
'Authorization': 'Bearer ****'
}
conn.request("POST", "/2025-04/retail-media/reports/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, "{\n \"data\": {\n \"attributes\": {\n \"endDate\": \"2025-04-22\",\n \"startDate\": \"2025-04-01\",\n \"campaignType\": \"sponsoredProducts\",\n \"clickAttributionWindow\": \"none\",\n \"dimensions\": [\n \"campaignName\",\n \"campaignId\"\n ],\n \"format\": \"csv\",\n \"id\": \"1234\",\n \"metrics\": [\n \"impressions\",\n \"clicks\",\n \"winRate\"\n ],\n \"reportType\": \"summary\",\n \"salesChannel\": \"all\",\n \"timezone\": \"UTC\",\n \"viewAttributionWindow\": \"none\"\n },\n \"type\": \"AsyncCampaignsReportRequest\"\n }\n}");
Request request = new Request.Builder()
.url("https://api.criteo.com/2025-04/retail-media/reports/campaigns")
.method("POST", body)
.addHeader("Content-Type", "application/json")
.addHeader("Accept", "text/plain")
.addHeader("Authorization", "Bearer ****")
.build();
Response response = client.newCall(request).execute();
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.criteo.com/2025-04/retail-media/reports/campaigns',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"data": {
"attributes": {
"endDate": "2025-04-22",
"startDate": "2025-04-01",
"campaignType": "sponsoredProducts",
"clickAttributionWindow": "none",
"dimensions": [
"campaignName",
"campaignId"
],
"format": "csv",
"id": "1234",
"metrics": [
"impressions",
"clicks",
"winRate"
],
"reportType": "summary",
"salesChannel": "all",
"timezone": "UTC",
"viewAttributionWindow": "none"
},
"type": "AsyncCampaignsReportRequest"
}
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Accept: text/plain',
'Authorization: Bearer ****'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Sample Response for Win Rate with campaignType
Object
campaignType
ObjectForBoth:
Generating a campaign and line-item report will generate a reportId
.
Once the report is done, use the GET | /retail-media/reports/{reportId}/output
to download results.
{
"data": {
"attributes": {
"status": "pending",
"rowCount": 0,
"fileSizeBytes": 0,
"md5CheckSum": null,
"createdAt": "2025-04-18T18:47:24.162Z",
"expiresAt": null,
"message": null,
"id": "f4c73ba1-9a9e-447b-8c31-1baf81e1c957"
},
"id": "f4c73ba1-9a9e-447b-8c31-1baf81e1c957",
"type": "StatusResponse"
},
"warnings": [
{
"type": "validation",
"code": "ignored-report-type",
"title": "Report Type has been ignored",
"detail": "Report Type has been ignored because Dimensions and Metrics have been provided. Please remove them if you want to use one of the templates."
},
{
"type": "validation",
"code": "ignored-win-rate-metric",
"title": "WinRate metric is only supported for SponsoredProducts campaigns.",
"detail": "WinRate will be null for OnSiteDisplays campaigns."
}
],
"errors": []
}
New metrics
Key-Values | Data Type | Description |
---|---|---|
videoViews | string | The number of times at least 50% of the video ad appeared for at least 2 seconds (MRC standard). |
videosStarted | string | The percentage of videos printed that started playing. Formula: Video Starts / Placement Impressions |
videosPlayedTo25 | string | The number of times one of your videos played to at least 25% of its duration. |
videosPlayedTo50 | string | The number of times one of your videos played to at least 50% of its duration. |
videosPlayedTo75 | string | The number of times one of your videos played to at least 75% of its duration. |
videosPlayedTo100 | string | The number of times one of your videos played to 100% of its duration. |
videoPlayingRate | string | The average played percentage of a started video. Formula: Sum of Quartiles x 0.25 / (4 x Video starts) |
videoCompletionRate | string | The percentage of started videos that played for their entire duration. Formula: Number of videos that played to completion / Total number of videos started * 100 |
videosStarted | string | The number of times one of your video ads started playing. |
videoStartingRate | string | The percentage of videos printed that started playing. Formula: Video Starts / Placement Impressions |
videoPlayingRate | string | The average played percentage of a started video. Formula: Sum of Quartiles x 0.25 / (4 x Video starts) |
videoMuted | string | The number of times users clicked the “mute” button on your video. |
videoUnmuted | string | The number of times users clicked the “unmute” button on your video. |
videoResumed | string | The number of times users activated the resume control after the creative had been stopped and paused. |
videoPaused | string | The number of times users activated the pause control on the video. |
videoViewability | string | The percentage of video ads that were considered viewable. At least 50% of the ad’s pixels must be visible on the screen for at least two continuous seconds (MRC standard). Requires OMID support. Formula: Viewable Impressions / Placement Impressions |
Update to Keyword Endpoints
In version 2025.04
, we will be removing some older versions of our keyword endpoints to better guide users towards a comprehensive keyword targeting experience.
A selection of endpoints are excluded from 2025.04
because they currently support only negative keyword targeting. The endpoints that are inclusive of both negative keyword targeting and positive keyword targeting already exist, and should be leveraged going forward for keyword targeting purposes.
See below for the impacted endpoints:
Endpoints to be removed:
Verb | Endpoint | Description |
---|---|---|
POST | /auction-line-items/{line-item-id}/targeting/keywords/append | This endpoint appends one or more negative keywords to targeting on the specified line item |
POST | /auction-line-items/{line-item-id}/targeting/keywords/delete | This endpoint deletes one or more negative keywords to targeting on the specified line item |
GET | /auction-line-items/{line-item-id}/targeting/keywords | This endpoint gets the negative keywords targeted on the specified line item. |
Endpoints to use instead:
Verb | Endpoint | Description |
---|---|---|
POST | /line-items/:id/keywords/add-remove | Add or Remove keywords from the line item in bulk |
GET | /line-items/:id/keywords | Fetch keywords associated with the specified line item |