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

custom_bet

Goal: Place a uf-custom-bet selection as customer_custom_bet with combined decimal odds ~38.9352 and nested UF legs → accepted.

Use Selection.newUfCustomBetSelectionBuilder(). Wire type "uf-custom-bet".

How to build the request (Java SDK)

1

Set the end customer

Use customer_custom_bet.

2

Build the custom-bet selection

Build a custom-bet selection with nested UF legs. The first event is sr:match:15050881, and the combined odds are 38.9352.

3

Add a cash stake and send the ticket

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 leg1 = Selection.newUfSelectionBuilder()
    .setProductId("3").setEventId("sr:match:15050881")
    .setMarketId("m1").setOutcomeId("o1")
    .setOdds(Odds.newDecimalOddsBuilder().setValue(new BigDecimal("1.38")).build())
    .build();
UfSelection leg2 = Selection.newUfSelectionBuilder()
    .setProductId("3").setEventId("sr:match:22222222")
    .setMarketId("m1").setOutcomeId("o1")
    .setOdds(Odds.newDecimalOddsBuilder().setValue(new BigDecimal("1.38")).build())
    .build();
UfSelection leg3 = Selection.newUfSelectionBuilder()
    .setProductId("3").setEventId("sr:match:33333333")
    .setMarketId("m1").setOutcomeId("o1")
    .setOdds(Odds.newDecimalOddsBuilder().setValue(new BigDecimal("1.38")).build())
    .build();

TicketRequest request = TicketRequest.newBuilder()
    .setTicketId("tid-custom")
    .setContext(TicketContext.newBuilder()
        .setLimitId(123L)
        .setChannel(Channel.newMobileChannelBuilder()
            .setLang("en")
            .setIp("127.0.0.1")
            .setDeviceId("deviceId123")
            .build())
        .setEndCustomer(EndCustomer.newBuilder().setId("customer_custom_bet").build())
        .build())
    .setBets(Bet.newBuilder()
        .setBetId("bet-1")
        .setSelections(Selection.newUfCustomBetSelectionBuilder()
            .setSelections(leg1, leg2, leg3)
            .setOdds(Odds.newDecimalOddsBuilder().setValue(new BigDecimal("38.9352")).build())
            .build())
        .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_custom_bet"

Mandatory (sandbox)

string

No (routing)

content.bets[].selections[].type

"uf-custom-bet"

Mandatory

string

No (routing)

content.bets[].selections[].odds.value

"38.9352"

Mandatory

string

No (echoed; human decimal, not ×10000)

content.bets[].selections[].selections

nested UF legs

Mandatory

array of object

No

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

Wrong selection type / customer

Route mismatch

Scaled odds 389352 on Ticket 3.0 wire

Use human decimal 38.9352

See also: Error responses in the parent manual.

Was this helpful?