Scores and reason codes
siteverify answers HTTP 200 with success, score, action, hostname, challenge_ts and error-codes. Our own endpoint /v1/siteverify also returns mode, reasons and cdata. The SDKs parse this for you (outcome.result).
Reason codes
Section titled “Reason codes”Reasons are explanations for a score, not verdicts. Log them; do not build brittle logic on one code. A client must tolerate codes it does not know.
| Code | Read it as |
|---|---|
AUTOMATION |
The signals looked automated. |
UNEXPECTED_ENVIRONMENT |
The environment did not look like a normal browser or device. |
TOO_MUCH_TRAFFIC |
Unusually many checks from the same source. |
UNEXPECTED_USAGE_PATTERNS |
The behavior did not look like normal use. |
DATACENTER_IP |
The address belongs to a datacenter network. |
ANONYMIZER |
The address belongs to a privacy network. This alone never scores a person below 0.3. |
INTEGRITY_FAILED |
Attestation or an integrity check failed. |
LOW_CONFIDENCE_SCORE |
There was too little evidence to score with confidence. |
NETWORK_MISMATCH |
The network at solve time did not match the network at check time. The score is capped at 0.3. |
PLAN_RESTRICTED |
Your plan is restricted, so the check was a pass-through with no scoring. See billing and spend cap. |
Error codes
Section titled “Error codes”error-codes is the list of siteverify error codes. The full table is in the API reference. The common ones: missing-input-secret, invalid-input-secret, missing-input-response, invalid-input-response, timeout-or-duplicate, sitekey-secret-mismatch, site-disabled, quota-exceeded, plan-required, plan-restricted.
Treat every failure as “do not accept”. After a network error or an HTTP error the token may already be spent, so a retry needs a new token from the widget.