Skip to content

Cloudflare 403 Forbidden: What Blocked You and What to Do

Which Cloudflare 403 did you get? A challenge, a block page, an error code or the site's own refusal. How to tell, who can fix it, and our test of 140 sites.

HProxy TeamOctober 22, 2026Updated October 22, 202613 min read

Cloudflare 403 Forbidden: What Blocked You and What to Do

A 403 Forbidden from a site behind Cloudflare means the request was refused before the page was served. What to do depends on which of five answers you got. A challenge ("Just a moment...") wants a browser that runs JavaScript. A block page ("Sorry, you have been blocked") means a rule on the site matched. A numbered error such as 1005, 1010 or 1020 names the kind of rule. A 403 without Cloudflare's look came from the site's own server or another security vendor. A bare 403 with no styling can mean a client set up wrong.

On October 22, 2026, we sent one plain request to each of 140 popular sites behind Cloudflare. 85 served the page. 51 answered 403: 40 challenges, 5 block pages and 6 refusals without Cloudflare's page. This guide shows how to tell them apart, who can fix each one, and what changed the answers. We sell residential proxies, so we have a stake in one of the fixes. Most fixes below need no proxy at all.

Which Cloudflare 403 did you get?

Read three things: the status, the header cf-mitigated and the words on the page. Cloudflare sets cf-mitigated: challenge on every challenge page, "regardless of the Challenge Page type". The words tell the other kinds apart.

What you seeStatus and headerWho sent itWho can fix it
"Just a moment...", "Verify you are human", or a title of the site's own403 with cf-mitigated: challengeCloudflare, on a WAF rule, Bot Management or a rate limitYou, in a current browser; a plain script cannot pass it
"Sorry, you have been blocked" under "Attention Required! | Cloudflare", with a Ray ID403, no cf-mitigatedA WAF rule the site owner setThe owner; you can only change what the rule matched
"Access denied" with an error number such as 1005, 1010 or 1020403 for most numbersA Cloudflare feature the owner turned onThe owner, or you by changing what the number names
The site's own page, a plain "403 Forbidden", or an empty page403, still server: cloudflareThe site's server, a WAF rule with a custom response, or another bot vendor behind CloudflareThe site
A bare 403 with no styling at all403Cloudflare's edge, before the site's settings loadWhoever set up the client, for example a Host that does not match the SNI
Our terminal, October 22, 2026: one plain request from a home line to five sites behind Cloudflare. ietf.org: 200 and its page. www.nih.gov: 403, a challenge, Just a moment. ancestry.com: 403, a challenge titled Access denied. medium.com: 403, the block page. fiverr.com: 403, It needs a human touch. All five said server: cloudflare.
Our own capture, October 22, 2026, 14:15 UTC.

Two details in that screenshot catch people out. Ancestry's challenge page is titled "Access denied", and a browser can still pass it. Every answer also says server: cloudflare, Fiverr's too. Its page is a challenge from PerimeterX, now HUMAN, running behind Cloudflare (how to handle PerimeterX). The server header only tells you that the answer passed through Cloudflare.

To read the header yourself:

  • In a browser: open the developer tools (F12), choose Network, reload, click the first request and read its response headers.
  • From a script: print the status and the headers. With curl:
curl -s -o /dev/null -D - https://example.com/ | grep -i -E "^HTTP|^cf-mitigated|^server"

What 140 Cloudflare sites answered

We took the 1,000 most popular domains in the Tranco research ranking of October 21, 2026, and looked up their addresses. 146 pointed into the address ranges Cloudflare publishes. We left out five adult sites and one proxy provider. Each of the other 140 got one plain request: curl 8.5 with a Chrome user agent, from our home line, without JavaScript.

What 140 Cloudflare sites answered one plain request
The page
85 sites
A challengeall 403s, 29 titled Just a moment...
40 sites
403 without Cloudflare's pageFiverr, ResearchGate, Cambridge
6 sites
Cloudflare's block pageMedium, Character.ai, Life360
5 sites
Othersite errors, a DNS error, no answer
4 sites
More than a third refused a plain request, most of them with a challenge.
Source: HProxy test, October 22, 2026, 13:56 UTC: the 140 Tranco top-1,000 domains on Cloudflare's addresses; curl 8.5 on Linux, a Chrome 141 user agent, a home connection · hproxy.comProxy.

