Mixed Payout Tournament
Table of Contents
- Introduction
- Callback Flow
- Endpoint & Authorization
- Prize Types
- Request Structure
- Request Body Examples
- Response Handling
- Display & UX Notes
- Migration / Backward Compatibility
Introduction
The Mixed Payout Tournament feature extends the existing Settle Bet Callback to support multiple prize types. Instead of cash-only payouts, operators can now configure tournaments where winners receive a combination of:
- Cash prizes
- Bet credits
- Open tickets
- Direct (contest-specific) tickets
- Manual (text-only) prizes
This change ensures flexibility for promotions, recurring events, and cross-tournament incentives, while remaining backward-compatible with existing cash-only tournaments.
Below is an example of a prize pool of such a tournament:
Callback Flow
When a tournament ends and results are confirmed, the system triggers the Settle Bet Callback.
The callback sends the full set of participants, including their rank, scores, and any payouts.
All non-manual prizes (cash and tickets) are automatically processed through the callback. That means any fantasy tickets will be given out before the callback fires.
Manual prizes (e.g. freebets or any other manual prize with a descriptive text) must be handled by the operator's own system.
Retries will re-send the full payload if the initial request fails. Your system should remain idempotent and resilient to duplicates.
Endpoint & Authorization
Endpoint:
POST https://{your_server}/winners
-
Authorization: Bearer customer {admin_token}
The admin_token is a short-lived JWT generated by our system. It must be validated for authenticity.
Prize Types
The following prize types are supported in mixed payout tournaments:
- Cash
- Standard currency-based payout.
- Works with all supported currencies (€, £, etc.).
- Bet Credits
- Issued as manual-text prizes using a naming convention (e.g.
€10 Bet Credit
). - Settled manually, but listed in the callback payload.
- Issued as manual-text prizes using a naming convention (e.g.
- Tickets
- Open Ticket
- Value-based, usable for any tournament with a matching buy-in.
- Default expiration: 30 days.
- Displayed as → Open Ticket with 🎟️ as icon
- Tournament Specific Ticket
- Valid only for a specific tournament.
- Displayed as → €2.30 Weekly Monster Ticket
- Open Ticket
- Manual (Text)
- Free-form descriptive text (e.g., “Custom Promo Reward”).
- Used for promotions and special cases.
Request Structure
The request body remains consistent with the existing Settle Bet Callback, but includes two additional fields in the bet object to represent ticket or non-cash prizes. All existing fields remain unchanged for backward compatibility.
// Ticket object structure in request payload
{
...,
"qualifier_ticket": {
"id": <integer>,
// null for open tickets, integer for tournament specific tickets
"tournament": <integer_or_null>,
"amount": <decimal>,
"currency": <string>
},
...
}
// Manual prize in request payload
{
...,
"payout_text": <string>
...
}
If either qualifier_ticket
or payout_text
matching manual prizes are present, then payout
and base_payout
can be disregarded. In these cases, payout
should always be of 0
value and base_payout
will merely represent the cash equivalent of the manual prize.
Example 1
payout_text
with value5 Bonus Bets
will havebase_payout
of5.00
andpayout
of0
.
Example 2
qualifier_ticket
for open tournament with entry value1.00
will havebase_payout
of1.00
andpayout
of0
.
Request Body Examples
Below we have the request body example for settling a tournament with the following mixed prizes:
- Rank 1: Cash
- Rank 2: Tournament specific fantasy ticket
- Rank 3: Open fantasy ticket
- Rank 4: Freebet credits
"pools": [
{
"pool": {
"currency": "EUR",
"overdraw": "17.15",
"overlay": true,
"cost": 0,
"client": "customer",
"tags": [],
"guaranteed": true,
"category": "admin_created",
"name": "Mixed Payouts Tournament",
"gameType": "football",
"distribution": "mixed",
"uid": 89922,
"amount": 0,
"competitions": [
{
"period": 2022,
"sport": "football",
"uid": "61cad74a46cef3b89efbc8fc",
"name": "Example League"
}
],
"game": "fantasy"
},
"bets": [
{
"user": {
"name": "user01",
"uid": "87359",
"client": "customer"
},
"bet": {
"base_payout": "10.00",
"rake": 0,
"uuid": "441055|172dcdc2-8cf6-4052-bf2d-970ce61bb962",
"amount": 0,
"base_amount": 0,
"payout": "10.00",
"rank": 1,
"currency": "EUR",
"uid": 13454743,
"score": 46
}
},
{
"user": {
"name": "user02",
"uid": "87745",
"client": "customer"
},
"bet": {
"rank": 2,
"currency": "GBP",
"score": 37,
"amount": 0,
"uuid": "441355|7de16d45-1b85-4461-990d-bc4096d2cc4f",
"uid": 13454744,
"qualifier_ticket": {
"id": 187179,
"tournament": 89299,
"amount": 1.15,
"currency": "EUR"
},
"base_payout": "1.15",
"payout": "0.00",
"base_amount": 0,
"rake": 0
}
},
{
"user": {
"name": "user03",
"uid": "87743",
"client": "customer"
},
"bet": {
"currency": "EUR",
"score": 37,
"uuid": "441354|b21f4048-2b9d-4ba8-a0cd-d88e9159bd78",
"qualifier_ticket": {
"id": 187180,
"currency": "EUR",
"amount": 1,
"tournament": null
},
"base_payout": "1.00",
"rank": 3,
"payout": "0.00",
"amount": 0,
"rake": 0,
"base_amount": 0,
"uid": 13454747
}
},
{
"user": {
"name": "user04",
"uid": "84958",
"client": "customer"
},
"bet": {
"amount": 0,
"payout": "0.00",
"uid": 13454748,
"uuid": "436365|e111ad64-9e67-40db-b04b-d068440de401",
"score": 35,
"payout_text": "5 Bonus Bets",
"rank": 4,
"base_amount": 0,
"rake": 0,
"base_payout": "5.00",
"currency": "EUR"
}
}
]
}
]
}
{
Response Handling
- Success → Respond with
200 OK
once all prize processing is complete. - Failure → Respond with a
4xx
/5xx
error for the entire batch. The system will retry with the full payload.
Display & UX Notes
- Cash prizes → displayed with currency.
- Tickets → displayed with 🎟️ icon in standings.
- Bet Credits prizes → displayed as text only.
- Manual prizes → displayed as text only.
Migration / Backward Compatibility
- Existing integrations (cash-only payouts) continue to work with no changes.
- Mixed payouts extend the payload with 2 new fields in the
bet
object. - Systems must be updated to parse the new prize fields if they need to support mixed tournaments.