Rate Limits
Default Limits
Rate Limit Headers
All responses include rate limit headers so you can track your usage programmatically.Handling Rate Limits
When rate limited, the API returns429 Too Many Requests with a Retry-After header:
Pagination
List endpoints use cursor-based pagination. Each response includes anext URL that you follow to retrieve the next page of results.
Query Parameters
Response Format
Pagination Example
Best Practices
Respect Rate Limits
- Check
X-RateLimit-Remainingbefore making bursts of requests - Implement exponential backoff with jitter when limits are reached
- Spread requests over time for bulk operations instead of sending them all at once
Efficient Pagination
- Use the
nextURL directly rather than constructing cursor values manually - Process results as you paginate instead of loading everything into memory
- Set a reasonable
limitparameter to balance between fewer requests and smaller payloads
Caching
- Cache responses for resources that change infrequently (e.g., dataset metadata, project configurations)
- Use the
updated_attimestamp to determine when cached data is stale - Avoid caching paginated list responses since the underlying data may change between requests
Concurrent Requests
- Stay within concurrent connection limits for uploads (10) and exports (5)
- Use a semaphore or connection pool to manage concurrent requests in your application
- Queue requests that exceed concurrency limits rather than dropping them