Available languages: [Python](https://databento.com/docs/api-historical/basics/rate-limits.python.md) · [C++](https://databento.com/docs/api-historical/basics/rate-limits.cpp.md) · [Rust](https://databento.com/docs/api-historical/basics/rate-limits.rust.md) · [HTTP](https://databento.com/docs/api-historical/basics/rate-limits.http.md)

Source: https://databento.com/docs/api-historical/basics/rate-limits


### Rate limits

Our historical API allows each team up to:
- 100 concurrent connections.
- 100 [time series](https://databento.com/docs/api-historical/timeseries.md) requests per second.
- 100 [symbology](https://databento.com/docs/api-historical/symbology.md) requests per second.
- 20 [metadata](https://databento.com/docs/api-historical/metadata.md) requests per second.
- 20 [batch list jobs](https://databento.com/docs/api-historical/batch/batch-list-jobs.md) requests per second.
- 20 [batch submit job](https://databento.com/docs/api-historical/batch/batch-submit-job.md) requests per minute.

When a request exceeds a rate limit, a `BentoClientError` exception is raised
with a 429 error code.

**Retry-After**

The Retry-After response header indicates how long the user should wait before retrying.

If you find that your application has been rate-limited, you can retry after waiting for the time specified in the Retry-After header.

If you are using Python, you may use the time.sleep function as seen below to wait for the time specified in the Retry-After header.
e.g. `time.sleep(int(response.headers("Retry-After", 1)))`

This code snippet works best for our current APIs with their rate limits. Future APIs may have different rate limits, and might require a different default time delay.
