A proxy detection API built for residential proxies, not just datacenter ranges
Maskbreak checks each live visit to your signup, login or checkout for a proxy exit, in a hosting range or on a home or mobile connection, and names the service when it’s known (for example BRIGHT_DATA). A proxy exit comes back block.
- Free plan: 10,000 visitor checks a month
- No card
- Paid plans from €29 a month
- IP address
203.0.113.9- Proxy
- Bright Data
- VPN
- Not detected
- Tor exit
- Not detected
- Cloud server
- Detected
- Country
- Germany
"decision": "block""reasons": ["proxy_detected", "datacenter_asn"]What a check tells your server
network.proxy- True when the visit comes through an address known as a proxy exit, in a hosting range or on a home or mobile connection. The answer is block, with the reason
proxy_detected; Apple’s iCloud Private Relay is the one proxy that comes back review (privacy_relay). network.service- The proxy network, such as
BRIGHT_DATA, when it’s known, andnullwhen it isn’t. network.datacenter- True when the exit sits in a hosting range. A residential exit reads
proxy: truewithdatacenter: false. device- The browser check beside it: automation, fake browsers, and a
visitor_idthat doesn’t change when the exit address does. Present when the browser check completes.
Add it to your form
Load https://maskbreak.com/assets/sentinel.js on the page and give the form the class monocle-enriched; your server sends the two fields it adds to /v1/evaluate before the action runs. The example starts in watch mode: it logs each verdict and lets every request through, even when Maskbreak can’t be reached. Once the log matches Events in your dashboard, uncomment the enforce line; the integration guide has the full checks. When a bare IP lookup is enough, read Proxy detection API vs IP lookup; to compare providers, the proxy detection API comparison.
// Full evaluation: network + device layers in one verdict // Watch mode first: log the verdict, always continue, fail open const body = req.body || {}; // sentinel.js adds monocle + sentinel_fp to your form let risk = null; try { const verdictRes = await fetch('https://maskbreak.com/v1/evaluate', { method: 'POST', signal: AbortSignal.timeout(5000), headers: { 'Authorization': 'Bearer ' + process.env.MASKBREAK_API_KEY, 'Content-Type': 'application/json' }, body: JSON.stringify({ token: body.token || body.monocle, // network evidence fingerprintEventId: body.fingerprintEventId || body.sentinel_fp, // device evidence tz: body.tz || body.sentinel_tz }) }); if (verdictRes.ok) risk = await verdictRes.json(); } catch {} // unreachable or timed out: your handler still runs // risk.network.proxy -> true when the request exits a proxy // risk.network.datacenter -> exit sits in hosting space (false for a residential exit) // risk.network.service -> named operator when known: 'BRIGHT_DATA' console.log('[maskbreak]', JSON.stringify({ decision: risk?.decision ?? null, reasons: risk?.reasons ?? null, risk_score: risk?.risk_score ?? null, degraded: risk ? !!risk.degraded : null, network: risk?.network ?? null })); // Enforce later: if (risk?.decision === 'block') return res.status(403).json({ error: 'Request rejected' });
What it can’t see
- Exits it doesn’t know yet
- A home or mobile address that isn’t known as a proxy exit when the visit happens reads as an ordinary home connection. The browser check still runs beside it.
- A blocked script
- Without the script’s token there is no network verdict, and the answer says
degraded: true. Ask for verification instead of counting the visit as clean. - A detection rate
- We haven’t measured one. Connect through the proxy you worry about and run the live check on the homepage.
Common questions
What is the difference between a residential proxy and a datacenter proxy?
A datacenter proxy exits from a hosting provider’s addresses, which the providers publish. A residential proxy sends traffic through a real home or mobile connection, usually rented from a commercial network such as Bright Data, so the address looks like a customer’s. Residential proxies are the ones simple IP filtering misses: catching them takes curated intelligence about which specific addresses are currently acting as proxy exits.
Will it flag my ordinary home users?
Not for being on a home connection: that reads residential: true with the proxy flag false. The flag fires on addresses seen acting as proxy exits, which can include a home line whose owner runs a bandwidth-sharing app, and you can send those to review instead of block under Rules in the dashboard.
Can I check a proxy IP without a live visit?
Only partly. GET /v1/lookup/{ip} and the free IP lookup tool check a bare address for a Tor exit and a cloud-server range; proxy verdicts and the service name need a live visit.
Check your signups and logins for proxies
Setup starts in watch mode, so nobody is blocked until you turn blocking on.