> ## Documentation Index
> Fetch the complete documentation index at: https://developers.criteo.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Quick Start – Launch a Single-Seller Campaign via MPO

## What you’ll accomplish

In this recipe, you will:

* Take a single seller from having **no Single-Seller campaign** to having a **live, dedicated Single-Seller campaign**.
* Create the first **Single-Seller budget**, which:
  * Automatically creates the per-seller campaign for that seller and template (if it doesn’t exist yet).
  * Controls how much that seller can spend and over which dates.
* Restrict products for that seller’s campaign using **`productSet`** (this is optional).
* Verify the setup using both:
  * **Budgets** endpoints, to confirm configuration.
  * **Statistics** endpoints, to confirm the seller is delivering.

This recipe assumes you already understand the high-level concepts in the\
[Single-Seller Campaigns – Concept Guide](https://criteo.atlassian.net/wiki/display/~g.handley/Single-Seller+Campaigns+%E2%80%93+Concept+Guide).

## Who this recipe is for

This flow is intended for sellers who are a good fit for Single-Seller, typically:

* **Top or strategic sellers** who can meet the minimum Single-Seller budgets, and
* Sellers with **enough eligible products** in their catalog to support stable delivery.

Very small or long-tail sellers with very low daily budgets are usually better handled via **Multi-Seller campaigns**, not Single-Seller.

## Prerequisites

Before you start, make sure all of the following are true.

### Feature enablement

#### API access

Marketplace Performance Outcomes uses the same Marketing Solutions Performance Media / Campaign endpoints as your other campaigns – there is no separate “MPO API” to activate.

To call `/marketplace-performance-outcomes`, your application must:

* Be onboarded to Marketing Solutions with the **Campaign** domain in its scope.
* Have the **Campaign Manage** permission, as described in the [onboarding checklist](/marketing-solutions/docs/onboarding-checklist#3-define-your-app-scope).

#### Single-Seller feature enablement

Single-Seller campaigns must be enabled on your account. Confirm with your Criteo representative that:

* Your advertiser is allowed to use **Single-Seller**.
* At least one **Single-Seller template campaign** exists for you.

If Single-Seller is not enabled, the calls in this recipe may return authorization or validation errors.

### Template configuration

* You have a **Single-Seller template campaign ID** from Criteo:
  * This is often referred to as `templateCampaignId`.
  * You must use this ID as `campaignId` in **budget calls**.
* You know the **minimum per-seller budget** for this template:
  * For example: a minimum total budget per period, or a minimum “equivalent daily” spend.

### Seller eligibility

Single-Seller is designed for sellers who can sustain **meaningful, continuous delivery**. Before using this recipe for a seller, check that:

* The seller can meet the **minimum daily budget** guidelines for Single-Seller. As a rule of thumb:
  * **Recommended**: around **US\$20/day** for ROAS/sales goals, or **US\$10/day** for click goals.
  * **Hard minimums**: **US\$10/day** (ROAS/sales) and **US\$5/day** (click).
* The seller is **not** a pure long-tail seller with very small or sporadic budgets.
  * Long-tail sellers are usually better suited to **Multi-Seller pooled campaigns**.
* If you plan to use `productSet` for this seller:
  * The seller has at least **\~20 in-stock products** mapped correctly in the catalog.
  * This helps avoid **under-delivery** and `productSet` **validation errors**.

### Catalog and sellers

* Your product catalog is integrated and includes `sellerName` on relevant products.
* The MPO Sellers endpoints return sellers:
  * You can call `/marketplace-performance-outcomes/sellers` and see your sellers.
  * Each seller you want to onboard to Single-Seller has a corresponding `sellerId`.

### API access & permissions

You have valid OAuth 2.0 client credentials and can obtain a Bearer token.

Your OAuth token must include the following permissions for the advertiser portfolios used in this recipe:

* **Campaigns: Read**
* **Campaigns: Manage**

With these permissions, your app can read the required entities (including sellers), create and update budgets, and call the reporting endpoints used in this workflow.

You will need (for this recipe):

* `advertiserId`
* `templateCampaignId` (Single-Seller template campaign ID)
* `sellerId` (you will retrieve this in Step 1)
* Minimum per-seller budget for this template (from Criteo)

**Estimated time:** \~30–60 minutes if all of the above are ready.

## Step 1 – Get the `sellerId`

Use the MPO Sellers endpoint to find the internal `sellerId` for the seller.

Example (filter by `sellerName`):

**Endpoint**

```http theme={null}
GET  https://api.criteo.com/{version}/marketing-solutions/marketplace-performance-outcomes/sellers?sellerName={YourSellerName}
Authorization: Bearer <ACCESS_TOKEN>
Accept: application/json
```

**Sample response (simplified):**

```json JSON theme={null}
[
{
"id": "123",
"sellerName": "YourSellerName"
}
]
```

* `id` is the `sellerId` to use in later calls.
* Store `sellerId` in your own system.

## Step 2 – Create the first Single-Seller budget

The first valid budget for (`sellerId`, `templateCampaignId`):

* Creates the underlying **Single-Seller campaign** (if it doesn’t exist).
* Defines **how much** the seller can spend and **over which period**.

### Build the budget request

**Endpoint**

```http HTTP theme={null}
POST  https://api.criteo.com/{version}/marketing-solutions/marketplace-performance-outcomes/budgets
Authorization: Bearer <ACCESS_TOKEN>
Content-Type: application/json
Accept: application/json
```

**Request body**

```json JSON theme={null}

{
"campaignIds": ["456"],
"sellerId": "123",
"startDate": "2026-04-16",
"endDate": "2026-04-30",
"budgetType": "Capped",
"amount": "1200"
}
]
```

**Guidelines:**

* `campaignIds` must contain **exactly one ID**: your Single-Seller `templateCampaignId`.
* `amount` must be more: the per-seller minimum by the number of days.
* `startDate` and `endDate`:
  * Must form a valid range (`startDate <= endDate`).
  * Must not overlap any other budget for the same (`sellerId`, `templateCampaignId`).

### Interpret the response

A successful response returns:

* A generated `budgetId`.
* The budget fields (dates, `amount`, `isSuspended`, status).

Once accepted:

* Criteo creates the **Single-Seller campaign** for (`sellerId`, `templateCampaignId`) if needed.
* Expect a short **provisioning delay** before impressions appear.

Store:

* `budgetId` for future updates and troubleshooting.
* Mapping between `sellerId`, `templateCampaignId`, and budget(s).

## Step 3 – Restrict products with `productSet` (Optional)

If you want this seller’s campaign to only advertise specific SKUs, attach a `productSet`.

### Get the seller-campaign ID

**Endpoint**

```http HTTP theme={null}
GET  https://api.criteo.com/{version}/marketing-solutions/marketplace-performance-outcomes/seller-campaigns?sellerId=123&campaignId=456
Authorization: Bearer <ACCESS_TOKEN>
Accept: application/json
```

**Sample response (fragment):**

```json JSON theme={null}
[
{
"id": "SELLER_123.TEMPLATE_CAMPAIGN_456",
"sellerId": "123",
"campaignId": "456",
"productSet": null
}
]
```

* `id` is the **seller-campaign identifier** you’ll use when updating `productSet`.

### Attach a `productSet`

**Endpoint**

```http HTTP theme={null}
PATCH  https://api.criteo.com/{version}/marketing-solutions/marketplace-performance-outcomes/seller-campaigns
Authorization: Bearer <ACCESS_TOKEN>
Content-Type: application/json
Accept: application/json
```

**Example request body**

```json JSON theme={null}
[
{
"id": "SELLER_123.TEMPLATE_CAMPAIGN_456",
"productSet": {
"value": [
{
"operator": "IsIn",
"field": "ExternalItemId",
"values": [
"SKU_001",
"SKU_002",
"SKU_003",
"SKU_004"
]
}
]
}
}
]
```

**Behavior:**

* Creates a `productSet` if none exists.
* Replaces the existing rule if one exists.
* Only products with `ExternalItemId` in `values` are eligible.

**Constraints:**

* `operator`: `IsIn` or `IsNotIn`.
* `field`: `ExternalItemId`.
* Advertiser-specific **minimum number of product IDs** may apply.

### Remove the filter later

**Request body**

```json JSON theme={null}
{
"productSet": {
"value": null
}
}
```

## Step 4 – Verify budgets and monitor performance

### List budgets for this seller/template

**Endpoint**

```http HTTP theme={null}
GET  https://api.criteo.com/{version}/marketing-solutions/marketplace-performance-outcomes/budgets?sellerId=123&campaignId=456
Authorization: Bearer <ACCESS_TOKEN>
Accept: application/json
```

### Get a specific budget

**Endpoint**

```http HTTP theme={null}
GET  https://api.criteo.com/{version}/marketing-solutions/marketplace-performance-outcomes/budgets/{budgetId}
Authorization: Bearer <ACCESS_TOKEN>
Accept: application/json
```

**Check:**

* Dates and `amount` match expectations.
* `isSuspended` is `false` for active budgets.
* No overlapping periods for the same (`sellerId`, `templateCampaignId`).

### Monitor performance

Use stats endpoints such as:

```http HTTP theme={null}
GET /marketplace-performance-outcomes/stats/campaigns
GET /marketplace-performance-outcomes/stats/sellers
GET /marketplace-performance-outcomes/stats/seller-campaigns
```

Combine:

* `sellerId`
* `templateCampaignId`
* `sellerCampaignId`

to build dashboards and automated checks.

## Step 5 – Common next actions

**Scale to more sellers:**

* Repeat Steps 1–2 for each new seller.
* Optionally configure `productSet` per seller.

**Adjust spend mid-flight:**

* `PATCH` budgets to change `amount` or `endDate`.
* Always avoid **overlapping periods**.

**Pause or resume a seller:**

* **Pause**: set `isSuspended = true` on the active budget.
* **Resume**: set `isSuspended = false` on a valid active/future budget.

For more details, refer to:

* [Single-Seller Campaigns – Concept Guide](https://criteo.atlassian.net/wiki/display/~g.handley/Single-Seller+Campaigns+%E2%80%93+Concept+Guide)
* [Single-Seller API Reference](/marketing-solutions/docs/single-seller-campaigns#/versions)
