Overview
A Single-Seller campaign is a marketplace performance configuration where:- Each seller gets their own dedicated campaign.
- All those seller-specific campaigns are created from a shared template campaign configured by Criteo.
- You control whether a seller runs, when they run, and how much they can spend by managing per-seller budgets attached to that template via the Marketplace Performance Outcomes (MPO) API.
-
Is a non-delivering blueprint that contains:
- Optimization goal and bidding strategy (like Target Budget)
- Audience / targeting configuration
- Creative configuration and other non-seller-specific settings
- Must remain active for derived Single-Seller campaigns to be eligible to serve.
- Does not itself serve impressions or spend budget.
(seller, template) pair via the MPO budgets endpoint, Criteo automatically creates (if needed) and manages the underlying Single-Seller campaign/campaign for that seller.
Single-Seller vs Multi-Seller MPO campaigns
“Single-Seller” campaigns build on top of the “multi-seller” model where multiple sellers share a single campaign.Aspect | Multi-Seller | Single-Seller campaigns |
|---|---|---|
Sellers per campaign | Many sellers share one campaign | One seller per campaign (per-seller campaign) |
Configuration | One configuration shared by all sellers | Shared template configuration + per-seller campaign derived from it |
Budget model | Shared budgets across multiple sellers | One capped total budget per seller per template (no shared budgets) |
Cost control | Supports CPC-based control only | Single-Seller requires budget-based control (template must use budget as cost controller) |
Budget types | Various (including daily caps) | Capped total budget over a date range only; no daily or uncapped budgets |
Pacing | Daily caps managed explicitly | Automatic smoothing: total budget distributed over the period, with daily caps recomputed |
-
Use Single-Seller campaigns when:
- you need per-seller control of budgets and pacing.
- you need per-seller performance.
- Use multi-seller campaigns for small seller budgets.
Core Entities and Identifiers
This section clarifies the main entities used in Single-Seller setups and where their identifiers come from:-
Advertiser
- External business entity in Criteo.
- Typically obtained via the Marketing Solutions “Advertisers” endpoints.
-
MPO Template campaign (
templateCampaignId)- A Criteo-provisioned template campaign flagged for Single-Seller use.
- You do not create this via MPO; it is configured in Criteo’s internal tools.
-
You will receive its campaign ID from Criteo (e.g.
templateCampaignId), which you must use in MPO budget calls.
-
Seller (sellerId)
- A marketplace seller associated with your campaigns.
- Discoverable via MPO Sellers endpoints (for example:
GET /marketplace-performance-outcomes/sellers?sellerName=YoursellerName). -
Single-Seller campaign (sellerCampaignId)
- The per-seller campaign derived from the template.
-
Created implicitly when you create the first valid budget for
(sellerId, templateCampaignId). - Used by MPO stats endpoints (for example: seller-campaign statistics).
-
Budget (budgetId)
-
Represents a dated, capped total budget for a
(sellerId, templateCampaignId)pair. -
Created and managed via MPO budgets endpoints:
-
POST /marketplace-performance-outcomes/budgets -
PATCH /marketplace-performance-outcomes/budgets -
GET /marketplace-performance-outcomes/budgets[...]
-
-
Represents a dated, capped total budget for a
-
productSet
- An optional server-side filter attached to a Single-Seller campaign that restricts which products are eligible to be advertised.
-
Configured via the seller-campaign update endpoint
PATCH /marketplace-performance-outcomes/seller-campaigns.
- A templateCampaignId may have many derived Single-Seller campaigns (one per seller).
-
For each
(sellerId, templateCampaignId)combination you manage budgets over time with non-overlapping budget periods. - A Single-Seller campaign can have at most one productSet attached at any given time.
Access and Enablement
1. Feature availability
Single-Seller campaigns may be gated or rolled out progressively. Before using the flows described below:-
Ensure your account is enabled for:
- Marketplace Performance Outcomes (MPO) API.
- Single-Seller campaigns.
- Confirm this with your Criteo representative or support contact.
2. Getting a Single-Seller template
You cannot create Single-Seller templates through MPO. Instead:-
Discuss your use case with Criteo
- Provide the advertiser(s), vertical, and desired optimization goal.
- Describe whether Single-Seller will coexist with legacy MPO campaigns.
- Criteo configures the template Criteo will create a template campaign with:
- Budget-based cost control (no CPC for Single-Seller).
- Your desired optimization goal and targeting defaults.
- Any required marketplace specific constraints.
-
Criteo shares the following with you
-
Template campaign ID to be used in MPO budgets as
campaignId. - The minimum allowed daily budget per seller for that template.
-
Template campaign ID to be used in MPO budgets as
-
You store and manage this configuration
-
Persist the
templateCampaignIdand minimal budget constraints in your own system. - Use them when constructing MPO budget requests for each seller.
-
Persist the
3. Prerequisite Data and Permissions
Your integration should already:-
Use the MPO Sellers endpoints to discover or sync
sellerIdvalues associated with your campaigns. - Have the Campaign Manage permission for the relevant advertiser and campaigns.
-
Be able to call MPO endpoints such as:
-
/marketplace-performance-outcomes/sellers -
/marketplace-performance-outcomes/budgets -
/marketplace-performance-outcomes/stats/...
-
Budget Management for Single-Seller Campaigns
Budget objects are the primary control surface for Single-Seller campaigns.They:
-
Create the underlying Single-Seller campaign if not yet present for a
(sellerId, templateCampaignId)pair. - Define how much and when that Single-Seller campaign is allowed to spend.
-
Control pause / resume state via a
isSuspendedflag.
data wrappers) may differ; the examples below focus on the key attributes and patterns. Always refer to the MPO budgets reference for the canonical schema.Budget Behavior Overview
-
Each budget is a capped total amount over a date range:
- No daily or uncapped budget types in Single-Seller mode.
-
Daily pacing is automatic:
- The system computes an average daily amount from the total budget and dates.
- Under-delivery or over-delivery on a given day can be compensated later as long as the budget period is active.
-
For a given
(sellerId, templateCampaignId):- Budget periods must not overlap.
- You can schedule future budgets as long as their periods do not overlap existing active budgets.
- Suspended budgets do not block future budgets for the same period (they’re treated as logically canceled).
Typical Fields in a Budget
At a high level, a budget resource will include fields conceptually similar to:- sellerId (required)
- campaignIds (required, length = 1 for Single-Seller)
- amount (required)
- startDate, endDate (required)
- isSuspended (optional / nullable)
false) or paused (true).
- id (response field)
budgetId) returned by the API.
Workflow: Create the First Single-Seller Budget (and Campaign)
This section describes the typical flow to onboard a seller on a Single-Seller template.Preconditions
-
You have:
-
advertiserId -
templateCampaignId(Single-Seller template campaign ID) -
sellerId
-
- Your account is enabled for Single-Seller.
- You know the minimum allowed budget per seller for this template.
Step 1 – Construct the Budget Payload
Conceptual example: Sample request-
campaignIdscontains exactly one ID: the Single-Seller template campaign ID. -
amount: must be ≥ the minimum per-seller budget communicated by Criteo by the number of days between start and end dates for this budget. -
startDate/endDatemust describe a valid period (startDate <= endDate).
Step 2 – Interpret the Response
A successful response will return:-
The new budget ID (
budgetId). - Echoed fields with normalized formats (for example: truncated seconds, normalized dates).
-
A
isSuspendedvalue and possibly other status information.
(sellerId, templateCampaignId) pair:
- Criteo creates the corresponding Single-Seller campaign/campaign synchronously.
- There may be a delay before delivery begins; plan for an asynchronous provisioning delay before you see impressions.
Step 3 – Avoid Overlapping Budgets
When planning future periods:-
Do not create budgets whose date ranges overlap for the same
(sellerId, templateCampaignId). -
If you need to extend or change a period:
- Update the existing budget when possible (see next section).
- Or cancel/suspend it and create a new, non-overlapping budget.
Workflow: Update an Existing Budget
Use budget updates to adjust amount, dates, or suspension status.Preconditions
-
You have the
budgetId(from creation or from a previous GET). - The budget is still within a modifiable state according to MPO rules (see reference docs for any immutable fields or cutoffs).
Example: Increase Budget Amount mid-flight
Conceptual example using a PATCH-style update:- The total budget is increased from e.g. 1200 → 2000 for the global period.
- The pacing logic will recompute daily caps for the remaining days of the budget period.
-
The update should be idempotent: sending the same
PATCHtwice with the same values should result in the same final state.
Example: Extend The End Date
-
Ensure the extended period still does not overlap with any other active budgets for the same (
sellerId,templateCampaignId). - If the system enforces specific max duration or future-horizon limits, violations will be returned as 4xx errors with field-specific messages.
Workflow: Suspend and Resume a Single-Seller Campaign
You do not pause Single-Seller campaigns directly. Instead, you pause/resume the budget.Suspend (pause) via Budget
To stop spend:- 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 via budget
To resume spend:- 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).
Canceling 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 should not block new ones for the same dates.
Inspecting Budgets and Performance
You can retrieve budgets and monitor performance using existing MPO endpoints.Budgets
- List or filter budgets:
GET /marketplace-performance-outcomes/budgetswith query parameters such as:sellerIdcampaignId(template campaign ID)- date filters, etc.
- Retrieve one budget by ID:
GET /marketplace-performance-outcomes/budgets/{budgetId}
- Synchronize your internal state.
- Debug issues (e.g. confirm whether a budget is
suspended, check effective dates and amounts).
Performance statistics
Single-Seller performance is exposed via the same stats APIs used for MPO, such as:GET /marketplace-performance-outcomes/stats/campaignsGET /marketplace-performance-outcomes/stats/sellersGET /marketplace-performance-outcomes/stats/seller-campaigns
sellerId- template
campaignId - Single-Seller
sellerCampaignId(where applicable)
productSet for Single-Seller Campaigns
The productSet feature lets you restrict a Single-Seller campaign to a specific list of product IDs from the seller’s catalog.
Overview
For Single-Seller campaigns:- A
productSetis a whitelist of product IDs:- Only products whose external item IDs are in the productSet are eligible to be advertised by that Single-Seller campaign.
- The productSet:
- Is configured at the Single-Seller campaign / seller campaign level.
- Applies to all ads served by that campaign.
- Is optional; if no productSet is 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 a given time.
Where productSet is supported
productSetconfiguration is only supported for Single-Seller campaigns associated with a Single-Seller template.- Do not attempt to use productSet on:
- Legacy multi-seller (MPO) campaigns.
- Other campaign types that are not explicitly documented as supporting
productSet.
productSet: Supported Structure and Behavior
Read: Inspecting the current productSet
When you retrieve a Single-Seller campaign (for example: GET /marketplace-performance-outcomes/seller-campaigns), the response will:
- Return no productSet or
productSet: nullif no productSet has ever been configured. - Return a structured rule when a productSet is configured.
productSet.valuecontains 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).
productSet is null or omitted, there is no additional product-ID filter applied.
Create / Update: Attaching a productSet
To create or update the productSet for a Single-Seller campaign, call the seller-campaign update endpoint (for example:PATCH /marketplace-performance-outcomes/seller-campaigns) with a productSet object.
Schematic request body (batch of one item):
- If the Single-Seller campaign had no productSet before, this creates and attaches a new productSet.
- If a productSet already existed, this replaces the existing rule with the new one (the behavior is “update in place”, not “attach multiple productSets”).
- After a successful update, subsequent GETs for this campaign will return the new productSet configuration.
- Only the rule type (
operator = "IsIn"oroperator = "IsNotIn") andfield = "ExternalItemId"is supported for Single-Seller productSet usage. - A minimum number of product IDs per productSet may be enforced per advertiser (by default: 20); if you provide fewer IDs than configured, the API may return a 4xx error.
Delete / Unset: Removing the productSet
To remove the productSet (and revert to “no extra product filter”), set theproductSet.value to null in an update call.
Schematic request:
- The Single-Seller campaign stops using a productSet to 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.
productSet: Usage Patterns and Edge Cases
Supported patterns
- Single-Seller + no productSet Default mode: all eligible products from the seller are available to the campaign.
- Single-Seller + one productSet rule on ExternalItemId Supported and recommended pattern when you want to restrict inventory to a list of SKUs.
- Multiple productSets per Single-Seller campaign Not supported; updates replace the existing productSet rule.
Common errors and how to avoid them
1. Using productSet with a non-Single-Seller campaign
If you attempt to configure a productSet on a campaign that is not associated with a Single-Seller template, the API may:- Reject the request with a 4xx error (for example, indicating an unsupported campaign type).
- Or explicitly state that productSet is only supported on Single-Seller campaigns.
- Only send a
productSetfor campaigns that your Criteo contact has confirmed as Single-Seller. - If you manage both Single-Seller and multi-seller campaigns, track this distinction in your own data model.
2. Too few product IDs
If the advertiser-specific minimum number of product IDs is, for example, 10, the following may fail:- A 4xx status code.
- An error payload that references the
productSetorvaluesfield and describes the minimum requirement.
- Prompt the user (or upstream system) to provide more IDs.
- Retry only after a corrected payload is available.
3. Non-matching or invalid product IDs
If some IDs invalues do not exist in the seller’s catalog or are not eligible (for example, inactive or disapproved products):
- The request may still be accepted as long as the payload is syntactically valid.
- At serving time, only existing, eligible products will be used; others are effectively ignored.
- Use your own catalog or feeds to validate IDs where possible.
- Monitor performance and impression volume; a productSet with many invalid IDs may lead to under-delivery or blank banner.
Putting It All Together: Typical Automated Flow
This section summarizes a typical end-to-end workflow an agent or automation could follow to set up and manage Single-Seller campaigns.A. Onboard a new seller to a Single-Seller template
- Fetch seller list
Call
GET /marketplace-performance-outcomes/sellersto obtainsellerIdvalues. - Check local configuration
Confirm you have:
templateCampaignIdfor Single-Seller.- Minimum allowed budget per seller.
- Create first budget for the new seller
Call
POST /marketplace-performance-outcomes/budgetswith:sellerId= the new seller.campaignIds=[templateCampaignId].budgetType=Capped.- Valid
amount,startDate,endDate.
- Wait for provisioning and start monitoring After the budget becomes active, the Single-Seller campaign is created and starts delivering. Use stats endpoints to monitor performance.
B. Adjust spend mid-flight
- Retrieve the current budget
GET /marketplace-performance-outcomes/budgets?sellerId=...&campaignId=templateCampaignId - Decide new amount or dates Incorporate minimum/maximum constraints and business logic.
- PATCH the budget
PATCH /marketplace-performance-outcomes/budgetswith the updated fields. - Confirm the updated state Optionally re-GET the budget or check campaign performance to ensure changes took effect.
C. Pause / resume seller activity
- Pause
PATCH /marketplace-performance-outcomes/budgetswith"isSuspended": true. - Resume
PATCH /marketplace-performance-outcomes/budgetswith"isSuspended": false(if the end date is still in the future). - Cancel scheduled future budgets
For future budgets, set
isSuspended: trueand treat them as canceled.
D. Restrict products for a seller
- Obtain product IDs From your catalog or internal systems, list product external IDs for the seller.
- Attach productSet
PATCH /marketplace-performance-outcomes/seller-campaignswith aproductSetcontaining:operator:"IsIn"field:"ExternalItemId"values:[SKU_1, SKU_2, ...]
- Update or remove later as needed
- Update the list of
valuesto change the whitelist. - Set
productSet.valuetonullto remove the filter entirely.
- Update the list of
Error Handling and Best Practices
To build robust, agent-friendly integrations:- Treat 4xx codes as input or business logic errors:
- Log them with field-level context.
- Adjust inputs before retrying.
- Reserve 5xx codes and network errors for retries:
- Apply exponential backoff.
- Consider idempotency when retrying create/update calls, apart of a first budget creation where the process has to stop and the associated error reported to your Criteo point of contact.
- Always handle:
- Budget overlap errors for a
(sellerId, templateCampaignId)pair. - Budget amount or date constraint violations.
- productSet validation errors (wrong structure, too few IDs, unsupported field/operator).
- Budget overlap errors for a
- When in doubt:
- Use
GETendpoints (sellers, budgets, seller-campaigns) to reconstruct the current state. - Rebuild your intended change as a new request, ensuring alignment with the latest server state.
- Use