Bot protection for the forms bots actually hit
Bad bots are a loop around an HTTP client, pointed at any public form you expose, submitting it faster than a person.
How bad bots find and hit your forms
A few dozen lines of python-requests or headless Chrome, POSTing one path in a loop. At a fraction of a cent per attempt, a one-in-a-thousand yield pays.
How PrivCaptcha stops bad bots
Four steps, with the numbers the server uses. Nothing here is configured by you.
No Origin header, no challenge
Once you list your domains, the challenge endpoint checks Origin. No Origin is refused with invalid-input-origin, and a bare curl sends none.
A bare client scores 75 on request one
Starts at 20. +40 bot User-Agent, +15 no Accept-Language. python-requests = 75. Level 4 on the visual path: 10 shapes, 10 degrees, 6 pixels.
Work is paid before the answer is read
At 75 the proof-of-work is 18 bits, 262,000 SHA-256 hashes, checked before the answer. One nonce covers all 3 attempts.
Three wrong answers and it is at 99
Each failure adds 8 points, up to 40, putting the 75-point script at 99: level 5, 12 shapes, 8 degrees, 5 pixels, 20 bits.
Add PrivCaptcha to your public form or endpoint in two lines of code
Script tag, container in front of the submit button, and your existing verify call. Already on reCAPTCHA or hCaptcha? That backend code stays exactly as it is.
A div with class privcaptcha and your data-sitekey inside the form your logs show being hit.
Read privcaptcha-response from the POST body and call siteverify with your secret before the insert.
Widget on the page, but the JSON endpoint still takes a plain POST. Require a valid token inside the handler.
What this does not solve about bad bots
This prices only requests through the widget and verify call. It does nothing for endpoints not behind it: APIs, webhooks, feeds. It is not a rate limiter.
Common questions about bad bots
How PrivCaptcha prices bad bots, and what it does not do about it.
Put PrivCaptcha in front of your public form or endpoint
10,000 verifications a month are free, and the integration is the one you already have.