{"library":"requests-ratelimiter","title":"Requests Ratelimiter","description":"Requests-Ratelimiter is a Python library that provides easy-to-use rate-limiting capabilities for the popular `requests` library. It acts as a wrapper around `pyrate-limiter`, implementing the leaky bucket algorithm to control the rate of HTTP requests. It is currently at version 0.9.3 and generally follows the release cadence of its underlying `pyrate-limiter` dependency, with updates typically driven by new features or fixes in the core rate-limiting logic.","language":"python","status":"active","last_verified":"Sat May 16","install":{"commands":["pip install requests-ratelimiter"],"cli":null},"imports":["from requests_ratelimiter import LimiterSession","from requests_ratelimiter import LimiterAdapter","from requests_ratelimiter import LimiterMixin","from pyrate_limiter import RequestRate","from pyrate_limiter import Duration"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nfrom requests_ratelimiter import LimiterSession\nfrom time import time\n\nsession = LimiterSession(per_second=5) # Limit to 5 requests per second\nstart = time()\n\nfor i in range(10):\n    try:\n        response = session.get('https://httpbin.org/get') # Or any other API endpoint\n        response.raise_for_status()\n        print(f'[t+{time()-start:.2f}] Sent request {i+1} (Status: {response.status_code})')\n    except Exception as e:\n        print(f'Request {i+1} failed: {e}')\n\n# Example with custom rate using pyrate-limiter objects\nfrom pyrate_limiter import RequestRate, Duration, Limiter\n# Limit to 10 requests per minute\ncustom_limiter_session = LimiterSession(limiter=Limiter(RequestRate(10, Duration.MINUTE)))\nstart_custom = time()\nfor i in range(5):\n    try:\n        response = custom_limiter_session.get('https://httpbin.org/get')\n        response.raise_for_status()\n        print(f'[t+{time()-start_custom:.2f}] Sent custom-limited request {i+1} (Status: {response.status_code})')\n    except Exception as e:\n        print(f'Custom-limited request {i+1} failed: {e}')\n","lang":"python","description":"This quickstart demonstrates how to use `LimiterSession` as a drop-in replacement for `requests.Session` to apply a simple rate limit. It also shows how to define more complex rate limits using `RequestRate` and `Duration` from the underlying `pyrate-limiter` library. The `httpbin.org/get` endpoint is used for demonstration purposes.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-16","installed_version":"0.8.0","pypi_latest":"0.10.0","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":2.2,"avg_import_s":0.88,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"requests-ratelimiter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.76,"mem_mb":12.9,"disk_size":"21.5M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"requests-ratelimiter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.1,"import_time_s":0.54,"mem_mb":12.9,"disk_size":"22M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"requests-ratelimiter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.04,"mem_mb":14.7,"disk_size":"23.6M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"requests-ratelimiter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.2,"import_time_s":0.84,"mem_mb":14.7,"disk_size":"24M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"requests-ratelimiter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.15,"mem_mb":14.8,"disk_size":"15.4M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"requests-ratelimiter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2,"import_time_s":1.08,"mem_mb":14.8,"disk_size":"16M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"requests-ratelimiter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.19,"mem_mb":15.7,"disk_size":"15.2M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"requests-ratelimiter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2,"import_time_s":1.07,"mem_mb":15.7,"disk_size":"16M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"requests-ratelimiter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.62,"mem_mb":11.6,"disk_size":"20.6M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"requests-ratelimiter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.5,"import_time_s":0.51,"mem_mb":11.6,"disk_size":"21M"}]}}