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

system_banker_ways

Goal: Place a ticket with two top-level selections as customer_system_banker (only this customer allows multi top-level selection): a system (size 1) containing nested UF + ways, plus a banker UF → accepted.

How to build the request (Java SDK)

1

Set the end customer

Use customer_system_banker.

2

Create one bet with two top-level selections

Include:

  • A Selection.newSystemSelectionBuilder().setSize(1) with nested UF legs and a nested ways selection.

  • A separate banker UF selection.

3

Include the sandbox match

Include sandbox match sr:match:15050881 among nested UF legs.

4

Set a cash stake and send the ticket

Use a cash stake and call sendTicket.

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;

UfSelection s1 = Selection.newUfSelectionBuilder()
    .setProductId("3").setEventId("sr:match:15050881")
    .setMarketId("m1").setOutcomeId("o2")
    .setOdds(Odds.newDecimalOddsBuilder().setValue(new BigDecimal("1.38")).build())
    .build();
UfSelection s2 = Selection.newUfSelectionBuilder()
    .setProductId("3").setEventId("sr:match:22222222")
    .setMarketId("m1").setOutcomeId("o3")
    .setOdds(Odds.newDecimalOddsBuilder().setValue(new BigDecimal("1.38")).build())
    .build();
UfSelection w1 = Selection.newUfSelectionBuilder()
    .setProductId("3").setEventId("sr:match:44444444")
    .setMarketId("10").setOutcomeId("o11")
    .setOdds(Odds.newDecimalOddsBuilder().setValue(new BigDecimal("1.38")).build())
    .build();
UfSelection w2 = Selection.newUfSelectionBuilder()
    .setProductId("3").setEventId("sr:match:44444444")
    .setMarketId("m1").setOutcomeId("o3")
    .setOdds(Odds.newDecimalOddsBuilder().setValue(new BigDecimal("1.38")).build())
    .build();
UfSelection banker = Selection.newUfSelectionBuilder()
    .setProductId("3").setEventId("sr:match:33333333")
    .setMarketId("m1").setOutcomeId("o2")
    .setOdds(Odds.newDecimalOddsBuilder().setValue(new BigDecimal("2.30")).build())
    .build();

TicketRequest request = TicketRequest.newBuilder()
    .setTicketId("tid-s42")
    .setContext(TicketContext.newBuilder()
        .setLimitId(123L)
        .setChannel(Channel.newMobileChannelBuilder()
            .setLang("en")
            .setIp("127.0.0.1")
            .setDeviceId("deviceId123")
            .build())
        .setEndCustomer(EndCustomer.newBuilder().setId("customer_system_banker").build())
        .build())
    .setBets(Bet.newBuilder()
        .setBetId("bet-1")
        .setSelections(
            Selection.newSystemSelectionBuilder()
                .setSize(1)
                .setSelections(s1, s2, Selection.newWaysSelectionBuilder().setSelections(w1, w2).build())
                .build(),
            banker)
        .setStake(Stake.newCashStakeBuilder().setAmount(new BigDecimal("10")).setCurrency("EUR").build())
        .build())
    .build();
TicketResponse response = mbsSdk.getTicketProtocol().sendTicket(request);
// ACCEPTED

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_system_banker"

Mandatory (sandbox)

string

No (routing)

content.bets[].selections

(2 top-level selections)

Mandatory

array of object

No

content.bets[].selections[0].type

"system"

Mandatory

string

No (routing)

content.bets[].selections[0].size

[1]

Mandatory

array of integer

No

nested ways / UF

as in wire JSON

Mandatory

object

No

content.bets[].selections[1].type

"uf" (banker)

Mandatory

string

No

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)

Common mistakes

Mistake
Result

Multi top-level selection without customer_system_banker

Schema validation error

Missing nested ways / wrong size

Shape mismatch vs intended scenario

Missing sandbox match in nested UF

Route mismatch

See also: Error responses in the parent manual.

Was this helpful?