POST /api/external/v2/sc/{sc_id}/shops/{shop_id}/turnover BASIC
Метод для арендаторов, у которых нет онлайн-кассы или чьи данные не доходят
до нас через ОФД. Переданное значение попадает в поле manual_turnover
продаж по месяцам и участвует в расчёте OCR.
Параметры#
| Имя | Тип | Обяз. | Описание |
|---|---|---|---|
sc_id | string, в пути | да | Идентификатор центра |
shop_id | string, в пути | да | Идентификатор точки этого центра |
month | date | да | Любая дата внутри месяца, YYYY-MM-DD. Месяц берётся целиком |
turnover | integer | да | Оборот за месяц в копейках |
receipts_count | integer | нет | Количество чеков за месяц |
visitors_count | integer | нет | Количество посетителей за месяц |
Разбивка по НДС#
Необязательные суммы за тот же месяц, все в копейках и не меньше нуля:
| Имя | Описание |
|---|---|
income_with_vat | Выручка с НДС |
income_without_vat | Выручка без НДС |
vat | Сумма НДС |
additional_income_with_vat | Дополнительная выручка с НДС |
additional_income_without_vat | Дополнительная выручка без НДС |
refunds_with_vat | Возвраты с НДС |
refunds_without_vat | Возвраты без НДС |
Разбивка сохраняется в месячном отчёте точки рядом с оборотом. На manual_turnover
и расчёт OCR она не влияет: туда идёт только turnover.
Суммы в копейках. В API v1 этот метод принимал рубли, поэтому при переносе интеграции значение нужно умножить на 100.
Месяц заводится автоматически, если его ещё нет. Повторный вызов за тот же месяц перезаписывает значения, а не добавляет второе: метод идемпотентен по паре «точка + месяц».
Перезаписываются только переданные поля. turnover обязателен и обновляется всегда,
а необязательное поле, которого нет в запросе, сохраняет прежнее значение. Чтобы
обнулить сумму, её нужно передать явно как 0.
Будущий месяц отклоняется. Граница считается в таймзоне торговой точки.
curl -X POST "https://api.rentu.ru/api/external/v2/sc/{sc_id}/shops/{shop_id}/turnover" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"month": "2026-07-01",
"turnover": 12345600,
"receipts_count": 42,
"visitors_count": 500,
"income_with_vat": 13345600,
"income_without_vat": 11288000,
"vat": 2057600
}'Ответ#
Статус 200 OK. В ответе месяц целиком в том виде, в каком он сохранён после записи,
включая поля, которых не было в запросе.
| Поле | Тип | Описание |
|---|---|---|
shop_id | string | Идентификатор точки |
month | string | Месяц, YYYY-MM |
manual_turnover | integer | Оборот, копейки |
manual_receipts_count | integer | null | Количество чеков |
manual_visitors_count | integer | null | Количество посетителей |
manual_income_with_vat, manual_income_without_vat | integer | Выручка с НДС и без, копейки |
manual_vat | integer | Сумма НДС, копейки |
manual_additional_income_with_vat, manual_additional_income_without_vat | integer | Дополнительная выручка с НДС и без, копейки |
manual_refunds_with_vat, manual_refunds_without_vat | integer | Возвраты с НДС и без, копейки |
Суммы разбивки, которые ни разу не передавались, приходят как 0, счётчики как null.
{
"success": true,
"data": {
"shop_id": "6a1f2c3d4e5f60718293a4b5",
"month": "2026-07",
"manual_turnover": 12345600,
"manual_receipts_count": 42,
"manual_visitors_count": 500,
"manual_vat": 2057600,
"manual_income_with_vat": 13345600,
"manual_income_without_vat": 11288000,
"manual_additional_income_with_vat": 0,
"manual_additional_income_without_vat": 0,
"manual_refunds_with_vat": 0,
"manual_refunds_without_vat": 0
}
}Что происходит после записи#
Точка, по которой пришёл оборот, отмечается как активная и получает источник данных «ручной ввод». Пересчитывается OCR, если у точки заведена аренда. Запись попадает в журнал ручного ввода от имени сотрудника, которому принадлежит ключ.
Ошибки#
| Код | HTTP | Когда |
|---|---|---|
not_found | 404 | Точки нет в этом центре |
validation_error | 422 | Месяц в будущем, отрицательная сумма или счётчик, неразобранная дата |