API Navigator Logo

Python API Rate Limiting Handling

Author: Newtum

This guide shows a basic strategy for handling API rate limiting (HTTP 429 errors) by inspecting response headers and waiting before retrying.

Handling 429 Status Code

When an API rate limit is exceeded, it typically returns a `429 Too Many Requests` status code. Often, the response headers like `Retry-After` (in seconds) or `X-RateLimit-Reset` (a timestamp) will indicate when it's safe to try again.

import requests
import time

url = 'https://api.github.com/users/octocat' # A sample endpoint

for i in range(5): # Try to make requests
    response = requests.get(url)

    if response.status_code == 429:
        print("Rate limit exceeded.")
        # Check for 'Retry-After' header (in seconds)
        retry_after = response.headers.get('Retry-After')
        if retry_after:
            wait_time = int(retry_after)
            print(f"Waiting for {wait_time} seconds before retrying...")
            # In a real app, you would time.sleep(wait_time)
        else:
            print("No Retry-After header. Waiting for 60s as a fallback.")
            # time.sleep(60)
        
        # Breaking the loop for this example
        break 
    
    elif response.status_code == 200:
        print(f"Request {i+1} successful.")
        # In a real scenario with high request volume, you might sleep briefly
        # time.sleep(1) 
    else:
        print(f"Request failed with status: {response.status_code}")
        break