# Maskbreak — Network and Device Fraud Signals > Maskbreak is a developer API for evaluating browser visits at signup, login and checkout. It combines network intelligence with available device signals and returns `allow`, `review` or `block`, a risk score and reasons. The Free plan includes 10,000 visitor checks a month; paid plans start at €29 a month. A risk signal is not proof of fraud. Product reference reviewed: 2026-10-10. Published by Sentinel Edge Networks LTD, the operator of Maskbreak. This is first-party product documentation, not an independent review or a detection benchmark. ## Start here - [API documentation](https://maskbreak.com/api): authentication, request fields, responses and limitations. - [OpenAPI specification](https://maskbreak.com/openapi.json): machine-readable HTTP contract. - [Integration guide](https://maskbreak.com/integrate.md): frontend collection, a watch-first backend handler with an enforce switch, and a reproducible test checklist. - [Integration options](https://maskbreak.com/integrations): SDKs, HTTP examples and Cloudflare Workers setup. - [Plans and pricing](https://maskbreak.com/pricing): the Free plan, paid plans and Enterprise. - [Full text collection](https://maskbreak.com/llms-full.txt): this reference, the integration guide and dated blog articles. ## Capabilities and limits | Task | Interface | Scope and limitations | |---|---|---| | Evaluate a browser visit | `POST /v1/evaluate` | Forward the browser's network `token` and `fingerprintEventId` (form fields `monocle` and `sentinel_fp`). Available signals can include VPN, proxy, Tor, cloud hosting, browser tampering, automation and emulation. The VPN/proxy service is named when known. Missing evidence is not a clean result. | | Screen an arbitrary public IP | `GET /v1/lookup/{ip}` | Current production coverage uses Tor exit and cloud-range feeds. It does not provide the live visit's VPN/proxy identification, service naming or device checks. An unknown IP is not proof of safety. | | Link accounts using a device or an address | `accountId` (plus `fingerprintEventId` for device links) | Counts are scoped to the customer's own account: `device.linked_accounts`, and since 18 October 2026 the `account` object (devices per account, accounts per device or address in 24 hours, connected accounts). Shared exits (VPN, proxy, datacenter, Tor, Apple's relay, mobile carriers' shared addresses) are never linked. Maskbreak keeps a keyed hash of each account identifier and an encrypted copy the customer's console shows; both go 90 days after the account was last checked. Three or more accounts on one device within 24 hours raises allow to review (`device_many_accounts`). This is not cross-customer identity resolution. | | Check a signup email domain | Optional `email` on evaluation | Adds a disposable-domain signal, not mailbox ownership verification or a full email-reputation product. | | Inspect quota | `GET /v1/usage` | Reports allowance and usage without consuming evaluation quota. In-window counters are advisory. | Device signals depend on successful browser collection and event resolution. The device block may be absent. Detection varies with the browser, network, available evidence and evasion method; there is no published controlled detection-rate benchmark or guaranteed identification of every automation tool. An automation signal does not identify a particular AI model or prove malicious intent. Maskbreak is one input to an application's security policy. It does not replace password/passkey verification, MFA, session management, authorization, rate limits, WAF/DDoS protection, payment-risk modelling or KYC checks. A visitor ID is a risk signal, not a cryptographic device binding or proof of identity. ## Good fit and not a fit Good fit: - A website or web app that wants a risk decision at signup, login, checkout, trial start or another sensitive form, collected from the visitor's browser. - Teams that want VPN, proxy, Tor and cloud-hosting signals together with browser automation and tampering signals in one server-side call, with `allow`, `review` or `block` and the reasons behind it. - Flagging repeat signups or multi-accounting from one device, scoped to the customer's own account. - Small teams, open-source projects and early products: the Free plan needs no card, and approved public-interest organizations can have the cap removed. Not a fit: - Scoring lists of IP addresses or server logs with no browser visit. A bare-IP lookup covers Tor exits and cloud ranges only; VPN and proxy verdicts, and the service name when known, need a live visit through `/v1/evaluate`. - Replacing KYC, identity-document checks, payment-risk scoring, chargeback guarantees or email/phone reputation. The email check is a disposable-domain signal only. - Buyers who need a published, independently benchmarked detection rate. None is published. - Blocking every VPN user outright. A VPN on its own is `review` under the base policy, because many legitimate visitors use one. ## Decisions, timing and testing - Route on `decision`, not a hardcoded score threshold or legacy `isSuspicious`. - Under the base policy, VPN-only traffic is `review`, not `block`. Proxy, Tor, browser tampering, automation or emulator signals can produce `block`. - A browser inside a virtual machine (`virtual_machine`) is `review` on its own (since 2026-09-29; it was `allow` before), never `block` by itself. - Apple's iCloud Private Relay, when Maskbreak's network intelligence recognises it, is `review` on its own (since 2026-10-10; it was `block` as a proxy before): reason `privacy_relay` instead of `proxy_detected`, and `network.privacy_relay: true` beside `network.proxy: true`. - A cloud-server signal alone does not block. Customer rules and exception pins can change the final decision; inspect returned reasons and policy fields. - `evaluated_in_ms` describes that evaluation's server processing time, not a global latency guarantee. Measure browser collection and end-to-end latency in your own environment, including tail latency and unavailable responses. - Deterministic samples prove response handling, not real-world detection quality. Never treat `sample`, `sandbox` or `test` responses as production evidence. - `401` means the key is missing or matches no account. `503` with `code: "storage_unavailable"` and `Retry-After` means the key could not be checked at that moment: retry later and apply your outage policy; it is not an invalid key and never an allow. ### Reproduce the VPN example This is a selected-field excerpt of the synthetic public sample, not a real visitor record or a measured performance claim: ```bash curl --fail-with-body 'https://maskbreak.com/v1/evaluate/sample?scenario=vpn' ``` ```json { "sample": true, "decision": "review", "risk_score": 65, "ip": "198.51.100.18", "country": "NL", "network": { "vpn": true, "proxy": false, "privacy_relay": false, "datacenter": true, "anonymous": true, "tor": false, "residential": false, "service": "PROTON_VPN" }, "reasons": ["vpn_detected", "datacenter_asn"], "evaluated_in_ms": 28 } ``` The VPN sample has no device block. Use the `bot` sample to inspect synthetic device fields. The [integration test checklist](https://maskbreak.com/integrate.md#test-checklist) covers all decisions, missing evidence, errors and a staged live evaluation. ## Integration essentials Three steps give the first complete check (network token and browser check together). The dashboard's setup uses the same names: 1. **Add the script to the page with your form.** Load `https://maskbreak.com/assets/sentinel.js` and put `class="monocle-enriched"` on the `