[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-entities\u002Fdeals\u002Fcontacts":3,"docs-tabs-entities\u002Fdeals\u002Fcontacts":6},{"content":4,"lastmod":5},"# Контакты сделки\n\nУправление связями сделки с контактами (many-to-many). Поле `contactIds` в самой сделке доступно только для чтения — `PATCH \u002Fv1\u002Fdeals\u002F:id` его не меняет. Чтобы привязать, заменить или отвязать контакты, используйте эндпоинты ниже. Прочитать список контактов вместе со сделкой можно через `GET \u002Fv1\u002Fdeals\u002F:id?include=contact` (см. «Включение связанных сущностей»).\n\nТребуется scope `crm`.\n\n## Поля связи\n\n| Поле | Тип | Описание |\n|----------|-----|---------|\n| `contactId` | number | ID контакта. Каталог: `GET \u002Fv1\u002Fcontacts` |\n| `isPrimary` | boolean | Основной контакт сделки. Если ни один не помечен, основным станет первый |\n| `sort` | number | Порядок сортировки |\n| `roleId` | number | ID роли контакта (если используется) |\n\n## Получить контакты сделки\n\n`GET \u002Fv1\u002Fdeals\u002F:id\u002Fcontacts`\n\nВозвращает массив привязанных контактов.\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fdeals\u002F741\u002Fcontacts\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\nОтвет:\n\n```json\n{\n  \"success\": true,\n  \"data\": [\n    { \"contactId\": 9, \"sort\": 10, \"isPrimary\": true, \"roleId\": 0 },\n    { \"contactId\": 17, \"sort\": 20, \"isPrimary\": false, \"roleId\": 0 }\n  ]\n}\n```\n\n## Добавить один контакт\n\n`POST \u002Fv1\u002Fdeals\u002F:id\u002Fcontacts`\n\nПривязывает один контакт к сделке, не затрагивая уже привязанные.\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `contactId` | number | да | ID контакта |\n| `isPrimary` | boolean | нет | Сделать основным |\n| `sort` | number | нет | Порядок сортировки |\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fdeals\u002F741\u002Fcontacts\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"contactId\": 9, \"isPrimary\": true, \"sort\": 10 }'\n```\n\nВозвращает обновлённый список контактов сделки (как в `GET`).\n\n## Заменить весь список контактов\n\n`PUT \u002Fv1\u002Fdeals\u002F:id\u002Fcontacts`\n\nПолностью заменяет список контактов сделки. Контакты, не вошедшие в `items`, отвязываются. Передайте `\"items\": []`, чтобы отвязать все.\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `items` | array | да | Массив контактов (пустой массив отвязывает все) |\n| `items[].contactId` | number | да | ID контакта |\n| `items[].isPrimary` | boolean | нет | Основной контакт |\n| `items[].sort` | number | нет | Порядок сортировки |\n\n```bash\ncurl -X PUT \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fdeals\u002F741\u002Fcontacts\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"items\": [\n      { \"contactId\": 16530, \"isPrimary\": true, \"sort\": 10 },\n      { \"contactId\": 16532, \"isPrimary\": false, \"sort\": 20 }\n    ]\n  }'\n```\n\nВозвращает обновлённый список контактов сделки (как в `GET`).\n\n## Удалить один контакт\n\n`DELETE \u002Fv1\u002Fdeals\u002F:id\u002Fcontacts\u002F:contactId`\n\nОтвязывает один контакт. Если удаляется основной, основным становится первый из оставшихся.\n\n```bash\ncurl -X DELETE \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fdeals\u002F741\u002Fcontacts\u002F16530\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\nВозвращает `204 No Content`.\n\n## Ошибки\n\n| Код | Когда |\n|-----|-------|\n| `INVALID_PARAMS` | В `PUT` поле `items` не массив, либо элемент без `contactId` |\n| `SCOPE_DENIED` | У ключа нет scope `crm` |\n| `WRITE_BLOCKED_READONLY_KEY` | Ключ в режиме READONLY — записи (`POST`\u002F`PUT`\u002F`DELETE`) запрещены |\n","2026-06-22",{}]