external_settlement
Goal: Send an external settlement with a zero cash payout for punter customer_external and receive accepted.
Sandbox module name: external_settlement_loss.
How to build the request (Java SDK)
SDK envelope operation is "ticket-ext-settlement"; content type is "ext-settlement". No mobile channel on this content type.
Java example
import com.sportradar.mbs.sdk.entities.common.AcceptanceStatus;
import com.sportradar.mbs.sdk.entities.payout.Payout;
import com.sportradar.mbs.sdk.entities.request.ExtSettlementRequest;
import com.sportradar.mbs.sdk.entities.response.ExtSettlementResponse;
import com.sportradar.mbs.sdk.entities.settlement.ExtSettlementDetails;
import java.math.BigDecimal;
ExtSettlementRequest request = ExtSettlementRequest.newBuilder()
.setSettlementId("settlement-1")
.setDetails(ExtSettlementDetails.newTicketExtSettlementDetailsBuilder()
.setTicketId("tid-ext")
.setTicketSignature("sandbox-placement-signature")
.setPayout(Payout.newCashPayoutBuilder()
.setAmount(new BigDecimal("0"))
.setCurrency("EUR")
.build())
.build())
.build();
ExtSettlementResponse response = mbsSdk.getTicketProtocol().sendExtSettlement(request);
// expect: response.getStatus() == AcceptanceStatus.ACCEPTED, getCode() == 0
// routing requires meta.punter.id == "customer_external"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-ext-settlement"
Mandatory
string
No
version
"3.0"
Mandatory
string
No (echoed in reply)
content.type
"ext-settlement"
Mandatory
string
No
content.settlementId
"settlement-1"
Mandatory
string
No (echoed in reply)
content.details.type
"ticket"
Mandatory
string
No
content.details.ticketId
"tid-ext"
Mandatory
string
No (echoed; optional in routing table)
content.details.ticketSignature
"sandbox-placement-signature"
Mandatory
string
Yes
content.details.payout[].type
"cash"
Mandatory
string
Yes
content.details.payout[].amount
"0"
Mandatory (sandbox scenario)
string
Yes (scenario assumes loss / zero)
content.details.payout[].currency
"EUR"
Mandatory
string
Yes
meta.punter.id (Transaction)
"customer_external"
Mandatory (sandbox)
string
No (routing)
Routing facet: ("ext-settlement", "customer_external", None) — ticket id is wildcarded in the table.
Expected response
getStatus()
AcceptanceStatus.ACCEPTED
getCode()
0
getMessage()
"accepted" (sandbox)
getSettlementId()
"settlement-1" (echo)
getTicketId()
"tid-ext" (echo)
Wire JSON (content type "ext-settlement-reply"):
Common mistakes
Missing / wrong meta.punter.id (not customer_external)
Fallback -999 on ext-settlement-reply
Looking for endCustomer on ext-settlement content
Field does not exist; routing is punter meta only
Non-zero payout
Still accepted by this module (scenario documents zero / loss); amount is not a routing facet
See also: Error responses in the parent manual.
Was this helpful?