Overview
In Single-Seller setups, you do not create seller-campaigns directly. Instead, the underlying per-seller campaign is created implicitly by Criteo when you create the first valid budget for a(sellerId, templateCampaignId) pair.
Once created, you can configure and control the campaign through two main surfaces:
- Budget suspension (to pause/resume the campaign).
- productSet configuration (to restrict which products can be advertised).
The Single-Seller campaign entity
A Single-Seller campaign (identified bysellerCampaignId) is the per-seller campaign derived from the template.
Key characteristics:
- Created implicitly when the first valid budget for a
(sellerId, templateCampaignId)pair is accepted. - There may be a short asynchronous provisioning delay before delivery begins after creation.
- Used by MPO stats endpoints when querying performance at the seller-campaign level.
- Can have at most one
productSetattached at any given time.
Suspension reasons
When a Single-Seller campaign is not delivering, the API returns asuspensionReasons array explaining why.
Reason | Description | Action required |
|---|---|---|
ManuallyStopped | Campaign manually paused | Resume via budget |
NoBudgetDefined | No valid budget linked | Create a budget |
NoCpcDefined | No CPC set | Set CPC via API |
NoMoreBudget | Budget fully spent | Create a new budget |
RemovedFromCatalog | Products removed | Restore products |
NotYetStarted | Newly created | Wait |
NoMoreDailyBudget | Daily limit reached | Wait for daily reset |
Other | Internal/system issue | Contact your Criteo team |
Checking campaign status
- If
suspendedSinceisnullandsuspensionReasonsis empty → the campaign is active. - If
suspendedSinceis set and one or more reasons are present → the campaign is currently suspended.
Suspending and resuming a Single-Seller campaign
You do not pause Single-Seller campaigns directly via a campaign-level endpoint. Instead, you control campaign run state by suspending or resuming the associated budget.Suspend (pause) a campaign
To stop spend for a seller, setisSuspended: true on the active budget:
- The budget becomes inactive and the associated Single-Seller campaign stops serving.
- The budget remains present in the API for auditing and historical purposes.
Resume a campaign
To resume spend, setisSuspended: false:
- If the
endDateis in the past, resuming will not restart delivery; you may need to create a new budget with a future period. - If there is a future budget scheduled for the same
(sellerId, templateCampaignId), the campaign will automatically resume when that future budget’sstartDateis reached (assuming that future budget is not itself suspended).
Cancel a scheduled future budget
To logically cancel a future, not-yet-active budget:- Treat the budget as canceled.
- You can create a new budget covering the same period if needed; suspended budgets do not block new ones for the same dates.
productSet for Single-Seller campaigns
TheproductSet feature lets you restrict a Single-Seller campaign to a specific list of product IDs from the seller’s catalog.
Overview
AproductSet is a whitelist of product IDs:
- Only products whose external item IDs are in the
productSetare eligible to be advertised by that Single-Seller campaign.
productSet:
- Is configured at the seller-campaign level.
- Applies to all ads served by that campaign.
- Is optional; if no
productSetis configured, the campaign can use all eligible products from the seller’s catalog (subject to other targeting and policy constraints). - There is at most one
productSetper Single-Seller campaign at any given time.
productSetconfiguration is only supported for Single-Seller campaigns associated with a Single-Seller template. Do not attempt to useproductSeton legacy multi-seller campaigns or other campaign types.
Inspecting the current productSet
When you retrieve a Single-Seller campaign, the response will:- Return no
productSetorproductSet: nullif noproductSethas ever been configured. - Return a structured rule when a
productSetis configured.
productSet.rulescontains an array of rules; in Single-Seller mode, only a single rule is supported.- Each rule:
operator: "IsIn"— inclusion list.field: "ExternalItemId"— field in the seller’s catalog feed.values— list of product IDs (strings).
- If
productSetisnullor omitted, no additional product-ID filter is applied.
Create / Update: Attaching a productSet
To create or update theproductSet for a Single-Seller campaign, call the seller-campaign update endpoint with a productSet object.
- If the Single-Seller campaign had no
productSetbefore, this creates and attaches a newproductSet. - If a
productSetalready existed, this replaces the existing rule with the new one (it is not additive). - After a successful update, subsequent GETs for this campaign will return the new
productSetconfiguration.
- Only:
operator = "IsIn"oroperator = "IsNotIn", withfield = "ExternalItemId"
is supported for Single-Seller usage.
- A minimum number of product IDs per
productSetmay be enforced per advertiser (default: 20). Providing fewer IDs than configured will return a 4xx error.
Delete / Unset: Removing the productSet
To remove theproductSet and revert to no additional product filter, set productSet.value to null:
- The Single-Seller campaign stops using a
productSetto filter products. - A subsequent GET for this campaign will show
productSet: null(or omit the field, depending on the schema). - Products are once again selected from the seller’s catalog without additional ID whitelisting, subject to other targeting rules and policies.
Supported productSet patterns
Pattern | Supported? | Notes |
|---|---|---|
Single-Seller + no productSet (default) | Yes | All eligible products from the seller are used. |
Single-Seller + one | Yes | Recommended pattern for SKU restriction. |
Multiple | No | Updates replace the existing rule. |
| No |
Workflow: Restrict products for a seller
- Obtain product IDs from your catalog or internal systems for the seller.
- Attach
productSetvia:
operator: "IsIn"field: "ExternalItemId"values: ["SKU_1", "SKU_2", ...]
-
Update or remove later as needed:
- Update the
valueslist to change the whitelist. - Set
productSet.valuetonullto remove the filter entirely.
- Update the