You cannot spoof
the speed of light.

An anti-detect browser can change what your page sees. Heretic checks those claims against browser tests and the connection itself. You get the verdict and the reasons behind it.

A risk score needs a threshold.

A score leaves you to choose a cutoff. Move this example slider to see how that choice changes the action, without explaining what the browser did.

risk score 0 to 100
73

61 to 85: manual review.

Read the result and its reasons.

contradicted

Required measurement completed and a conclusive contradiction was found. The response names the finding.

refused

Required measurement did not complete. The response identifies what was missing.

uncontradicted

Required measurement completed with no conclusive contradiction. Coverage and any conditional findings are included.

Four checks on an example session.

illustrative session
10 ms20 ms30 ms40 mswaw-01Asia/Tokyo
geometrycomputestackreachability
claim

Claimed timezone: Asia/Tokyo

This example browser reports a timezone in Japan. The sensor checks how quickly its connection reaches Warsaw.

measurement

Round trip to Warsaw: 2.1 ms

The minimum round trip for the claimed timezone is 45.1 ms, even at the speed of light in a vacuum. The measured connection cannot originate there.

geo.rtt-below-vacuum · composite
claim

Claimed processors: 10

The browser reports ten logical processors. Heretic runs a parallel workload to check how throughput changes as workers are added.

measurement

Throughput plateaus at 2 workers

Adding workers produces no further speedup in this example. This is a conditional finding: scheduling and other workloads can affect throughput, so it does not establish a physical core count.

compute.cores-below-claim · conditional
claim

Claimed platform: macOS 15

The browser identifies as macOS. Its connection provides a separate observation of the network stack.

measurement

TCP signature matches Linux

The TCP option order and window scale match a Linux stack. That conflicts with the macOS claim. A proxy can also account for the different stack.

stack.os-contradiction · composite
claim

HTTP/3 offered on port 443

Heretic offers a session-specific QUIC connection and records whether the browser attempts it.

measurement

No QUIC Initial received

The session returned its other measurements but made no required QUIC attempt. This finding requires a working packet sensor.

reach.no-quic-attempt · composite

Browser claims can change.

A new browser profile can change the reported platform, timezone, and graphics card. The example below changes those declarations while the connection observations stay fixed.

What the browser reports
timezone Asia/Tokyo
platform macOS 15
browser Chrome 143
processors 10
renderer Apple M3 Pro
screen 3024 x 1964
Collected observations illustrative values
handshake RTT 2.1 ms
timed at the sensor
TCP SYN ttl 64 · mss 1460 · ws 7
observed connection parameters
TLS ClientHello no GREASE · h2 absent
handshake fields compared with the browser claim
QUIC on 443 offered, never attempted
no matching QUIC Initial captured
parallel curve plateaus at 2 workers
conditional performance finding
vacuum floor 45.1 ms for Asia/Tokyo
lower bound using the timezone reference area

Six groups of checks

Each family tests a different part of the session. One conclusive contradiction is enough to determine the verdict.

Network geometry

geo.*

Round-trip time against the distance implied by the claimed timezone.

Transport stack

stack.*

TCP connection parameters against the claimed operating system.

TLS construction

tls.*

Handshake fields against the browser claim and protocol rules.

HTTP construction

http.*

Headers, HTTP/2 settings, and browser properties checked for inconsistencies.

Compute

compute.*

CPU and graphics workloads checked against the reported results.

Reachability

reach.*

Required connection attempts, including QUIC.

Finding tiers

absolute

A fixed constraint was violated, or required measurement was refused. Determines the verdict.

composite

A confirmed contradiction. One finding is enough to set the verdict.

conditional

The conclusion depends on an unverified premise. Reported without changing the verdict.

weak

A contextual observation. Does not change the verdict.

Required checks must finish.

An opened session with missing required measurements returns refused. If the collector never loads, no result exists. Require a fresh completed check on your backend before accepting the action.

wireprobejoinrulesubmission incompletereturnverdict: refused

Request a phone challenge when needed.

Your policy can require a phone challenge before a signup or another protected action. The visitor holds the phone level, keeps it steady during a workload, turns it upright and sideways, then confirms with a passkey.

Heretic checks the recorded movement and elapsed time, then verifies a signature over the measurements. Your backend receives the outcome and device records. Desktop visitors continue on a phone through a rolling QR code.

passed

The required checks and passkey verification completed.

contradicted

A conclusive finding or invalid signature contradicted the challenge.

not completedrotate-timeout

The response identifies the step that did not finish.

The signature binds browser-supplied readings to the challenge. It does not authenticate the motion sensor or establish a unique person.

heretic.tech/challenge/… measuring
  1. 01 Hold it level motion readings establish the starting position
  2. 02 Hold steady a timed workload runs while motion is recorded
  3. 03 Turn sideways the phone must be held upright in landscape
  4. 04 Confirm a passkey signs the measurements
passkey · rpId heretic.tech signs sha256(measurements)

Keep the findings behind each decision.

Each finding has a documented ID and tier. Save the result with your decision to retain the measurements and ruleset version used at the time.

Finalized results stay unchanged

A later read returns the original assessment, even after the ruleset changes.

Site-scoped identifiers

Available browser inputs produce instance, machine, and rendering identifiers. Compare them with your account records. Matching inputs can occur on distinct devices.

Optional zero retention

Enable zero retention for one authorized read within ten seconds. The result is deleted on read and never enters stored history.

GET /v1/verdict/9f2c41ab…Example · API 2
1 { "api_version": "2",
2 "verdict": "contradicted",
3 "signals": [
4 { "id": "geo.rtt-below-vacuum",
5 "tier": "composite",
6 "headline": "RTT below the vacuum floor" },
7 { "id": "stack.os-contradiction",
8 "tier": "composite" }
9 ],
10 "provenance": { "assessment_schema": 13,
11 "ruleset_revision": 11 }
12 }

Add a collector, a widget, or both.

The collector checks a browser session and returns a request ID for your backend. The widget adds verification to a form. Both connect to Heretic separately from your application traffic.

your useryour serverrequest, untouchedheretic edgecollectorverdict, on demand

Create a site and verify its domain to start. The integration guides cover collector results, form tokens, and backend policy checks.

<script src="https://probe.heretic.tech/client.js"></script>
<script>
  heretic({ siteKey: 'hrtc_live_9f2c…' });
</script>

Questions

The probe reports concealment indicators alongside the verdict. Your policy decides how to treat them. If you request a phone challenge, detected concealment holds the challenge until the visitor disables the VPN, proxy, or relay and retries.

Your application decides. The default widget requests a phone challenge for contradicted or refused probes. The visitor follows the motion instructions and confirms with a passkey. Your server receives passed, contradicted, or not_completed, with the findings and stopping step.

No. The collector opens a separate connection from the browser to the Heretic sensor. Your application traffic continues to your own server. Verify ownership of your site with a DNS TXT record or a file.

An opened session that does not complete required measurement returns refused. If collection is blocked before a session opens, no result exists. Your server must require a completed check before accepting the protected action.

No. Once finalized, an assessment keeps its original verdict, findings, and versions. Run a new probe to check the browser again.

The observed connection address, browser claims, browser test results, and available site-scoped identifiers. Ordinary results are available for seven days. Zero-retention mode allows one authorized read within ten seconds and keeps no stored history.

Run your first check.

The free Sandbox includes 1,000 probes and 1,000 challenges each month. No card required. For help choosing an integration or plan, leave your email.

Get started free
Measure this browser at probe.heretic.tech