import time
import requests
def api_call_with_retry(url, data, max_retries=3):
for attempt in range(max_retries):
try:
response = requests.post(url, json=data, headers=headers)
if response.status_code == 200:
return response.json()
elif response.status_code == 429:
# Rate limited - wait and retry
retry_after = int(response.headers.get("Retry-After", 60))
time.sleep(retry_after)
continue
elif response.status_code >= 500:
# Server error - exponential backoff
wait_time = (2 ** attempt) * 1
time.sleep(wait_time)
continue
else:
# Client error - don't retry
return response.json()
except requests.RequestException as e:
if attempt == max_retries - 1:
raise
time.sleep(2 ** attempt)
raise Exception("Max retries exceeded")