[{"data":1,"prerenderedAt":13},["ShallowReactive",2],{"docs-entities\u002Fcrm-forms\u002Fbuilder":3,"docs-tabs-entities\u002Fcrm-forms\u002Fbuilder":6},{"content":4,"lastmod":5},"# Builder dictionaries\n\nFind out which form properties the API exposes, which CRM entity fields you can add to a form, and which settings and scenarios are available in the Bitrix24 account. The methods in this group only read data.\n\nBitrix24 API: `crm.form.field.*`, `crm.form.configuration.get`, `crm.form.entityfield.list`, `crm.form.scenario.list`, `crm.form.scenariocategory.list`\nScope: `crm`\n\n## Operations\n\n- [Form contract fields](.\u002Ffields.md) — `GET \u002Fv1\u002Fcrm-forms\u002Ffields`\n- [Get a form contract field](.\u002Ffield.md) — `GET \u002Fv1\u002Fcrm-forms\u002Ffields\u002F:name`\n- [Get the builder configuration](.\u002Fconfiguration.md) — `GET \u002Fv1\u002Fcrm-forms\u002Fconfiguration`\n- [List entity fields](.\u002Fentity-fields.md) — `GET \u002Fv1\u002Fcrm-forms\u002Fentity-fields`\n- [List scenarios](.\u002Fscenarios.md) — `GET \u002Fv1\u002Fcrm-forms\u002Fscenarios`\n- [List scenario categories](.\u002Fscenario-categories.md) — `GET \u002Fv1\u002Fcrm-forms\u002Fscenario-categories`\n\n## Typical scenario\n\n1. Get the builder configuration: entity schemes, languages, field types and the active-form limit.\n2. Pick entity names from `entitySchemes[].entityNames` and get their form fields through `entity-fields`.\n3. Use `fields` to inspect form property metadata, including `analytics`, `integrations` and `spamProtection`. Use `select` to request a projection. The separate `entity-fields` dictionary describes the CRM fields you can add to a form.\n\n## See also\n\n- [Form management](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Fmanagement)\n- [Publishing and results](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Fpublishing)\n- [CRM forms](\u002Fdocs\u002Fentities\u002Fcrm-forms)\n","2026-11-06",{"fields.md":7,"field.md":8,"configuration.md":9,"entity-fields.md":10,"scenarios.md":11,"scenario-categories.md":12},"## Form contract fields\n\n`GET \u002Fv1\u002Fcrm-forms\u002Ffields`\n\nReturns the schema of top-level CRM form properties. Use it to check which configuration blocks belong to the form contract before you create or update a form.\n\n## Parameters\n\n| Parameter | Type | Description |\n|----------|-----|----------|\n| `select` (query) | string | Comma-separated metadata properties, for example `name,type,multiple`. Without it, all metadata properties are returned |\n\n## Examples\n\n### curl — personal key\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fcrm-forms\u002Ffields\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth application\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fcrm-forms\u002Ffields\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\"\n```\n\n### JavaScript — personal key\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fcrm-forms\u002Ffields', {\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n  },\n})\n\nconst { success, data } = await res.json()\nconsole.log('Form properties:', data.length)\n```\n\n### JavaScript — OAuth application\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fcrm-forms\u002Ffields', {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nconst { success, data } = await res.json()\n```\n\n## Response fields\n\n| Field | Type | Description |\n|------|-----|---------|\n| `success` | boolean | Always `true` on success |\n| `data` | array | Form property descriptions. The property set is in the table below |\n| `data[].name` | string | Form property name |\n| `data[].type` | string | Value type: `int`, `string`, `bool`, `date-time` or `object` |\n| `data[].elementType` | string \\| null | Element type of a multi-value property, for example `object`. `null` for single-value properties |\n| `data[].multiple` | boolean | `true` — the property value is an array |\n| `data[].title` | string | Property label. Matches `name` |\n| `data[].description` | string \\| null | Property description |\n| `data[].validationRules` | array | Value validation rules |\n| `data[].requiredGroups` | array \\| null | Required groups |\n| `data[].filterable` | boolean | Whether the property is marked as filterable |\n| `data[].sortable` | boolean | Whether the property is marked as sortable |\n| `data[].editable` | boolean | Editability flag from the schema. It is `false` for every property. Bitrix24 validates writable properties when a form is saved |\n\nForm properties in `data`:\n\n| Field | Type | RO | Description |\n|------|-----|:--:|---------|\n| `id` | int | yes | Form ID. List: [`GET \u002Fv1\u002Fcrm-forms`](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Flist) |\n| `code` | string | yes | Form symbolic code |\n| `name` | string | | Form name |\n| `active` | bool | | Whether the form is enabled. Accepted only on create. For an existing form, change it through [activation](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Factivate) and [deactivation](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Fdeactivate) |\n| `system` | bool | yes | System form |\n| `languageId` | string | | Form language. List: `data.languages[].id` in the [builder configuration](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Fconfiguration) |\n| `templateId` | string | | Form template |\n| `createdTime` | date-time | yes | Creation time |\n| `updatedTime` | date-time | yes | Last modification time. Pass it to [form update](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Fupdate) as a version that protects against overwriting other users' changes |\n| `activeChangedById` | int | yes | ID of the user who last changed the active state. List: [`GET \u002Fv1\u002Fusers`](\u002Fdocs\u002Fentities\u002Fusers) |\n| `activeChangedTime` | date-time | yes | When the active state last changed |\n| `appearance` | object | | Appearance: title, description, button caption and colors |\n| `crm` | object | | CRM binding: entity scheme, duplicate mode, funnel. Values are in the [builder configuration](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Fconfiguration) |\n| `dependencies` | object | | Array of field dependency rules, `multiple: true` |\n| `presetFields` | object | | Array of preset field values, `multiple: true` |\n| `responsible` | object | | Users responsible for form results and work time tracking. Responsible user IDs come from [`GET \u002Fv1\u002Fusers`](\u002Fdocs\u002Fentities\u002Fusers) |\n| `agreements` | object | | Agreements the visitor accepts on submission |\n| `submission` | object | | Actions after submission: texts and redirect URLs on success and on error |\n| `payment` | object | | Payment settings |\n| `callback` | object | | Callback settings |\n| `booking` | object | | Booking settings |\n| `analytics` | object | | Analytics settings |\n| `spamProtection` | object | | Spam protection settings |\n| `integrations` | object | | Integration settings |\n| `fields` | object | | Array of form fields, `multiple: true`. Field names come from [`GET \u002Fv1\u002Fcrm-forms\u002Fentity-fields`](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Fentity-fields) |\n\n## Response example\n\n```json\n{\n  \"success\": true,\n  \"data\": [\n    {\"name\": \"id\", \"type\": \"int\", \"elementType\": null, \"multiple\": false, \"title\": \"id\", \"description\": null, \"validationRules\": [], \"requiredGroups\": null, \"filterable\": true, \"sortable\": true, \"editable\": false},\n    {\"name\": \"code\", \"type\": \"string\", \"elementType\": null, \"multiple\": false, \"title\": \"code\", \"description\": null, \"validationRules\": [], \"requiredGroups\": null, \"filterable\": true, \"sortable\": false, \"editable\": false},\n    {\"name\": \"name\", \"type\": \"string\", \"elementType\": null, \"multiple\": false, \"title\": \"name\", \"description\": null, \"validationRules\": [], \"requiredGroups\": null, \"filterable\": true, \"sortable\": true, \"editable\": false},\n    {\"name\": \"active\", \"type\": \"bool\", \"elementType\": null, \"multiple\": false, \"title\": \"active\", \"description\": null, \"validationRules\": [], \"requiredGroups\": null, \"filterable\": true, \"sortable\": true, \"editable\": false},\n    {\"name\": \"system\", \"type\": \"bool\", \"elementType\": null, \"multiple\": false, \"title\": \"system\", \"description\": null, \"validationRules\": [], \"requiredGroups\": null, \"filterable\": false, \"sortable\": false, \"editable\": false},\n    {\"name\": \"languageId\", \"type\": \"string\", \"elementType\": null, \"multiple\": false, \"title\": \"languageId\", \"description\": null, \"validationRules\": [], \"requiredGroups\": null, \"filterable\": false, \"sortable\": false, \"editable\": false},\n    {\"name\": \"templateId\", \"type\": \"string\", \"elementType\": null, \"multiple\": false, \"title\": \"templateId\", \"description\": null, \"validationRules\": [], \"requiredGroups\": null, \"filterable\": false, \"sortable\": false, \"editable\": false},\n    {\"name\": \"createdTime\", \"type\": \"date-time\", \"elementType\": null, \"multiple\": false, \"title\": \"createdTime\", \"description\": null, \"validationRules\": [], \"requiredGroups\": null, \"filterable\": true, \"sortable\": true, \"editable\": false},\n    {\"name\": \"updatedTime\", \"type\": \"date-time\", \"elementType\": null, \"multiple\": false, \"title\": \"updatedTime\", \"description\": null, \"validationRules\": [], \"requiredGroups\": null, \"filterable\": true, \"sortable\": true, \"editable\": false},\n    {\"name\": \"activeChangedById\", \"type\": \"int\", \"elementType\": null, \"multiple\": false, \"title\": \"activeChangedById\", \"description\": null, \"validationRules\": [], \"requiredGroups\": null, \"filterable\": false, \"sortable\": false, \"editable\": false},\n    {\"name\": \"activeChangedTime\", \"type\": \"date-time\", \"elementType\": null, \"multiple\": false, \"title\": \"activeChangedTime\", \"description\": null, \"validationRules\": [], \"requiredGroups\": null, \"filterable\": false, \"sortable\": false, \"editable\": false},\n    {\"name\": \"appearance\", \"type\": \"object\", \"elementType\": null, \"multiple\": false, \"title\": \"appearance\", \"description\": null, \"validationRules\": [], \"requiredGroups\": null, \"filterable\": false, \"sortable\": false, \"editable\": false},\n    {\"name\": \"crm\", \"type\": \"object\", \"elementType\": null, \"multiple\": false, \"title\": \"crm\", \"description\": null, \"validationRules\": [], \"requiredGroups\": null, \"filterable\": false, \"sortable\": false, \"editable\": false},\n    {\"name\": \"dependencies\", \"type\": \"object\", \"elementType\": \"object\", \"multiple\": true, \"title\": \"dependencies\", \"description\": null, \"validationRules\": [], \"requiredGroups\": null, \"filterable\": false, \"sortable\": false, \"editable\": false},\n    {\"name\": \"presetFields\", \"type\": \"object\", \"elementType\": \"object\", \"multiple\": true, \"title\": \"presetFields\", \"description\": null, \"validationRules\": [], \"requiredGroups\": null, \"filterable\": false, \"sortable\": false, \"editable\": false},\n    {\"name\": \"responsible\", \"type\": \"object\", \"elementType\": null, \"multiple\": false, \"title\": \"responsible\", \"description\": null, \"validationRules\": [], \"requiredGroups\": null, \"filterable\": false, \"sortable\": false, \"editable\": false},\n    {\"name\": \"agreements\", \"type\": \"object\", \"elementType\": null, \"multiple\": false, \"title\": \"agreements\", \"description\": null, \"validationRules\": [], \"requiredGroups\": null, \"filterable\": false, \"sortable\": false, \"editable\": false},\n    {\"name\": \"submission\", \"type\": \"object\", \"elementType\": null, \"multiple\": false, \"title\": \"submission\", \"description\": null, \"validationRules\": [], \"requiredGroups\": null, \"filterable\": false, \"sortable\": false, \"editable\": false},\n    {\"name\": \"payment\", \"type\": \"object\", \"elementType\": null, \"multiple\": false, \"title\": \"payment\", \"description\": null, \"validationRules\": [], \"requiredGroups\": null, \"filterable\": false, \"sortable\": false, \"editable\": false},\n    {\"name\": \"callback\", \"type\": \"object\", \"elementType\": null, \"multiple\": false, \"title\": \"callback\", \"description\": null, \"validationRules\": [], \"requiredGroups\": null, \"filterable\": false, \"sortable\": false, \"editable\": false},\n    {\"name\": \"booking\", \"type\": \"object\", \"elementType\": null, \"multiple\": false, \"title\": \"booking\", \"description\": null, \"validationRules\": [], \"requiredGroups\": null, \"filterable\": false, \"sortable\": false, \"editable\": false},\n    {\"name\": \"analytics\", \"type\": \"object\", \"elementType\": null, \"multiple\": false, \"title\": \"analytics\", \"description\": null, \"validationRules\": [], \"requiredGroups\": null, \"filterable\": false, \"sortable\": false, \"editable\": false},\n    {\"name\": \"spamProtection\", \"type\": \"object\", \"elementType\": null, \"multiple\": false, \"title\": \"spamProtection\", \"description\": null, \"validationRules\": [], \"requiredGroups\": null, \"filterable\": false, \"sortable\": false, \"editable\": false},\n    {\"name\": \"integrations\", \"type\": \"object\", \"elementType\": null, \"multiple\": false, \"title\": \"integrations\", \"description\": null, \"validationRules\": [], \"requiredGroups\": null, \"filterable\": false, \"sortable\": false, \"editable\": false},\n    {\"name\": \"fields\", \"type\": \"object\", \"elementType\": \"object\", \"multiple\": true, \"title\": \"fields\", \"description\": null, \"validationRules\": [], \"requiredGroups\": null, \"filterable\": false, \"sortable\": false, \"editable\": false}\n  ]\n}\n```\n\n## Error response example\n\n400 — an unknown query parameter was passed:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"INVALID_PARAMS\",\n    \"message\": \"Unknown query parameter\"\n  }\n}\n```\n\n## Errors\n\n| HTTP | Code | Description |\n|------|-----|----------|\n| 400 | `INVALID_PARAMS` | An unknown query parameter was passed |\n| 400 | `INVALID_PARAMS` | `select` is not a string or an array of strings |\n| 400 | `INVALID_PARAMS` | Bitrix24 rejected the projection. The original code is in `error.b24Code` |\n| 403 | `BITRIX_ACCESS_DENIED` | The Bitrix24 user lacks permission to access forms |\n| 403 | `BITRIX_INSUFFICIENT_SCOPE` | The Bitrix24 token lacks the required scope |\n| 404 | `ENTITY_NOT_FOUND` | Bitrix24 did not find a requested entity or field descriptor. The original code is in `error.b24Code` |\n| 409 | `CRM_FORM_REST_NOT_ENABLED` | The CRM form REST methods are unavailable on this Bitrix24 account. This does not mean that an individual form is missing |\n| 400–599 | `CRM_FORM_*` | Rejection under form rules. The code and HTTP status are preserved. The original code is in `error.b24Code` |\n| 422 | `BITRIX_ERROR` | Another Bitrix24 rejection. The reason is in `error.message`. The original code is in `error.b24Code` |\n| 429 | `RATE_LIMITED` | Request rate exceeded. Follow the `Retry-After` header |\n| 502 | `BITRIX_UNAVAILABLE` | Bitrix24 returned an unexpected response shape |\n| 502 | `BITRIX_UNAVAILABLE` | Bitrix24 is unavailable: a server error or a dropped connection |\n| 503 | `BITRIX_TIMEOUT` | Bitrix24 did not respond in time. The read can be retried |\n| 401 | `MISSING_API_KEY` | The `X-Api-Key` header is missing |\n| 401 | `TOKEN_MISSING` | The key has no configured Bitrix24 credentials |\n| 403 | `SCOPE_DENIED` | The Vibecode API key lacks the `crm` scope |\n\nFull list of common API errors — [Errors](\u002Fdocs\u002Ferrors).\n\n## Known specifics\n\nThis endpoint describes properties of the form itself. CRM fields and their value options are listed separately by [List entity fields](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Fentity-fields). The two catalogs serve different purposes.\n\n## See also\n\n- [Get a form contract field](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Ffield)\n- [Create a form](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Fcreate)\n- [Update a form](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Fupdate)\n- [Get a form](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Fget)\n- [Get the builder configuration](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Fconfiguration)\n- [CRM forms](\u002Fdocs\u002Fentities\u002Fcrm-forms)\n","## Get a form contract field\n\n`GET \u002Fv1\u002Fcrm-forms\u002Ffields\u002F:name`\n\nReturns the description of a single top-level CRM form property by name. Call it to check the type and multiplicity of a specific property without loading the whole list.\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|----------|-----|:-----:|---------|\n| `name` (path) | string | yes | Form property name, for example `name`, `fields`, `appearance`, `analytics`, `integrations` or `spamProtection`. List: `data[].name` in [Form contract fields](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Ffields) |\n| `select` (query) | string | no | Comma-separated metadata properties, for example `name,type,multiple` |\n\n## Examples\n\n### curl — personal key\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fcrm-forms\u002Ffields\u002Fanalytics\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth application\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fcrm-forms\u002Ffields\u002Fanalytics\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\"\n```\n\n### JavaScript — personal key\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fcrm-forms\u002Ffields\u002Fanalytics', {\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n  },\n})\n\nconst { success, data } = await res.json()\nconsole.log('Property type:', data.type)\n```\n\n### JavaScript — OAuth application\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fcrm-forms\u002Ffields\u002Fanalytics', {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nconst { success, data } = await res.json()\n```\n\n## Response fields\n\n| Field | Type | Description |\n|------|-----|---------|\n| `success` | boolean | Always `true` on success |\n| `data` | object | Form property description. The object has the same fields as a `data[]` element in [Form contract fields](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Ffields) |\n\n## Response example\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"name\": \"analytics\",\n    \"type\": \"object\",\n    \"elementType\": null,\n    \"multiple\": false,\n    \"title\": \"analytics\",\n    \"description\": null,\n    \"validationRules\": [],\n    \"requiredGroups\": null,\n    \"filterable\": false,\n    \"sortable\": false,\n    \"editable\": false\n  }\n}\n```\n\n## Error response example\n\n404 — no property with this name:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"ENTITY_NOT_FOUND\",\n    \"message\": \"Field `unknownProperty` not found\",\n    \"b24Code\": \"BITRIX_REST_V3_REALISATION_EXCEPTION_FIELDNOTFOUNDEXCEPTION\"\n  }\n}\n```\n\n## Errors\n\n| HTTP | Code | Description |\n|------|-----|----------|\n| 404 | `ENTITY_NOT_FOUND` | No property with this `name`. The original code is in `error.b24Code` |\n| 400 | `INVALID_PARAMS` | An unknown query parameter was passed |\n| 400 | `INVALID_PARAMS` | `select` is not a string or an array of strings |\n| 400 | `INVALID_PARAMS` | Bitrix24 rejected the projection. The original code is in `error.b24Code` |\n| 403 | `BITRIX_ACCESS_DENIED` | The Bitrix24 user lacks permission to access forms |\n| 403 | `BITRIX_INSUFFICIENT_SCOPE` | The Bitrix24 token lacks the required scope |\n| 409 | `CRM_FORM_REST_NOT_ENABLED` | The CRM form REST methods are unavailable on this Bitrix24 account. This does not mean that an individual form is missing |\n| 400–599 | `CRM_FORM_*` | Rejection under form rules. The code and HTTP status are preserved. The original code is in `error.b24Code` |\n| 422 | `BITRIX_ERROR` | Another Bitrix24 rejection. The reason is in `error.message`. The original code is in `error.b24Code` |\n| 429 | `RATE_LIMITED` | Request rate exceeded. Follow the `Retry-After` header |\n| 502 | `BITRIX_UNAVAILABLE` | Bitrix24 returned an unexpected response shape |\n| 502 | `BITRIX_UNAVAILABLE` | Bitrix24 is unavailable: a server error or a dropped connection |\n| 503 | `BITRIX_TIMEOUT` | Bitrix24 did not respond in time. The read can be retried |\n| 401 | `MISSING_API_KEY` | The `X-Api-Key` header is missing |\n| 401 | `TOKEN_MISSING` | The key has no configured Bitrix24 credentials |\n| 403 | `SCOPE_DENIED` | The Vibecode API key lacks the `crm` scope |\n\nFull list of common API errors — [Errors](\u002Fdocs\u002Ferrors).\n\n## See also\n\n- [Form contract fields](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Ffields)\n- [Get a form](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Fget)\n- [Create a form](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Fcreate)\n- [CRM forms](\u002Fdocs\u002Fentities\u002Fcrm-forms)\n","## Get builder configuration\n\n`GET \u002Fv1\u002Fcrm-forms\u002Fconfiguration`\n\nReturns the CRM form builder reference data for the Bitrix24 account. Call it before creating or updating a form to choose the entity scheme, language and funnel, and to check the active form limit.\n\n## Examples\n\n### curl — personal key\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fcrm-forms\u002Fconfiguration\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth application\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fcrm-forms\u002Fconfiguration\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\"\n```\n\n### JavaScript — personal key\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fcrm-forms\u002Fconfiguration', {\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n  },\n})\n\nconst { success, data } = await res.json()\nconsole.log('Active forms:', data.limits.activeForms.current, 'of', data.limits.activeForms.maximum)\n```\n\n### JavaScript — OAuth application\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fcrm-forms\u002Fconfiguration', {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nconst { success, data } = await res.json()\n```\n\n## Response fields\n\n| Field | Type | Description |\n|------|-----|---------|\n| `success` | boolean | Always `true` on success |\n| `data` | object | Builder configuration, preserving the returned properties |\n| `data.entitySchemes` | array | CRM entity schemes the form creates |\n| `data.entitySchemes[].id` | number | Scheme ID. The value for `crm.entityScheme` when [creating a form](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Fcreate) |\n| `data.entitySchemes[].name` | string | Scheme name |\n| `data.entitySchemes[].description` | string | Which entities the scheme creates |\n| `data.entitySchemes[].entityNames` | array | Entity names of the scheme, for example `LEAD`, `COMPANY`, `CONTACT` |\n| `data.entitySchemes[].mainEntityName` | string \\| null | Main entity of the scheme. `null` for a scheme without a main entity, for example \"Client\" |\n| `data.entitySchemes[].hasInvoice` | boolean | Whether the scheme creates an invoice |\n| `data.entitySchemes[].dynamic` | boolean | `true` for smart process schemes |\n| `data.duplicateModes` | array | Duplicate handling modes |\n| `data.duplicateModes[].id` | string | Mode code: `MERGE` or `REPLACE`. The value for `crm.duplicateMode` |\n| `data.duplicateModes[].name` | string | Mode name |\n| `data.lead.enabled` | boolean | Whether leads are enabled on the Bitrix24 account |\n| `data.dealCategories` | array | Deal funnels |\n| `data.dealCategories[].id` | number | Funnel ID. The value for `crm.dealCategoryId` |\n| `data.dealCategories[].name` | string | Funnel name |\n| `data.smartProcesses` | array | Smart processes of the Bitrix24 account |\n| `data.smartProcesses[].entityTypeId` | number | Smart process type ID |\n| `data.smartProcesses[].entityName` | string | Smart process entity name in the format `DYNAMIC_\u003CentityTypeId>` |\n| `data.smartProcesses[].name` | string | Smart process name |\n| `data.smartProcesses[].categories` | array | Smart process funnels |\n| `data.smartProcesses[].categories[].id` | number | Funnel ID. The value for `crm.smartProcessCategoryId` |\n| `data.smartProcesses[].categories[].name` | string | Funnel name |\n| `data.languages` | array | Form languages |\n| `data.languages[].id` | string | Language code. The value for the form's `languageId` |\n| `data.languages[].name` | string | Language name |\n| `data.currencies` | array | Currencies of the Bitrix24 account |\n| `data.currencies[].id` | string | Currency code, for example `USD` |\n| `data.currencies[].fullName` | string | Short currency name |\n| `data.currencies[].formatString` | string | Amount display template. `#` is replaced with the amount |\n| `data.fieldTypes` | array | Form field types |\n| `data.fieldTypes[].id` | string | Type code. The value for the form's `fields[].type` |\n| `data.fieldTypes[].name` | string | Type name |\n| `data.fieldTypes[].parameters` | array | Settings a field of this type accepts: `label`, `required`, `multiple`, `placeholder`, `valueType`, `value` |\n| `data.paySystems` | array | Payment systems of the Bitrix24 account |\n| `data.paySystems[].id` | number | Payment system ID |\n| `data.paySystems[].name` | string | Payment system name |\n| `data.permissions.canRead` | boolean | Whether the key's user can read forms |\n| `data.permissions.canEdit` | boolean | Whether the key's user can edit forms |\n| `data.limits.activeForms.current` | number | How many forms are active now |\n| `data.limits.activeForms.maximum` | number | How many forms can be active on the Bitrix24 account |\n| `data.product.isCloud` | boolean | `true` for a cloud Bitrix24 account |\n| `data.product.isRegionRussian` | boolean | `true` for a Bitrix24 account in the Russian region |\n| `data.region` | string | Region code of the Bitrix24 account, for example `en` |\n\n## Response example\n\nOnly the first elements of each array are shown. The array contents depend on the Bitrix24 account.\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"entitySchemes\": [\n      {\n        \"id\": 1,\n        \"name\": \"Lead\",\n        \"description\": \"lead\",\n        \"entityNames\": [\"LEAD\", \"COMPANY\", \"CONTACT\"],\n        \"mainEntityName\": \"LEAD\",\n        \"hasInvoice\": false,\n        \"dynamic\": false\n      },\n      {\n        \"id\": 1770,\n        \"name\": \"Equipment purchase\",\n        \"description\": \"Smart Process Automation, contact or company\",\n        \"entityNames\": [\"DYNAMIC_177\", \"COMPANY\", \"CONTACT\"],\n        \"mainEntityName\": \"DYNAMIC_177\",\n        \"hasInvoice\": false,\n        \"dynamic\": true\n      }\n    ],\n    \"duplicateModes\": [\n      { \"id\": \"MERGE\", \"name\": \"Merge\" },\n      { \"id\": \"REPLACE\", \"name\": \"Replace\" }\n    ],\n    \"lead\": { \"enabled\": true },\n    \"dealCategories\": [\n      { \"id\": 0, \"name\": \"General\" },\n      { \"id\": 1, \"name\": \"Newest\" }\n    ],\n    \"smartProcesses\": [\n      {\n        \"entityTypeId\": 177,\n        \"entityName\": \"DYNAMIC_177\",\n        \"name\": \"Equipment purchase\",\n        \"categories\": [\n          { \"id\": 7, \"name\": \"General\" },\n          { \"id\": 9, \"name\": \"Second funnel\" }\n        ]\n      }\n    ],\n    \"languages\": [\n      { \"id\": \"en\", \"name\": \"English\" },\n      { \"id\": \"de\", \"name\": \"Deutsch\" }\n    ],\n    \"currencies\": [\n      { \"id\": \"USD\", \"fullName\": \"$\", \"formatString\": \"$#\" }\n    ],\n    \"fieldTypes\": [\n      { \"id\": \"section\", \"name\": \"Section\", \"parameters\": [\"label\"] },\n      { \"id\": \"string\", \"name\": \"String\", \"parameters\": [\"label\", \"required\", \"multiple\", \"placeholder\", \"valueType\", \"value\"] }\n    ],\n    \"paySystems\": [\n      { \"id\": 1, \"name\": \"Bank transfer (Companies)\" },\n      { \"id\": 11, \"name\": \"Cash\" }\n    ],\n    \"permissions\": { \"canRead\": true, \"canEdit\": true },\n    \"limits\": { \"activeForms\": { \"current\": 4, \"maximum\": 99999 } },\n    \"product\": { \"isCloud\": true, \"isRegionRussian\": false },\n    \"region\": \"en\"\n  }\n}\n```\n\n## Error response example\n\n400 — a query parameter was passed:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"INVALID_PARAMS\",\n    \"message\": \"Unknown query parameter\"\n  }\n}\n```\n\n## Errors\n\n| HTTP | Code | Description |\n|------|-----|----------|\n| 400 | `INVALID_PARAMS` | The endpoint accepts no query parameters |\n| 403 | `BITRIX_ACCESS_DENIED` | The Bitrix24 user lacks permission to access forms |\n| 403 | `BITRIX_INSUFFICIENT_SCOPE` | The Bitrix24 token lacks the required scope |\n| 404 | `ENTITY_NOT_FOUND` | Bitrix24 did not find a requested entity or field descriptor. The original code is in `error.b24Code` |\n| 409 | `CRM_FORM_REST_NOT_ENABLED` | The CRM form REST methods are unavailable on this Bitrix24 account. This does not mean that an individual form is missing |\n| 400–599 | `CRM_FORM_*` | Rejection under form rules. The code and HTTP status are preserved. The original code is in `error.b24Code` |\n| 422 | `BITRIX_ERROR` | Another Bitrix24 rejection. The reason is in `error.message`. The original code is in `error.b24Code` |\n| 429 | `RATE_LIMITED` | Request rate exceeded. Follow the `Retry-After` header |\n| 502 | `BITRIX_UNAVAILABLE` | Bitrix24 returned an unexpected response shape |\n| 502 | `BITRIX_UNAVAILABLE` | Bitrix24 is unavailable: a server error or a dropped connection |\n| 503 | `BITRIX_TIMEOUT` | Bitrix24 did not respond in time. The read can be retried |\n| 401 | `MISSING_API_KEY` | The `X-Api-Key` header is missing |\n| 401 | `TOKEN_MISSING` | The key has no configured Bitrix24 credentials |\n| 403 | `SCOPE_DENIED` | The Vibecode API key lacks the `crm` scope |\n\nFull list of common API errors — [Errors](\u002Fdocs\u002Ferrors).\n\n## Known specifics\n\n- **The smart process scheme ID differs from `entityTypeId`.** For smart process `177`, `entitySchemes` returns a scheme with `id: 1770`. Pass the scheme `id` in `crm.entityScheme`, not `entityTypeId`.\n\n## See also\n\n- [Create a form](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Fcreate)\n- [Activate a form](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Factivate)\n- [Form contract fields](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Ffields)\n- [List entity fields](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Fentity-fields)\n- [CRM forms](\u002Fdocs\u002Fentities\u002Fcrm-forms)\n","## List entity fields\n\n`GET \u002Fv1\u002Fcrm-forms\u002Fentity-fields`\n\nReturns the fields of leads, contacts, companies, deals and other CRM entities that can be added to a CRM form. Call it before creating or updating a form to look up field names.\n\n## Parameters\n\n| Parameter | Type | Required | Description |\n|----------|-----|:-----:|---------|\n| `entityName` (query) | string | yes | CRM entity name, for example `LEAD`, `CONTACT`, `COMPANY`, `DEAL`, `DYNAMIC_177`. For the list, see `data.entitySchemes[].entityNames` in [Builder configuration](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Fconfiguration).\u003Cbr>To request several entities, pass up to 10 names in one of these ways: comma-separated `?entityName=LEAD,CONTACT`, repeated `?entityName=LEAD&entityName=CONTACT` or `?entityName[]=LEAD&entityName[]=CONTACT` |\n\nThe endpoint accepts no other query parameters.\n\n## Examples\n\n### curl — personal key\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fcrm-forms\u002Fentity-fields?entityName=LEAD\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth application\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fcrm-forms\u002Fentity-fields?entityName=LEAD\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\"\n```\n\n### JavaScript — personal key\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fcrm-forms\u002Fentity-fields?entityName=LEAD', {\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n  },\n})\n\nconst { success, data } = await res.json()\nconsole.log(data.map(field => `${field.name} — ${field.label}`))\n```\n\n### JavaScript — OAuth application\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fcrm-forms\u002Fentity-fields?entityName=LEAD', {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nconst { success, data } = await res.json()\n```\n\n## Response fields\n\n| Field | Type | Description |\n|------|-----|---------|\n| `success` | boolean | Always `true` on success |\n| `data` | array | Fields of all requested entities in one array. No pagination |\n| `data[].name` | string | Field name in the form: the entity name plus the field code, for example `LEAD_NAME`. Pass this value in `fields[].name` when [creating a form](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Fcreate) |\n| `data[].label` | string | Field label |\n| `data[].type` | string | Field type: `string`, `text`, `list`, `date`, `datetime`, `double`, `file`, `typed_string`, `crm_entity`, `resourcebooking`. The `typed_string` type is used by communication fields: phone, email, website, messenger |\n| `data[].required` | boolean | Whether the field is required |\n| `data[].multiple` | boolean | Whether the field accepts multiple values |\n| `data[].entityName` | string | Entity the field belongs to, for example `LEAD` |\n| `data[].entityLabel` | string | Entity label |\n| `data[].items` | array | Value options of a `list` field. An empty array for fields of other types |\n| `data[].items[].id` | string | Option ID, for example `WEB` in the `LEAD_SOURCE_ID` field |\n| `data[].items[].label` | string | Option label |\n\n## Response example\n\nThe example shows four fields from the lead response. Option IDs depend on the Bitrix24 account; labels in this example are illustrative:\n\n```json\n{\n  \"success\": true,\n  \"data\": [\n    {\n      \"name\": \"LEAD_TITLE\",\n      \"label\": \"Lead name\",\n      \"type\": \"string\",\n      \"required\": false,\n      \"multiple\": false,\n      \"entityName\": \"LEAD\",\n      \"entityLabel\": \"Lead\",\n      \"items\": []\n    },\n    {\n      \"name\": \"LEAD_HONORIFIC\",\n      \"label\": \"Salutation\",\n      \"type\": \"list\",\n      \"required\": false,\n      \"multiple\": false,\n      \"entityName\": \"LEAD\",\n      \"entityLabel\": \"Lead\",\n      \"items\": [\n        {\n          \"id\": \"HNR_RU_1\",\n          \"label\": \"Mr.\"\n        },\n        {\n          \"id\": \"HNR_RU_2\",\n          \"label\": \"Mrs.\"\n        }\n      ]\n    },\n    {\n      \"name\": \"LEAD_NAME\",\n      \"label\": \"First name\",\n      \"type\": \"string\",\n      \"required\": false,\n      \"multiple\": false,\n      \"entityName\": \"LEAD\",\n      \"entityLabel\": \"Lead\",\n      \"items\": []\n    },\n    {\n      \"name\": \"LEAD_PHONE\",\n      \"label\": \"Phone\",\n      \"type\": \"typed_string\",\n      \"required\": false,\n      \"multiple\": true,\n      \"entityName\": \"LEAD\",\n      \"entityLabel\": \"Lead\",\n      \"items\": []\n    }\n  ]\n}\n```\n\n## Error response example\n\n400 — `entityName` is not passed:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"MISSING_REQUIRED_FIELDS\",\n    \"message\": \"entityName is required\"\n  }\n}\n```\n\n## Errors\n\n| HTTP | Code | Description |\n|------|-----|----------|\n| 400 | `MISSING_REQUIRED_FIELDS` | `entityName` is missing |\n| 400 | `INVALID_PARAMS` | More than 10 names, an empty name, or an unknown query parameter |\n| 403 | `BITRIX_ACCESS_DENIED` | The Bitrix24 user lacks permission to access forms |\n| 403 | `BITRIX_INSUFFICIENT_SCOPE` | The Bitrix24 token lacks the required scope |\n| 404 | `ENTITY_NOT_FOUND` | Bitrix24 did not find a requested entity or field descriptor. The original code is in `error.b24Code` |\n| 409 | `CRM_FORM_REST_NOT_ENABLED` | The CRM form REST methods are unavailable on this Bitrix24 account. This does not mean that an individual form is missing |\n| 400–599 | `CRM_FORM_*` | Rejection under form rules. The code and HTTP status are preserved. The original code is in `error.b24Code` |\n| 422 | `BITRIX_ERROR` | Another Bitrix24 rejection. The reason is in `error.message`. The original code is in `error.b24Code` |\n| 429 | `RATE_LIMITED` | Request rate exceeded. Follow the `Retry-After` header |\n| 502 | `BITRIX_UNAVAILABLE` | Bitrix24 returned an unexpected response shape |\n| 502 | `BITRIX_UNAVAILABLE` | Bitrix24 is unavailable: a server error or a dropped connection |\n| 503 | `BITRIX_TIMEOUT` | Bitrix24 did not respond in time. The read can be retried |\n| 401 | `MISSING_API_KEY` | The `X-Api-Key` header is missing |\n| 401 | `TOKEN_MISSING` | The key has no configured Bitrix24 credentials |\n| 403 | `SCOPE_DENIED` | The Vibecode API key lacks the `crm` scope |\n\nFull list of common API errors — [Errors](\u002Fdocs\u002Ferrors).\n\n## See also\n\n- [Get builder configuration](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Fconfiguration)\n- [Form contract fields](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Ffields)\n- [Create a form](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Fcreate)\n- [Update a form](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Fupdate)\n- [CRM forms](\u002Fdocs\u002Fentities\u002Fcrm-forms)\n","## List scenarios\n\n`GET \u002Fv1\u002Fcrm-forms\u002Fscenarios`\n\nReturns the CRM form builder scenarios — form templates for callback requests, online booking, product sales, event registration and other tasks.\n\n## Examples\n\n### curl — personal key\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fcrm-forms\u002Fscenarios\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth application\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fcrm-forms\u002Fscenarios\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\"\n```\n\n### JavaScript — personal key\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fcrm-forms\u002Fscenarios', {\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n  },\n})\n\nconst { success, data } = await res.json()\nconsole.log(data.map(scenario => `${scenario.id} — ${scenario.title}`))\n```\n\n### JavaScript — OAuth application\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fcrm-forms\u002Fscenarios', {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nconst { success, data } = await res.json()\n```\n\n## Response fields\n\n| Field | Type | Description |\n|------|-----|---------|\n| `success` | boolean | Always `true` on success |\n| `data` | array | All builder scenarios. No pagination |\n| `data[].id` | string | Scenario ID, for example `contacts`, `callback` |\n| `data[].title` | string | Scenario name |\n| `data[].description` | string | Scenario description |\n| `data[].categoryId` | string | Scenario category. For the list, see [Scenario categories](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Fscenario-categories) |\n| `data[].iconUrl` | string | Path to the scenario icon relative to the Bitrix24 account root URL, for example `\u002Fbitrix\u002Fimages\u002Fcrm\u002Fwebform\u002Ficons\u002Fcontacts.svg` |\n| `data[].sections` | array of string | Form settings sections that belong to the scenario, for example `fields`, `agreements`, `crm`, `design` |\n| `data[].expertSections` | array of string | Extended set of form settings sections |\n| `data[].defaultSection` | string | Default settings section, one of the `sections` values |\n| `data[].openable` | boolean | Whether the scenario can be opened in the form builder |\n| `data[].soon` | boolean | The scenario is marked as coming soon |\n| `data[].actions` | array of string | Scenario actions, for example `check`, `showHelp`. An empty array if the scenario has no actions |\n\n## Response example\n\nTwo of the 26 scenarios are shown:\n\n```json\n{\n  \"success\": true,\n  \"data\": [\n    {\n      \"id\": \"contacts\",\n      \"title\": \"Contact details\",\n      \"description\": \"Get the customer's phone, email address and name\",\n      \"categoryId\": \"crm\",\n      \"iconUrl\": \"\u002Fbitrix\u002Fimages\u002Fcrm\u002Fwebform\u002Ficons\u002Fcontacts.svg\",\n      \"sections\": [\n        \"fields\",\n        \"agreements\",\n        \"header-and-button\",\n        \"crm\",\n        \"design\",\n        \"other\"\n      ],\n      \"expertSections\": [\n        \"fields\",\n        \"booking-resource-auto-selection\",\n        \"agreements\",\n        \"crm\",\n        \"pay-systems\",\n        \"header-and-button\",\n        \"spam-protection\",\n        \"fields-rules\",\n        \"actions\",\n        \"default-values\",\n        \"analytics\",\n        \"callback\",\n        \"design\",\n        \"other\"\n      ],\n      \"defaultSection\": \"fields\",\n      \"openable\": true,\n      \"soon\": false,\n      \"actions\": []\n    },\n    {\n      \"id\": \"event_registration\",\n      \"title\": \"Online events\",\n      \"description\": \"Registration for an online event\",\n      \"categoryId\": \"events\",\n      \"iconUrl\": \"\u002Fbitrix\u002Fimages\u002Fcrm\u002Fwebform\u002Ficons\u002Fonline.svg\",\n      \"sections\": [\n        \"fields\",\n        \"agreements\",\n        \"crm\",\n        \"header-and-button\",\n        \"actions\",\n        \"default-values\",\n        \"design\",\n        \"other\"\n      ],\n      \"expertSections\": [\n        \"fields\",\n        \"booking-resource-auto-selection\",\n        \"agreements\",\n        \"crm\",\n        \"pay-systems\",\n        \"header-and-button\",\n        \"spam-protection\",\n        \"fields-rules\",\n        \"actions\",\n        \"default-values\",\n        \"analytics\",\n        \"callback\",\n        \"design\",\n        \"other\"\n      ],\n      \"defaultSection\": \"fields\",\n      \"openable\": true,\n      \"soon\": false,\n      \"actions\": [\n        \"check\"\n      ]\n    }\n  ]\n}\n```\n\n## Error response example\n\n400 — a query parameter is passed:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"INVALID_PARAMS\",\n    \"message\": \"Unknown query parameter\"\n  }\n}\n```\n\n## Errors\n\n| HTTP | Code | Description |\n|------|-----|----------|\n| 400 | `INVALID_PARAMS` | The endpoint accepts no query parameters |\n| 403 | `BITRIX_ACCESS_DENIED` | The Bitrix24 user lacks permission to access forms |\n| 403 | `BITRIX_INSUFFICIENT_SCOPE` | The Bitrix24 token lacks the required scope |\n| 404 | `ENTITY_NOT_FOUND` | Bitrix24 did not find a requested entity or field descriptor. The original code is in `error.b24Code` |\n| 409 | `CRM_FORM_REST_NOT_ENABLED` | The CRM form REST methods are unavailable on this Bitrix24 account. This does not mean that an individual form is missing |\n| 400–599 | `CRM_FORM_*` | Rejection under form rules. The code and HTTP status are preserved. The original code is in `error.b24Code` |\n| 422 | `BITRIX_ERROR` | Another Bitrix24 rejection. The reason is in `error.message`. The original code is in `error.b24Code` |\n| 429 | `RATE_LIMITED` | Request rate exceeded. Follow the `Retry-After` header |\n| 502 | `BITRIX_UNAVAILABLE` | Bitrix24 returned an unexpected response shape |\n| 502 | `BITRIX_UNAVAILABLE` | Bitrix24 is unavailable: a server error or a dropped connection |\n| 503 | `BITRIX_TIMEOUT` | Bitrix24 did not respond in time. The read can be retried |\n| 401 | `MISSING_API_KEY` | The `X-Api-Key` header is missing |\n| 401 | `TOKEN_MISSING` | The key has no configured Bitrix24 credentials |\n| 403 | `SCOPE_DENIED` | The Vibecode API key lacks the `crm` scope |\n\nFull list of common API errors — [Errors](\u002Fdocs\u002Ferrors).\n\n## See also\n\n- [List scenario categories](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Fscenario-categories)\n- [Get builder configuration](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Fconfiguration)\n- [Create a form](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Fcreate)\n- [CRM forms](\u002Fdocs\u002Fentities\u002Fcrm-forms)\n","## List scenario categories\n\n`GET \u002Fv1\u002Fcrm-forms\u002Fscenario-categories`\n\nReturns the categories that group the CRM form builder scenarios: customer communications, online booking, sales, delivery and others.\n\n## Examples\n\n### curl — personal key\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fcrm-forms\u002Fscenario-categories\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth application\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fcrm-forms\u002Fscenario-categories\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\"\n```\n\n### JavaScript — personal key\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fcrm-forms\u002Fscenario-categories', {\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n  },\n})\n\nconst { success, data } = await res.json()\nconsole.log(data.map(category => `${category.id} — ${category.title}`))\n```\n\n### JavaScript — OAuth application\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.com\u002Fv1\u002Fcrm-forms\u002Fscenario-categories', {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nconst { success, data } = await res.json()\n```\n\n## Response fields\n\n| Field | Type | Description |\n|------|-----|---------|\n| `success` | boolean | Always `true` on success |\n| `data` | array | All scenario categories. No pagination |\n| `data[].id` | string | Category ID, for example `crm`, `booking`. This value appears in the `data[].categoryId` field of a [scenario](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Fscenarios) |\n| `data[].title` | string | Category name |\n\n## Response example\n\nThree of the ten categories are shown:\n\n```json\n{\n  \"success\": true,\n  \"data\": [\n    {\n      \"id\": \"crm\",\n      \"title\": \"Customer communications\"\n    },\n    {\n      \"id\": \"booking\",\n      \"title\": \"Online booking\"\n    },\n    {\n      \"id\": \"products\",\n      \"title\": \"Sales\"\n    }\n  ]\n}\n```\n\n## Error response example\n\n400 — a query parameter is passed:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"INVALID_PARAMS\",\n    \"message\": \"Unknown query parameter\"\n  }\n}\n```\n\n## Errors\n\n| HTTP | Code | Description |\n|------|-----|----------|\n| 400 | `INVALID_PARAMS` | The endpoint accepts no query parameters |\n| 403 | `BITRIX_ACCESS_DENIED` | The Bitrix24 user lacks permission to access forms |\n| 403 | `BITRIX_INSUFFICIENT_SCOPE` | The Bitrix24 token lacks the required scope |\n| 404 | `ENTITY_NOT_FOUND` | Bitrix24 did not find a requested entity or field descriptor. The original code is in `error.b24Code` |\n| 409 | `CRM_FORM_REST_NOT_ENABLED` | The CRM form REST methods are unavailable on this Bitrix24 account. This does not mean that an individual form is missing |\n| 400–599 | `CRM_FORM_*` | Rejection under form rules. The code and HTTP status are preserved. The original code is in `error.b24Code` |\n| 422 | `BITRIX_ERROR` | Another Bitrix24 rejection. The reason is in `error.message`. The original code is in `error.b24Code` |\n| 429 | `RATE_LIMITED` | Request rate exceeded. Follow the `Retry-After` header |\n| 502 | `BITRIX_UNAVAILABLE` | Bitrix24 returned an unexpected response shape |\n| 502 | `BITRIX_UNAVAILABLE` | Bitrix24 is unavailable: a server error or a dropped connection |\n| 503 | `BITRIX_TIMEOUT` | Bitrix24 did not respond in time. The read can be retried |\n| 401 | `MISSING_API_KEY` | The `X-Api-Key` header is missing |\n| 401 | `TOKEN_MISSING` | The key has no configured Bitrix24 credentials |\n| 403 | `SCOPE_DENIED` | The Vibecode API key lacks the `crm` scope |\n\nFull list of common API errors — [Errors](\u002Fdocs\u002Ferrors).\n\n## See also\n\n- [List scenarios](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Fscenarios)\n- [Get builder configuration](\u002Fdocs\u002Fentities\u002Fcrm-forms\u002Fconfiguration)\n- [CRM forms](\u002Fdocs\u002Fentities\u002Fcrm-forms)\n",1794739353471]