Version 2025.01 Release Notes
Version 2025.01 of the Criteo retail media API is live as of January 21st, 2025 and will be supported until January 27th, 2026. A new Postman collection for 2025.01 is also available in the Criteo Postman workspace.
New SDK Release
A new SDK version will be available for the 2025.01 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.01 are:
- a new base URL,
- a new endpoint for Recommended Keywords,
- a new catalog endpoint for Marketplace sellers,
- new metrics and a new type of report within the analytics endpoints,
- a new consent granting endpoint.
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/2024-10/retail-media/{endpoint}
to the new base URL:
https://api.criteo.com/2025-01/retail-media/{endpoint}
What's New
Recommended Keywords
In version 2025.01, we've introduced a new recommended keywords' endpoint that is focused on providing users with the ability to see keywords that are automatically recommended by our keyword model for a given line item.
A line item can have multiple products in it, and only the top 100 keywords will be returned. A user can use this endpoint for Sponsored Products and Onsite Display buy types and can also expect to see keywords recommended by our keyword model and keywords that are automatically approved and/or rejected when submitted at the line item level.
Updated Endpoints
The following new catalog endpoint can be found below:
Verb | Endpoint | Description |
---|---|---|
GET | line-items/{lineItemId}/keywords/recommended | Get Recommended Keywords for a Line Item |
Sample Response
For Recommended Keywords:
{
"data": {
"type": "RecommendedKeywords",
"attributes": {
"keywords": {
"humidifier": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"humidifier",
"humidifier and",
"humidifier#"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air purifier shark": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"air purifier shark",
"shark air purifier",
"shark air purifiers"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air purify": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"air purify"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"humidifiers": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"humidifiers"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"blueair": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"blueair"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"humidifier purifier": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"humidifier purifier",
"purifier and humidifier"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"blueair purifier": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"blueair purifier",
"blueair purifiers"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air blue": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"blue air"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air humidifier": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"air humidifier"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air purifier winix": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"winix air purifier"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"evaporative humidifier": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"evaporative humidifier",
"humidifier evaporative"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"home humidifier": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"humidifier home"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air heater purifier": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"air purifier and heater",
"air purifier heater",
"heater and air purifier"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air cleaner": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"air cleaner",
"air cleaners"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"bedroom coolwarm humidifiers": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"cool/warm humidifiers for bedroom"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"humidifier smart": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"smart humidifier"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"blueair filter": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"blueair filter"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"blueair humidifier": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"blueair humidifier",
"humidifier blueair"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air blueair purifier": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"air purifier blueair",
"blueair air purifier"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air purifier room small": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"small room air purifier"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air blue purifier": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"blue air purifier"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air purifyer": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"air purifyer"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air dander large pet purifier room": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"air purifier pet dander large room"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air purifier smoke": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"air purifier smoke",
"smoke air purifier"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air ourifier": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"air ourifier"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air doctor": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"air doctor"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air portable purifier": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"portable air purifier",
"portable air purifiers"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air lg purifier": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"lg air purifier",
"lg air purifiers"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"humidifier miko": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"humidifier miko"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"311i blue blueair max pure": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"blueair blue pure 311i max"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"211 blueair": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"blueair 211"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"411 blue pure": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"blue pure 411"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"211i blue max pure": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"blue pure 211i max"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"311i air blue": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"blue air 311i"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"311 air blue filter": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"blue air 311 filter"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"211 air blue i max": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"blue air 211 i max"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air carbon purifier": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"air purifier with carbon"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air freshener": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"air freshener"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air purifier puroair": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"puroair air purifier"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air blueair mini purifier": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"mini air purifier blueair"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"humidificador": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"humidificador"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air home purifier": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"home air purifiers"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air formaldehyde purifier": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"formaldehyde air purifier"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air dehumidifier purifier": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"dehumidifier and air purifier"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air coway": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"coway air"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"canopy humidifier": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"canopy humidifier"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"09 blueair evaporative gallon humidifier invisiblemist premium smart topfill": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"blueair invisiblemist 0.9 gallon evaporative premium smart top-fill humidifier"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"blueair invisiblemist": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"blueair invisiblemist"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"blueair invisible mist": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"blueair invisible mist"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"311i blue blueair pure": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"blueair blue pure 311i"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"311i blueair": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"blueair 311i"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"211i blueair max": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"blueair 211i max"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"1800 311i blue blueair max pure": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"blueair - blue pure 311i max 1,800"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"511i blue pure": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"blue pure 511i"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"411 blue blueair pure": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"blue pure 411 blueair"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"311i blue max pure": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"blue pure 311i max"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"1200 air blue ft mold purifier sq": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"blue air purifier 1200 sq ft mold"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air blue humidifier": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"blue air humidifier"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air blue filter": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"blue air filter"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"511 air blue": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"blue air 511"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"411 air blue": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"blue air 411"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"211i air blue": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"blue air 211i"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"211 air blue": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"blue air 211"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"airpurifier": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"airpurifier"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air purifier uv": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"air purifier uv",
"uv air purifier"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air living purifier room": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"air purifier for living room"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air fresher": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"air fresher"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"311i max": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"311i max"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"purifier winix": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"winix purifier"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air purifier voc": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"voc air purifier"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air purifier silent": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"silent air purifier"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air purifier sense": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"sense air purifier"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air purifier sans": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"sans air purifier"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air purifier samsung": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"samsung air purifier"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air purifier room size": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"room size air purifiers"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air filter room": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"room air filter"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air filter pure": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"pure air filter"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air molekule purifier": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"molekule air purifier"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"evaporative humidifier levoit": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"levoit humidifier evaporative"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air large purifier": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"large air purifier"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"ionizer": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"ionizer"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air ionic purifier": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"ionic air purifiers"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air homedics purifier": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"homedics air purifier"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
},
"air clorox purifier": {
"reviewState": "Recommended",
"matchType": "PositiveExactMatch",
"bid": null,
"inputKeywords": {
"negativeBroad": [],
"negativeExact": [],
"positiveExact": [
"clorox air purifier"
]
},
"createdAt": "0001-01-01T00:00:00",
"updatedAt": "0001-01-01T00:00:00"
}
},
"recommendedKeywords": [
"311i max",
"air cleaner",
"air cleaners",
"air doctor",
"air freshener",
"air fresher",
"air humidifier",
"air ourifier",
"air purifier and heater",
"air purifier blueair",
"air purifier for living room",
"air purifier heater",
"air purifier pet dander large room",
"air purifier shark",
"air purifier smoke",
"air purifier uv",
"air purifier with carbon",
"air purify",
"air purifyer",
"airpurifier",
"blue air",
"blue air 211",
"blue air 211 i max",
"blue air 211i",
"blue air 311 filter",
"blue air 311i",
"blue air 411",
"blue air 511",
"blue air filter",
"blue air humidifier",
"blue air purifier",
"blue air purifier 1200 sq ft mold",
"blue pure 211i max",
"blue pure 311i max",
"blue pure 411",
"blue pure 411 blueair",
"blue pure 511i",
"blueair",
"blueair - blue pure 311i max 1,800",
"blueair 211",
"blueair 211i max",
"blueair 311i",
"blueair air purifier",
"blueair blue pure 311i",
"blueair blue pure 311i max",
"blueair filter",
"blueair humidifier",
"blueair invisible mist",
"blueair invisiblemist",
"blueair invisiblemist 0.9 gallon evaporative premium smart top-fill humidifier",
"blueair purifier",
"blueair purifiers",
"canopy humidifier",
"clorox air purifier",
"cool/warm humidifiers for bedroom",
"coway air",
"dehumidifier and air purifier",
"evaporative humidifier",
"formaldehyde air purifier",
"heater and air purifier",
"home air purifiers",
"homedics air purifier",
"humidificador",
"humidifier",
"humidifier and",
"humidifier blueair",
"humidifier evaporative",
"humidifier home",
"humidifier miko",
"humidifier purifier",
"humidifier#",
"humidifiers",
"ionic air purifiers",
"ionizer",
"large air purifier",
"levoit humidifier evaporative",
"lg air purifier",
"lg air purifiers",
"mini air purifier blueair",
"molekule air purifier",
"portable air purifier",
"portable air purifiers",
"pure air filter",
"purifier and humidifier",
"puroair air purifier",
"room air filter",
"room size air purifiers",
"samsung air purifier",
"sans air purifier",
"sense air purifier",
"shark air purifier",
"shark air purifiers",
"silent air purifier",
"small room air purifier",
"smart humidifier",
"smoke air purifier",
"uv air purifier",
"voc air purifier",
"winix air purifier",
"winix purifier"
]
}
},
"warnings": [],
"errors": []
}
The
reviewState
is the state of the keyword that indicates if the keyword is an automatic keyword. Each keyword can take on the following statuses for this endpoint:
Recommended
: for automatic keywords,AutoApproved
: for automatic approvals.
Catalog for Marketplace Sellers
In version 2025.01, we've introduced a new catalog endpoint that is focused on making catalog requests for marketplace seller SKUs. Marketplace seller SKUs are sourced from marketplace brands that are unique because it allows for third party suppliers to promote their products on retailer inventory. They are distinguished in retailer catalogs because each SKU from a third party supplier exists under a marketplace seller ID.
Updated Endpoints Includes
The following new catalog endpoint can be found below:
Verb | Endpoint | Description |
---|---|---|
POST | /accounts/{accountId}/catalogs/sellers | Create a Seller Catalog Request |
Sample Request
ForSeller Catalog:
curl --location 'https://api.criteo.com/2025-01/retail-media/accounts/{accountId}/catalogs/sellers' \
--header 'Content-Type: application/json' \
--header 'Accept: text/plain' \
--header 'Authorization: Bearer xxxx' \
--data '{
"data": {
"type": "RetailMediaCatalog",
"attributes": {
"sellers": [
{
"retailerId": "{retailerId}",
"sellerId": "{sellerId}"
}
]
}
}
}'
import requests
import json
headers = {
'Content-Type': 'application/json',
'Accept': 'text/plain',
'Authorization': 'Bearer xxxx',
}
json_data = {
'data': {
'type': 'RetailMediaCatalog',
'attributes': {
'sellers': [
{
'retailerId': '{retailerId}',
'sellerId': '{sellerId}',
},
],
},
},
}
response = requests.post(
'https://api.criteo.com/2025-01/retail-media/accounts/{accountId}/catalogs/sellers',
headers=headers,
json=json_data,
)
print(response.text)
OkHttpClient client = new OkHttpClient();
String requestBody = "{\n \"data\": {\n \"type\": \"RetailMediaCatalog\",\n \"attributes\": {\n \"sellers\": [\n {\n \"retailerId\": \"{retailerId}\",\n \"sellerId\": \"{sellerId}\"\n }\n ]\n }\n }\n}";
Request request = new Request.Builder()
.url("https://api.criteo.com/2025-01/retail-media/accounts/{accountId}/catalogs/sellers")
.post(requestBody)
.header("Content-Type", "application/json")
.header("Accept", "text/plain")
.header("Authorization", "Bearer xxxx")
.build();
try (Response response = client.newCall(request).execute()) {
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
response.body().string();
}
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.criteo.com/2025-01/retail-media/accounts/{accountId}/catalogs/sellers');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Accept: text/plain',
'Authorization: Bearer xxxx',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{\n \"data\": {\n \"type\": \"RetailMediaCatalog\",\n \"attributes\": {\n \"sellers\": [\n {\n \"retailerId\": \"{retailerId}\",\n \"sellerId\": \"{sellerId}\"\n }\n ]\n }\n }\n}");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
curl_close($ch);
Sample Response
For Seller Catalog:
Generating a seller catalog will return an id
.
Once the report is done, use the GET | /retail-media/catalogs/{catalogId}/output
to download the results.
{
"data": {
"id": "670751679281950720",
"type": "RetailMediaCatalogStatus",
"attributes": {
"status": "pending",
"currency": null,
"rowCount": null,
"fileSizeBytes": null,
"md5Checksum": null,
"createdAt": "2025-01-24T22:07:42.35+00:00",
"message": null
}
}
}
New Metrics & Report Type
In version 2025.01, we've introduced new metrics as well as a new report type 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 attribution that is new to a brand to enable users to review conversions from shoppers who have not purchased from the brand in the past 180 days.
We are also introducing the Cap Out report type for sponsored product reporting, which will provide details about when campaigns and line items are running out of budget.
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 |
New report type
Report Type | Data Type | Description |
---|---|---|
CapOut | string | The cap-out report notifies advertisers about the extent of missed sales due to campaigns and line-items reaching their cap too soon. By providing insights on managing campaign budgets and identifying opportunities for enhanced sales through optimal budget recommendations, the report plays a crucial role. Its influence extends to future incremental budget decisions, underscoring the importance of making it accessible to all users. |
This report type will disregard custom dimensions, metrics, time zone, and attribution windows.
If a user has this in their request, they will not be blocked from calling for the report type. The default time zone used will be what is defined at the account level and the attribution window is defined based on what is set at the campaign level.This report type is also available in the DSP reporting endpoints only.
Sample Request
For Campaign Report:
curl --location 'https://api.criteo.com/2025-01/retail-media/reports/campaigns' \
--header 'Content-Type: application/json' \
--header 'Accept: text/plain' \
--header 'Authorization: Bearer xxxx' \
--data '{
"data": {
"type": "RetailMediaReporting",
"attributes": {
"endDate": "2025-01-15",
"startDate": "2025-01-01",
"id": "{campaignId}",
"campaignType": "all",
"salesChannel": "all",
"format": "csv",
"reportType": "capout",
"clickAttributionWindow": "30D",
"viewAttributionWindow": "1D",
"timezone": "UTC"
}
}
}'
import requests
import json
headers = {
'Content-Type': 'application/json',
'Accept': 'text/plain',
'Authorization': 'Bearer xxxx',
}
json_data = {
'data': {
'type': 'RetailMediaReporting',
'attributes': {
'endDate': '2025-01-15',
'startDate': '2025-01-01',
'id': '{campaignId}',
'campaignType': 'all',
'salesChannel': 'all',
'format': 'csv',
'reportType': 'capout',
'clickAttributionWindow': '30D',
'viewAttributionWindow': '1D',
'timezone': 'UTC',
},
},
}
response = requests.post('https://api.criteo.com/2025-01/retail-media/reports/campaigns', headers=headers, json=json_data)
print(response.text)
OkHttpClient client = new OkHttpClient();
String requestBody = "{\n \"data\": {\n \"type\": \"<string>\",\n \"attributes\": {\n \"endDate\": \"2025-01-15\",\n \"startDate\": \"2025-01-01\",\n \"id\": \"{campaignId\",\n \"campaignType\": \"all\",\n \"salesChannel\": \"all\",\n \"format\": \"csv\",\n \"reportType\": \"capout\",\n \"clickAttributionWindow\": \"30D\",\n \"viewAttributionWindow\": \"1D\",\n \"timezone\": \"UTC\"\n }\n }\n}";
Request request = new Request.Builder()
.url("https://api.criteo.com/2025-01/retail-media/reports/campaigns")
.post(requestBody)
.header("Content-Type", "application/json")
.header("Accept", "text/plain")
.header("Authorization", "Bearer xxxx")
.build();
try (Response response = client.newCall(request).execute()) {
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
response.body().string();
}
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.criteo.com/2025-01/retail-media/reports/campaigns');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Accept: text/plain',
'Authorization: Bearer xxxx',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{\n \"data\": {\n \"type\": \"<string>\",\n \"attributes\": {\n \"endDate\": \"2025-01-15\",\n \"startDate\": \"2025-01-01\",\n \"id\": \"{campaignId}\",\n \"campaignType\": \"all\",\n \"salesChannel\": \"all\",\n \"format\": \"csv\",\n \"reportType\": \"capout\",\n \"clickAttributionWindow\": \"30D\",\n \"viewAttributionWindow\": \"1D\",\n \"timezone\": \"UTC\"\n }\n }\n}");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
curl_close($ch);
Sample Response
ForBoth:
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-01-24T22:23:37.437Z",
"expiresAt": null,
"message": null,
"id": "fc0343ed-62d9-4295-9d32-b1c13f4516a1"
},
"id": "fc0343ed-62d9-4295-9d32-b1c13f4516a1",
"type": "StatusResponse"
},
"warnings": [
{
"type": "validation",
"code": "ignored-dimensions-and-metrics-and-timezone",
"title": "Dimensions and Metrics and TimeZone have been ignored",
"detail": "Dimensions, Metrics, TimeZone and Attribution Window have been ignored because they are not supported for the 'capout' Report Type. TimeZone is default to timezone used by account. Attribution Window is default to attribution set at campaign level."
}
],
"errors": []
}
New metrics
Key-Values | Data Type | Description |
---|---|---|
newToBrandAttributedSale | string | Responsible for the total number of attributed sales that were new to a brand |
newToBrandAttributedSaleRate | string | Responsible for the percentage of attributed sales that were new to a brand |
newToBrandAttributedUnits | string | The number of attributed units that were considered new to a brand |
newToBrandAttributedUnitsRate | string | The percentage of attributed units that were considered new to a brand |
These metrics will be available via the DSP reporting endpoints for Sponsored Products & Onsite Display.
New Consent Granting endpoint
In version 2025.01, we've introduced a new consent granting endpoint that is specifically designed to support the Authorization Code workflow, catering to scenarios where an application owner is managing data for multiple data owners.
The endpoint facilitates a consent granting process, where the application owner, acting on behalf of the data owners, grants consent to the Business Application. This ensures that each data owner’s data is only accessible with their explicit consent, adding an additional layer of security and compliance, while also streamlining the data management process across different accounts.
Updated Endpoints Includes
The following new catalog endpoint can be found below:
Verb | Endpoint | Description |
---|---|---|
POST | /accounts/{accountId}/grant-consent | Grant Consent to the Business Application |
Sample Request
For Grant Consent:
Upon success of the call, a user should receive a 204
response.
Because the request body requires a callback URL, a code will be sent on the 204
response, which can then in turn be exchanged for an authorization token via the /oauth2/token
endpoint.
curl --location 'https://api.criteo.com/2025-01/retail-media/accounts/{accountId}/grant-consent' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer xxxx' \
--data '{
"data":{
"type": "GrantConsentModel",
"attributes": {
"clientId": "{Business Application Client ID}",
"callbackUrl": "{callbackUrl}"
}
}
}'
import requests
import json
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer xxxx',
}
json_data = {
'data': {
'type': 'GrantConsentModel',
'attributes': {
'clientId': '{Business Application Client ID}',
'callbackUrl': '{callbackUrl}',
},
},
}
response = requests.post(
'https://api.criteo.com/preview/retail-media/accounts/:accountId/grant-consent',
headers=headers,
json=json_data,
)
print(response.text)
OkHttpClient client = new OkHttpClient();
String requestBody = "{\n \"data\":{\n \"type\": \"GrantConsentModel\",\n \"attributes\": {\n \"clientId\": \"{Business Application Client ID}\",\n \"callbackUrl\": \"{callbackUrl}\"\n }\n }\n}";
Request request = new Request.Builder()
.url("https://api.criteo.com/preview/retail-media/accounts/:accountId/grant-consent")
.post(requestBody)
.header("Content-Type", "application/json")
.header("Authorization", "Bearer xxxx")
.build();
try (Response response = client.newCall(request).execute()) {
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
response.body().string();
}
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.criteo.com/preview/retail-media/accounts/:accountId/grant-consent');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: Bearer xxxx',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{\n \"data\":{\n \"type\": \"GrantConsentModel\",\n \"attributes\": {\n \"clientId\": \"{Business Application Client ID}\",\n \"callbackUrl\": \"{callbackUrl}\"\n }\n }\n}");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
curl_close($ch);