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

alt_odds

Goal: Place a UF single with bet-context oddsChange = higher as customer_alt_odds and receive accepted with autoAcceptedOdds decimal 7.3 (internal scaled value 73000).

How to build the request (Java SDK)

1

Set the customer, event, odds format, and stake

Use EndCustomer id customer_alt_odds; event sr:match:15050881; decimal UF; cash stake.

2

Set bet context to OddsChange.HIGHER

On the bet, set BetContext with OddsChange.HIGHER:

BetContext.newBuilder().setOddsChange(OddsChange.HIGHER).build()
3

Send the ticket

Omitting bet context or using a neutral odds-change does not match this route and falls through to fallback.

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.stake.Stake;
import java.math.BigDecimal;
import com.sportradar.mbs.sdk.entities.common.BetContext;
import com.sportradar.mbs.sdk.entities.common.OddsChange;

TicketRequest request = TicketRequest.newBuilder()
    .setTicketId("tid-alt-odds")
    .setContext(TicketContext.newBuilder()
        .setLimitId(123L)
        .setChannel(Channel.newMobileChannelBuilder()
            .setLang("en")
            .setIp("127.0.0.1")
            .setDeviceId("deviceId123")
            .build())
        .setEndCustomer(EndCustomer.newBuilder()
            .setId("customer_alt_odds")
            .build())
        .build())
    .setBets(Bet.newBuilder()
        .setBetId("bet-1")
        .setContext(BetContext.newBuilder()
            .setOddsChange(OddsChange.HIGHER)
            .build())
        .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())
    .build();

TicketResponse response = mbsSdk.getTicketProtocol().sendTicket(request);
// expect: ACCEPTED, code 0; selection detail has autoAcceptedOdds decimal 7.3

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.ticketId

"tid-alt-odds"

Mandatory

string

No (echoed in reply)

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

Mandatory (sandbox)

string

No (routing)

content.bets[].context.oddsChange

"higher"

Mandatory (sandbox)

string

No (routing)

content.bets[].selections[].type

"uf"

Mandatory

string

No (routing)

content.bets[].selections[].eventId

"sr:match:15050881"

Mandatory

string

No (routing)

content.bets[].selections[].productId

"3"

Mandatory

string

No (echoed)

content.bets[].selections[].odds.type

"decimal"

Mandatory

string

No (routing)

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

"2.0"

Mandatory

string

No (echoed)

content.bets[].stake

(1 stake)

Mandatory

array of object

No

content.bets[].stake[].type

"cash"

Mandatory

string

No (routing)

content.bets[].stake[].amount

"10"

Mandatory

string

Yes

content.bets[].stake[].currency

"EUR"

Mandatory

string

Yes

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)

Selection getAutoAcceptedOdds()

Decimal odds value 7.3 (not scaled ×10000)

Common mistakes

Mistake
Result

Missing oddsChange: higher on the bet

Does not match alt_odds; fallback rejection

Wrong customer id

Route mismatch

Expecting scaled 73000 on the Ticket 3.0 wire

Human decimal is 7.3

See also: Error responses in the parent manual.

Was this helpful?