Singles, Accumulators, and multi
The type of coupon created depends on the number of entries in list_bets and the value of multi.
The API returns the type in the coupon_type field:
coupon_type | Coupon type | Number of bets |
|---|---|---|
1 | Single | One bet |
2 | Accumulator | Two or more bets |
Single
A single is a separate coupon containing one bet.
Example:
{
"list_bets": [
"line#737779544#1#1#0#1.85"
],
"amount": 10,
"multi": false
}
Result:
{
"coupon_type": 1,
"events_count": 1,
"amount": 10
}
If list_bets contains only one entry, both multi = false and multi = true create one single.
Accumulator
An accumulator is one coupon that combines multiple bets on different matches.
To create an accumulator, submit multiple pointers and set:
{
"multi": false
}
Example:
{
"list_bets": [
"line#737779544#1#1#0#1.85",
"line#737880112#8#6#2.5#1.64"
],
"amount": 10,
"currency": "USD",
"multi": false
}
The system creates one coupon:
{
"coupon_type": 2,
"events_count": 2,
"amount": 10
}
amount applies to the entire accumulator and is not applied separately to each bet within it.
After successful placement, one amount is automatically debited from the SportAPI client account balance.
One accumulator may contain no more than 15 events.
How multi works
multi determines whether the entries in list_bets are combined into one coupon or a separate coupon is created for every entry.
| Value | Behavior |
|---|---|
false | All entries in list_bets form one single or accumulator. |
true | Each entry in list_bets forms a separate single. |
null or omitted field | The default value false is used. |
multi = false
With multi = false:
- one entry creates one single;
- multiple entries create one accumulator;
amountis the stake for the entire coupon created;body.couponscontains one coupon.
multi = true
With multi = true:
- each entry creates a separate single;
- each single receives its own
coupon_code; - the full
amountis applied to every single; - each single is settled independently;
body.couponscontains multiple coupons.
Important. The
amountis not divided among the singles being created. The total stake isamount × number of entries in list_bets.
This total is automatically debited from the SportAPI client account balance after successful placement. If the balance is insufficient for all singles, the API returns 507 and creates no coupons.
Total stake example
The user selected two bets and entered an amount of 10.
Original request:
{
"list_bets": [
"line#737779544#1#1#0#1.85",
"line#737880112#8#6#2.5#1.64"
],
"amount": 10
}
The result depends on multi:
| Mode | What is created | Amount of each coupon | Client balance debit |
|---|---|---|---|
multi = false | One accumulator with two bets | 10 | 10 |
multi = true | Two separate singles | 10 | 20 |
With multi = true, the relevant part of a successful response looks like this:
{
"code": 1,
"body": {
"coupons": [
{
"coupon_code": "000000000272",
"coupon_type": 1,
"events_count": 1,
"amount": 10
},
{
"coupon_code": "000000000273",
"coupon_type": 1,
"events_count": 1,
"amount": 10
}
]
}
}
The partner must store both objects and both coupon_code values.
Partner bet slip
Before the user confirms the bets, the partner interface should clearly show:
- whether one accumulator or multiple singles will be created;
- the amount of every coupon being created;
- the number of coupons being created;
- the total stake.
For multi = true, calculate the total as follows:
total stake = amount × number of entries in list_bets
For example:
amount = 10
number of bets = 3
total stake = 30
The bet slip remains the user’s preliminary selection. Coupons may be stored as accepted only after a response with code = 1, using the objects returned in body.coupons.
The end user’s balance in the partner’s system and the SportAPI client balance are separate entities. SportAPI automatically debits only its client balance. The partner separately manages the reservation and debit of the user’s funds.
Bets from the same match in an accumulator
An accumulator cannot contain multiple outcomes related to the same match. This restriction applies to the main event and all related sub-events.
Prohibited combinations include:
- an outcome for the main match and corners from the same match;
- an outcome for the main match and a bet on a specific half;
- corners and fouls from the same match;
- different halves, periods, or other sub-events from the same match.
Select only one outcome for a particular match. The remaining bets in the accumulator must relate to other matches.
If a prohibited combination is submitted with multi = false, the API rejects the accumulator placement:
error_code = 506
We recommend enforcing this restriction in the bet slip and preventing the user from submitting an invalid accumulator.
With multi = true, each outcome becomes a separate single, so the outcomes are not combined into one accumulator.
Processing the response
After successful placement, always iterate over the entire array:
body.coupons
Do not process only body.coupons[0]: with multi = true, the array contains a separate object for every single created.
For every returned coupon:
- store
coupon_codeas a string; - store the required coupon-level fields;
- store the required bet data from
events_data; - track and process each coupon independently.
The complete request and response are described in Coupon placement.
Next section: Odds changes and outcome availability.