Skip to main content

Stake Limits

Every market carries a minimum and maximum stake. Read them over REST with GET /events/{eventId}/markets?expand=stake_limits. On the WebSocket market channel, they arrive with every market_updates frame, and stake_limit_update tells you when they change.

"stake_limits": [
{
"pricing_provider_id": 1,
"participant_id": null,
"min_stake": 10,
"max_stake": 1000
}
]

Minimum stake​

min_stake is exactly what it sounds like: the smallest stake the market accepts. Bets below it are rejected with 400.

Maximum stake depends on the price​

max_stake is a single limit that caps your stake at high prices and your potential profit at low prices, so it is not always the maximum you can stake. How it translates into a stake cap depends on the decimal price you are betting at:

PriceWhat max_stake capsMaximum accepted stake
>= 2.00Your stakemax_stake
< 2.00Your potential profitmax_stake / (price − 1)

At prices of 2.00 and above, a winning bet pays out at least as much profit as the stake itself, so the limit applies to the stake directly. Below 2.00, each unit staked wins less than a unit, so the limit shifts to your potential profit, and you can stake more than max_stake.

Worked example​

With max_stake: 1000:

PriceMaximum stakePotential profit at max
3.001,0002,000
2.001,0001,000
1.501,000 / 0.50 = 2,0001,000
1.101,000 / 0.10 = 10,0001,000

Bets above the effective maximum are rejected with 400.

Compute the cap before placing

Work out the maximum accepted stake client-side before calling POST /bets:

If price >= 2.00: max_accepted_stake = max_stake
If price < 2.00: max_accepted_stake = max_stake / (price - 1)

Scope and shape​

  • Limits are per market. On participant-scoped markets (e.g. player props), the entry carries the participant_id it applies to; on event-scoped markets participant_id is null.
  • pricing_provider_id is always 1 (Vertex), consistent with the rest of the API.
  • Limits are specific to your API key. Different partners may see different values on the same market.

Keeping limits current​

Limits change as an event approaches and during play. The integration pattern mirrors prices:

  1. Baseline over REST: fetch expand=stake_limits alongside selections when you load an event's markets.
  2. Read them from market_updates: each frame carries the market's current stake_limits, including the first frame after a market opens. suspended_market_updates never carry them.
  3. Listen for stake_limit_update: it arrives on the market channel whenever a market's limits change.
  4. Re-baseline when in doubt: the REST read is the authoritative source for the limits in force; after a reconnect, re-fetch rather than trusting cached values.