Challenges made up most of the refusals: 40 of the 51. Every one came back as a 403 with cf-mitigated: challenge. Only 29 of the 40 used Cloudflare's "Just a moment..." title. The rest carried the site's own, such as "Security Check - Indeed.com" or "Cloudflare Captcha Page | Bluehost.com". Five sites showed Cloudflare's block page, and six refused with a page of their own, or next to nothing.

What changed the answer

We sent the same requests from our server in a US datacenter, with the same curl build. Then we changed one thing at a time: the address, then the user agent. A repeat of the first request showed how much changes on its own.

What changed the answer when one thing changed
The address, home to datacenter7 harder for the datacenter
9 sites
No user agent3 turned into block pages
8 sites
curl's own user agent
4 sites
The same request, repeateditch.io
1 sites
The address mattered at a few sites. Where it did, the datacenter usually lost.
Source: HProxy test, October 22, 2026, 13:56 to 14:08 UTC: 140 Cloudflare sites, curl 8.5 on Linux from a home connection in Germany and a datacenter in the United States · hproxy.comProxy.

The address. At nine sites, the datacenter got another kind of answer than home, and a second request from each side kept the split. At seven, the datacenter got the harder answer:

  • NIH showed it a block page, where home got a challenge.
  • IETF, Perplexity, Patreon and cookiedatabase.org challenged it and served home the page.
  • Wyze answered it with a 429 rate limit.
  • HostGator Brazil denied it access. Asked without a user agent, the same site spelled out "error code: 1005", Cloudflare's code for a banned network (ASN).

One site went the other way. Maricopa County challenged us at home in Germany and served the US datacenter, so the country moved along with the network. People.com refused both: a challenge at home, and for the datacenter a 402 note that sends anyone after its content to a licensing address.

The user agent. On the same address, removing the user agent changed the answer at 8 of the 139 sites that answered steadily. Wiley and Bitdefender turned a page into Cloudflare's block page, and Britannica turned a challenge into one. Cloudflare's Browser Integrity Check, on by default, "challenges visitors without a user agent or with a non-standard user agent". curl's own user agent was blocked at Zendesk and challenged at Chess.com.

The surprise ran the other way at W3C. Our Chrome user agent sent from curl was challenged there, while curl's own name and no name at all got the page. Trendyol refused the Chrome user agent with an empty 403 and served the request that had none. At those two sites, claiming to be Chrome from a client that is not Chrome did worse than telling the truth.

Noise. The same request, sent twice from the datacenter minutes apart, changed its answer at one site, itch.io. Earlier that day, a change of curl build alone flipped two of 14 sites from one home line. The test is in how to scrape past Cloudflare.

Fixes in a browser, in order

Most people who meet a Cloudflare 403 are reading a site, and these fixes need no tools. Try them in this order, quickest first.

  1. Wait a few seconds, then reload once. A browser clears the kind without a checkbox in what Cloudflare calls "typically less than five seconds". If a box asks you to confirm you are human, tick it. If the check keeps coming back, see the Verify you are human loop.
  2. Update the browser. Cloudflare asks for "the latest stable version". Internet Explorer cannot pass its challenges at all.
  3. Turn off extensions. Cloudflare names ad blockers and privacy tools that "may block standard browser headers or the necessary challenge scripts". A private window with extensions off is a quick test.
  4. Turn off the VPN or proxy, or try another network. Cloudflare says a poor IP reputation is "often seen with shared VPNs or corporate proxies". Mobile data is an easy second network.
  5. Look at other software on the computer. When the site loads on your phone over the same Wi-Fi, the address is the same, so the cause sits on the computer. In a Reddit thread about a Cloudflare 403 on job and school sites, one reply advises: "Check any and all third party apps or browser extensions."
  6. On error 1015, wait. It is a rate limit, and Cloudflare warns that retrying quickly "may extend the block".
  7. If the block stays on every browser and network, the rule is the site's. Send the owner the Ray ID and the time shown on the page. The block page guide explains each line of it.

