# CRM dictionaries

Deal stages, sources, contact types, industries and other classifiers. A reference list of values for CRM fields.

Bitrix24 API: `crm.status.*`
Scope: `crm`

To fetch a specific type, use the filter: `?filter[entityId]=DEAL_STAGE`

## Operations

- [Create record](./statuses/create.md) — `POST /v1/statuses`
- [List records](./statuses/list.md) — `GET /v1/statuses`
- [Get record](./statuses/get.md) — `GET /v1/statuses/:id`
- [Update record](./statuses/update.md) — `PATCH /v1/statuses/:id`
- [Delete record](./statuses/delete.md) — `DELETE /v1/statuses/:id`
- [Search dictionary records](./statuses/search.md) — `POST /v1/statuses/search`
- [Dictionary fields](./statuses/fields.md) — `GET /v1/statuses/fields`
- [Aggregate dictionary records](./statuses/aggregate.md) — `POST /v1/statuses/aggregate`

## Key fields

| Field | Description |
|------|----------|
| `id` | Numeric record identifier for the get, update and delete methods. Source: [List of dictionaries](./statuses/list.md) |
| `entityId` | Dictionary type. Source: the `id` field from [Status dictionary types](./statuses/entity-types.md) |
| `statusId` | String code of a value inside the dictionary. Source: [List of dictionaries](./statuses/list.md) |
| `name` | Value name |
| `sort` | Sort order inside the dictionary |
| `semantics` | Stage semantics: `S` — success, `F` — failure, `null` — in progress or no semantics |
| `system` | System value flag, read-only |
| `categoryId` | Funnel identifier for the `DEAL_STAGE_{N}` dictionaries. Source: [List pipelines](./deal-categories/list.md) |

Full list of fields — [Dictionary fields](./statuses/fields.md).

## What to know before you start

1. `entityId` defines the dictionary. To select its records, pass `filter[entityId]` to [List of dictionaries](./statuses/list.md).
2. The numeric `id` addresses a record in the get, update and delete methods. The string `statusId` is passed to fields of other entities, for example to `stageId` of a deal or a lead.
3. On create and update, pass the fields at the JSON root, without a `fields` wrapper. The format is described on the [Create dictionary record](./statuses/create.md) and [Update dictionary record](./statuses/update.md) pages.

### Dictionary types (entityId)

| `entityId` | Description |
|----------|----------|
| `STATUS` | Lead statuses |
| `SOURCE` | Sources |
| `CONTACT_TYPE` | Contact types |
| `COMPANY_TYPE` | Company types |
| `INDUSTRY` | Industries |
| `DEAL_STAGE` | Stages of the main funnel, `categoryId=0` |
| `DEAL_STAGE_{N}` | Stages of funnel `N`, for example `DEAL_STAGE_3` |
| `QUOTE_STATUS` | Quote statuses |
| `HONORIFIC` | Honorifics for contacts |
| `EMPLOYEES` | Number of employees at a company |
| `DEAL_TYPE` | Deal types |

### Dictionary types

Valid `entityId` values are listed in [Status dictionary types](./statuses/entity-types.md): `GET /v1/statuses/entity-types`.

## Typical scenario

1. Pick an `entityId` via [Status dictionary types](./statuses/entity-types.md).
2. Get the records via [List of dictionaries](./statuses/list.md) with `filter[entityId]`.
3. To fill a field of another entity, take the `statusId` of the record you need. To get the record itself, use its numeric `id` in [Get dictionary record](./statuses/get.md).
4. To add a value, [create a dictionary record](./statuses/create.md) with `entityId`, `statusId` and `name`.

## Limits

| Limit | Value |
|-------|----------|
| Maximum records per request | 5000 (`limit ≤ 5000`) |
| Automatic pagination | enabled when `limit > 50` |
| `offset` on large result sets | `limit ≤ 500` is recommended when `offset ≥ 2500` |
| Batch requests | up to 50 operations in [Batch calls](/docs/batch) |
| Request rate | shared across the Vibecode API — see [Limits and optimization](/docs/optimization) |

## See also

- [Status dictionary types](./statuses/entity-types.md)
- [Sales pipelines](./deal-categories.md)
- [Deals](./deals.md)
- [Leads](./leads.md)
- [Quotes](./quotes.md)
