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

# Auto-select products

> Let Scope3 pick a balanced product set for a DRAFT campaign

`POST /api/v2/buyer/campaigns/:id/auto-select-products`

For `DRAFT` campaigns with an attached discovery session, this lets Scope3 pick a balanced product set. Iterate with ADCP-style refinement to nudge the selection toward your plan.

## Request

<CodeGroup>
  ```bash curl theme={null}
  curl -X POST https://api.interchange.io/api/v2/buyer/campaigns/cmp_987654321/auto-select-products \
    -H "Authorization: Bearer $SCOPE3_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{ "maxProducts": 8, "minBudgetPerProduct": 2500 }'
  ```

  ```json With refinement theme={null}
  {
    "maxProducts": 8,
    "minBudgetPerProduct": 2500,
    "refine": [
      { "scope": "request", "ask": "more video, less display" },
      { "scope": "product", "id": "prod_xyz789", "action": "moreLikeThis" },
      { "scope": "product", "id": "prod_xyz790", "action": "omit" }
    ]
  }
  ```
</CodeGroup>

## Parameters

| Field                 | Type                                  | Required            | Notes                                                                             |
| --------------------- | ------------------------------------- | ------------------- | --------------------------------------------------------------------------------- |
| `id`                  | string                                | Yes                 | Campaign ID (path parameter). Must be `DRAFT` with a discovery session.           |
| `maxProducts`         | number                                | No                  | Upper bound on how many products to select.                                       |
| `minBudgetPerProduct` | number                                | No                  | Minimum budget each selected product must support.                                |
| `refine`              | array                                 | No                  | ADCP-style refinement instructions applied to the next selection pass.            |
| `refine[].scope`      | `request` \| `product`                | Yes (per entry)     | `request` refines the whole selection; `product` targets a single product.        |
| `refine[].ask`        | string                                | For `request` scope | Free-text instruction, e.g. `"more video, less display"`.                         |
| `refine[].id`         | string                                | For `product` scope | Product ID to act on.                                                             |
| `refine[].action`     | `include` \| `omit` \| `moreLikeThis` | For `product` scope | `include` keeps this product; `omit` drops it; `moreLikeThis` finds similar ones. |

## Response

```json theme={null}
{
  "campaignId": "cmp_987654321",
  "discoveryId": "disc_abc123",
  "selectedProducts": [
    {
      "productId": "prod_xyz789",
      "name": "Example Media - CTV Premium",
      "salesAgentId": "agent_example",
      "groupId": "grp_1",
      "groupName": "CTV",
      "cpm": 18.5,
      "budget": 25000
    }
  ],
  "budgetContext": {
    "campaignBudget": 100000,
    "totalAllocated": 25000,
    "remainingBudget": 75000,
    "currency": "USD"
  },
  "productCount": 1
}
```

Read the confirmed selection with [Get campaign products](/v2/buyer/campaigns/tasks/get-campaign-products).

## Errors

| Code               | When                                                                                  |
| ------------------ | ------------------------------------------------------------------------------------- |
| `VALIDATION_ERROR` | Campaign is not `DRAFT`, has no discovery session, or `refine` entries are malformed. |
| `NOT_FOUND`        | Campaign ID does not exist for the authenticated account.                             |

See [Errors](/v2/reference/errors) for the full error shape and recovery semantics.

## Related

<CardGroup cols={2}>
  <Card title="Discovery" href="/v2/guides/discovery" icon="magnifying-glass">
    Build the discovery session that feeds selection
  </Card>

  <Card title="Get campaign products" href="/v2/buyer/campaigns/tasks/get-campaign-products" icon="boxes-stacked">
    Read the selected products
  </Card>

  <Card title="Execute campaign" href="/v2/buyer/campaigns/tasks/execute-campaign" icon="rocket">
    Launch the campaign into media buys
  </Card>

  <Card title="Campaign overview" href="/v2/object-guides/campaign" icon="rocket">
    The campaign object and lifecycle
  </Card>
</CardGroup>