When your script or app gets it

  1. Read the answer before you change anything. Print the status, cf-mitigated and the title. Each kind needs its own fix, and every one of them says server: cloudflare.
  2. A challenge needs a browser. A plain HTTP client cannot run it. Challenge pages also break fetch and XHR calls, because those expect data and get a page.
  3. Keep the client honest. In our test, the user agent alone changed the answer at up to 8 sites, in both directions. The TLS handshake matters as well: Cloudflare profiles clients by their JA3 and JA4 fingerprints.
  4. Slow down on 429 or 1015. Both are rate limits, and retrying fast extends them.
  5. Check the network last. In our test, the datacenter got a harder answer than home at 7 of 140 sites. Cloudflare watches scraping patterns "by ASN", so one network carrying all of your traffic forms a pattern of its own.
  6. Prefer the front door. An official API, a data feed or a license avoids the fight. People.com's 402 note points to exactly that.

Errors 1005 to 1020 each name their cause; our guide to Cloudflare errors 1006 to 1020 covers what changes each one. A 403 that a proxy returns itself is another problem, covered in 403 errors through a proxy.

If you run the site

Start from the Ray ID. Every request through Cloudflare gets one, and Security Events lists it with the IP address, user agent and ASN. Ask the visitor for the Ray ID and the time, then filter Security Events by it. The event names the feature that acted.

  • A WAF custom rule. Narrow it, or switch its action from Block to Managed Challenge, which lets a person through. To let a known client pass, add a Skip rule and place it before the rule it should skip.
  • A banned network, error 1005. Cloudflare's fix is to allow the network (ASN) in IP Access rules.
  • Bot Fight Mode. It can challenge API and mobile app traffic, and WAF custom rules cannot skip it. An IP Access rule that matches first does stop it. Super Bot Fight Mode supports Skip rules.
  • The Browser Integrity Check. It is on by default. Turn it off for a path with a configuration rule, or for the zone in Security settings.
  • Under Attack mode. It puts a Managed Challenge in front of visitors and can affect API traffic, so keep it for an attack.
  • Challenges on your own API. A challenge cannot complete inside fetch or XHR. Cloudflare suggests Turnstile pre-clearance, which issues the cf_clearance cookie on an HTML page first (Turnstile errors).

A 403 without Cloudflare's look comes from your origin, unless you gave a WAF rule a custom response. Cloudflare lists permission rules such as an Apache .htaccess file, mod_security rules and IP deny rules. It also asks owners to check that the origin lets its address ranges in.

A bare 403 with no styling never reaches Security Events. Cloudflare serves it before your settings load and does not log it. One cause is a client that sends a Host that does not match its SNI.

A 403 from the Cloudflare API

If the 403 comes from api.cloudflare.com, your API token lacks a permission. Since August 2026, these errors carry a documentation_url field. It links to the endpoint's documentation and the roles it needs.

When nothing works

If the page looks the same on another browser, another device and another network, the decision sits with the site. Write to its owner through its support or contact page. Give the Ray ID, the time in UTC and what you were trying to do. For a bot or a script, ask for an API or a license. Cloudflare says its support "cannot override a customer's security settings".

Where a residential proxy fits

A proxy fixes only one case on this page: a scraping job refused because of its network. In our test that was 7 of 140 sites, where a datacenter address met a harder answer than home. There, rotating residential proxies spread the traffic over many home networks, behind a real browser that passes the challenge. They do nothing for a client that fails the check. Cloudflare also spots residential proxy traffic and sets its bot score to 29. That sits inside its "likely automated" band, so pacing and a real browser still matter. At our one-GB residential price of $0.50 per GB, a test run costs cents.

Limits of this test

  • Plain requests. We sent curl requests without JavaScript, so the test shows a site's first answer. It does not show what a person sees after a challenge, or what holds at volume. We ran no browser automation or solver, and we tested no proxy, ours included.
  • Two addresses. One home connection in Germany and one datacenter in the United States, so the address test also changed the country.
  • Small slices. Homepages only, one request per change, and the most popular Cloudflare domains rather than the sites you visit. Numbered error pages were rare in this sample.
  • A floor. The DNS count misses sites that bring their own addresses to Cloudflare.
  • Moving parts. Cloudflare updated four of the pages we cite between September 28 and October 20, 2026, and sites change their rules daily. Check again after January 22, 2027.

