Версия документа - 1.1
Дата последнего обновления - 2026-03-13
В версии 1.1 добавлено описание: основных терминов, формат передачи данных, повторы запросов (idempotency), список возможных ошибок, их описание, информация о тестовом окружении и получении к нему доступов. Добавлена ссылка на Google диск, для скачивания Postman коллекции.
- Введение
- Базовый URL и доступы
- Авторизация
- Формат данных
- Ограничения
- Повторы запросов (idempotency)
- Ошибки
- Методы
- Коллекция Postman
- Поддержка
- Возможные вопросы
- Введение
- Базовый URL и доступы
- Авторизация
- Формат данных
- Ограничения
- Повторы запросов (idempotency)
- Ошибки
- Методы
- Коллекция Postman
- Поддержка
- Возможные вопросы
Введение
Партнерский API промокодов и сертификатов предоставляет программный интерфейс для управления промокодами и сертификатами в системе Литрес. API позволяет партнерам автоматизировать процессы выпуска, отслеживания и управления кодами.
Старая версия API - https://docs.litres.ru/public/6425738.html
Термины
Серия - сущность, внутри которой выпускаются коды, предполагающие определенный тип контента, например подписка или номинал денежных средств, которые можно потратить на покупки внутри сервиса Литрес. Может иметь срок годности (valid_unltil), но также может быть и бессрочной. Сроком действия серии может управлять бизнес-менеджер или аккаунт-менеджер Литрес, значение может изменяться как в бОльшую, так и меньшую сторону. При достижении срока истечения, коды выпущенные в рамках серии будет невозможно активировать. Но если срок действия серии будет продлен - коды можно будет активировать. Как правило, для бесперебойной работы партнера с API, устанавливается срок действия на десятки лет вперед, или же не ограничивается вовсе.
Код (купон/сертификат) - цифровое или буквенно-цифровое значение (формат настраивается менеджером Литрес, но как правило используется цифровой 16-значный формат, например 0000111122223333 ), активация которого, внутри сервиса Литрес, подразумевает предоставление пользователю контента (например Литрес подписки, денежного номинала на счет аккаунта Литрес или книги). Срок действия купона привязан к сроку годности серии, если истекла серия - значит истекли все купоны, выпущенные в ее рамках. Код может иметь четыре основных состояния:
- Выпущен - получен партнером посредством запроса в API
- Активирован (погашен) пользователем в Литрес
- Просрочен (истек) - в случае наступления valid_until у серии
- Удален - стерт из базы данных Литрес
Погашение кода (активация) - активация кода пользователем на лендинге сайта или в приложении Литрес.
Основные возможности API:
Получение списка доступных серий кодов.
Выпуск новых кодов из существующих серий кодов.
Получение списка активных (непогашенных) и погашенных кодов.
Просмотр детальной информации о конкретном коде.
Регистрация продаж кодов.
Удаление кодов.
Базовый URL и доступы
Prod
Все запросы выполняются к базовому URL:
https://api.litres.ru/foundation/api
Для работы с API, со стороны Литрес, партнеру выдаются:
partnerId - идентификатор партнера
partnerKey - секретный ключ для подписи запросов
seriesId - id серии/серий (при необходимости, получить список доступных серий партнер может вызвав метод /series)
Если партнер был ранее подключен к старой версии API - доступы от старой версии полностью совместимы с новой версией.
partner (старая) = partnerId (новая)
secret_key (старая) = partnerKey (новая)
serie (старая) = seriesId (новая)
Test
Тестовое окружение реализовано лишь для отладки работы с API, купоны выпускаемые в рамках тестирования не получится активировать в сервисе.
Для доступа к тестовому окружению партнеру необходимо предоставить IP адреса, с которых планируется проводить тестирование.
Все запросы выполняются к базовому URL:
https://demo.api.litres.ru/foundation/api
Для работы в тестовом окружении, со стороны Литрес, партнеру выдается отдельные:
partnerId - идентификатор партнера
partnerKey - секретный ключ для подписи запросов
seriesId - id серии
Авторизация
Для доступа к API используется HMAC-подпись на основе секретного ключа партнера.
Заголовки запроса
Каждый запрос должен содержать следующие заголовки:
| Заголовок | Описание | Пример |
|---|---|---|
| Текущая временная метка в формате UNIX-timestamp. Допустимый разброс ±60 секунд от текущего времени |
|
| HMAC-SHA256 подпись в строковом представлении. |
|
Формирование подписи
Подпись формируется по формуле:
HMAC-SHA256(timestamp + "." + partnerId, partnerKey)
Где:timestamp– UNIX-timestamp;partnerId– идентификатор партнера;partnerKey– секретный ключ партнера.
При невалидной подписи, истекшем timestamp или отсутствии заголовков возвращается 403 PermissionMissingError
Формат данных
Тип данных
application/json
Временные метки
Все временные метки в API передаются в формате ISO 8601 с часовым поясом, предпочтительно в UTC:
"2026-02-02T09:00:00Z""2026-12-31T20:59:00Z"
Пагинация
Методы, возвращающие списки, поддерживают курсорную пагинацию через объект pagination:
next_page– URL для получения следующей страницыprevious_page– URL для получения предыдущей страницы
Размер страницы регулируется при отправлении запроса параметром запроса limit .
Ограничения
Частота запросов: Соблюдайте разумные интервалы между запросами.
Количество кодов: Ограничение на выпуск кодов – от 1 до 1000 кодов за раз.
Время жизни подписи: Подпись действительна в течение 1 минуты.
- Ограничений по RPS - нет
- Ограничений по количеству параллельных запросов - нет
Повторы запросов (idempotency)
- Метод issue не является idempotent - повторный вызов с теми же параметрами сгенерирует новые коды (для проверки выпущенных кодов рекомендуется использовать метод GET /promocodes/{code})
- Нет механизма idempotency-key для повторных запросов
- Метод remove также не idempotent - удаление уже удаленного кода вернет is_removed: False с причиной NOT_FOUND в FailureReasonStatus
Ошибки
Запросы к 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"
}
]
}
}
Список возможных ошибок
| HTTP | Тип ошибки | Причина | Методы |
|---|---|---|---|
| 400 | ExternalArtNotAvailable | В запросе передан недопустимый UUID книги. Книга не доступна для продажи | /issue |
| 400 | PromocodeSeriesCannotLinkArts | В запросе передан UUID, но конфигурация серии не предусматривает выпуск кодов на книги | /issue |
| 400 | PromocodeSeriesInvalidQuantity | В параметре quantity передано невалидное значение | /issue |
| 400 | PromocodeSeriesFixedCodeWithQuantity | Конфигурация переданной в запросе серии, не предусматривает выпуск более чем одного купона (характерно для серий для промо-акций, где один код могут активировать более одного пользователя) | /issue |
| 403 | PermissionMissing | Ошибка авторизации ( невалидная подпись, истекший timestamp, partnerId не найден) | Все |
| 404 | ResourceNotFoundByIDError | Не найдена серия или код | /:code ; /issue |
| 404 | PromocodeDoesNotBelongToPartner | Код/серия не принадлежит партнеру | /:code ; /issue |
| 422 | RequestParamValidationError | Валидация параметров запроса (например, неверный формат datetime) | Все |
| 400 | PromocodeIsAlreadySold | Код уже помечен как проданный | /sold |
| 5XX | InternalServerError | Ошибка сервера | Все |
Методы
Получение списка доступных для выпуска серий кодов
В ответе на запрос возвращаются только серии, срок действия которых не истек.
Метод | Путь |
|---|---|
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": []
}
]
}
}
Получение списка погашенных кодов
Если параметры from / to не переданы - по умолчанию возвращаются погашенные коды за последние сутки.
Метод | 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
}
]
}
}
}
Регистрация продажи кодов
Метод является опциональным. Но мы настоятельно рекомендуем его использовать. Можно вызывать до или после передачи кода клиенту, строгих временных рамок нет.
Даже если код уже был активирован (погашен), вызов метода sold отработает успешно. Зарегистрировать проду удаленного кода - нельзя, так как он уже не существует.
Метод | 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 и попробовать его методы. В коллекции реализована автоматическая авторизация запросов. Для работы автоматической авторизации запросов требуется заполнить специальные переменные в коллекции.
Ссылка на Google Диск
Поддержка
При возникновении вопросов или проблем с API обращайтесь к отделу разработки Литрес с указанием:
Идентификатора партнера;
Времени возникновения ошибки;
X-Request-IDиз заголовков ответа;Подробного описания проблемы.
Возможные вопросы
- Всегда ли сервер возвращает X-Request-ID в ответе? - Да.
- Есть ли SLA по времени ответа API? - 400 миллисекунд для 90-го процентиля.
- Как быстро после погашения код появляется в списке redeemed? - Сразу после погашения кода.