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

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

`GET /api/v1/core/sales`

## Request

- Base URL: `https://erp.akeda.ru`
- URL: `https://erp.akeda.ru/api/v1/core/sales`
- 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

Продажи и поставщикам в области юрлиц действующего: продажа без юрлица виден только тому, кому видны все юрлица; приложение видит только продажи своего источника. Строка несёт итоги, стороны словами и статус кабинета. `total` — сколько продаж под отбором всего.

## Query parameters

- `side` 'sale' | 'purchase'
- `status` string
- `contact_id` string, uuid
- `company_id` string, uuid
- `business_id` string, uuid
- `contract_id` string, uuid
- `project_id` string, uuid
- `responsible_id` string, uuid
- `date_from` string, date
- `date_to` string, date
- `search` string
- `external_id` string
- `source` 'manual' | 'app' | 'import' | 'marketplace' | 'crm' | 'migration' | 'contract': Откуда продажа или закупка. contract — продажа или закупка периода регулярного договора документооборота (commerce-cycle.md § 2.6): его external_id — «<id договора>/<период>» (2026-10, 2026-Q4, 2026-W41), и загрузка с тем же внешним номером отвечает core.trade.foreign_source.
- `with` string
- `limit` integer
- `offset` integer
- `amount_from` string
- `amount_to` string
- `papers` string

## Headers

- `X-Tenant` string, required

## Response `200`

Страница журнала продаж

- CoreOrderPage
  - `items` CoreOrder[], required
    - `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 — команде нечего было делать (подтверждена уже, отменена уже, не закрыта), заказ не изменился. Повтор команды отвечает той же карточкой, а не ошибкой
  - `total` integer, required: Сколько продаж или закупок под отбором всего
  - `limit` integer, required
  - `offset` integer, required
  - `has_more` boolean, required
  - `state_counts` object: Только с with=counts: число продаж или закупок по состояниям при том же отборе без отбора состояний
  - `totals` CoreOrderListTotal[]: Только с with=totals: итоги столбцов по всем строкам отбора, по валютам; черновики и отменённые не входят
    - `currency` string, required: Валюта
    - `count` integer, required: Сколько строк вошло в итог
    - `ordered` string, required: Сумма продаж или закупок
    - `executed` string, required: Исполнено
    - `paid` string, required: Оплачено
    - `debt` string, required: Долг: сумма долгов строк из регистра расчётов

## Other responses

- `400`: Некорректный запрос или нарушение бизнес-правила
- `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)
