SportAPI Документация
RU
C Документация продуктаCoupon API
v1
Услуга и цены ↗ Получить доступ ↗
Coupon API / Cashout

Cashout

В разработке. Функция Cashout еще не прошла полное тестирование. Не используйте ее в production до отдельного подтверждения готовности от SportAPI.

Текущий маршрут и формат ответа могут измениться после завершения разработки и тестирования.

Текущее состояние

На данный момент:

  • нового маршрута /api/partner/** для Cashout нет;
  • доступен только экспериментальный маршрут старого API;
  • метод рассчитывает возможное значение Cashout;
  • метод не выполняет продажу купона;
  • метод не меняет статус купона;
  • метод не списывает и не начисляет деньги;
  • завершенный контракт подтверждения Cashout пока не опубликован.

Поэтому текущий метод нельзя использовать как готовый финансовый сценарий.

Что делает текущий метод

Экспериментальный маршрут:

GET /coupons/cashout?coupon_code={coupon_code}

Он возвращает расчетную оценку для активного купона на момент запроса.

Это только получение расчетного предложения:

запрос оценки → ответ с расчетными значениями

Следующего шага, который подтверждает продажу купона через API, в текущем публичном контракте нет.

Условия экспериментального запроса

Для получения оценки:

  • нужно передать Bearer JWT клиентского аккаунта;
  • купон должен принадлежать владельцу JWT;
  • купон должен быть активным;
  • coupon_code должен состоять ровно из 12 цифр.

Код купона храните и передавайте как строку, чтобы не потерять ведущие нули.

Пример запроса

Следующий пример предназначен только для согласованного тестирования, а не для production.

GET /coupons/cashout?coupon_code=000000000272 HTTP/1.1
Host: coupon-api.example.com
Authorization: Bearer <token>
Accept: application/json
BASE_URL="https://coupon-api.example.com"
TOKEN="<jwt-token>"
COUPON_CODE="000000000272"

curl --request GET \
  --url "$BASE_URL/coupons/cashout?coupon_code=$COUPON_CODE" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer $TOKEN"

Фактический тестовый BASE_URL партнер получает у менеджера.

Текущий экспериментальный ответ

{
  "code": 1,
  "body": {
    "amount": 1,
    "old_coef": 2.5,
    "old_win": 2.5,
    "new_coef": 1.4,
    "new_win": 1.4,
    "events_data": [
      {
        "uuid": "912",
        "old_coef": 2.5,
        "new_coef": 1.4,
        "has_change": true
      }
    ]
  },
  "error_code": null,
  "error_message": null,
  "date": 1784970000000
}

Поля текущего ответа

Общий расчет

ПолеТипТекущее назначение
amountnumberСумма исходной ставки.
old_coefnumberКоэффициент купона до текущего пересчета Cashout.
old_winnumberЗначение выигрыша до текущего пересчета Cashout.
new_coefnumberНовый расчетный коэффициент предложения.
new_winnumberНовое расчетное значение предложения Cashout.
events_dataarrayИзменения коэффициентов отдельных ставок купона.

Одна ставка в events_data

ПолеТипТекущее назначение
uuidstringВнутренний ID ставки в строковом виде.
old_coefnumberПредыдущее значение коэффициента ставки.
new_coefnumberНовое значение коэффициента ставки.
has_changebooleanИзменился ли коэффициент этой ставки.

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

Ошибки текущего маршрута

error_codeЗначение
560Код купона отсутствует или имеет неверный формат.
565Cashout недоступен: купон неактивен, не принадлежит клиентскому аккаунту или не соответствует условиям функции.

Пример бизнес-ошибки:

{
  "code": 0,
  "body": null,
  "error_code": 565,
  "error_message": "<описание недоступности Cashout>",
  "date": 1784970000000
}

Как и в других старых маршрутах, бизнес-ошибка может прийти с HTTP 200. Проверяйте поле code и error_code.

Что нельзя делать на основании ответа

Текущий успешный ответ не означает, что купон продан.

После получения new_win нельзя автоматически:

  • считать Cashout подтвержденным;
  • менять статус купона на финальный;
  • начислять пользователю new_win;
  • прекращать ожидание обычного расчета купона;
  • считать, что Система расчета купонов SportAPI зафиксировала финансовую операцию.

Метод не изменяет купон и баланс. Он возвращает только расчетное значение на момент запроса.

Почему нельзя использовать в production

До завершения тестирования не подтверждены как стабильный публичный контракт:

  • окончательная формула расчета;
  • срок действия предложения;
  • правила изменения значения между запросами;
  • полный набор ограничений для разных типов купонов;
  • сценарий подтверждения или продажи купона;
  • финансовая идемпотентность операции;
  • окончательные поля и коды ошибок;
  • новый маршрут /api/partner/**.

Документация будет обновлена после подтверждения этих правил.

Если партнер участвует в тестировании

Тестирование нужно предварительно согласовать с менеджером.

Рекомендуется:

  1. использовать только тестовое окружение;
  2. не связывать ответ с реальным балансом пользователя;
  3. журналировать запрос, coupon_code и полный ответ;
  4. проверять результаты на разных типах купонов;
  5. не строить production-код на неизменности текущих полей;
  6. отдельно согласовать с менеджером все найденные расхождения.

Что появится после завершения разработки

После готовности функции документация должна отдельно подтвердить:

  • рекомендуемый маршрут нового API;
  • получение актуального предложения;
  • срок действия предложения;
  • подтверждение Cashout;
  • изменение статуса купона;
  • финансовое действие;
  • защиту от повторного подтверждения;
  • полный набор ошибок;
  • поведение callback и polling после Cashout.

До публикации этих правил функцию следует считать недоступной для production-интеграции.

Контрольный список текущего статуса

  • Cashout находится в разработке.
  • Функция еще не протестирована полностью.
  • Новый маршрут /api/partner/** отсутствует.
  • Текущий /coupons/cashout является старым экспериментальным маршрутом.
  • Метод возвращает только расчетную оценку.
  • Метод не продает купон и не изменяет баланс.
  • Текущий контракт может измениться.
  • Production-использование не рекомендуется.

Следующий раздел: «Интеграция ординара».