403 Forbidden

The server understood the request and refuses to authorize it. Authenticating again will not help.

Status

HTTP/1.1 403 Forbidden

Details

403 means the server knows what you are asking for and will not do it. Unlike 401 it is not about missing credentials: either the caller is authenticated and lacks permission, or the server refuses everyone regardless of identity.

It is also the standard face of bot detection. Anti-bot systems answer suspicious traffic with 403 rather than explaining why, which is why a 403 in an automation context usually points at the IP address, the TLS fingerprint, or the header profile rather than at the URL.

Note: A 403 is frequently bot detection rather than a permission check. If the same request succeeds from a different address, the block is on the address, not on the request.

Common causes

How to fix it

As the client

As the server

Examples

Requesting something outside your scope

A request from an authenticated caller whose token lacks the required scope:

HTTP request

GET /admin/users HTTP/1.1
Host: app.example.com
Authorization: Bearer sk_live_example

The server knows who the caller is and still refuses. Re-authenticating will not change the outcome:

HTTP response

HTTP/1.1 403 Forbidden
Content-Type: application/json; charset=utf-8

{"error":"insufficient_scope","required":"admin:read"}

Notes for proxy users

403 is the code you meet most often when a target site dislikes your IP. Datacenter ranges are widely categorized and blocked outright, while static residential ISP addresses carry consumer reputation and are treated like ordinary visitors. If a request succeeds from a home connection and returns 403 from a server, the address type is the variable to change first.

Specifications

See also