Protect blocks the automated attacks that specifically depend on hitting your origin at volume:
- Scraping by AI-training crawlers, price aggregators and look-alike competitors — enforced at the edge, so scraper traffic never consumes origin capacity or shows up in access logs.
- Credential stuffing against login and password-reset endpoints — blocked before it reaches the authentication layer.
- Denial of inventory and ticket scalping — Access Rules by ASN and JA4 fingerprint on checkout endpoints catch the scalper-toolkit signature at the door.
- API abuse — carding, enumeration, mass-signup, scraping-via-API. Different verdicts for HTML pages and JSON APIs so client applications handle blocks cleanly.
- Unwanted AI-agent traffic — enforce a policy of "verified crawlers welcome, unauthorised agents challenged" on every request, per endpoint pattern.
- Stealth-headless browsers on residential proxies — the exact profile that gets past Cloudflare Bot Management's default posture, caught by JA4 fingerprinting and behavioural signals.
Procaptcha (the widget) and Protect (the edge product) are peers. Same detection engine underneath, different install paths for different jobs:
| Procaptcha (widget) | Prosopo Protect (edge) |
|---|
| What you install | A <script> on a form | A Cloudflare Worker or Lambda@Edge function |
| What it protects | One form (login, signup, checkout, contact) | An entire site, API or endpoint pattern |
| When to reach for it | Per-form verification, drop-in reCAPTCHA/hCaptcha replacement | Whole-site enforcement, scraping defence, API abuse, edge access control |
| Deployment surface | Any HTML page with a form | Cloudflare Workers, AWS Lambda@Edge |
| User experience | Widget renders on the form | Blocked / challenged requests get a branded interstitial (HTML) or status code (JSON) |
| Access Rules | ✓ | ✓ |
| Same dashboard, portal, event stream | ✓ | ✓ |
Procaptcha for per-form verification; Protect for whole-site or API-wide enforcement. Pick the one that matches how you want to intercept traffic — you don't have to run both.
One Protect deployment handles both HTML site traffic and JSON API traffic on the same origin. The detection engine and the Access Rules are identical for both; only the block/challenge response shape changes to match what the client expects:
| HTML site pages | JSON API endpoints |
|---|
| Block response | Server-rendered branded interstitial (logo, colours, typography configurable) | 403 with X-Prosopo-Decision: block |
| Challenge response | Interstitial page hosting a captcha the visitor solves before the request proceeds | 401 with X-Prosopo-Status: challenge — protect.js on the client intercepts the header, shows the challenge, and retries the request on success |
| Session-init response | Handled inline in the bootstrap | 401 with X-Prosopo-Status: no-session — protect.js intercepts and calls /session/init before retrying |
| Session cookie | First-party prosopo_session set by Protect, verdict cached until it expires | Same cookie when the caller is a browser; API-only clients (mobile app, server-to-server) fall through to the standard no-session flow |
| Configuration | Per path pattern in the dashboard | Per path pattern in the dashboard |
| Access Rules | Same rule set | Same rule set |
You configure which paths are treated as HTML vs JSON in the same dashboard as your Access Rules; every rule can be scoped per path type as well as per endpoint pattern.
Deploy Protect wherever your ingress traffic already lands — edge or server-side. Same detection engine, same Access Rules, same portal in every case.
Edge integrations:
- Cloudflare Workers — deployed as a Worker script bound to your zone or specific routes. Runs on Cloudflare's global network of edge locations. Compatible with the rest of your Cloudflare configuration (cache rules, page rules, Worker chains) without conflict.
- AWS Lambda@Edge — deployed as a Lambda function associated with your CloudFront distribution. Runs at CloudFront's PoPs before the request reaches your origin, so bot traffic never enters your AWS account.
Server-side integrations:
- nginx — as a subrequest filter in front of your upstreams.
- Caddy — as a handler in your Caddyfile.
- Custom reverse proxies — any HTTP-terminating layer that can consult the Prosopo API on incoming requests and act on the returned verdict.
More runtimes are on the roadmap. If yours isn't listed today, get in touch — we'll walk through what's available.
Access Rules match on any combination of the following signals extracted from the incoming request. Every rule is stored as a policy (block, restrict, or a captcha type / difficulty step-up) plus a scope (which signals to match on). Full reference in the Access Control Rules documentation.
- IP CIDR — match specific IPs or IP ranges (stored as
numericIp + min/max mask internally) - ASN — target hosting networks, VPN providers, mobile-proxy pools by network operator
- Country — geographic gating by country code
- User-Agent — hashed match against known scraper toolkits (
userAgentHash) - Headers — hashed match on the request-header signature (
headersHash) for fingerprinting stealth-automation frameworks - JA4 TLS fingerprint — catch stealth-headless frameworks that spoof user-agent but can't spoof the TLS handshake structure (
ja4Hash) - OS — server-side OS classification from User-Agent (
os), matched on exact tag
Rules can be scoped globally, per client (site key), or per group. Rules that would defer the block until the verify step (e.g. so the attacker still pays the captcha-solving cost before being rejected) are supported via a deferToVerify flag on the policy.
Not an Access Rule dimension: network-class filtering (VPN / proxy / Tor / datacenter / mobile / satellite / crawler) is handled by the Spam Filter's Traffic Filter and evaluated during the same verification. Enable both if you want IP-based rules stacked with network-class rejection.
Protect processes only the request metadata needed for the verdict — IP, headers, JA4 fingerprint, request timing. No cookies are set on the visitor beyond the first-party prosopo_session verdict cache, no cross-site tracking, no personal data harvested for downstream purposes. EU-only verification endpoints are available on request for GDPR-strict deployments. See the GDPR-compliant CAPTCHA product page for the full data-handling posture.