- Введение
- Базовый URL
- Авторизация
- Формат данных
- Ограничения
- Ошибки
- Методы
- Коллекция Postman
- Поддержка
- Введение
- Базовый URL
- Авторизация
- Формат данных
- Ограничения
- Ошибки
- Методы
- Коллекция Postman
- Поддержка
Введение
Партнерский API промокодов и сертификатов предоставляет программный интерфейс для управления промокодами и сертификатами в системе Литрес. API позволяет партнерам автоматизировать процессы выпуска, отслеживания и управления кодами.
Старая версия API - https://docs.litres.ru/public/6425738.html
Основные возможности API:
Получение списка доступных серий кодов.
Выпуск новых кодов из существующих серий кодов.
Получение списка активных (непогашенных) и погашенных кодов.
Просмотр детальной информации о конкретном коде.
Регистрация продаж кодов.
Удаление кодов.
Базовый URL
Все запросы выполняются к базовому URL:
https://api.litres.ru/foundation/api
Авторизация
Для доступа к API используется HMAC-подпись на основе секретного ключа партнера.
Заголовки запроса
Каждый запрос должен содержать следующие заголовки:
| Заголовок | Описание | Пример |
|---|---|---|
| Текущая временная метка в формате UNIX-timestamp. |
|
| HMAC-SHA256 подпись в строковом представлении. |
|
Формирование подписи
Подпись формируется по формуле:
HMAC-SHA256(timestamp + "." + partnerId, partnerKey)
Где:timestamp– UNIX-timestamp;partnerId– идентификатор партнера;partnerKey– секретный ключ партнера.
Формат данных
Временные метки
Все временные метки в API передаются в формате ISO 8601 с часовым поясом, предпочтительно в UTC:
"2026-02-02T09:00:00Z""2026-12-31T20:59:00Z"
Пагинация
Методы, возвращающие списки, поддерживают курсорную пагинацию через объект pagination:
next_page– URL для получения следующей страницыprevious_page– URL для получения предыдущей страницы
Размер страницы регулируется при отправлении запроса параметром запроса limit .
Ограничения
Частота запросов: Соблюдайте разумные интервалы между запросами.
Количество кодов: Ограничение на выпуск кодов – 1000 кодов за раз.
Время жизни подписи: Подпись действительна в течение 1 минуты.
Ошибки
Запросы к API могут возвращать разные ошибки, как ошибки партнерского API промокодов и сертификатов, так и ошибки сервера.
В объекте ошибки всегда присутствует набор из 3 полей: type, title и detail. Поле type есть всегда, поля title и detail могут не отправляться сервером в зависимости от специфики ошибки, но все равно следует ожидать, что они могут быть, чтобы иметь возможность их обработать.
Также к каждому из типов ошибки могут добавляться свои собственные уникальные поля. Обрабатывать их требуется только в том случае, если это нужно для функционирования интеграции с API. В остальных случаях достаточно обрабатывать набор из 3 полей.
Ниже будет приведена общая структура данных для всех возможных ошибок при запросах к API на примере общей ошибки сервера.
Тело
Название | Тип | Наличие | Описание |
|---|---|---|---|
status | Целое число | Обязательный | Код статуса. |
error | Объект | Обязательный | Ошибка. |
├ type | Строка | Обязательный | Тип ошибки. |
├ title | Строка | Необязательный | Название ошибки, если есть. |
├ detail | Строка | Необязательный | Детали ошибки, если есть. |
├ error_descriptions | Объект | Необязательный | Собственные данные ошибки. |
{
"status": 422,
"error": {
"type": "ParamValidationError",
"title": "Validation error because of request parameters",
"detail": "Received a validation error while interpreting request parameters. See error_descriptions for details",
"error_descriptions": [
{
"loc": [
"body",
"quantity"
],
"msg": "Input should be greater than or equal to 1",
"type": "greater_than_equal"
}
]
}
}
Методы
Получение списка доступных для выпуска серий кодов
Метод | Путь |
|---|---|
GET | /partners/:partnerId/promocodes/series |
Запрос
Параметры пути
Название | Тип | Наличие | Описание |
|---|---|---|---|
partnerId | Целое число | Обязательный | Идентификатор партнера. |
Параметры запроса
Название | Тип | Наличие | Описание |
|---|---|---|---|
limit | Целое число | Необязательный | Количество записей на странице, от 1 до 100, по умолчанию 10. |
before | Строка | Необязательный | Указатель предыдущей страницы, предоставляет сервер. |
after | Строка | Необязательный | Указатель следующей страницы, предоставляет сервер. |
Ответ
Успешное получение списка доступных для выпуска серий кодов
Код статуса
200 OK
Тело
Название | Тип | Наличие | Описание |
|---|---|---|---|
status | Целое число | Обязательный | Код статуса. |
error | Объект | Обязательный | Ошибка, есть есть ошибка. |
payload | Объект | Обязательный | Полезная нагрузка, если нет ошибки. |
├ pagination | Объект | Обязательный | Пагинация. |
│ ├ next_page | URL | Обязательный | URL следующей страницы, если есть. |
│ ├ previous_page | URL | Обязательный | URL предыдущей страницы, если есть. |
├ data | Список объектов | Обязательный | Список данных. |
│ ├ id | Целое число | Обязательный | Идентификатор серии кодов. |
│ ├ quantity | Целое число | Обязательный | Количество кодов в серии кодов. |
│ ├ configuration_id | Целое число | Обязательный | Идентификатор конфигурации кода. |
│ ├ nominal | Строка | Обязательный | Номинал кода, в десятичном выражении. |
│ ├ discount | Объект | Обязательный | Скидка. |
│ │ ├ discount_percent | Целое число | Обязательный | Процент скидки. |
│ │ ├ discount_duration_days | Целое число | Обязательный | Продолжительность скидки в днях. |
│ │ ├ discount_collection_id | Целое число | Обязательный | Идентификатор скидочной коллекции, если есть. |
│ ├ price | Строка | Обязательный | Цена кода, в десятичном выражении. |
│ ├ description | Строка | Обязательный | Описание серии кодов, если есть. |
│ ├ message_subject | Строка | Обязательный | Тема сообщения, если есть. |
│ ├ message_body | Строка | Обязательный | Тело сообщения в HTML-формате, если есть. |
│ ├ valid_until | Временная метка | Обязательный | Дата и время истечения действия серии кодов. |
│ ├ arts | Список объектов | Обязательный | Список книг прикрепленных к серии кодов. |
│ │ ├ art_id | Целое число | Обязательный | Идентификатор книги. |
│ ├ is_arts_override_allowed | Флаг | Обязательный | Разрешено ли переопределение книгприкрепленных к серии кодов. |
{
"status": 200,
"error": null,
"payload": {
"pagination": {
"next_page": null,
"previous_page": null
},
"data": [
{
"id": 355178,
"quantity": 8,
"configuration_id": 198268,
"nominal": "0.0",
"discount": {
"discount_percent": 0,
"discount_duration_days": 0,
"discount_collection_id": null
},
"price": "0.0",
"description": "Партнерская подписка N",
"message_subject": "Подписка N активирована",
"message_body": "<p>Поздравляем с активацией подписки N!</p>",
"valid_until": "2026-12-31T20:59:00Z",
"arts": [],
"is_arts_override_allowed": false
}
]
}
}
Получение списка непогашенных кодов
Метод | URL |
|---|---|
GET | /partners/:partnerId/promocodes/active |
Запрос
Параметры пути
Название | Тип | Наличие | Описание |
|---|---|---|---|
partnerId | Целое число | Обязательный | Идентификатор партнера. |
Параметры запроса
Название | Тип | Наличие | Описание |
|---|---|---|---|
limit | Целое число | Необязательный | Количество записей на странице, от 1 до 100, по умолчанию 10. |
before | Строка | Необязательный | Указатель предыдущей страницы, предоставляет сервер. |
after | Строка | Необязательный | Указатель следующей страницы, предоставляет сервер. |
Ответ
Успешное получение списка непогашенных кодов
Код статуса
200 OK
Тело
Название | Тип | Наличие | Описание |
|---|---|---|---|
status | Целое число | Обязательный | Код статуса. |
error | Объект | Обязательный | Ошибка, заполнен только есть есть ошибка. |
payload | Объект | Обязательный | Полезная нагрузка, заполнена только если нет ошибки. |
├ pagination | Объект | Обязательный | Пагинация. |
│ ├ next_page | URL | Обязательный | URL следующей страницы, заполнен если есть. |
│ ├ previous_page | URL | Обязательный | URL предыдущей страницы, заполнен если есть. |
├ data | Список объектов | Обязательный | Список данных. |
│ ├ code | Строка | Обязательный | Код. |
│ ├ id | Целое число | Обязательный | Идентификатор кода. |
│ ├ series_id | Целое число | Обязательный | Идентификатор серии кодов. |
│ ├ expires_at | Временная метка | Обязательный | Дата и время истечения кода. |
│ ├ promocode_arts | Список объектов | Обязательный | Список книг прикрепленных к коду. |
│ │ ├ art_id | Целое число | Обязательный | Идентификатор книги. |
│ ├ promocode_bonus_arts | Список объектов | Обязательный | Список бонусных книг прикрепленных к коду. |
│ │ ├ art_id | Целое число | Обязательный | Идентификатор книги. |
{
"status": 200,
"error": null,
"payload": {
"pagination": {
"next_page": null,
"previous_page": null
},
"data": [
{
"code": "4810553506676722",
"id": 6504523553,
"series_id": 355178,
"expires_at": "2026-12-31T20:59:00Z",
"promocode_arts": [],
"promocode_bonus_arts": []
},
{
"code": "1407632935067730",
"id": 6504523558,
"series_id": 355178,
"expires_at": "2026-12-31T20:59:00Z",
"promocode_arts": [],
"promocode_bonus_arts": []
}
]
}
}
Получение списка погашенных кодов
Метод | URL |
|---|---|
GET | /partners/:partnerId/promocodes/redeemed |
Запрос
Параметры пути
Название | Тип | Наличие | Описание |
|---|---|---|---|
partnerId | Целое число | Обязательный | Идентификатор партнера. |
Параметры запроса
Название | Тип | Наличие | Описание |
|---|---|---|---|
from | Временная метка | Необязательный | Дата и время начала периода, для которого нужно получить список погашенных кодов. |
to | Временная метка | Необязательный | Дата и время конца периода, для которого нужно получить список погашенных кодов. |
limit | Целое число | Необязательный | Количество записей на странице, от 1 до 100, по умолчанию 10. |
before | Строка | Необязательный | Указатель предыдущей страницы, предоставляет сервер. |
after | Строка | Необязательный | Указатель следующей страницы, предоставляет сервер. |
Ответ
Успешное получение списка погашенных кодов
Код статуса
200 OK
Тело
Название | Тип | Наличие | Описание |
|---|---|---|---|
status | Целое число | Обязательный | Код статуса. |
error | Объект | Обязательный | Ошибка, заполнен только есть есть ошибка. |
payload | Объект | Обязательный | Полезная нагрузка, заполнена только если нет ошибки. |
├ pagination | Объект | Обязательный | Пагинация. |
│ ├ next_page | URL | Обязательный | URL следующей страницы, заполнен если есть. |
│ ├ previous_page | URL | Обязательный | URL предыдущей страницы, заполнен если есть. |
├ data | Объект | Обязательный | Данные. |
│ ├ code | Строка | Обязательный | Код. |
│ ├ redeemed_at | Временная метка | Обязательный | Дата и время погашения кода. |
│ ├ id | Целое число | Обязательный | Идентификатор кода. |
{
"status": 200,
"error": null,
"payload": {
"pagination": {
"next_page": null,
"previous_page": null
},
"data": [
{
"code": "sxk8s8h2hd4stndt",
"redeemed_at": "2026-02-02T09:02:54Z",
"id": 6504742761
}
]
}
}
Получение информации о коде
Метод | URL |
|---|---|
GET | /partners/:partnerId/promocodes/:code |
Запрос
Параметры пути
Название | Тип | Наличие | Описание |
|---|---|---|---|
partnerId | Целое число | Обязательный | Идентификатор партнера. |
code | Строка | Обязательный | Код. |
Ответ
Успешное получение информации о коде
Код статуса
200 OK
Тело
Название | Тип | Наличие | Описание |
|---|---|---|---|
status | Целое число | Обязательный | Код статуса. |
error | Объект | Обязательный | Ошибка, заполнен только есть есть ошибка. |
payload | Объект | Обязательный | Полезная нагрузка, заполнена только если нет ошибки. |
├ data | Список объектов | Обязательный | Список данных. |
│ ├ code | Строка | Обязательный | Код. |
│ ├ id | Целое число | Обязательный | Идентификатор кода. |
│ ├ series_id | Целое число | Обязательный | Идентификатор серии кодов. |
│ ├ expires_at | Временная метка | Обязательный | Дата и время истечения кода. |
│ ├ promocode_arts | Список объектов | Обязательный | Список книг прикрепленных к коду. |
│ │ ├ art_id | Целое число | Обязательный | Идентификатор книги. |
│ ├ promocode_bonus_arts | Список объектов | Обязательный | Список бонусных книг прикрепленных к коду. |
│ │ ├ art_id | Целое число | Обязательный | Идентификатор книги. |
{
"status": 200,
"error": null,
"payload": {
"data": {
"code": "sxk8s8h2hd4stndt",
"id": 6504742761,
"series_id": 355178,
"expires_at": "2026-12-31T20:59:00Z",
"promocode_arts": [],
"promocode_bonus_arts": []
}
}
}
Выпуск кодов из серии кодов
Метод | URL |
|---|---|
POST | /partners/:partnerId/promocodes/series/:seriesId/issue |
Запрос
Параметры пути
Название | Тип | Наличие | Описание |
|---|---|---|---|
partnerId | Целое число | Обязательный | Идентификатор партнера. |
seriesId | Целое число | Обязательный | Идентификатор серии кодов. |
Тело
Название | Тип | Наличие | Описание |
|---|---|---|---|
| Целое число | Обязательный | Количество кодов, от 1 до 1000. |
uuids | Список UUID | Необязательный | Список UUID книг, которые нужно прикрепить к выпускаемым кодам. При передаче этого поля книги в серии кодов будут переопределены. |
bonus_uuids | Список UUID | Необязательный | Список UUID бонусных книг, которые нужно прикрепить к выпускаемым кодам. Если указан список UUID книг, этот список будет проигнорирован. |
Ответ
Успешный выпуск кодов из серии кодов
Код статуса
201 Created
Тело
Название | Тип | Наличие | Описание |
|---|---|---|---|
status | Целое число | Обязательный | Код статуса. |
error | Объект | Обязательный | Ошибка, заполнен только есть есть ошибка. |
payload | Объект | Обязательный | Полезная нагрузка, заполнена только если нет ошибки. |
├ data | Список объектов | Обязательный | Список данных. |
│ ├ issued_quantity | Целое число | Обязательный | Количество выпущенных кодов из серии кодов. |
│ ├ promocodes | Список объектов | Обязательный | Список выпущенных кодов. |
│ │ ├ id | Целое число | Обязательный | Идентификатор кода. |
│ │ ├ code | Строка | Обязательный | Код. |
{
"status": 201,
"error": null,
"payload": {
"data": {
"issued_quantity": 2,
"promocodes": [
{
"id": 6506041616,
"code": "7kcht248mh8brc3t"
},
{
"id": 6506041621,
"code": "rvjvr4f5g5njbz7h"
}
]
}
}
}
Удаление кодов
Метод | URL |
|---|---|
POST | /partners/:partnerId/promocodes/remove |
Запрос
Параметры пути
Название | Тип | Наличие | Описание |
|---|---|---|---|
partnerId | Целое число | Обязательный | Идентификатор партнера. |
Тело
Название | Тип | Наличие | Описание |
|---|---|---|---|
| Список строк | Обязательный | Список кодов для удаления, от 1 до 100. |
Ответ
Успешное удаление кодов
Код статуса
200 OK
Тело
Название | Тип | Наличие | Описание |
|---|---|---|---|
status | Целое число | Обязательный | Код статуса. |
error | Объект | Обязательный | Ошибка, заполнен только есть есть ошибка. |
payload | Объект | Обязательный | Полезная нагрузка, заполнена только если нет ошибки. |
├ data | Список объектов | Обязательный | Список данных. |
│ ├ requested_quantity | Целое число | Обязательный | Количество запрошенных к удалению кодов. |
│ ├ removed_quantity | Целое число | Обязательный | Количество удаленных кодов. |
│ ├ results | Список объектов | Обязательный | Список результатов удаления кодов. |
│ │ ├ id | Целое число | Обязательный | Идентификатор кода. |
│ │ ├ redeem_at | Временная метка | Обязательный | Дата и время погашения кода. |
│ │ ├ code | Строка | Обязательный | Код. |
│ │ ├ is_removed | Флаг | Обязательный | Удален ли код. |
│ │ ├ failure_reason | Строка | Обязательный | Причина отказа в удалении, если есть. |
{
"status": 200,
"error": null,
"payload": {
"data": {
"requested_quantity": 2,
"removed_quantity": 2,
"results": [
{
"id": 6506041616,
"redeem_at": null,
"code": "7kcht248mh8brc3t",
"is_removed": true,
"failure_reason": null
},
{
"id": 6506041626,
"redeem_at": null,
"code": "p6p8fq5t3d6vq8vr",
"is_removed": true,
"failure_reason": null
}
]
}
}
}
Регистрация продажи кодов
Метод | URL |
|---|---|
| POST | /partners/:partnerId/promocodes/sold |
Запрос
Параметры пути
Название | Тип | Наличие | Описание |
|---|---|---|---|
partnerId | Целое число | Обязательный | Идентификатор партнера. |
Тело
Название | Тип | Наличие | Описание |
|---|---|---|---|
| Целое число | Обязательный | Идентификатор серии кодов. |
| Строка | Обязательный | Код. |
| Временная метка | Обязательный | Дата и время продажи кода. |
Ответ
Успешная регистрация продажи кода
Код статуса
200 OK
Тело
Название | Тип | Наличие | Описание |
|---|---|---|---|
status | Целое число | Обязательный | Код статуса. |
error | Объект | Обязательный | Ошибка, заполнен только есть есть ошибка. |
payload | Объект | Обязательный | Полезная нагрузка, заполнена только если нет ошибки. |
├ data | Список объектов | Обязательный | Список данных. |
│ ├ id | Целое число | Обязательный | Идентификатор кода. |
│ ├ series_id | Целое число | Обязательный | Идентификатор серии кодов. |
│ ├ sold_at | Временная метка | Обязательный | Дата и время продажи кода. |
{
"status": 200,
"error": null,
"payload": {
"data": {
"id": 6504742761,
"series_id": 355178,
"sold_at": "2026-02-02T09:00:00Z"
}
}
}
Коллекция Postman
Для партнерского API промокодов и сертификатов реализована коллекция запросов для Postman, которая позволяет лучше разобраться в устройстве API и попробовать его методы. В коллекции реализована автоматическая авторизация запросов. Для работы автоматической авторизации запросов требуется заполнить специальные переменные в коллекции.
Поддержка
При возникновении вопросов или проблем с API обращайтесь к отделу разработки Литрес с указанием:
Идентификатора партнера;
Времени возникновения ошибки;
X-Request-IDиз заголовков ответа;Подробного описания проблемы.
