Docs menu
Getting started

Limits

Daily allowance

FreeBettorSharpPro
API optimizes per day1050250500
Bets per slate3125050
Your own probability inputnoyesyesyes
Correlated risk figuresnonoyesyes
  • API optimizes are separate from optimizes in the app.
  • Days run midnight to midnight US Eastern. GET /v1/me gives the exact resetsAt.
  • Calculators (implied probability, de-vig, Kelly) have no daily limit, and GET /v1/me and GET /v1/sports are never counted or limited.

What counts

Every optimize that passes the per-minute and one-at-a-time checks counts, including ones that fail validation or need an upgrade. Not counted: 429 BURST_LIMIT_EXCEEDED, 503 SERVICE_BUSY, malformed JSON and key errors. Retries count too; if you need the same answer again, send the same seed.

Per-minute limits

  • Optimize: at most 10 a minute, and one at a time per account. A second optimize sent while the first is still running is refused at once.
  • Calculators: 60 a minute, counted separately from optimize.
  • Budgets refill gradually (one optimize every 6 seconds), so a script that paces itself is never refused.

Headers

Successful optimize responses, and DAILY_LIMIT_EXCEEDED, carry today’s state:

X-RateLimit-Limit: 50
X-RateLimit-Remaining: 47
X-RateLimit-Reset: 1791172800      (Unix seconds: next midnight US Eastern)

When you hit a limit

StatuserrorMeaningWhat to do
429DAILY_LIMIT_EXCEEDEDToday's allowance is used up.Stop until resetsAt. Never retry in a loop.
429BURST_LIMIT_EXCEEDEDToo fast, or another optimize is still running.Wait Retry-After seconds (usually 1 to 6), then retry.
503SERVICE_BUSYServer capacity or a temporary outage, not your allowance.Wait Retry-After seconds, then retry. Not counted.

The handling limits recipe has a ready-made retry loop.