Error codes · Cloudflare
Cloudflare Error 1020: Access denied
Cloudflare error 1020, "Access denied", means a Cloudflare security feature that the owner of the site configured blocked your request. It comes with status 403, and it is a refusal, not a check, so reloading does not clear it. A visitor changes network or asks the site. A script sends a different request with one Web Unlocker call.
- 9 of 9
- calls to Cloudflare-protected pages answered with the real page, canary of 11 November 2026
- 88.9%
- across all 27 protected targets of the same run
- 4.1 s
- median response across the run
What you are looking at
A 1020 is short and final. There is nothing to click and nothing that clears by itself: the request matched a block.
| Where to look | What it shows |
|---|---|
| Status code | 403. |
| Text on the page | "Error 1020" and "Access denied", with a Ray ID and a timestamp. |
| Which system | Cloudflare, enforcing a block that the owner of the site set up. |
| What produces it | A security rule with a Block action and no custom response. Cloudflare's documentation gives API Shield schema validation and JWT validation as examples. |
| What does not | WAF custom rules and WAF managed rules. Cloudflare's documentation says requests blocked by those get the WAF block response instead, which is a different page. |
| Response headers | server: cloudflare and a cf-ray id. No cf-mitigated: challenge: that header marks a challenge, and a 1020 is not one. |
| Ray ID | The owner of the site finds the event by the Ray ID or by your IP address, and sees which feature and rule blocked the request. |
If you are a visitor
Reloading will not help: a 1020 is a decision, not a test. Something in your request matched a block that the owner of the site set up. It can be the address or network you came from, your country, the browser or an extension that changed the request, or the page you asked for.
- Turn off the VPN or proxy, or switch between Wi-Fi and mobile data, and open the page again.
- Use a normal window of an up-to-date browser with extensions paused.
- Open the site from its home page rather than from a saved link or a form you had left open.
- If the error stays, take a screenshot of it with the Ray ID and send it to the site's support. This is Cloudflare's own advice: the owner can look the Ray ID up and see which rule blocked you.
If your script gets it
For a script, a 1020 says the request itself was refused by a rule. No challenge was offered, so there is nothing for a browser to solve, and the same request gets the same answer.
- The address: a rule that blocks hosting networks or whole countries refuses the request whatever the client is.
- The client: a request that does not look like the browser it names, in its headers or in what it asks for, can match a block.
- The call: on API routes, features such as schema validation and JWT validation refuse calls that lack the shape or the token the API expects. Only a valid call changes that.
- The path: admin, login and internal routes are often closed to everyone outside a list. Those stay closed.
The whole picture of the system is in the guide: How to Bypass Cloudflare When Scraping.
Get the page with one call
When the refusal is about where the request came from or what sent it, a different request gets a different answer. Send the URL to the REST endpoint: it leaves from a residential or mobile IP in the country you choose, with a browser-grade client, and a refused attempt is retried on a fresh exit.
curl -X POST https://app.quanticdata.io/api/v1/scraper/unlock \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/", "country": "us"}'
Set country to a country the site serves. If the answer still comes back with blocked: true and blockClass: "access_denied", the rule is about the page or the call itself, and no exit changes it.
What the answer tells you
| Field | What it says |
|---|---|
blocked | false when the real page came back. true only when every attempt met the block; the block page is then in body. |
vendor | The system the engine recognised on a blocked attempt. For this page: cloudflare. |
blockClass | access_denied for a 1020: a flat refusal, with no challenge offered. geo when the site does not serve the country of the exit. |
tier_served | tls for a browser-grade request, browser when a real browser had to open the page. |
attempts, latency_ms | How many tries the call took and how long it lasted. |
cost | The bytes this call moved and what it was charged. |
Measured, with a date
In the canary of 11 November 2026, all 9 calls to Cloudflare-protected pages came back with the real page. Across the whole run, 72 of 81 calls on 27 protected targets did, with a median response of 4.1 s.
A call counts only when the answer is 2xx and carries the real page, not a challenge. The list, the method and every run are on the Web Unlocker status page.
What it is for, and what it does not do
- It is for pages anyone can open in a browser without signing in: prices, listings, reviews, search results, public profiles.
- Challenges that need no human input are handled by the browser tier. An interactive captcha that asks a person to click, pick images or type is not solved: the answer comes back with
blocked: trueandblockClass: "captcha", so your code can skip the page or try later. - It does not log in for you and it does not create accounts. Pages behind a login stay behind it.
- Whether you may collect a page depends on the terms of the site and on the law that covers the data. A protection system does not change that, in either direction.
Error 1020: questions people ask
What does Cloudflare error 1020 mean?
Per Cloudflare's own page, error 1020 Access denied means a Cloudflare security feature configured by the website owner blocked the request. It is returned with status 403. It is the site's decision, enforced by Cloudflare: your browser reached Cloudflare, and a rule there refused to pass the request on.
Is error 1020 caused by a WAF rule?
Not by WAF custom rules or WAF managed rules: Cloudflare's documentation says requests blocked by those get the WAF block response instead, not a 1020. A 1020 comes from another security feature with a Block action and no custom response. The documentation names API Shield schema validation and JWT validation as examples.
How do I fix error 1020 as a visitor?
You cannot be sure to fix it from your side, because the rule is the site's. Try without a VPN, on another network and in a normal browser with extensions paused. If the error stays, send the site's support a screenshot with the Ray ID: they can find the rule that blocked you.
What is the Ray ID on the error page?
An identifier Cloudflare gives to every request. On a 1020 page it lets the owner of the site find your blocked request in the Security Events log, by the Ray ID or by your IP address, and see which security feature and rule refused it. It means nothing to anyone outside that account.
Does error 1020 mean my IP is banned?
Not necessarily. A banned IP address has Cloudflare errors of its own, and a 1020 only says that a block matched something in the request. That can be the address or its network, but also the country, the client or the path. Trying another network is the quickest way to tell.
Can a scraper get past error 1020?
When the rule looks at the address or the client, yes: the same URL sent from a residential IP in a country the site serves, with a coherent browser identity, is a different request. When the rule protects the route itself, such as an API that validates each call, only a valid call changes the answer.
Send the URL that shows you this page
Create the free account, open Web Unlocker in the dashboard and paste the URL into the test box. The answer shows the status, the tier that served the page, the attempts and the cost of the call.
References
- Cloudflare docs: Error 1020, Access denied
- Cloudflare docs: 1xxx errors, with the status code of each
- Cloudflare docs: detect a challenge page response (the cf-mitigated header)
- RFC 9110, section 15.5.4: 403 Forbidden
- Web Unlocker in the QuanticData API docs: request, answer, errors and how to read a block (vendor and blockClass)
- Web Unlocker status: the canary list, the method and every run