DriversRecommendedOutdated drivers can make a good PC feel brokenScan driver issues before chasing fixes manually.Scan NowOctober DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsPC HealthRecommendedCrashes, freezes, slowdowns? Check your PC nowSpot repairable issues before they interrupt work.Check PC×
Skip to content
API

How to Retry Requests in Axios: Interceptors, Backoff, and Safe Retries

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Axios does not automatically retry failed requests: add a response interceptor or configure a retry library such as axios-retry. Retry only failures likely to be temporary, cap the attempts, wait between them, and avoid replaying mutations unless the server makes them safe to repeat. A lost response does not prove the server failed to process the original request.

Choose an interceptor or a retry package

A custom response interceptor is useful when retry rules need to fit one API, when requests need individual opt-outs, or when you want to control logging and delay behavior yourself. It also makes your application responsible for attempt tracking, cancellation during delays, timeout semantics, and interpreting rate-limit headers.

axios-retry is an alternative with named configuration options: retries, retryCondition, retryDelay, shouldResetTimeout, and onRetry. Its documented default condition is a network error or a 5xx response for an idempotent method (GET, HEAD, OPTIONS, PUT, or DELETE); its documented default delay is zero. Those defaults may not match your API, and project behavior can change, so check the documentation and installed version before relying on them. See the axios-retry project README.

Use an interceptor for a small, explicit policy you can maintain. Prefer a package when its configurable rules match your needs and you want to avoid implementing the retry mechanism yourself. Neither choice makes an unsafe operation safe to repeat.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

What Axios considers an error

By default, Axios rejects responses with status codes outside the 2xx range. A rejected response interceptor is therefore a natural place to consider a retry. However, the validateStatus option can change which responses count as fulfilled, so a policy that expects 429 or 5xx responses in the rejection handler must account for the configuration used by that request. Axios also distinguishes a server response (error.response), a request for which no response arrived (error.request), and an error while setting up the request. These differences help classify failures but do not establish whether the server processed an operation. See Axios documentation on interceptors and error handling.

The example below retries only GET, HEAD, and OPTIONS requests, for a missing response or a 5xx response. It uses three retries after the first attempt, with exponential waits of 200, 400, and 800 milliseconds. Treat it as a starting point rather than tested, drop-in code: adapt the status rules, configuration typing, and runtime behavior to your project and installed Axios version.

Implement a bounded response-interceptor retry

This JavaScript example assumes Axios is installed and uses a modern runtime with promises and setTimeout. The retry counter is stored on the request config so it survives replay through the same Axios instance.

import axios from 'axios';

const api = axios.create({ baseURL: 'https://api.example.com' });
const MAX_RETRIES = 3;
const SAFE_METHODS = new Set(['get', 'head', 'options']);

api.interceptors.response.use(
  response => response,
  async error => {
    const config = error.config;
    if (!config) return Promise.reject(error);

    const status = error.response?.status;
    const transient = !error.response || (status >= 500 && status < 600);
    const method = String(config.method || 'get').toLowerCase();
    const safeMethod = SAFE_METHODS.has(method);

    if (!transient || !safeMethod || config.noRetry) {
      return Promise.reject(error);
    }

    config.retryCount = config.retryCount || 0;
    if (config.retryCount >= MAX_RETRIES) return Promise.reject(error);
    config.retryCount += 1;

    const delay = 200 * 2 ** (config.retryCount - 1);
    await new Promise(resolve => setTimeout(resolve, delay));
    return api(config);
  }
);

// Example: the caller receives the eventual response or final error.
const response = await api.get('/health');
console.log(response.status, response.data);

Replace the example base URL and endpoint with your API. Returning api(config) matters: the original caller then awaits the replay and receives its response or final rejection. If a request has no config, the handler rejects rather than trying to reconstruct one.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Adjust the retry condition deliberately

  • Do not retry every status. A 4xx response usually indicates the request needs correction or authorization, not another attempt. Add a particular status such as 429 only with a deliberate rate-limit policy.
  • Be careful with network errors. The sample treats any error with no response as transient, but a missing response can also follow a server-side operation that succeeded. Its method restriction prevents replaying common mutations, but does not replace API-specific judgment.
  • Review method semantics. The sample uses only GET, HEAD, and OPTIONS. The axios-retry default also includes PUT and DELETE in its idempotent-method list. HTTP method names alone do not guarantee that a particular server implements repeatable behavior.
  • Keep the cap finite. MAX_RETRIES counts retries in addition to the initial request. With a value of 3, there can be at most four attempts.

Set delays, respect 429, and understand timeouts

Immediate retries can add traffic when a service is already struggling. Exponential backoff increases the wait between attempts; the sample uses a simple sequence, not a universal timing prescription. Choose delays and an overall request deadline appropriate to your application.

For HTTP 429, follow the server’s documented rate-limit guidance. The retry guide demonstrates using the Retry-After header. Parse the format your server sends, reject invalid values, and bound the wait so an unexpected header cannot hold a caller indefinitely. Do not treat a fixed exponential delay as a substitute for a server-provided instruction. See Axios retry and error recovery guidance.

