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

Изменение коэффициентов и доступности исхода

Между выбором ставки пользователем и отправкой купона состояние исхода в спортивной линии может измениться:

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

Перед созданием купона Система расчета купонов SportAPI проверяет каждый элемент list_bets по актуальной линии.

Коэффициент в указателе

Указатель содержит коэффициент, который был показан пользователю:

line#737779544#1#1#0#1.85

Последнее значение 1.85 — коэффициент, переданный партнером. При создании купона API сравнивает его с текущим коэффициентом этого исхода.

Если значения совпадают и исход доступен, проверка проходит независимо от выбранного режима.

Параметры mode и mode_type

Поведение при изменении коэффициента задают два поля:

{
  "mode": "reject",
  "mode_type": null
}
ПолеВозможные значенияНазначение
modereject, acceptОтклонить изменившийся коэффициент или разрешить его прием.
mode_type1, 2, 3, nullУточнить, какое направление изменения можно принять при mode = "accept".

Если mode не передан или имеет значение null, используется reject.

Режим reject

reject — безопасный режим по умолчанию:

{
  "mode": "reject",
  "mode_type": null
}

Купон создается только тогда, когда переданный коэффициент совпадает с актуальным. При любом изменении вверх или вниз API отклоняет запрос с error_code = 501.

Используйте этот режим, если пользователь должен самостоятельно подтвердить каждый изменившийся коэффициент.

Режим accept

accept разрешает принять актуальный коэффициент без отдельного повторного подтверждения:

{
  "mode": "accept",
  "mode_type": 1
}

При mode = "accept" необходимо передать mode_type:

mode_typeПоведение
1Принимать только повышение коэффициента.
2Принимать только понижение коэффициента.
3Принимать повышение и понижение коэффициента.

Если изменение разрешено выбранным mode_type, купон создается с актуальным коэффициентом из линии.

accept относится только к изменению коэффициента. Он не позволяет принять заблокированный или отсутствующий исход и не игнорирует ошибку проверки.

Пример поведения режимов

Партнер передал коэффициент 2.00.

РежимАктуальный коэффициентИзменениеРезультат
reject2.20ПовышениеКупон отклонен.
reject1.80ПонижениеКупон отклонен.
accept, mode_type = 12.20ПовышениеКупон принят с коэффициентом 2.20.
accept, mode_type = 11.80ПонижениеКупон отклонен.
accept, mode_type = 22.20ПовышениеКупон отклонен.
accept, mode_type = 21.80ПонижениеКупон принят с коэффициентом 1.80.
accept, mode_type = 32.20ПовышениеКупон принят с коэффициентом 2.20.
accept, mode_type = 31.80ПонижениеКупон принят с коэффициентом 1.80.

Партнер должен заранее объяснить пользователю выбранное поведение. Особенно важно учитывать, что mode_type = 2 и mode_type = 3 могут принять коэффициент ниже показанного в корзине.

Четыре основных варианта отказа

Если хотя бы один исход не проходит проверку, новый API возвращает сведения о проблемных исходах в массиве:

body.changes

body.changes всегда является массивом, даже если проблема обнаружена только у одной ставки.

1. Коэффициент понизился

Передан коэффициент 2.19, актуальный коэффициент снизился до 2.09, а выбранный режим не разрешает понижение:

{
  "code": 0,
  "body": {
    "changes": [
      {
        "game_id": 737779544,
        "bet_coefficient": 2.19,
        "actual_coefficient": 2.09,
        "change_type": 2,
        "status": "rejected"
      }
    ]
  },
  "error_code": 501,
  "error_message": "Coefficient is change",
  "date": 1784970000000,
  "time_ms": 20,
  "path": "/api/partner/coupons/place"
}

Основные значения:

status = rejected
change_type = 2
error_code = 501

2. Коэффициент повысился

Передан коэффициент 2.19, актуальный коэффициент повысился до 2.39, а выбранный режим не разрешает повышение:

{
  "code": 0,
  "body": {
    "changes": [
      {
        "game_id": 737779544,
        "bet_coefficient": 2.19,
        "actual_coefficient": 2.39,
        "change_type": 1,
        "status": "rejected"
      }
    ]
  },
  "error_code": 501,
  "error_message": "Coefficient is change",
  "date": 1784970000000,
  "time_ms": 20,
  "path": "/api/partner/coupons/place"
}

Основные значения:

