- Define how you sell MPO — bundled as part of a larger ad package, or as a standalone offsite product.
- Complete the MPO Integration Design Template (PRD) with Criteo to validate your architecture, surface unsupported requirements early, and align on best practices.
- Begin API implementation once your selling model and architecture are agreed.
Completing the PRD before implementation reduces rework during development.
Before you start: decide how you’ll sell MPO
Before writing a single API call, define which MPO activation model you are implementing:- Bundle Extension — offsite advertising is sold as part of a larger ad package (for example, bundled with an onsite ad platform, or combined with other offsite products). This model is recommended when you already operate an onsite advertising platform or a broader media offering.
- Standalone Offsite — offsite advertising is offered as a separate product or campaign, independent from onsite.
Entity mapping
Map your internal structure to MPO entities before implementing any workflow:
Getting this mapping wrong is the most common source of post-launch issues. Confirm with Criteo that your mapping is correct before proceeding.
Seller ingestion
Sellers in MPO are not created via API in the standard flow. They are automatically extracted from your product catalog.- Each product in your catalog must include the
SellerIdfield (the raw seller identifier from your system) andSellerName(the display name). - A Seller-Campaign is automatically created for every seller × campaign pair after ingestion.
- Ingestion runs hourly, but the end-to-end process takes 24–48 hours from the time you upload your catalog.
Budget management
Choose the right budget type
Shared vs. individual budgets
A budget can be shared across multiple Seller-Campaigns belonging to the same seller. Use shared budgets when:- The seller operates across multiple campaigns (for example, web and app).
- You want unified budget control across those campaigns.
Shared budgets are only available in the Multi-Seller model. They are not supported in Single-Seller Campaigns.
Budget refresh and timezone
By default, all dates and times in the MPO API are in UTC. Local timezone configuration is supported but must be set up by Criteo. Budget refresh timing is based on the configured timezone. If your operations require a local timezone, contact your Criteo point of contact to request this configuration.Overspend protection
If you implement a daily spend hard limit, you are responsible for monitoring spend via the statistics endpoints and suspending budgets or setting CPC to 0 when the threshold is reached. MPO does not enforce client-defined hard limits automatically. Recommended approach for hard limit enforcement:- Poll
GET /stats/seller-campaignsat a defined cadence (for example, every 15–30 minutes). - Compare cost against your threshold.
- If exceeded, call
PATCH /budgets/{budgetId}withisSuspended: trueorPATCH /seller-campaigns/{sellerCampaignId}withbid: 0.
GET /budgets/{budgetId}returns thespendfield for the given budget.- If you need to check actual delivery spend at seller-campaign level, use the statistics endpoints (
GET /stats/seller-campaigns). These two figures may differ and that is expected.
PATCH /budgets/{budgetId}withisSuspended: true
Bid management
Bids are set at the Seller-Campaign level. Key principles:- Setting a bid to 0 effectively pauses the Seller-Campaign without suspending the budget.
- If the Seller-Campaign uses a shared budget, set bid to 0 to pause without affecting other Seller-Campaigns sharing that budget.
- If the Seller-Campaign uses an individual budget, suspending the budget directly is the cleaner approach.
- If spend is running too fast → decrease the bid via
PATCH /seller-campaigns/{sellerCampaignId}. - If spend is running too slow → increase the bid via the same endpoint.
Error handling and resilience
- Implement exponential back-off for HTTP 500 and 503 responses. These are typically transient network errors.
- The API supports up to 2,000 budgets per call (0.5 MB payload limit).
- Partial failure is not supported in bulk operations. If a call fails, check the
errorsarray in the response for per-record issue detail. - Use circuit breakers on write operations (budget creation, budget update, seller-campaign update) to protect your system from burst failures.
Reporting and statistics
Three statistics endpoints are available:
Key reporting considerations:
- Statistics are returned in UTC. Apply timezone conversion on your side if needed.
- Use
clickAttributionPolicy(SameSeller,AnySeller, orBoth) to control how post-click conversions are attributed at the seller level. - The default attribution window is PC30 (30-day post-click). Specify a different window explicitly if your reporting standard differs.
- Attribution-insensitive metrics (impressions, clicks, CTR, cost) are stable regardless of attribution settings. Attribution-sensitive metrics (
saleUnits,revenue, CR, CPO, COS, ROAS) change depending on the attribution window and policy used.
Seller lifecycle operations
Pausing a seller
- If using an individual budget:
PATCH /budgets/{budgetId}withisSuspended: true. - If using a shared budget:
PATCH /seller-campaigns/{sellerCampaignId}withbid: 0.
Offboarding a seller
- Suspend all active budgets associated with the seller.
- If the seller is not expected to relaunch soon, remove their products from the catalog.
- Seller-Campaign budgets are archived after 6 months.
Re-onboarding a seller
- Ensure the seller’s products are present in the catalog with the correct
externalSellerId. - Wait for the ingestion job to process (24–48 hours).
- Verify seller availability via
GET /sellers/{sellerId}. - Reactivate the budget or create a new one, then reset the bid.