Get Player Bets
Look up a player's bet history
Look up the bet history for a specific player. Results are scoped to your integration — you can only see bets placed by your players. This is useful for resolving player support requests or reconciliation.
Authentication
This endpoint is authenticated by IP whitelist — your server's outbound IP must match the address registered during onboarding. See Security for details. The X-Marbles-Signature header is not required and is ignored if sent.
Endpoint
POST /game/betsRequest
POST /game/bets HTTP/1.1
Host: api.marbles.xyz
Content-Type: application/json
{
"operatorID": "abc123",
"externalPlayerID": "22893236",
"from": "2026-03-19T00:00:00Z",
"to": "2026-03-20T00:00:00Z",
"limit": 25
}Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
operatorID | string | Yes | Your unique operator identifier provided by 155.io |
externalPlayerID | string | Yes | Your player identifier (the clientPlayerId used when launching the game) |
from | string | No | ISO 8601 timestamp — only return bets placed after this time |
to | string | No | ISO 8601 timestamp — only return bets placed before this time |
limit | integer | No | Maximum number of bets to return. Default: 25, maximum: 100 (higher values are silently clamped to 100). There is no pagination cursor — to cover more than 100 bets, narrow the from/to window and page by time |
Success Response
HTTP/1.1 200 OK
Content-Type: application/json
{
"status": 200,
"data": {
"bets": [
{
"id": "8a275342-bc24-5acd-b1f0-4bb9331ce010",
"status": "won",
"amount": 500000,
"payout": 2500000,
"currency": "USD",
"betType": "PickWinner",
"gameName": "Fish Tank",
"roundId": "949223e9-2238-59f8-a16b-936ffc7fe3c5",
"createdAt": "2026-03-20T11:59:50Z",
"updatedAt": "2026-03-20T12:00:10Z"
},
{
"id": "4001ebd2-d8e5-5b38-90c1-c3b1ea7fe347",
"status": "lost",
"amount": 300000,
"payout": 0,
"currency": "USD",
"betType": "PickWinner",
"gameName": "Fish Tank",
"roundId": "a8c81652-cbd4-4b5d-94cd-5585715e6133",
"createdAt": "2026-03-20T11:55:30Z",
"updatedAt": "2026-03-20T11:56:00Z"
}
]
}
}Response Fields
| Field | Type | Description |
|---|---|---|
id | string | Bet UUID |
status | string | Bet status: pending, won, lost, voided, or cashed_out (cashed_out appears only on Footfall bets the player cashed out before the crash) |
amount | integer | Integer at the currency's wire precision — the same scale as the amount on the /bet and /win callbacks (USD: $5.00 = 500000). See Currencies |
payout | integer | Actual payout, same scale as amount: won → the full winning payout; cashed_out → the realised cash-out amount (stake × multiplier at cash-out); pending, lost, voided → 0 |
currency | string | ISO 4217 currency code |
betType | string | Bet type (see Bet Types) |
gameName | string | Display name of the game |
roundId | string | Round UUID — use this with /game/round to get full round details and the race clip |
createdAt | string | ISO 8601 timestamp when the bet was placed |
updatedAt | string | ISO 8601 timestamp when the bet was last updated |
Results are sorted by createdAt in descending order (newest first). Use the roundId from the response to look up full round details including the race recording via the Get Round Details endpoint.
Error Response
HTTP/1.1 400 Bad Request
Content-Type: application/json
{
"error": "Validation error",
"details": "Property 'externalPlayerID' is required"
}Error Statuses
| Status | HTTP Code | Description |
|---|---|---|
| Invalid Integration IP | 400 | Request originated from an unrecognized IP address |
| Validation error | 400 | Missing or invalid request parameters |
| Invalid date format | 400 | from or to is not a valid RFC3339 timestamp |
| Too many requests | 429 | Rate limit exceeded — max 60 requests/minute per source IP, shared across /game/bets and /game/round (see Rate limits) |