accumulator_prematch
Goal: Place a ticket whose top-level selection is an accumulator and receive an accepted reply.
Sandbox module name: accumulator_prematch_accepted.
How to build the request (Java SDK)
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-acca")
.setContext(TicketContext.newBuilder()
.setLimitId(123L)
.setChannel(Channel.newMobileChannelBuilder()
.setLang("en")
.setIp("127.0.0.1")
.setDeviceId("deviceId123")
.build())
.setEndCustomer(EndCustomer.newBuilder()
.setId("customer_accumulator")
.build())
.build())
.setBets(Bet.newBuilder()
.setBetId("bet-1")
.setSelections(Selection.newAccumulatorSelectionBuilder()
.setSelections(leg1, leg2, leg3)
.build())
.setStake(Stake.newCashStakeBuilder()
.setAmount(new BigDecimal("10"))
.setCurrency("EUR")
.build())
.build())
.build();
TicketResponse response = mbsSdk.getTicketProtocol().sendTicket(request);
// expect: response.getStatus() == AcceptanceStatus.ACCEPTED, getCode() == 0Wire JSON (what the SDK sends)
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-acca"
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_accumulator"
Mandatory (sandbox)
string
No (routing)
content.bets
(1 bet)
Mandatory
array of object
No
content.bets[].betId
"bet-1"
Optional
string
No (echoed in reply)
content.bets[].selections
(1 selection)
Mandatory
array of object
No
content.bets[].selections[].type
"accumulator"
Mandatory
string
No (routing)
content.bets[].selections[].selections
(3 UF legs)
Mandatory
array of object
No
content.bets[].selections[].selections[].type
"uf"
Mandatory
string
No (echoed in reply)
content.bets[].selections[].selections[].eventId
"sr:match:15050881", "sr:match:22222222", "sr:match:33333333"
Mandatory
string
No (first leg: routing; all echoed)
content.bets[].selections[].selections[].marketId
"m1"
Mandatory
string
No (echoed in reply)
content.bets[].selections[].selections[].outcomeId
"o1"
Mandatory
string
No (echoed in reply)
content.bets[].selections[].selections[].productId
"3"
Mandatory
string
No (echoed in reply)
content.bets[].selections[].selections[].odds
(object)
Mandatory
object
No
content.bets[].selections[].selections[].odds.type
"decimal"
Mandatory
string
No (routing via first leg)
content.bets[].selections[].selections[].odds.value
"1.38"
Mandatory
string
No (echoed in reply)
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
Expected response
getStatus()
AcceptanceStatus.ACCEPTED
getCode()
0
getMessage()
"accepted" (sandbox)
getTicketId()
"tid-acca" (echo)
Selection in getBetDetails()
Accumulator with nested UF legs echoed
Wire JSON example:
Common mistakes
EndCustomer.setId("customer") instead of "customer_accumulator"
Will not hit this scenario
Top-level selection still newUfSelectionBuilder()
Routes as a regular single, not accumulator
Fewer than two legs in newAccumulatorSelectionBuilder().setSelections(...)
Invalid Ticket 3.0 selection (schema minItems: 2)
First nested leg not sr:match:15050881
Route mismatch / fallback
Multiple top-level selections on the bet
Schema validation error (not the -999 “no scenario” fallback)
See also: Error responses in the parent manual.
Was this helpful?