For the complete documentation index, see llms.txt. This page is also available as Markdown.

multi_bet

Goal: Place a ticket with two bets as customer_multi_bet (only this customer allows multi-bet) and receive accepted with two betDetails.

How to build the request (Java SDK)

1

Set the end customer

Use EndCustomer customer_multi_bet.

2

Create two bets

Create two Bet objects, each typically with one UF selection. The first bet's first event should be sr:match:15050881.

3

Add cash stakes and send the ticket

Use cash stakes and call sendTicket.

Other customers with multiple bets hit schema validation (RESP_ERROR_REPLY), not the -999 fallback.

Java example

import com.sportradar.mbs.sdk.entities.channel.Channel;
import com.sportradar.mbs.sdk.entities.common.AcceptanceStatus;
import com.sportradar.mbs.sdk.entities.common.Bet;
import com.sportradar.mbs.sdk.entities.common.EndCustomer;
import com.sportradar.mbs.sdk.entities.common.TicketContext;
import com.sportradar.mbs.sdk.entities.odds.Odds;
import com.sportradar.mbs.sdk.entities.request.TicketRequest;
import com.sportradar.mbs.sdk.entities.response.TicketResponse;
import com.sportradar.mbs.sdk.entities.selection.Selection;
import com.sportradar.mbs.sdk.entities.selection.UfSelection;
import com.sportradar.mbs.sdk.entities.stake.Stake;
import java.math.BigDecimal;

TicketRequest request = TicketRequest.newBuilder()
    .setTicketId("tid-multi")
    .setContext(TicketContext.newBuilder()
        .setLimitId(123L)
        .setChannel(Channel.newMobileChannelBuilder()
            .setLang("en")
            .setIp("127.0.0.1")
            .setDeviceId("deviceId123")
            .build())
        .setEndCustomer(EndCustomer.newBuilder().setId("customer_multi_bet").build())
        .build())
    .setBets(
        Bet.newBuilder()
            .setBetId("bet-1")
            .setSelections(Selection.newUfSelectionBuilder()
                .setProductId("3").setEventId("sr:match:15050881")
                .setMarketId("m1").setOutcomeId("o1")
                .setOdds(Odds.newDecimalOddsBuilder().setValue(new BigDecimal("2.0")).build())
                .build())
            .setStake(Stake.newCashStakeBuilder().setAmount(new BigDecimal("10")).setCurrency("EUR").build())
            .build(),
        Bet.newBuilder()
            .setBetId("bet-2")
            .setSelections(Selection.newUfSelectionBuilder()
                .setProductId("3").setEventId("sr:match:22222222")
                .setMarketId("m1").setOutcomeId("o1")
                .setOdds(Odds.newDecimalOddsBuilder().setValue(new BigDecimal("2.0")).build())
                .build())
            .setStake(Stake.newCashStakeBuilder().setAmount(new BigDecimal("5")).setCurrency("EUR").build())
            .build())
    .build();
TicketResponse response = mbsSdk.getTicketProtocol().sendTicket(request);
// ACCEPTED; getBetDetails() length 2

Wire JSON (what the SDK sends)

Field name
Value
Mandatory / Optional
Data type
Ignored by sandbox

operatorId

9985

Mandatory

integer

Yes

correlationId

"corr-1"

Mandatory

string

No (echoed in reply)

timestampUtc

1710000000000

Mandatory

integer

Yes

operation

"ticket-placement"

Mandatory

string

No

version

"3.0"

Mandatory

string

No (echoed in reply)

content

(object)

Mandatory

object

No

content.type

"ticket"

Mandatory

string

No

content.context

(object)

Mandatory

object

No

content.context.limitId

123

Mandatory

integer

Yes

content.context.channel

(object)

Mandatory

object

Yes

content.context.channel.type

"mobile"

Mandatory

string

Yes

content.context.channel.lang

"en"

Mandatory

string

Yes

content.context.channel.ip

"127.0.0.1"

Optional

string

Yes

content.context.channel.deviceId

"deviceId123"

Optional

string

Yes

content.context.endCustomer

(object)

Mandatory (sandbox)

object

No

content.context.endCustomer.id

"customer_multi_bet"

Mandatory (sandbox)

string

No (routing)

content.bets

(2 bets)

Mandatory

array of object

No

content.bets[].selections[].type

"uf"

Mandatory

string

No (routing)

content.bets[0].selections[].eventId

"sr:match:15050881"

Mandatory

string

No (routing)

content.bets[].stake[].type

"cash"

Mandatory

string

No (routing)

endCustomer / endCustomer.id are optional in the Ticket 3.0 schema but mandatory for this sandbox scenario (routing). Ignored by sandbox means the field is not used for routing and not used when building the reply (schema-only for the WebSocket / Ticket 3.0 envelope).

Expected response

Java getter
Expected value

getStatus()

AcceptanceStatus.ACCEPTED

getCode()

0

getMessage()

"accepted" (sandbox)

getBetDetails()

Two entries (bet-1, bet-2)

Common mistakes

Mistake
Result

Multi-bet with a non-customer_multi_bet id

Schema validation error (not -999 fallback)

Only one bet

Still may accept but does not exercise multi-bet reply shape

See also: Error responses in the parent manual.

Was this helpful?