Bet Pointer
A bet pointer is a string that uniquely describes the outcome selected by the user: the event, market, bet option, additional parameter, and odds.
When placing a coupon, one or more pointers are submitted in the list_bets array:
{
"list_bets": [
"line#737779544#1#1#0#1.85"
]
}
Where to obtain the pointer
Retrieve the technical oc_pointer and current oc_rate for the selected sports-line outcome.
The outcome fields are described in Odds and Bet Groups.
Add the line type (line or live) and coefficient using the format below. Once created, do not modify the complete pointer before submission.
Do not:
- construct the pointer manually;
- replace the event, group, or outcome ID;
- replace a sub-event ID with the main event ID;
- add or remove
player_idyourself; - change the
ratevalue or odds; - convert the separators before submitting the pointer.
The pointer can be stored in the bet slip together with the selected outcome, but current odds and outcome state should be used when placing the coupon. The odds or outcome availability may change between the user’s selection and submission of the request.
Pointer format
Canonical format:
line_type#game_id#group_id#type_id#rate#coefficient[#player_id]
Square brackets indicate that the final part is optional. The [ and ] characters are not included in the pointer itself.
| Position | Field | Description |
|---|---|---|
| 1 | line_type | Sports line type: line for prematch or live for an event already in progress. |
| 2 | game_id | Main event or sub-event ID. |
| 3 | group_id | Bet group ID, such as match result, total, or handicap. |
| 4 | type_id | ID of the specific outcome within the group. |
| 5 | rate | Total, handicap, or another parameter value. Use 0 when no parameter is required. |
| 6 | coefficient | Odds shown to the user when the bet is submitted. |
| 7 | player_id | Optional player or participant ID for a player-specific outcome. |
All parts are contained in one string, even when their values are numeric.
line and live
The first value identifies the type of sports line to which the outcome belongs:
| Value | Description |
|---|---|
line | A bet placed before the event starts — prematch. |
live | A bet placed while the event is in progress — live. |
The type must match the outcome received from the sports line. Do not change line to live, or vice versa.
Example prematch outcome:
line#737779544#1#1#0#1.85
Example live outcome:
live#738917381#119#5869#0.5#3.6
Events and sub-events
The game_id may identify either the main event or one of its parts, such as a half, period, set, inning, or another sub-event.
Use the exact game_id contained in the selected outcome’s pointer. The API determines the relationship between the sub-event and the main event automatically.
An accumulator cannot contain multiple outcomes related to the same match. For example, you cannot combine an outcome for the main match with a corners outcome, or combine corners and fouls from that same match. If this rule is violated, the API returns error_code = 506. See Singles, accumulators, and multi for details.
The rate parameter
rate contains an additional value required to identify the outcome.
For example:
2.5— total over or under 2.5;-1— handicap −1;0.5— another parameterized value;0— the outcome does not require an additional parameter.
Submit rate exactly as received from the sports line. A period is used as the decimal separator.
Do not calculate rate yourself from the displayed bet name.
Player-specific outcomes
Some markets relate to a specific player or participant. In this case, the pointer contains a seventh part, player_id:
live#738917381#119#5869#0.5#3.6#149439538
If the complete pointer contains player_id, preserve and submit it. If there is no seventh part, do not add 0, null, or an empty value.
Separators
The API accepts:
- pointers using
#as the separator; - pointers using
|as the separator; - the compatible mixed format.
All three examples may represent the same data format:
line#737779544#1#1#0#1.85
line|737779544|1|1|0|1.85
line#737779544|1|1|0#1.85
This documentation uses the canonical # format. However, a complete pointer received from the sports line should be submitted without changing its separators.
Validation during coupon placement
After receiving list_bets, the SportAPI Coupon Settlement System validates each pointer:
- the string has the correct format;
- the outcome exists in the current sports line;
- the outcome is not blocked;
- the submitted odds match the current odds or can be accepted according to the selected
modeandmode_typerules.
A structurally valid pointer does not guarantee that the coupon will be accepted. The outcome may have been removed or blocked, or its odds may have changed after the user selected it.
Possible errors
error_code | Cause |
|---|---|
11 | At least one entry in list_bets has an invalid format. |
501 | The odds changed and were not accepted under the specified rules. |
502 | The outcome is no longer available in the current sports line. |
503 | The outcome is blocked. |
504 | An error occurred while validating the outcome. |
When error_code = 11 is returned, verify that:
list_betscontains strings rather than objects;- all six required parts are present;
- the optional
player_idappears only in the seventh position; - the string does not contain square brackets from the format template;
- numeric values do not use a comma as the decimal separator;
- the pointer was not truncated or changed when it was stored.
Outcome availability and odds change errors are described in detail in Odds changes and outcome availability.
Next step: Coupon placement.