Sources

Cloudflare documentation, read October 22, 2026, with the date each page was last updated:

  • Error 403, September 28, 2026.
  • Detect a Challenge Page response, May 5, 2026; Interstitial Challenge Pages, October 20, 2026.
  • Challenges troubleshooting, May 5, 2026.
  • 1xxx errors: Error 1005 and Error 1010, April 23, 2026; Error 1015, May 14, 2026; Error 1020, October 14, 2026.
  • Browser Integrity Check, August 3, 2026; Security Level, April 16, 2026.
  • Firewall rules upgrade, April 16, 2026: the WAF block response and custom responses.
  • Ray ID, October 15, 2026.
  • Bot Fight Mode, August 3, 2026.
  • Bot scores, August 26, 2026: scores of 2 to 29 count as likely automated.
  • Additional detections, April 15, 2026; Scraping detections, August 3, 2026.
  • Changelog: Enriched 403 responses for the Cloudflare API, August 21, 2026.
  • IP ranges.

Other sources:

  • IETF, RFC 9110, HTTP Semantics, section 15.5.4, June 2022.
  • Tranco, top sites list 746PX, created October 21, 2026 (Le Pochat and others, NDSS 2019).
  • HProxy test, October 22, 2026, 13:56 to 14:15 UTC: DNS for the Tranco top 1,000; one plain request to each of 140 Cloudflare sites from a home line and from a datacenter with the same curl 8.5 build; the user agent changed one at a time; a repeat on each side.

Frequently asked questions

What does a 403 Forbidden from Cloudflare mean?

The request was refused before the page was served. Behind Cloudflare that is one of five answers: a challenge your browser can pass, a block page from a rule the site set, a numbered Cloudflare error, a refusal from the site's own server, or a bare 403 from Cloudflare's edge. The header cf-mitigated: challenge marks a challenge, and the words on the page tell the others apart.

Why do I get a Cloudflare 403 on my PC but not on my phone?

If the phone is on the same Wi-Fi, it shares the PC's address, so the difference sits on the PC: an old browser, an extension such as an ad blocker or privacy tool, a VPN app, or other software that handles web traffic. Cloudflare's own advice for challenged visitors starts with the browser and its extensions.

Does a VPN cause the Cloudflare 403?

It can. Cloudflare names IP reputation as a cause of challenges and says a poor one is often seen with shared VPNs and corporate proxies. Turn the VPN off and reload. If the page then loads, the site's rules distrust that VPN's addresses, and only the site can change that.

Is 'Just a moment...' a 403 error?

Yes. In our test of 140 Cloudflare sites, every challenge page came back with status 403 and the header cf-mitigated: challenge. A browser usually clears it in under five seconds. A script that cannot run JavaScript never gets past it, so it sees only the 403.

Why does curl or Python get a 403 when my browser loads the page?

Cloudflare judges the client as well as the address. A plain client cannot run the challenge, its TLS handshake differs from a browser's, and its user agent can trip the Browser Integrity Check. In our test, the user agent alone changed the answer at up to 8 of 139 sites, and a Chrome user agent sent from curl was challenged at W3C, where curl's own name got the page.

Is a Cloudflare 403 the same as error 1020?

Error 1020 is one kind of Cloudflare 403: a security feature such as API Shield blocked the request. A WAF custom rule that blocks shows 'Sorry, you have been blocked' instead, without a number. A challenge is a third kind, and a browser can pass it.

How do I find which rule blocked a request on my own site?

Ask for the Ray ID and the time shown on the error page, then filter Security Events in the Cloudflare dashboard by that Ray ID. The event names the feature and the rule. Cloudflare advises converting the UTC time to your own time zone when you search.

What does a 403 from the Cloudflare API mean?

Your API token lacks a permission for that endpoint. Since August 2026, Cloudflare adds a documentation_url field to these errors. It links to the endpoint's documentation, which lists the roles it needs.

HProxy.

Honest guides and comparisons on proxies, scraping and staying unblocked, from the team that runs the network.

RSS feed