[{"data":1,"prerenderedAt":7},["ShallowReactive",2],{"docs-entities\u002Fstatuses\u002Fsearch":3,"docs-tabs-entities\u002Fstatuses\u002Fsearch":6},{"content":4,"lastmod":5},"## Search dictionary records\n\n`POST \u002Fv1\u002Fstatuses\u002Fsearch`\n\nSearch CRM dictionary records with filtering. Similar to [`GET \u002Fv1\u002Fstatuses`](.\u002Flist.md), but conditions are passed in the request body — this lets you set several conditions at once. The filter works by exact match only.\n\n## Request fields (body)\n\n| Parameter | Type | Default | Description |\n|----------|-----|-----------|---------|\n| `filter` | object | — | Filter by the fields from `GET \u002Fv1\u002Fstatuses\u002Ffields`. Exact match only. Fields: `id`, `entityId`, `statusId`, `name`, `sort`, `semantics`, `categoryId`.\u003Cbr>[Filtering syntax](\u002Fdocs\u002Ffiltering). Example: `{ \"entityId\": \"DEAL_STAGE\" }` |\n| `limit` | number | `50` | Number of records, up to 5000 |\n| `select` | string[] | — | Field selection: `[\"id\", \"statusId\", \"name\", \"sort\"]` |\n| `order` | object | — | Sorting: `{ \"sort\": \"asc\" }` |\n\n## Examples\n\n### curl — personal key\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fstatuses\u002Fsearch\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"filter\": { \"entityId\": \"DEAL_STAGE\" },\n    \"select\": [\"id\", \"statusId\", \"name\", \"sort\", \"semantics\"],\n    \"order\": { \"sort\": \"asc\" }\n  }'\n```\n\n### curl — OAuth application\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fstatuses\u002Fsearch\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"filter\": { \"entityId\": \"DEAL_STAGE\" },\n    \"select\": [\"id\", \"statusId\", \"name\", \"sort\", \"semantics\"],\n    \"order\": { \"sort\": \"asc\" }\n  }'\n```\n\n### JavaScript — personal key\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fstatuses\u002Fsearch', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    filter: { entityId: 'DEAL_STAGE' },\n    select: ['id', 'statusId', 'name', 'sort', 'semantics'],\n    order: { sort: 'asc' },\n  }),\n})\n\nconst { success, data, meta } = await res.json()\nconsole.log('Stages in pipeline:', meta.total)\n```\n\n### JavaScript — OAuth application\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fstatuses\u002Fsearch', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    filter: { entityId: 'DEAL_STAGE' },\n    select: ['id', 'statusId', 'name', 'sort', 'semantics'],\n    order: { sort: 'asc' },\n  }),\n})\n\nconst { success, data, meta } = await res.json()\n```\n\n## Response fields\n\n| Field | Type | Description |\n|------|-----|---------|\n| `success` | boolean | Always `true` on success |\n| `data` | array | Array of dictionary records. Without `select`, each element contains all fields — see [Dictionary fields](.\u002Ffields.md) |\n| `meta.total` | number | Total number of records matching the filter |\n| `meta.hasMore` | boolean | Whether there are more records beyond `limit` |\n| `meta.durationMs` | number | Request duration in milliseconds |\n\nThe `meta` fields sit next to `data`, not inside it. Page through the results using `meta.hasMore`: a `data` length equal to `limit` can still be the last page.\n\n## Response example\n\n```json\n{\n  \"success\": true,\n  \"data\": [\n    { \"id\": 101, \"statusId\": \"NEW\", \"name\": \"New\", \"sort\": 10, \"semantics\": null },\n    { \"id\": 111, \"statusId\": \"WON\", \"name\": \"Deal won\", \"sort\": 60, \"semantics\": \"S\" },\n    { \"id\": 113, \"statusId\": \"LOSE\", \"name\": \"Deal lost\", \"sort\": 70, \"semantics\": \"F\" }\n  ],\n  \"meta\": {\n    \"total\": 8,\n    \"hasMore\": false,\n    \"durationMs\": 2243\n  }\n}\n```\n\n## Error response example\n\n400 — filter by an unsupported field:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"UNSUPPORTED_FILTER\",\n    \"message\": \"'foo' is not filterable on 'statuses'. Filters by exact match only. Filterable: id, entityId, statusId, name, sort, semantics, categoryId.\"\n  }\n}\n```\n\n## Errors\n\n| HTTP | Code | Description |\n|------|-----|---------|\n| 400 | `UNSUPPORTED_FILTER` | Filter by a field outside the filterable list or with a non-exact condition |\n| 403 | `SCOPE_DENIED` | The API key lacks the `crm` scope |\n| 401 | `MISSING_API_KEY` | The `X-Api-Key` header is missing |\n| 429 | `RATE_LIMITED` | Rate limit exceeded: 300 requests per minute per portal. All API keys of the portal share one limit. The current limit is returned in the `x-ratelimit-limit` header. Retry after the delay in the `Retry-After` header |\n\nFor the full list of errors, see [Errors](\u002Fdocs\u002Ferrors).\n\n## Known specifics\n\n**Filter — exact match on a single value.** The filter selects records whose field is exactly equal to the given value. Comparison operators `$gte`, `$lt` and the like return `400 UNSUPPORTED_FILTER`. A value list (`$in` or an array) is not supported by the dictionary method on any field — that filter is rejected with `400 UNSUPPORTED_FILTER`. Pass a single value. To match several values, make separate calls or use `POST \u002Fv1\u002Fbatch`.\n\n**`select` limits response fields.** With `select`, each `data` element contains only the listed fields. Without `select`, all record fields are returned, including the nested `extra` object of the `STATUS`, `DEAL_STAGE`, `DEAL_STAGE_N`, `QUOTE_STATUS` dictionaries.\n\n## See also\n\n- [List of dictionaries](.\u002Flist.md)\n- [Get dictionary record](.\u002Fget.md)\n- [Dictionary fields](.\u002Ffields.md)\n- [Aggregate dictionary records](.\u002Faggregate.md)\n- [Filtering syntax](\u002Fdocs\u002Ffiltering)\n- [Batch](\u002Fdocs\u002Fbatch)\n","2026-10-23",{},1794739425776]