Timeout behavior also needs an explicit choice. A retry may consume time in the backoff as well as in the network request. The axios-retry configuration exposes shouldResetTimeout; consult the installed version’s documentation and decide whether the timeout applies across the whole operation or resets for each retry. Do not assume that adding a retry automatically grants a fresh timeout or preserves your intended end-to-end deadline.

Make cancellation apply during backoff

Axios supports cancellation through an AbortController signal. If a caller aborts while the interceptor is waiting, the retry policy should stop before issuing another request. A plain setTimeout promise, as used for clarity in the sample, is not itself abort-aware. In production, make the delay listen for the request’s signal, clear its timer on abort, and reject the wait; check the signal again before replaying. The Axios retry guidance illustrates cancellation during a backoff wait.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Also preserve the signal when replaying the original config. If cancellation has already occurred, do not start a new attempt just because the previous request failed. Decide how the caller should distinguish cancellation from an exhausted retry policy, and preserve the original cancellation error where appropriate.

Protect mutations from duplicate effects

A request can reach and change the server even when the client never receives its response. Retrying a payment, order creation, or other non-idempotent operation can therefore duplicate its effect. Do not automatically retry such operations merely because Axios reports a network error.

Where the API supports idempotency keys, use the server’s documented mechanism so repeated submissions can be recognized as the same operation. Otherwise, opt out on requests that must not be replayed. In the sample, a caller can pass noRetry: true as a custom config property, but projects using TypeScript should extend or type their Axios request config rather than leave an unsupported property untyped.

await api.post('/orders', order, { noRetry: true });

If your service explicitly guarantees safe replay for a particular operation, document that guarantee in the retry condition rather than broadening the policy for every POST or mutation.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Configure axios-retry when its policy fits

The package exposes hooks for retry count, condition, delay, timeout reset, and retry callbacks. Configure a delay explicitly if you do not want immediate retries, and set a condition that reflects the methods and statuses your API considers safe. Its documented default is a network error or a 5xx response on an idempotent method; verify current package documentation for exact behavior and version-specific details before using it in production.

Do not install the package and assume it supplies backoff: the documented default delay is zero. Likewise, understand how its retry count and timeout settings interact with your own request deadline. Package defaults are policy choices, not a guarantee that the policy is appropriate for every endpoint.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Troubleshoot common retry problems

The request is never retried

  • Confirm the response is reaching the rejected interceptor. A custom validateStatus may route the status through the fulfilled handler instead.
  • Check whether the status or method passes your condition. The example deliberately excludes 4xx responses and mutation methods.
  • Check that error.config exists and that the attempt cap has not already been reached.

The request loops or makes too many calls

  • Store the counter on the replayed config and enforce a finite maximum before incrementing and replaying.
  • Return the original rejection when the limit is exhausted; do not retry from a branch that also handles the replay without checking its count.
  • For plugin use, verify the configured retry count and ensure another interceptor is not independently replaying the same request.

429 responses retry too soon

A fixed delay may ignore the service’s rate-limit instruction. If the API documents Retry-After, parse it, validate it, and apply a bounded wait. Confirm your validateStatus setting sends 429 to the handler that implements this rule.

An operation appears to happen twice

The first request may have succeeded on the server even though its response was lost. Stop automatic retries for that operation unless the API provides a safe replay mechanism. For future calls, use the server’s documented idempotency support where available and make the retry condition specific to the endpoint’s semantics.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Aborting still causes another attempt

Check whether the signal is used only for the network request or also for the delay. Cancel the pending timer and check for abortion before replaying; otherwise the backoff can finish and start another request after the caller has cancelled.

Or skip the browser setup

Axios retries are for HTTP requests made by your application; ScreenshotNeo is a separate website screenshot API, not an Axios retry plugin. If the task you actually need is capturing a webpage, one GET request can return an image or PDF. See the ScreenshotNeo website and API documentation.

curl -G "https://api.screenshotneo.com/v1/shot" 
  -d access_key=YOUR_API_KEY 
  --data-urlencode url=https://stripe.com 
  -o shot.webp

ScreenshotNeo removes cookie and consent banners, newsletter popups, and chat widgets before capture. Bot checks, blank pages, failed loads, timeouts, and cache hits are not billed. It also has an MCP server for AI agents, and its free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000. Sign up for 1,000 free screenshots a month, with no card required.

Sources and version scope

The Axios documentation and retry-project pages describe project behavior that may change over time. The references below were consulted for this article on September 29, 2026; check the documentation matching your installed Axios and package versions when implementing a production policy.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Frequently Asked Questions

How many retries should I allow?

There is no universal number. Set a finite cap based on your service’s latency budget and the importance of the operation; the example’s three retries are illustrative, not a recommendation for every API.

Can I retry a POST request safely?

Only when the API documents a way to make that operation safe to replay, such as an idempotency mechanism, or when you otherwise know repetition cannot duplicate effects.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Read next

Recommended PC Tool
Recommended PC Tool
Crashes, No Sound, or Screen Glitches?Free driver scan
Windows Errors? Fix Them Before They SpreadFree repair scan

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.