A challenge sized to the request.
Every request is scored from what it reveals about itself, and the score picks how hard the puzzle is - between levels 1 and 5.
How it works
Signals, not identity
The user agent, the Accept headers, whether the address looks like a datacentre, and how often that hashed client has failed today. Nothing about who the visitor is.
Decided on the server, always
The client never sends a difficulty and never gets to ask for an easier one. An earlier implementation honoured a difficulty query parameter; that was the cheapest possible bypass and it is gone.
Failure compounds
Wrong answers are counted against a daily-rotating hash of the client and push the next challenge higher. A run of guesses climbs into the tightest tolerances on its own.
What that means concretely
Each of these is a statement about how the product behaves, not a description of how we feel about it.
Risk scoring in PrivCaptcha: common questions
What risk scoring actually does, and where it stops.
Change two lines. Keep the rest.
10,000 verifications a month are free, and the integration is the one you already have.