Rate limits & allowances
Throughput plus request and response-data allowances for Starter, Pro, and Enterprise.
| Plan | Sustained rate | Burst | Requests | API data |
|---|---|---|---|---|
| Starter | 10/second | 25 | 100 lifetime | 50 MB lifetime |
| Pro | 10/second | 25 | 250,000/month | 5 GB/month |
| Enterprise | 50/second | 100 | 5,000,000/month | 100 GB/month |
- Keyed traffic is limited per subscription — all of your keys share one budget, so minting extra keys does not add throughput.
- REST and MCP calls share the request and data meters.
- Starter and Pro are for personal use only. Use in a commercial application requires Enterprise.
- The first allowance reached pauses keyed calls until the paid plan resets or you switch plans. Starter is a lifetime trial.
The game discovery endpoints remain keyless.
Response headers
Every response carries the limit state:
| Header | Meaning |
|---|---|
X-Usage-Requests-Used | Requests used in the current paid period |
X-Usage-Requests-Limit | Paid plan request allowance |
X-Usage-Bytes-Used | Response bytes used in the current paid period |
X-Usage-Bytes-Limit | Paid plan data allowance |
X-Usage-Resets-At | Paid plan reset timestamp |
Retry-After | On 429 only — seconds to wait before retrying |
These are exposed via Access-Control-Expose-Headers, so browser clients can read them cross-origin.
Going over
Over the limit returns 429 with a Retry-After header:
{
"error": "Monthly data allowance reached.",
"code": "monthly_limit_exceeded",
"plan": "pro",
"resetsAt": "2026-10-04T12:00:00.000Z",
"upgrade": "https://pokerdata.io/app/api"
}
Backing off for Retry-After seconds and retrying is always safe — every endpoint is read-only and idempotent.
for spot in $(cat spots.txt); do
until curl -sf "https://pokerdata.io/api/v1/ranges/nl/v2/range?stack=100&spot=$spot" \
-H "Authorization: Bearer $PDK" -o "out/$spot.json"; do
sleep 1
done
done
Caching
Responses are served with Cache-Control: private, max-age=300. The underlying solves are effectively immutable, so cache aggressively on your side — a spot you fetched once will not change out from under you.