Rate Limiting
Based on the package you chose, your API key will be limited to a certain number of requests made and/or objects returned during a given time interval. If you exceed this limit, you will receive a 429 status code and will be unable to make further requests until the limit resets.
While we do make changes to our standard rate limits, these changes usually won’t affect existing subscribers, so unless you receive an email, your rate limit will remain the same as it was when you signed up. Therefore, the limits posted in this guide may be different from those your API key is subject to.
Request Limits
Each request you make to the Sports Game Odds API server will count towards your request rate limit.
- Amateur plan: 10 requests per minute
- Rookie plan: 50 requests per minute
- Pro plan: 300 requests per minute
- All-Star plan: Unlimited requests per minute
Object Limits
Each request you make to the Sports Game Odds API server may return multiple objects in the response. Each object returned will count towards your object rate limit over a given time interval. Each response counts as a minimum of 1 object.
- Amateur plan: 2,500 objects per month
- Rookie plan: 100,000 objects per month
- Pro plan: Unlimited objects per month
- All-Star plan: Unlimited objects per month
Default Limits
In order to protect our servers and ensure maximum uptime, the following default limits apply to all API keys. In general you shouldn’t ever hit these limits regardless of your plan, but if you do, feel free to reach out to us and we can find a solution for removing or increasing these default limits
- 50k requests per hour
- 300k objects per hour
- 7M objects per day
Strategies to Avoid Rate Limiting
To protect your application from rate limiting, you can use the following strategies:
- Avoid a high frequency of calls to endpoints serving data that doesn’t change frequently (e.g., Teams, Players, Stats).
- Cache this data locally to avoid making unnecessary requests.
- Make use of available query params at each endpoint to focus on only the data you need.
- You can always fetch data about your current rate limit usage using the
/account/usageendpoint.
Response Filtering Notice
When your API key has limitations that cause data to be filtered from responses (such as limited bookmakers or restricted data types), you may receive a notice field in the API response. This notice informs you about what data has been filtered and can be accessed at higher API tiers.
The notice field appears in responses when:
- Events are filtered due to sport or league restrictions
- Bookmaker odds are filtered due to bookmaker access limitations
- Data types are filtered due to subscription tier restrictions
Example response with notice:
{
"success": true,
"data": [...],
"nextCursor": "n.1720564800000.DCtqsAt8d0GIFAvMmfzD",
"notice": "Response is missing 3 events and 15 bookmaker odds. Upgrade your API key to access all data from this query."
}This notice is designed to help you understand when your current subscription might be limiting your access to data, allowing you to make informed decisions about upgrading your plan.
Checking Your Rate Limit Usage
You can use the /account/usage endpoint to get information on your rate limits. This endpoint provides details about your current usage and remaining limits.
A sample API call to the endpoint is below:
fetch('https://api.sportsgameodds.com/v2/account/usage', {
headers: {
'X-Api-Key': 'YOUR_TOKEN'
}
})A sample response is below
{
"success": true,
"data": {
"keyID": "abc123xyz456",
"customerID": "cus_987xyz321abc",
"isActive": true,
"rateLimits": {
"per-second": {
"maxRequestsPerInterval": "unlimited",
"maxEntitiesPerInterval": "unlimited",
"currentIntervalRequests": "n/a",
"currentIntervalEntities": "n/a",
"currentIntervalEndTime": "n/a"
},
"per-minute": {
"maxRequestsPerInterval": 1000,
"maxEntitiesPerInterval": "unlimited",
"currentIntervalRequests": 1,
"currentIntervalEntities": "n/a",
"currentIntervalEndTime": "2024-01-01T00:01:00.000Z"
},
"per-hour": {
"maxRequestsPerInterval": "unlimited",
"maxEntitiesPerInterval": "unlimited",
"currentIntervalRequests": "n/a",
"currentIntervalEntities": "n/a",
"currentIntervalEndTime": "n/a"
},
"per-day": {
"maxRequestsPerInterval": "unlimited",
"maxEntitiesPerInterval": "unlimited",
"currentIntervalRequests": "n/a",
"currentIntervalEntities": "n/a",
"currentIntervalEndTime": "n/a"
},
"per-month": {
"maxRequestsPerInterval": "unlimited",
"maxEntitiesPerInterval": 1000000,
"currentIntervalRequests": "n/a",
"currentIntervalEntities": 100,
"currentIntervalEndTime": "2024-01-31T00:01:00.000Z"
}
}
}
}