API Retry Strategies

Learn proven retry patterns for AI APIs. Handle failures gracefully with exponential backoff and jitter.

Fixed Delay

Wait same time between retries

1s → 1s → 1s → 1s

Exponential

Double wait time each retry

1s → 2s → 4s → 8s

Exponential + Jitter

Randomized exponential backoff

1.2s → 3.1s → 6.8s → 9.2s

Retry Delay Comparison

Fixed Delay (1 second)
1
2
3
4
Exponential Backoff (1, 2, 4, 8)
1s
2s
4s
8s

Exponential backoff gives services time to recover while jitter prevents thundering herd

Implementation

// Retry configuration const retryConfig = { "maxRetries": 5, "initialDelay": 1000, "maxDelay": 30000, "backoff": "exponential", "jitter": true, "retryableErrors": [ "ECONNRESET", "ETIMEDOUT", "429", "500", "502", "503" ] }; // Retry function async function retryWithBackoff(fn) { let delay = config.initialDelay; for (let i = 0; i < config.maxRetries; i++) { try { return await fn(); } catch (err) { if (!isRetryable(err)) throw err; await sleep(delay); delay = Math.min(delay * 2, config.maxDelay); if (config.jitter) delay *= Math.random(); } } throw new Error("Max retries exceeded"); }

Key Points

Frequently Asked Questions

What's jitter and why use it?
Jitter adds randomness to retry delays. Without it, all failed requests retry at the same time, overwhelming the recovering service. Jitter distributes retries more evenly.
How many retries should I configure?
3-5 retries is typical. Too few and you fail on transient errors. Too many and you delay recovery while potentially overloading the service.
Should I retry on rate limit errors?
Yes, but respect Retry-After header if present. Rate limits are temporary and worth retrying after the specified delay.

Related Resources

Exception Handling

Patterns

Error Codes

Reference

Error Messages

OpenAI specific

Home

Back to hub