[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-entities\u002Fcontacts\u002Ffields":3,"docs-tabs-entities\u002Fcontacts\u002Ffields":6},{"content":4,"lastmod":5},"\n## Поля контакта\n\n`GET \u002Fv1\u002Fcontacts\u002Ffields`\n\nВозвращает полный список доступных полей, включая пользовательские (`ufCrm_*`).\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcontacts\u002Ffields\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcontacts\u002Ffields\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\"\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcontacts\u002Ffields', {\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n  },\n})\n\nconst { success, data } = await res.json()\nconsole.log('Полей:', Object.keys(data).length)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcontacts\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## Поля ответа\n\n| Поле | Тип | RO | Описание |\n|------|-----|:--:|---------|\n| `id` | number | да | ID контакта |\n| `name` | string | | Имя |\n| `lastName` | string | | Фамилия |\n| `secondName` | string | | Отчество |\n| `phone` | multifield | | Телефон. На вход (POST\u002FPATCH) принимает `string \\| string[] \\| object[]`. На выходе `phone` — строка с первичным значением, значения по типам — в полях `phoneWork`\u002F`phoneMobile`, полный перечень с типами — в массиве `fm[]` (формат `{ id, typeId, valueType, value }`). ⚠ PATCH **только добавляет** новые записи — старые `phone` не удаляются. См. [Обновить контакт](\u002Fdocs\u002Fentities\u002Fcontacts\u002Fupdate). ⚠ UPPER-форма `[{ \"VALUE\": \"...\", \"VALUE_TYPE\": \"WORK\" }]` **не принимается** — вернёт `400 INVALID_MULTIFIELD_SHAPE`. Используйте camelCase: `[{ \"value\": \"...\", \"typeId\": \"WORK\" }]`. |\n| `email` | multifield | | Email. На вход принимает `string \\| string[] \\| object[]`. На выходе `email` — строка с первичным значением, значения по типам — в полях `emailWork`\u002F`emailHome`\u002F`emailMailing`, полный перечень — в массиве `fm[]`. ⚠ PATCH **только добавляет** новые записи — старые `email` не удаляются. ⚠ UPPER-форма `[{ \"VALUE\": \"...\", \"VALUE_TYPE\": \"WORK\" }]` **не принимается** — вернёт `400 INVALID_MULTIFIELD_SHAPE`. Используйте camelCase: `[{ \"value\": \"...\", \"typeId\": \"WORK\" }]`. |\n| `hasPhone` | boolean | да | Указан ли телефон |\n| `hasEmail` | boolean | да | Указан ли email |\n| `hasImol` | boolean | да | Есть ли контакт в открытой линии |\n| `companyId` | number | | ID компании. Поиск: `GET \u002Fv1\u002Fcompanies` |\n| `post` | string | | Должность |\n| `comments` | string | | Комментарий |\n| `typeId` | string | | Тип контакта. Список: `GET \u002Fv1\u002Fstatuses?filter[entityId]=CONTACT_TYPE` |\n| `sourceId` | string | | Источник. Список: `GET \u002Fv1\u002Fstatuses?filter[entityId]=SOURCE` |\n| `sourceDescription` | string | | Описание источника |\n| `assignedById` | number | | Ответственный. Список: `GET \u002Fv1\u002Fusers` |\n| `createdBy` | number | да | Создатель. Поиск: `GET \u002Fv1\u002Fusers` |\n| `updatedBy` | number | да | Кто изменил. Поиск: `GET \u002Fv1\u002Fusers` |\n| `createdTime` | datetime | да | Дата создания |\n| `updatedTime` | datetime | да | Дата изменения |\n| `opened` | boolean | | Доступен для всех |\n| `export` | boolean | | Разрешён экспорт |\n| `leadId` | number | | ID лида-источника |\n| `honorific` | string | | Обращение. Список: `GET \u002Fv1\u002Fstatuses?filter[entityId]=HONORIFIC` |\n\n**Пользовательские поля** (`ufCrm_*`) также возвращаются в ответах и принимаются при создании\u002Fобновлении.\n\n\n\n## Доступные include\n\nЭндпоинт `GET \u002Fv1\u002Fcontacts\u002Ffields` возвращает список доступных include: `company`, `requisite`.\n\nПример использования: [Получить contacts](\u002Fdocs\u002Fentities\u002Fcontacts\u002Fget#связанные-данные).\n\nПодробнее об include: [Связанные данные](\u002Fdocs\u002Fincludes).\n\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"fields\": {\n      \"id\": { \"type\": \"number\", \"readonly\": true },\n      \"name\": { \"type\": \"string\", \"readonly\": false },\n      \"assignedById\": { \"type\": \"number\", \"readonly\": false }\n    },\n    \"batch\": [\"create\", \"update\", \"delete\"]\n  }\n}\n```\n\nПоказаны 3 из множества полей. Полный список в таблице выше.\n\n## Пример ответа при ошибке\n\n404 — не найден:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"ENTITY_NOT_FOUND\",\n    \"message\": \"Элемент не найден\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `crm` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Смотрите также\n\n- [Создать контакт](\u002Fdocs\u002Fentities\u002Fcontacts\u002Fcreate) — какие поля передавать\n- [Пользовательские поля](\u002Fdocs\u002Fuserfields) — создание и управление `ufCrm_*`\n- [Entity API](\u002Fdocs\u002Fentity-api) — select для выборки полей\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization) — rate limits\n","2026-07-07",{}]