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

Совместимые старые маршруты

Старые маршруты продолжают поддерживаться, и их удаление в настоящее время не планируется.

Этот раздел нужен только существующим интеграциям. Для нового подключения используйте:

/api/partner/**

Полная последовательность обновления кода собрана в документе «Переход со старого API».

Карта старых маршрутов

МетодСтарый маршрутНазначениеРекомендуемая замена
POST/api/v2/loginПолучение JWT по старому контракту./api/partner/login
POST/bet/placeСоздание купона по старому контракту./api/partner/coupons/place
GET/coupons/getОдин купон в старом DTO./api/partner/coupons/get
GET/coupons/calculatedНедавние расчеты в старом DTO./api/partner/coupons/calculated
GET/coupons/listКупоны по периоду создания.POST /api/partner/coupons/results
GET/api/v3/partner/bet/listАлиас старого списка.POST /api/partner/coupons/results
GET/coupons/cashoutЭкспериментальная оценка Cashout.Нового маршрута пока нет

Старая оболочка ответа

Старые маршруты возвращают пять верхнеуровневых полей:

{
  "code": 1,
  "body": {},
  "error_code": null,
  "error_message": null,
  "date": 1784970000000
}

В старой оболочке отсутствуют:

  • time_ms;
  • path.

Бизнес-ошибка обычно приходит с HTTP 200 и code = 0.

Авторизация старого API

Получение токена

POST /api/v2/login

Запрос:

{
  "login": "<login>",
  "password": "<password>"
}

Ответ:

{
  "code": 1,
  "body": {
    "token": "eyJhbGciOiJIUzI1NiJ9..."
  },
  "error_code": null,
  "error_message": null,
  "date": 1784970000000
}

Неверные учетные данные:

{
  "code": 0,
  "body": null,
  "error_code": 99,
  "error_message": "Wrong login or password",
  "date": 1784970000000
}

Старый login возвращает этот же ответ для любого отказа авторизации: неизвестного логина, неверного пароля, отключенного аккаунта, истекшего доступа или недостаточного баланса. Раздельные причины доступны только в новом POST /api/partner/login.

Неверный JWT

Старые защищенные маршруты сохраняют прежнее поведение:

{
  "code": 0,
  "body": false,
  "error_code": 1003,
  "error_message": "Wrong token",
  "date": 1784970000000
}

Ответ приходит с HTTP 200.

Новый API вместо этого использует HTTP 401 и 403.

Создание купона

POST /bet/place

Старый маршрут сохраняет прежний контракт запроса и ответа.

В нем поля:

  • list_bets;
  • amount;
  • callback_url;
  • currency;
  • lang;
  • mode;
  • mode_type;
  • multi.

Для старого маршрута lang, mode и multi обязательны. Неверные или неполные данные возвращают error_code = 505.

Успешный результат

Текущий совместимый маршрут возвращает созданные купоны прямым массивом в body, без объекта body.coupons:

{
  "code": 1,
  "body": [
    {
      "coupon_code": "000000000272",
      "amount": 10,
      "win": 18.5,
      "coef": 1.85,
      "status": 0,
      "calculate_date": null,
      "coupon_type": 1,
      "events_count": 1,
      "events_data": [
        {
          "uuid": "912",
          "game_id": 737779544,
          "status": 0,
          "coef": 1.85,
          "calc_coef": null,
          "calculate_date": null
        }
      ]
    }
  ],
  "error_code": null,
  "error_message": null,
  "date": 1784970000000
}

Исторические версии старого описания содержали примеры, где одиночный купон находился непосредственно в объекте body. При переносе существующей интеграции проверьте фактический контракт используемого окружения. Новый /api/partner/coupons/place всегда использует однозначный массив body.coupons[].

Ошибки проверки линии

Старый /bet/place для всех четырех причин использует:

error_code = 501
error_message = "Coefficient is change"

Причины передаются прямым массивом в body:

{
  "code": 0,
  "body": [
    {
      "game_id": 738917381,
      "bet_coefficient": 3.6,
      "actual_coefficient": null,
      "change_type": null,
      "status": "no_data"
    }
  ],
  "error_code": 501,
  "error_message": "Coefficient is change",
  "date": 1784970000000
}

Возможные status:

  • rejected;
  • no_data;
  • block;
  • error.

change_type:

  • 1 — коэффициент вырос;
  • 2 — коэффициент снизился;
  • null — блокировка, отсутствие исхода или ошибка проверки.

Строковые значения increase и decrease не используются.

Новый /api/partner/coupons/place разделяет эти причины на 501–504 и возвращает массив в body.changes.

Получение одного купона

GET /coupons/get?coupon_code=000000000272

Требования:

  • Bearer JWT;
  • код ровно из 12 цифр.

Ошибки:

error_codeЗначение
560Код отсутствует или имеет неверный формат.
561Купон не найден или принадлежит другому клиенту.

Старый маршрут возвращает старую модель купона. Внутренний ID ставки называется uuid и передается строкой.

Недавно рассчитанные купоны

GET /coupons/calculated?time={minutes}

Правила time:

  • значение по умолчанию — 5 минут;
  • time <= 0 заменяется на 5;
  • максимум — 120 минут;
  • отбор выполняется по времени окончательного расчета;
  • активные и чужие купоны не возвращаются.

Результат — прямой массив старых DTO в body.

Современная замена сохраняет логику окна, но возвращает полную новую модель:

GET /api/partner/coupons/calculated?time={minutes}

Список купонов

GET /coupons/list
GET /api/v3/partner/bet/list

Query-параметры:

ПолеТипОписание
start_dateinteger/nullНачало периода создания, Unix-миллисекунды.
end_dateinteger/nullКонец периода создания, Unix-миллисекунды.

Правила:

  • без дат возвращаются последние 24 часа;
  • только start_date — 24 часа после него;
  • только end_date — 24 часа до него;
  • при двух датах интервал должен быть положительным и не превышать 24 часа;
  • купоны возвращаются в старом DTO.

Современная замена:

POST /api/partner/coupons/results

Она принимает обе даты в JSON либо до 100 значений coupon_ids.

Совместимые /api/v3/partner/bet/**

Несмотря на префикс /api/v3, маршруты имеют разное назначение:

МаршрутФормат
POST /api/v3/partner/bet/placeАлиас нового /api/partner/coupons/place.
GET /api/v3/partner/bet/getАлиас нового /api/partner/coupons/get.
GET /api/v3/partner/bet/activeАлиас нового /api/partner/coupons/active.
GET /api/v3/partner/bet/listАлиас старого /coupons/list; возвращает старый DTO.

Для новой интеграции не используйте смешанный набор /api/v3/**. Переходите на единые /api/partner/**.

Отличия старого DTO

В старой модели:

  • ставка идентифицируется строковым uuid;
  • нет полного разделения potential_win и real_win;
  • нет полного набора исходных и расчетных коэффициентов;
  • меньше данных о саб-событии;
  • меньше расширенных полей счета;
  • отдельные совместимые поля имеют исторические названия.

Начиная с версии 1.2.0, ставка старой модели также содержит:

  • settlement_reason_code — стабильный код причины расчета или возврата;
  • settlement_reason — поясняющий текст причины.

Не используйте текст settlement_reason как программный ключ. Набор кодов может расширяться.

В новой модели:

  • ставка имеет числовой events_data[].id;
  • uuid используется в callback;
  • добавлены potential_win, real_win, original_coef, calculate_coef;
  • добавлены сведения о live и саб-событии;
  • добавлены полные названия и расширенные поля счета.

Старые коды ошибок

КодЗначение
99Неверный логин или пароль.
501Общая ошибка проверки исхода.
505Неверные или неполные данные /bet/place.
506Несколько ставок одного матча в купоне.
507Недостаточный баланс клиентского аккаунта; купоны не создаются.
560Неверный код купона.
561Купон не найден.
565Cashout недоступен.
1003Неверный JWT.
10000Неизвестная или внутренняя ошибка.

Историческое описание связывало 507 с общей серверной ошибкой. В актуальном контракте 1.2.0 код означает Insufficient balance: создание отклоняется полностью, купоны не создаются и клиентский баланс не изменяется. Код 540 остается историческим и не входит в актуальный OpenAPI-контракт.

Cashout

GET /coupons/cashout?coupon_code={coupon_code}

Функция:

  • находится в разработке;
  • полностью не протестирована;
  • не рекомендуется для production;
  • только рассчитывает оценку;
  • не продает купон и не изменяет баланс.

Нового маршрута /api/partner/** пока нет.

Подробнее: «Cashout».

Что менять в существующем коде

Не смешивайте старый и новый DTO в одном неявном обработчике.

При постепенном переходе:

  1. явно определяйте контракт по вызванному маршруту;
  2. храните coupon_code строкой;
  3. поддержите новый объект body.coupons при создании;
  4. сопоставляйте новый id ставки со старым или callback uuid;
  5. добавьте новые статусы и расчетные поля;
  6. перейдите на HTTP 401/403 нового API;
  7. после проверки отключайте старые маршруты по одному.

Полный checklist: «Переход со старого API».

Контрольный список legacy-поддержки

  • Старые маршруты используются только существующим кодом.
  • Новый код использует /api/partner/**.
  • Старая оболочка не ожидает time_ms и path.
  • Неверный старый JWT обрабатывается по error_code = 1003.
  • Ошибка старого /bet/place читается из прямого массива body.
  • coupon_code хранится строкой.
  • Старый uuid не путается с batchId.
  • /api/v3/partner/bet/list распознается как старый DTO.
  • Cashout не используется в production.

Следующий раздел: «Термины».