status = rejected
change_type = 1
error_code = 501

3. Исход заблокирован

Исход найден в линии, но прием ставки на него заблокирован:

{
  "code": 0,
  "body": {
    "changes": [
      {
        "game_id": 737779544,
        "bet_coefficient": 2.19,
        "actual_coefficient": null,
        "change_type": null,
        "status": "block"
      }
    ]
  },
  "error_code": 503,
  "error_message": "Bet outcome is blocked",
  "date": 1784970000000,
  "time_ms": 20,
  "path": "/api/partner/coupons/place"
}

Основные значения:

status = block
change_type = null
error_code = 503

Для заблокированного исхода направление изменения коэффициента неприменимо. Поэтому change_type имеет значение null. actual_coefficient также может быть null.

4. Исход недоступен

Исход больше не найден в текущей линии:

{
  "code": 0,
  "body": {
    "changes": [
      {
        "game_id": 737779544,
        "bet_coefficient": 2.19,
        "actual_coefficient": null,
        "change_type": null,
        "status": "no_data"
      }
    ]
  },
  "error_code": 502,
  "error_message": "Bet outcome is not available",
  "date": 1784970000000,
  "time_ms": 20,
  "path": "/api/partner/coupons/place"
}

Основные значения:

status = no_data
change_type = null
error_code = 502

Для отсутствующего исхода актуальный коэффициент неизвестен, поэтому actual_coefficient и change_type имеют значение null.

Поля body.changes

ПолеТипОписание
game_idintegerID события из переданного указателя.
bet_coefficientnumberКоэффициент, переданный партнером.
actual_coefficientnumber/nullАктуальный коэффициент. Может быть null, если исход отсутствует или проверка не была выполнена.
change_typeinteger/nullНаправление изменения коэффициента.
statusstringПричина, по которой исход не прошел проверку.

Значения change_type

change_type является числом или null:

ЗначениеОписание
1Актуальный коэффициент выше переданного.
2Актуальный коэффициент ниже переданного.
nullНаправление изменения неприменимо или не определено.

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

Для блокировки, отсутствия исхода и ошибки проверки ориентируйтесь на status, а не на change_type.

Причины отказа

Ситуацияstatuschange_typeerror_code
Коэффициент изменился и не принят выбранным режимомrejected1 или 2501
Исход отсутствует в текущей линииno_datanull502
Исход заблокированblocknull503
Во время проверки исхода произошла ошибкаerrornull504

Ответы 502 и 503 являются результатом проверки текущего состояния линии, а не транспортной ошибкой.

Ни один из режимов accept не позволяет принять исход со статусом no_data, block или error.

Что должна делать система партнера

rejected

  1. Не сохранять данные корзины как принятый купон.
  2. Показать пользователю переданный и актуальный коэффициенты.
  3. Получить обновленный указатель из линии.
  4. Предложить пользователю подтвердить ставку повторно, если это предусмотрено интерфейсом.

Не изменяйте коэффициент внутри старого указателя вручную — получите актуальный указатель из линии.

no_data

Исход больше недоступен в текущей линии:

  1. не сохраняйте купон как принятый;
  2. удалите или отключите исход в корзине;
  3. сообщите пользователю, что ставка больше недоступна.

block

Исход существует, но временно или окончательно заблокирован:

  1. не сохраняйте купон как принятый;
  2. отключите подтверждение этого исхода;
  3. обновите данные линии перед повторной попыткой.

error

API не смог проверить исход:

  1. не считайте купон принятым;
  2. сообщите пользователю, что ставку сейчас невозможно проверить;
  3. обновите линию и разрешите повторную попытку позднее.

Обработка экспресса

В body.changes может находиться несколько элементов — по каждому изменившемуся или недоступному исходу.

Если ответ содержит code = 0, не сохраняйте экспресс как принятый, даже если часть его исходов прошла проверку. Сначала обработайте все элементы body.changes, обновите корзину и только после этого сформируйте новый запрос.

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

Старый POST /bet/place для всех четырех причин возвращает общий error_code = 501. Массив причин находится непосредственно в body, а отсутствующий исход обозначается старым значением nodata. В новом /api/partner/coupons/place используются отдельные коды 501–504, массив body.changes и значение no_data.

Для новой интеграции используйте только новый формат. Полное сравнение приведено в руководстве «Переход со старого API».

Следующий раздел: «Жизненный цикл расчета».