[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-entities\u002Fquotes\u002Fcreate":3,"docs-tabs-entities\u002Fquotes\u002Fcreate":6},{"content":4,"lastmod":5},"\n## Создать предложение\n\n`POST \u002Fv1\u002Fquotes`\n\nСоздаёт новое коммерческое предложение в CRM.\n\n## Поля запроса (body)\n\n| Параметр | Тип | Описание |\n|----------|-----|---------|\n| `title` | string | Название предложения |\n| `opportunity` | number | Сумма. Чтобы сумма не пересчитывалась из товарных позиций, передайте вместе с `isManualOpportunity: true`. Принимается и алиас `amount` |\n| `isManualOpportunity` | boolean | `true` — ручной режим суммы (обязателен, если задаёте `opportunity`\u002F`amount` напрямую). Битрикс24 хранит флаг как `Y`\u002F`N`; булево значение преобразуется автоматически (строка `\"Y\"` тоже принимается) |\n| `currencyId` | string | Валюта. Список: `GET \u002Fv1\u002Fcurrencies` |\n| `stageId` | string | Статус: `DRAFT`, `SENT`, `APPROVED`. Список: `GET \u002Fv1\u002Fstatuses?filter[entityId]=QUOTE_STATUS` |\n| `dealId` | number | ID сделки. Поиск: `GET \u002Fv1\u002Fdeals` |\n| `contactId` | number | ID контакта. Поиск: `GET \u002Fv1\u002Fcontacts` |\n| `companyId` | number | ID компании. Поиск: `GET \u002Fv1\u002Fcompanies` |\n| `assignedById` | number | ID ответственного. Список сотрудников: `GET \u002Fv1\u002Fusers` |\n| `comments` | string | Комментарий |\n| `begindate` | datetime | Дата начала (имя поля в нижнем регистре — как в ответах API) |\n| `closedate` | datetime | Дата закрытия |\n\n> **Имена полей при записи.** Канонические имена — те, что возвращает API: `opportunity`, `currencyId`, `begindate`, `closedate`. Их camelCase-алиасы `amount` \u002F `currency` \u002F `beginDate` \u002F `closeDate` **тоже принимаются** на запись — слой API переводит их в канонические перед вызовом Битрикс24 (проверено живым вызовом: `amount: 777` → сохранено в `opportunity`). Раньше алиасы молча терялись — исправлено (VB-2992cbe0).\n\nПолный список полей: [GET \u002Fv1\u002Fquotes\u002Ffields](\u002Fdocs\u002Fentities\u002Fquotes\u002Ffields). Пользовательские поля (`ufCrm_*`) также принимаются.\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fquotes \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"title\": \"КП на серверное оборудование\",\n    \"opportunity\": 150000,\n    \"isManualOpportunity\": true,\n    \"currencyId\": \"RUB\",\n    \"stageId\": \"DRAFT\",\n    \"dealId\": 741,\n    \"assignedById\": 1\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fquotes \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"title\": \"КП на серверное оборудование\",\n    \"opportunity\": 150000,\n    \"isManualOpportunity\": true,\n    \"currencyId\": \"RUB\",\n    \"stageId\": \"DRAFT\",\n    \"dealId\": 741,\n    \"assignedById\": 1\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fquotes', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    title: 'КП на серверное оборудование',\n    opportunity: 150000,\n    isManualOpportunity: true,\n    currencyId: 'RUB',\n    stageId: 'DRAFT',\n    dealId: 741,\n    assignedById: 1,\n  }),\n})\n\nconst { success, data } = await res.json()\nconsole.log('Quote ID:', data.id)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fquotes', {\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    title: 'КП на серверное оборудование',\n    opportunity: 150000,\n    isManualOpportunity: true,\n    currencyId: 'RUB',\n    stageId: 'DRAFT',\n    dealId: 741,\n    assignedById: 1,\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `id` | number | ID созданного предложения |\n| `title` | string | Название |\n| `opportunity` | number | Сумма |\n| `currencyId` | string | Валюта |\n| `stageId` | string | Статус |\n| `dealId` | number | ID сделки |\n| `assignedById` | number | Ответственный |\n| `createdBy` | number | Создатель |\n| `createdTime` | datetime | Дата создания |\n| `updatedTime` | datetime | Дата изменения |\n\nОтвет содержит все поля предложения, включая пользовательские (`ufCrm_*`). Выше показаны основные.\n\nURL карточки предложения в Битрикс24 строится из `id`:\n\n```\nhttps:\u002F\u002F\u003Cportal>.bitrix24.ru\u002Fcrm\u002Ftype\u002F7\u002Fdetails\u002F\u003Cid>\u002F\n```\n\n`7` — `entityTypeId` коммерческого предложения в Битрикс24. `\u003Cportal>` — домен портала. Доступ ограничен правами сотрудника в Битрикс24.\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": 412,\n    \"title\": \"КП на серверное оборудование\",\n    \"opportunity\": 150000,\n    \"isManualOpportunity\": true,\n    \"currencyId\": \"RUB\",\n    \"stageId\": \"DRAFT\",\n    \"dealId\": 741,\n    \"contactId\": 0,\n    \"companyId\": 0,\n    \"assignedById\": 1,\n    \"createdBy\": 1,\n    \"comments\": \"\",\n    \"begindate\": \"2026-04-15T00:00:00.000Z\",\n    \"closedate\": \"2026-05-15T00:00:00.000Z\",\n    \"createdTime\": \"2026-04-15T10:30:00.000Z\",\n    \"updatedTime\": \"2026-04-15T10:30:00.000Z\"\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n403 — нет скоупа:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"SCOPE_DENIED\",\n    \"message\": \"This endpoint requires 'crm' scope\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `crm` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n| 400 | `INVALID_REQUEST` | Невалидные поля |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Смотрите также\n\n- [Работа с файлами в полях CRM](\u002Fdocs\u002Frecipes\u002Fcrm-files)\n- [Список предложений](\u002Fdocs\u002Fentities\u002Fquotes\u002Flist) — получение с фильтрами\n- [Поля предложения](\u002Fdocs\u002Fentities\u002Fquotes\u002Ffields) — полный список полей\n- [Entity API](\u002Fdocs\u002Fentity-api) — общие принципы (пагинация, select, order)\n- [Синтаксис фильтрации](\u002Fdocs\u002Ffiltering)\n- [Batch](\u002Fdocs\u002Fbatch) — объединение операций\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization) — rate limits\n","2026-07-10",{}]