---
title: "Получить карточку продажи"
method: GET
path: "/api/v1/core/sales/{id}"
tags: ["Core trade"]
---

# Получить карточку продажи

`GET /api/v1/core/sales/{id}`

## Request

- Base URL: `https://erp.akeda.ru`
- URL: `https://erp.akeda.ru/api/v1/core/sales/{id}`
- 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`)
  - HTTP bearer

Продажа целиком: заголовок, строки с суммами после скидок, итоги, ответственные, статус кабинета; обязательство из регистра «Продажи и закупки» (`obligation`: заказано и осталось — у подтверждённого и следующих состояний) и действия экрана с причинами отказа (`allowed_actions`). Чужая продажа и продажа вне области юрлиц отвечают 404.

## Response `200`

Карточка продажи

- CoreOrder: Продажа или закупка — документ ядра. В журнале строка без obligation и allowed_actions; карточка и ответы команд несут обе.
  - `id` string, uuid, required
  - `side` 'sale' | 'purchase', required
  - `type_key` 'customer_order' | 'supplier_order', required
  - `number` string, required
  - `date` string, date, required
  - `document_status` 'draft' | 'posted' | 'cancelled', required
  - `state` 'draft' | 'confirmed' | 'executing' | 'executed' | 'closed' | 'cancelled', required
  - `business_id` string, uuid, required
  - `company_id` string, uuid
  - `contact_id` string, uuid, required
  - `business_name` string
  - `company_name` string
  - `contact_name` string
  - `contract_id` string, uuid
  - `channel_id` string, uuid
  - `channel_name` string
  - `contract_number` string: Номер договора продажи или закупки — для экрана
  - `contract_date` string, date: Дата договора продажи или закупки — для экрана
  - `progress` CoreOrderProgress: Ход продажи или закупки для строки списка (with=progress). executed — исполнено в валюте продажи или закупки; paid — оплачено, нет поля — финансы выключены; papers — счёт, акт и УПД: done — есть, wait — ждём подписи, нет ключа — нет; нет поля — документооборот выключен.
    - `executed` string, required
    - `paid` string
    - `debt` string: Долг из регистра расчётов — тот же, что во «Взаиморасчётах»; нет поля — финансы выключены
    - `papers` object
  - `project_id` string, uuid
  - `department_id` string, uuid
  - `cfo_id` string, uuid
  - `pnl_item_id` string, uuid
  - `execution_cutover` boolean: Бизнес продажи или закупки прошёл отсечку этапа 4: исполнение закрывает вклад регистра «Продажи и закупки» и признаёт выручку; «Сделать акт» в документообороте выпускает бумагу и проводит исполнение одной командой
  - `warehouse_id` string, uuid
  - `basis_id` string, uuid
  - `title` string, required
  - `currency` string, required
  - `prices_include_vat` boolean, required
  - `discount` string, required: Скидка на продажу или закупку целиком, как её ввели; в суммах строк уже учтена
  - `delivery_date` string, date
  - `due_date` string, date
  - `scenario` string, required
  - `manager_note` string
  - `warehouse_note` string
  - `comment` string
  - `buyer` CoreOrderBuyer: Покупатель-физлицо: розничный продажа или закупка стоит на общей карточке покупателя, и различает покупателей только это.
    - `name` string
    - `phone` string
    - `email` string
  - `source_kind` 'manual' | 'app' | 'import' | 'marketplace' | 'crm' | 'migration' | 'contract', required: Откуда продажа или закупка. contract — продажа или закупка периода регулярного договора документооборота (commerce-cycle.md § 2.6): его external_id — «<id договора>/<период>» (2026-10, 2026-Q4, 2026-W41), и загрузка с тем же внешним номером отвечает core.trade.foreign_source.
  - `source_system` string
  - `external_id` string
  - `cabinet_status_id` string, uuid
  - `cabinet_status_name` string
  - `sale_order_id` string, uuid
  - `sale_order_number` string: Номер этой продажи
  - `funnel_id` string, uuid
  - `version` integer, required
  - `closed_at` string
  - `closed_reason` string
  - `close_document_id` string, uuid
  - `migrated_from` string
  - `lines` CoreOrderLine[], required
    - `id` string, uuid, required
    - `position` integer, required
    - `kind` 'goods' | 'service' | 'material' | 'semi_product', required
    - `product_id` string, uuid
    - `title` string, required
    - `unit` string
    - `unit_id` string, uuid
    - `quantity` string, required: Десятичное число строкой
    - `price` string, required: Десятичное число строкой
    - `discount` string, required: Скидка самой строки
    - `discount_amount` string, required: Доля скидки продажи или закупки на этой строке; суммы строки посчитаны после обеих скидок
    - `vat_rate` string: Ставка, как её ввели; пусто — по учётной политике
    - `vat_rate_applied` string: Ставка, по которой строка посчитана; пусто — налог не выделен
    - `amount_net` string, required: Сумма строкой в разрядности валюты продажи или закупки
    - `vat_amount` string, required: Сумма строкой в разрядности валюты продажи или закупки
    - `amount_gross` string, required: Сумма строкой в разрядности валюты продажи или закупки
    - `base_qty` string: Количество в базовой единице склада
    - `basis_document_id` string, uuid
    - `basis_line_id` string, uuid
    - `price_type_id` string, uuid
    - `price_type_name` string
    - `price_source` '' | 'manual' | 'contract' | 'contract_price' | 'channel' | 'contact' | 'contact_price' | 'default' | 'supplier': Откуда цена строки: manual — введена человеком; contract, channel, contact, default — вид цены договора, канала, контрагента или по умолчанию; contract_price, contact_price — индивидуальная цена; supplier — цена поставщика
  - `responsibles` CoreOrderResponsible[], required
    - `employee_id` string, uuid, required
    - `employee_name` string
    - `share` string, required: Доля в процентах: больше нуля, не больше ста
  - `stages` CoreOrderStage[]: Этапы работ продажи или закупки (этап 4 ERP-1427)
    - `id` string, uuid
    - `position` integer
    - `title` string
    - `planned_date` string, date
    - `amount` string: Сумма этапа в валюте продажи или закупки с налогом
    - `line_ids` UUID[]: Строки продажи или закупки, которые закрывает этап; пусто — строки-услуги по порядку
  - `payment_terms` CoreOrderPaymentTerm[]: График оплат продажи или закупки; id строки — разрез stage регистра расчётов
    - `id` string, uuid
    - `position` integer
    - `title` string
    - `amount` string
    - `due_date` string, date
    - `due_trigger` '' | 'after_stage': '' — срок датой; after_stage — через delay_days после исполнения этапа stage_id
    - `stage_id` string, uuid
    - `delay_days` integer
    - `share` string: Доля итога документа в процентах, только на входе: строка без суммы получает сумму от итога с НДС, последняя такая строка добирает копейки
  - `totals` CoreOrderTotals, required: Итоги — сумма строк: скидка продажи или закупки уже разложена по строкам и второй раз не вычитается.
    - `net` string, required: Сумма строкой в разрядности валюты продажи или закупки
    - `vat` string, required: Сумма строкой в разрядности валюты продажи или закупки
    - `gross` string, required: Сумма строкой в разрядности валюты продажи или закупки
    - `goods_gross` string, required: Сумма строкой в разрядности валюты продажи или закупки
    - `services_gross` string, required: Сумма строкой в разрядности валюты продажи или закупки
    - `currency` string, required
  - `created_by` integer
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `posted_at` string
  - `cancelled_at` string
  - `obligation` CoreOrderObligation
    - `ordered` string, required: Действующий приход подтверждения в регистре «Продажи и закупки»
    - `remaining` string, required: Остаток портфеля продажи или закупки в регистре «Продажи и закупки»: заказано минус снятое закрытием. Это не денежный долг: долг контрагента и зачёт аванса живут в расчётах (settlement), и при «Долг 0,00» этот остаток остаётся полным. До этапа 4 исполнение его не уменьшает, поэтому это и не «осталось исполнить»
    - `executed` string, required: Исполнено: сумма проведённых исполнений продажи или закупки (акт, продажа, закупка, приёмка) за вычетом возвратов, в валюте продажи или закупки. То же число, что в журнале продаж и закупок финансов (core_order_executed)
    - `remaining_to_execute` string, required: Осталось исполнить: заказано минус исполнено, не меньше нуля
  - `allowed_actions` CoreOrderAllowedAction[]: Только в карточке и ответах команд
    - `action` 'edit' | 'confirm' | 'cancel' | 'close' | 'reopen' | 'cabinet_status' | 'responsibles' | 'contract', required
    - `allowed` boolean, required
    - `reason_code` string: Код отказа: core.trade.has_executions, core.trade.has_dependents (оплаты, авансы, черновики исполнений), core.trade.closed, core.trade.forbidden
    - `reason` string: Причина словами на языке запроса
  - `vat_warnings` CoreOrderVATWarning[]: Только в карточке: строки со ставкой, названной человеком, равной прежней общей ставке юрлица, когда на сегодня общая ставка уже другая — «проверьте ставку», не отказ
    - `line_id` string, uuid, required
    - `title` string, required
    - `rate` string, required: Ставка строки, названная человеком
    - `general` string, required: Общая ставка юрлица на дату
    - `date` string, date, required
  - `unchanged` boolean: Только в ответах команд подтверждения, отмены и возврата в работу: true — команде нечего было делать (подтверждена уже, отменена уже, не закрыта), заказ не изменился. Повтор команды отвечает той же карточкой, а не ошибкой

## Other responses

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

---

[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/3c60ded179f2?raw)
