single_live_async
Goal: Place a live UF single (productId "1") as customer_live_async_accepted and receive an immediate reply with code 202 / message PENDING. About ~3s later the sandbox logs an ACCEPTED ticket-reply JSON (no second SDK response).
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.stake.Stake;
import java.math.BigDecimal;
TicketRequest request = TicketRequest.newBuilder()
.setTicketId("tid-live-async")
.setContext(TicketContext.newBuilder()
.setLimitId(123L)
.setChannel(Channel.newMobileChannelBuilder()
.setLang("en")
.setIp("127.0.0.1")
.setDeviceId("deviceId123")
.build())
.setEndCustomer(EndCustomer.newBuilder()
.setId("customer_live_async_accepted")
.build())
.build())
.setBets(Bet.newBuilder()
.setBetId("bet-1")
.setSelections(Selection.newUfSelectionBuilder()
.setProductId("1")
.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);
// AcceptanceStatus has no PENDING enum — assert getCode() == 202 and getMessage() equals "PENDING"Wire 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-live-async"
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_live_async_accepted"
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
"uf"
Mandatory
string
No (routing)
content.bets[].selections[].eventId
"sr:match:15050881"
Mandatory
string
No (routing)
content.bets[].selections[].marketId
"m1"
Mandatory
string
No (echoed in reply)
content.bets[].selections[].outcomeId
"o1"
Mandatory
string
No (echoed in reply)
content.bets[].selections[].productId
"1"
Mandatory
string
No (live echo; not a routing facet)
content.bets[].selections[].odds.type
"decimal"
Mandatory
string
No (routing)
content.bets[].selections[].odds.value
"2.0"
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
getCode()
202
getMessage()
"PENDING"
getTicketId()
"tid-live-async" (echo)
getStatus()
No PENDING on AcceptanceStatus — do not assert ACCEPTED/REJECTED for the immediate reply
Wire JSON (Ticket 3.0 shape). Schema requires status; sandbox may omit a meaningful ACCEPTED/REJECTED mapping for this pending reply — prefer asserting code / message:
Common mistakes
productId still "3"
May not match live async expectations / echo
Wrong customer id
Different scenario or fallback
Asserting AcceptanceStatus.ACCEPTED on the immediate reply
Immediate reply is PENDING (code 202)
See also: Error responses in the parent manual.
Was this helpful?