Geonode logo
Website blocks

How to Fix a 429 Too Many Requests Error

Checks that show which limit you hit, three fixes in order, and retry code for cURL, Python and Node.js.

Updated

TL;DR

429 Too Many Requests means the website or API you called got more requests from you than it allows in a set time, so it refuses new ones for a while. Stop retrying, wait the time in Retry-After or at least a minute, then send requests more slowly.

What a 429 looks like in each client

Chrome draws its own error page only for a 429 with an empty body and otherwise shows the site's page.

WhereWhat you see
Chrome, 429 with an empty bodyThis page isn't working. If the problem continues, contact the site owner. HTTP ERROR 429
curl -i over HTTP/1.1, or any raw HTTP/1.1 responseHTTP/1.1 429 Too Many Requests
curl --failcurl: (22) The requested URL returned error: 429
Node.js with axiosAxiosError: Request failed with status code 429
Python urllib, and yt-dlp on YouTubeHTTP Error 429: Too Many Requests
Google Cloud APIs, JSON error body"code": 429, "status": "RESOURCE_EXHAUSTED"

Why this happens

The site counts your requests, and you went over the number it allows.

Sites usually count by IP address, and APIs often by key or login, per second, hour or day. A common trigger is a script that runs requests in parallel or retries each 429 at once.

Diagnose your 429 first

These checks show who set the limit and what it counts.

  • Read the error page in your browser; if it says Error 1015, the site's owner set a Cloudflare rate limiting rule.

  • Read a Google API's JSON error; RESOURCE_EXHAUSTED can mean a spent quota, which retries may not clear for hours.

  • Send the requests one at a time; if they pass, the limit is on speed or parallel requests (GitHub allows 100), not a daily quota.

  • Ask whether coworkers or other apps on your network or API key get 429 too; if they do, you share one count.

  • Behind a proxy, run curl -v; CONNECT tunnel failed, response 429 means the proxy refused you, and a 429 through the tunnel is the site's.

Solutions ranked by effectiveness

Work down the list; the later fixes matter when slowing down is not enough.

  1. Most common fix

    Wait for Retry-After, then retry slowly

    Applies to scripts and apps. Pause for at least the seconds in Retry-After, otherwise for a wait that doubles after each 429, and stop after five tries.

    curl -sS --retry 4 --retry-max-time 300 \
      -o items.json -w '%{http_code}\n' \
      https://api.example.com/items
  2. Check next

    Turn off the VPN or free proxy

    Applies when you browse through a VPN or a free public proxy. Their exit IPs are shared, so the site counts other users' requests as yours.

    1. Disconnect the VPN app and disable proxy extensions in your browser.

    2. Clear any free proxy you entered in your system network settings.

    3. Keep them off for this site instead of trying other servers or countries.

  3. For developers

    Use the official API or ask the owner

    Applies when your job needs more than the limit allows. Ask the owner for more; never split the job across extra keys, accounts or IPs.

    1. Switch from loading pages to the site's official API where one exists.

    2. Send your token; GitHub allows 60 requests an hour without one and 5,000 with it.

    3. Request a higher quota, stating your app's purpose and calls per second and per day.

    4. For sites without an API, ask the owner whether they offer a data feed.

Stop the 429 from coming back

Habits that cut requests and pace the rest, for jobs that call the same site or API every day.

  1. Cache responses and resend the ETag in If-None-Match; GitHub does not count a 304 on an authorized request.

  2. Use webhooks where the service offers them instead of polling for changes.

  3. Set each job's concurrency from the published limit, not by raising it until 429s appear.

  4. Log the share of 429s per host and pause the job automatically when it climbs.

An ISP IP only you useOn a Dedicated IP, the site counts only your requests, so keep your pace polite.
Try ISP proxies

Related errors

Learn more

FAQ

It means the server you called got too many requests from you in a given time and is turning new ones away. RFC 6585 defines it and lets the server add Retry-After to say when to try again.

Wait, then send messages more slowly. In Janitor AI, the proxy is the model API you connected, such as OpenRouter or DeepSeek, and its 429 means you hit that API's limit or the model is at capacity.

The API counted more calls from your key, account or IP than it allows in its window. A key or account limit stays the same from any IP, and GitHub may send 403 instead.

Etsy's Open API v3 limits each API key per second and over a rolling 24 hours, so the daily quota frees up gradually, not at midnight. To ask for a higher limit, email developer@etsy.com.

yt-dlp's FAQ says HTTP Error 429 means YouTube is blocking your IP for overuse. Its wiki puts the guest-session limit near 300 videos an hour and suggests 5 to 10 seconds between downloads.

It means a server or CDN is refusing some of your requests because you sent more than its limit for a period. Over HTTP the standard reply is 429, though RFC 6585 lets a flooded server drop connections instead.

One IP an owner can allowlist

If the owner allows more for your Dedicated IP, no one else shares the exception.