Для AI-агентов: markdown этой страницы — /docs-content/entities/quotes/update.md индекс документации — /llms.txt

Обновить предложение

PATCH /v1/quotes/:id

Обновляет поля существующего коммерческого предложения. Передайте только изменяемые поля — остальные остаются прежними.

Параметры

Параметр Тип Обяз. Описание
id (path) number да ID предложения. Список: GET /v1/quotes

Поля запроса (body)

Все поля необязательны. Часто изменяемые: stageId, amount вместе с isManualOpportunity, assignedById, closeDate.

Поле Тип Описание
title string Название
quoteNumber string Номер предложения
stageId string Статус: DRAFT, SENT, APPROVED. Список: GET /v1/statuses?filter[entityId]=QUOTE_STATUS
amount number Сумма предложения. Передавайте вместе с isManualOpportunity: true — без этого флага сумма пересчитывается из товарных позиций
isManualOpportunity boolean true — ручной режим суммы
currency string Валюта. Список: GET /v1/currencies
dealId number ID сделки. Список: GET /v1/deals
leadId number ID лида. Список: GET /v1/leads
contactId number ID основного контакта. Список: GET /v1/contacts
contactIds array ID всех контактов предложения. Набор привязок заменяется целиком, поэтому передавайте полный список
companyId number ID компании. Список: GET /v1/companies
mycompanyId number Реквизиты вашей компании
assignedById number Ответственный. Список: GET /v1/users
opened boolean Доступно для всех
comments string Комментарий
content string Содержание
terms string Условия
beginDate datetime Дата начала
closeDate datetime Дата закрытия
actualDate datetime Актуально до
locationId string Местоположение
webformId number CRM-форма, которой создано предложение
storageTypeId number Тип хранилища файлов
storageElementIds array ID файлов в хранилище
lastActivityBy number Автор последней активности. Список: GET /v1/users
utmSource string UTM Source
utmMedium string UTM Medium
utmCampaign string UTM Campaign
utmContent string UTM Content
utmTerm string UTM Term
ufCrm* по схеме поля Пользовательское поле портала. Имя и тип — в схеме GET /v1/quotes/fields, формат значения по типам — Пользовательские поля (UF)

Поля, отмеченные RO на странице Поля предложения, изменить нельзя — запрос с ними отклоняется 400 READONLY_FIELD.

Имена полей. В ответе поля возвращаются в camelCase: amount, currency, beginDate, closeDate. На запись принимаются оба варианта — и эти camelCase-имена, и исходные имена Битрикс24 opportunity, currencyId, begindate, closedate: слой API приводит их к нужному имени Битрикс24.

Примеры

curl — личный ключ

Terminal
curl -X PATCH "https://vibecode.bitrix24.tech/v1/quotes/412" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "stageId": "APPROVED",
    "isManualOpportunity": true,
    "opportunity": 145000
  }'

curl — OAuth-приложение

Terminal
curl -X PATCH "https://vibecode.bitrix24.tech/v1/quotes/412" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "stageId": "APPROVED",
    "isManualOpportunity": true,
    "opportunity": 145000
  }'

JavaScript — личный ключ

javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/quotes/412', {
  method: 'PATCH',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    stageId: 'APPROVED',
    isManualOpportunity: true,
    opportunity: 145000,
  }),
})

const { success, data } = await res.json()

JavaScript — OAuth-приложение

javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/quotes/412', {
  method: 'PATCH',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    stageId: 'APPROVED',
    isManualOpportunity: true,
    opportunity: 145000,
  }),
})

const { success, data } = await res.json()

Поля ответа

Поле Тип Описание
success boolean Всегда true при успехе
data object Обновлённый объект предложения со всеми полями — см. Поля предложения
meta.warnings array Есть, когда в теле переданы поля, которых нет ни в схеме предложения, ни в списке полей GET /v1/quotes/fields, например имя с опечаткой. Код предупреждения UNRECOGNIZED_WRITE_FIELD: такое поле могло не сохраниться. Ответ приходит с кодом 200. Объект fields на маршруте, который сам оборачивает карту полей и где схема не объявляет fields, отклоняется с 400 NESTED_FIELDS_ENVELOPE; передавайте поля плоско в корне JSON.

Пример ответа

JSON
{
  "success": true,
  "data": {
    "id": 412,
    "title": "КП на серверное оборудование",
    "amount": 145000,
    "currency": "RUB",
    "stageId": "APPROVED",
    "dealId": 741,
    "assignedById": 1,
    "updatedTime": "2026-04-15T15:10:00.000Z"
  }
}

Пример ответа при ошибке

404 — предложение не найдено:

JSON
{
  "success": false,
  "error": {
    "code": "ENTITY_NOT_FOUND",
    "message": "Элемент не найден"
  }
}

Ошибки

HTTP Код Описание
404 ENTITY_NOT_FOUND Предложение не найдено
403 ACCESS_DENIED Нет доступа к предложению
400 INVALID_REQUEST Некорректные поля
400 READONLY_FIELD В теле передано поле только для чтения, например clientEmail. Такие поля отмечены в колонке RO на странице Поля предложения
403 SCOPE_DENIED API-ключ не имеет скоупа crm
401 TOKEN_MISSING API-ключ не имеет настроенных токенов

Полный список общих ошибок API — Ошибки.

Смотрите также