---
title: "Заменить состав сделки"
method: PUT
path: "/api/v1/crm/deals/{id}/items"
tags: ["CRM deals"]
---

# Заменить состав сделки

`PUT /api/v1/crm/deals/{id}/items`

## Request

- Base URL: `https://erp.akeda.ru`
- URL: `https://erp.akeda.ru/api/v1/crm/deals/{id}/items`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-Api-Key`
  - OAuth 2 (authorization code, authorization URL `https://erp.akeda.ru/oauth2/authorize`, token URL `https://erp.akeda.ru/oauth2/token`, scopes: `akeda:delegate`)

Состав заменяется целиком, сумма сделки становится его итогом с НДС и снимается признак amount_manual. Тело - объект {items, prices_include_vat} или прежний голый массив строк. Строка из каталога сверяется с номенклатурой кабинета (422 crm.deal_item_product, crm.deal_item_product_archived), единицу берёт из карточки товара. Пустой состав сумму не меняет

## Request body

- union
  - CRMDealItemsInput
    - `items` CRMDealItemInput[], nullable, required
      - `name` string, required
      - `product_id` string, uuid, nullable
      - `quantity` number, required
      - `unit` string
      - `unit_id` string, uuid, nullable: Единица справочника ядра; у строки из каталога сервер берёт единицу карточки товара
      - `price` string: Сумма десятичной строкой: «19990.50». Разрядность берёт валюта (MONEY-ROUNDING.md)
      - `discount_percent` number
      - `vat_rate` string: Ставка НДС записью ядра: «22%», «20» (станет «20%»), «0%», «без НДС»; пусто - не указана
    - `prices_include_vat` boolean, nullable: Цены строк включают НДС; не передан - не менять
  - CRMDealItemInput[]
    - `name` string, required
    - `product_id` string, uuid, nullable
    - `quantity` number, required
    - `unit` string
    - `unit_id` string, uuid, nullable: Единица справочника ядра; у строки из каталога сервер берёт единицу карточки товара
    - `price` string: Сумма десятичной строкой: «19990.50». Разрядность берёт валюта (MONEY-ROUNDING.md)
    - `discount_percent` number
    - `vat_rate` string: Ставка НДС записью ядра: «22%», «20» (станет «20%»), «0%», «без НДС»; пусто - не указана

## Response `200`

Новый состав с посчитанными суммами

- CRMDealItem[]
  - `id` string, uuid, required
  - `deal_id` string, uuid, required
  - `position` integer, required
  - `name` string, required
  - `product_id` string, uuid
  - `quantity` number, required
  - `unit` string, required
  - `unit_id` string, uuid
  - `price` string, required: Сумма десятичной строкой: «19990.50». Разрядность берёт валюта (MONEY-ROUNDING.md)
  - `discount_percent` number, required
  - `vat_rate` string, required: Ставка НДС записью ядра: «22%», «0%», «без НДС»; пусто - ставка не указана, налог не выделяется
  - `total` string, required: Сумма строки со скидкой, как записаны цены сделки (с налогом или без); считает сервер, чтобы клиенты не разошлись на округлении
  - `amount_net` string, required: Сумма строки без НДС
  - `vat_amount` string, required: НДС строки
  - `amount_gross` string, required: Сумма строки с НДС
  - `product` CRMDealItemProduct: Сведения карточки номенклатуры на момент чтения: CRM их не копирует
    - `sku` string, required
    - `kind` string, required: Вид позиции ядра: goods, service, material, semi_product
    - `is_stockable` boolean, required: Товар ведётся на складе: только у него есть остаток
    - `archived` boolean, required: Карточка в архиве: строка остаётся, новую так не выбрать
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required

## Other responses

- `400`: Некорректный запрос или нарушение бизнес-правила
- `401`: Сессия, ключ или кабинет не подтверждены
- `403`: Текущая роль не имеет требуемого права
- `404`: Запись не найдена или не видима текущему пользователю
- `422`: Запрос разобран, но бизнес-значение недопустимо

---

[API](https://skmtc.dev/akeda/apis/akeda-erp-client-api.md) · [All operations](https://skmtc.dev/akeda/apis/akeda-erp-client-api/llms.txt) · [OpenAPI document](https://skmtc.dev/akeda/apis/akeda-erp-client-api/revisions/a99574d597cc?raw)
