# Classify many products (POST /v1/catalog/classify)

> POST /v1/catalog/classify: Classify many products. border.bot API reference (Catalogue).

Source: https://border.bot/docs/api/classify-catalog

> Documentation index: https://border.bot/llms.txt. Every page is Markdown at its URL + `.md`.

`POST https://api.border.bot/v1/catalog/classify`

Requires an API key (`Authorization: Bearer bb_live_…`).

A bulk run classifying products (by id or by a filter) for markets, its answers kept as suggestions. Follow it with `GET /bulk/status`; its items are charged like `POST /classify` as they run.

API key scope: `classify`.

## Request body (JSON)

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `productIds` | string (uuid)[] | no |  |
| `filter` | object | no |  |
| `markets` | string[] | yes |  |
| `onlyMissing` | boolean | no |  |
| `mode` | string | no |  |

## Responses

- `200`: The bulk run. (`BulkRunResponse`)
- `400`: Invalid input (`invalid_input`). (`Error`)
- `401`: Missing, invalid, revoked or expired API key (`unauthorized`). (`Error`)
- `403`: The API key doesn’t have the `classify` scope (`forbidden`, `details.reason: "missing_scope"`). (`Error`)
- `429`: Three bulk runs are already going (`rate_limited`). (`Error`)
- `500`: Unexpected error (`internal`). (`Error`)

## Example

```bash
curl -X POST 'https://api.border.bot/v1/catalog/classify' \
  -H 'Authorization: Bearer bb_live_...' \
  -H 'Content-Type: application/json' \
  -d '{"filter":{"missingCodeFor":"US"},"markets":["US"]}'
```
