для разработчиков На сайт Rentu

Готовые клиенты

Два готовых клиента и коллекция Postman. Можно взять целиком или посмотреть, как устроена работа с токеном и лимитами.

Коллекция Postman#

Файл импортируется через Import → File. Дальше по шагам:

  1. Открыть переменные коллекции, вписать client_id и client_secret.
  2. Выполнить Авторизация → Получить токен. Скрипт во вкладке Tests сам положит токен в переменную access_token, остальные запросы возьмут её автоматически.
  3. Выполнить Справочники → Торговые центры, скопировать id нужного центра в переменную sc_id.
  4. Выполнить Справочники → Торговые точки, скопировать id точки в shop_id.

Необязательные параметры в запросах выключены галочкой: включить стоит те, что нужны. У каждого метода в описании подписаны ограничения и ссылка на страницу документации.

Python#

Один файл без зависимостей кроме requests. Копируется в проект целиком.

python
import datetime as dt
from rentu_api import Rentu, RentuError

api = Rentu("YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET")

for sc in api.shopping_centers():
    end = api.today(sc) - dt.timedelta(days=1)     # «вчера» в зоне центра
    start = end - dt.timedelta(days=6)

    for shop in api.shops(sc["id"]):
        for day in api.by_days(sc["id"], shop["id"], start, end):
            print(sc["title"], shop["name"], day["date"], api.rubles(day["turnover"]))

Что клиент берёт на себя:

  • обновляет токен за минуту до истечения, повторных запросов к /auth/token не делает;
  • повторяет при 429 по Retry-After и при 503 с нарастающей паузой, остальные коды поднимает как RentuError с полями code, message, details и retryable;
  • обходит постраничные методы, отдавая строки, а не страницы;
  • режет длинные периоды чеков на окна по 31 дню, потому что API их иначе не отдаст;
  • считает «сегодня» в таймзоне центра и переводит копейки в рубли.

Чеки за полтора месяца одним вызовом, окна режутся внутри:

python
receipts = api.receipts(sc_id, shop_id, start, end, by="created")
total = sum(r["total_sum"] for r in receipts if r["operation_type"] == 1)

Повторное создание события не считается ошибкой:

python
event = api.create_event(sc_id, name="Чёрная пятница", description="Скидки",
                         event_type="marketing",
                         start_date="2026-11-27", end_date="2026-11-30")
if event is None:
    print("такое событие уже есть")

1С:Предприятие 8.3#

Общий модуль с флагом «Сервер»: у клиентского контекста нет доступа к внешним ресурсам. Учётные данные стоит положить в константы РентуClientId и РентуClientSecret, а для токена завести параметры сеанса РентуТокен и РентуТокенДействуетДо.

bsl
ТорговыеЦентры = РентуAPI.ТорговыеЦентры();

Для Каждого ТЦ Из ТорговыеЦентры Цикл
    Точки = РентуAPI.ТорговыеТочки(ТЦ["id"]);

    Для Каждого Точка Из Точки Цикл
        Продажи = РентуAPI.ПродажиПоДням(
            ТЦ["id"], Точка["id"], НачалоПериода, КонецПериода);

        Для Каждого День Из Продажи Цикл
            Сообщить(Точка["name"] + " " + День["date"] + " "
                + Формат(РентуAPI.Рубли(День["turnover"]), "ЧДЦ=2"));
        КонецЦикла;
    КонецЦикла;
КонецЦикла;

Модуль обходит страницы сам, обновляет протухший токен и повторяет запрос один раз, а при 429 ждёт столько, сколько попросил сервер. Остальные ошибки поднимаются исключением с машинным кодом в тексте.

Даты в 1С нужно форматировать как Формат(Дата, "ДФ=yyyy-MM-dd"). Строковое представление по умолчанию зависит от региональных настроек, и API его не разберёт.

Про таймзону: «вчера» надо считать по зоне центра, она приходит в поле time_zone. Если центры в разных часовых поясах, единая дата для всех даст расхождение на день. Подробнее в разделе Частые ошибки.

Что дальше#

Клиенты закрывают транспорт, но не бизнес-логику. Прежде чем строить витрину, стоит заглянуть в Частые ошибки интеграции: там собрано, где именно расходятся цифры.