promo_stake
Goal: Place promo tickets as customer_promo using bonus or free (freebet facet) stake types; both are accepted.
Stake
Java builder
Wire stake[].type
Routing facet
Bonus
Stake.newBonusStakeBuilder()
"bonus"
bonus
Freebet
Stake.newFreeStakeBuilder()
"free"
freebet
How to build the request (Java SDK)
Java example — bonus
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 bonusReq = TicketRequest.newBuilder()
.setTicketId("tid-promo-bonus")
.setContext(TicketContext.newBuilder()
.setLimitId(123L)
.setChannel(Channel.newMobileChannelBuilder()
.setLang("en")
.setIp("127.0.0.1")
.setDeviceId("deviceId123")
.build())
.setEndCustomer(EndCustomer.newBuilder().setId("customer_promo").build())
.build())
.setBets(Bet.newBuilder()
.setBetId("bet-1")
.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.newBonusStakeBuilder()
.setAmount(new BigDecimal("10"))
.setCurrency("EUR")
.build())
.build())
.build();
TicketResponse bonusResp = mbsSdk.getTicketProtocol().sendTicket(bonusReq);
// ACCEPTED
// Freebet: Stake.newFreeStakeBuilder().setAmount(...).setCurrency("EUR").build();
// wire type "free" (routing facet freebet)Wire JSON — bonus
Freebet wire stake: { "type": "free", "amount": "10", "currency": "EUR" }.
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_promo"
Mandatory (sandbox)
string
No (routing)
content.bets[].selections[].type
"uf"
Mandatory
string
No (routing)
content.bets[].stake[].type
"bonus" or "free"
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)
Bonus reply selection message includes stake=bonus; freebet includes stake=freebet.
Common mistakes
Cash stake with customer_promo
Does not match promo_stake routes
Confusing wire "free" with facet freebet
Facet is freebet; wire type is free
See also: Error responses in the parent manual.
Was this helpful?