Statuses and Payout Calculation
The coupon and every bet within it have their own status. Always interpret a status code according to the object to which the status field belongs.
Important. Coupon and bet status tables are different. For example, a winning single has coupon status
2and bet status1. A losing single has coupon status4and bet status2. When a coupon is returned for recalculation, the coupon status is15and the corresponding bet status is4.
Coupon statuses
| Code | Name | Meaning | Final |
|---|---|---|---|
0 | NEW | The coupon is active or an accumulator is partially settled. | No |
2 | WIN | The coupon won. | Yes |
4 | LOSE | The coupon lost. For an accumulator, this status may appear immediately after the first losing outcome. | Yes |
8 | RETURN | The coupon was fully returned. | Yes |
15 | UPDATE | The coupon was returned for recalculation and is waiting for a new result. | No |
For a losing accumulator, status 4 is known before every bet is settled, but another complete snapshot with the final status of each outcome may arrive later.
Bet statuses
| Code | Name | Meaning | Settlement multiplier |
|---|---|---|---|
0 | NET | The bet has not yet been settled. | — |
1 | WIN | Full win. | Original odds |
2 | LOSE | Full loss. | 0 |
3 | RETURN | Bet return. | 1 |
4 | RECALCULATE | The outcome was returned for recalculation. | — |
21 | HALF_WIN | Half win. | (coef + 1) / 2 |
22 | HALF_LOSE | Half loss. | 0.5 |
23 | PUSH | Return on a tied result. | 1 |
The bet settlement multiplier is provided:
- in the full coupon model as
events_data[].calc_coef; - in a callback as
events_data[].calculate_coefficient.
An unsettled bet or a bet awaiting recalculation does not yet have a settlement multiplier.
Amount and winnings fields
| Field | Meaning |
|---|---|
amount | Stake amount submitted when the coupon was placed. |
win | Current displayed winnings amount. |
potential_win | Potential winnings before final settlement. |
real_win | Actual amount after the coupon is settled. |
Use real_win to update the balance after final settlement. Do not use potential_win as the actual payout, and do not independently recalculate the credit from the displayed odds.
Settlement reason
In both the full model and callbacks, every bet may contain:
| Field | Purpose |
|---|---|
settlement_reason_code | Stable code identifying the settlement or return reason. |
settlement_reason | Explanatory text describing the reason. |
Before settlement, both fields are null. Use the code rather than the text in program logic. The financial result is always determined by the provided status, settlement multiplier, and real_win; the reason does not replace these fields.
For example, on a return the code may indicate that the match was cancelled (MATCH_CANCELLED), postponed (MATCH_POSTPONED), or the market was settled as a push (MARKET_PUSH). The set of codes is extensible: store an unknown value without rejecting the response.
To notify the end user, the partner should localize its own message based on settlement_reason_code. If the code is unknown, a non-empty settlement_reason may be displayed as a fallback explanation. Do not calculate the payout from the reason text; use the provided real_win value.
These fields describe the settlement reason, not the live operational state of the match. They remain null until the bet is settled.
In a callback, the actual payout field is named realWin.
Before final settlement:
- immediately after placement,
real_winisnullin the full model; - in an intermediate callback,
realWinis0, while the coupon status remains0.
The field value before a final status is not the final payout. Therefore, neither null in the full model nor 0 in an intermediate callback should be treated as a loss without checking the coupon status.
Coupon odds fields
| Field | Meaning |
|---|---|
coef | Current or final coupon odds. |
original_coef | Coupon odds at placement time. |
calculate_coef | Final settlement multiplier. Before settlement: null. |
In a callback, the final multiplier field is named calculate_coefficient. In an intermediate callback it is 0 because the final multiplier has not yet been formed.
General calculation logic
For a settled coupon, the final multiplier is formed from the settlement multipliers of its bets:
calculate_coef = factor_1 × factor_2 × ... × factor_n
real_win = amount × calculate_coef
The formula explains how individual bet results affect the coupon. For financial crediting, use the provided real_win value returned by the API.
Full win
The multiplier of a winning bet equals its odds.
Single example:
amount = 10
coef = 1.85
bet status = 1
calculate_coef = 1.85
real_win = 18.5
coupon status = 2
Example accumulator with two winning bets:
amount = 10
factor_1 = 1.80
factor_2 = 1.50
calculate_coef = 1.80 × 1.50 = 2.70
real_win = 10 × 2.70 = 27
coupon status = 2
Loss
A losing bet has a multiplier of 0. If at least one accumulator outcome loses, the final multiplier and payout of the entire coupon are 0.
bet status = 2
calculate_coef = 0
real_win = 0
coupon status = 4
For an accumulator, coupon status 4 appears immediately after the first losing outcome, even if other bets have not yet been settled.
Return
A returned bet has a multiplier of 1.
For a returned single:
bet status = 3
calculate_coef = 1
real_win = amount
coupon status = 8
The return of one accumulator outcome does not return the entire coupon. That outcome neither increases nor reduces the combined multiplier to zero:
factor_1 = 1.80
factor_2 = 1
factor_3 = 1.50
calculate_coef = 1.80 × 1 × 1.50 = 2.70
If all coupon bets have the RETURN or PUSH status, the entire coupon receives status 8, the final multiplier is 1, and real_win equals amount.
Push
PUSH is used for a tied result and has the same settlement multiplier of 1 as a return:
bet status = 23
calc_coef = 1
A push on one bet does not make the accumulator lose and does not increase its final multiplier.
Half win
For HALF_WIN, the settlement multiplier is calculated as follows:
factor = (coef + 1) / 2
Example for odds of 2.00:
factor = (2.00 + 1) / 2 = 1.50
For a single with an amount of 10, the actual payout is:
real_win = 10 × 1.50 = 15
The bet status is 21.
HALF_WIN accumulator example
The accumulator contains two bets:
- the first bet won at odds of
1.80; - the second bet, at odds of
2.00, receivedHALF_WIN.
Settlement multiplier of the second bet:
(2.00 + 1) / 2 = 1.50
Calculation of the entire accumulator with amount = 10:
factor_1 = 1.80
factor_2 = 1.50
calculate_coef = 1.80 × 1.50 = 2.70
real_win = 10 × 2.70 = 27
The original odds of 2.00 for the second bet are not multiplied in full. The reduced multiplier of 1.50 is included in the accumulator calculation.
Half loss
For HALF_LOSE, the settlement multiplier is always 0.5.
For a single with an amount of 10:
real_win = 10 × 0.5 = 5
The bet status is 22.
HALF_LOSE accumulator example
The accumulator contains two bets:
- the first bet won at odds of
1.80; - the second bet received
HALF_LOSEand a multiplier of0.5.
Calculation of the entire accumulator with amount = 10:
factor_1 = 1.80
factor_2 = 0.5
calculate_coef = 1.80 × 0.5 = 0.90
real_win = 10 × 0.90 = 9
HALF_LOSE does not reduce the entire accumulator to zero like a full loss with status 2. Instead, the 0.5 multiplier is included in the product together with the multipliers of the other bets.
If the same accumulator also contains a fully losing bet with a multiplier of 0, the final multiplier and real_win for the entire coupon are 0.
Recalculation
When a result is returned for recalculation:
- the coupon receives status
15(UPDATE); - the corresponding bet receives status
4(RECALCULATE); - status
15is not final; - a new coupon state arrives after recalculation.
If the partner has already processed the previous result, on first receiving status 15 it must:
- debit the stake
amountfrom the user again; - move the coupon into a state that waits for a new result;
- after the new final status, credit the new
real_winvalue.
The operations must be idempotent. A repeated callback delivery with the same batchId must not debit or credit funds again.
The callback does not contain amount. Store the amount when the coupon is placed or retrieve it through a coupon read API method.
Decimal values and rounding
Amounts, odds, and payouts are returned as decimal numbers without a fixed number of decimal places:
{
"amount": 10,
"calculate_coef": 1.5,
"real_win": 15
}
The API does not guarantee a textual format such as 10.00 or 1.50. The partner defines the rounding and display rules.
Use the received real_win value to update the balance. This prevents discrepancies caused by repeated calculation or different rounding rules.
Next section: Result callbacks.