Skip to content

Verdict Reference

Every Fraud Prevention verdict — whether delivered to your onVerdict callback in the Web SDK or pulled from the Data API — is the same BotVerdict object. This page documents each field and how to act on it.

json
{
  "is_bot": false,
  "score": 18,
  "level": "low",
  "action": "record_only",
  "consistency": { "ok": true },
  "degraded": false
}

Fields

FieldTypeDescription
is_botbooleanThe headline verdict. true = the visit is judged to be automated or invalid traffic; false = it looks like a real person. This is the single field most integrations branch on.
scorenumber (0–100)How suspicious the visit is. Higher means more suspicious. Use it to set your own thresholds — e.g. exclude visits above a cut-off you choose. The exact value is produced by our risk model and is not meant to be reverse-engineered.
levelenumCoarse band of score: low, medium, high, critical. Convenient when you want buckets instead of a raw number.
actionenumOur recommended handling for the visit: record_only, challenge, or flag. See below.
consistencyobjectA cross-signal consistency conclusion. Read consistency.ok (boolean): true = the visit's signals line up as expected; false = something didn't add up and the visit deserves extra scrutiny. The internal breakdown behind this conclusion is not exposed.
degradedbooleantrue when the verdict could not be fully computed (service unreachable, error, etc.) and a conservative fallback was returned. Treat degraded verdicts as "unknown", not "clean".

action — what to do

action is our recommendation; you stay in control of the final decision.

actionMeaningWhat an advertiser should do
record_onlyThe visit looks normal.Proceed as usual. Just log the verdict for reporting and reconciliation.
flagThe visit is suspicious but not conclusively bad.Keep serving the page, but mark the visit as low quality — exclude it from conversion attribution, segment it out of remarketing, and weigh it in your bid decisions.
challengeThe visit is high-risk.Ask for one extra verification before treating the visitor as human. With the Web SDK's escalate: true this is handled for you (see Escalation); otherwise apply your own gate.

level vs score

level is just a banding of score, provided for convenience:

levelUse it when
lowTreat as clean traffic.
mediumBorderline — fine to record, consider excluding from high-value funnels.
highStrongly suspicious — flag and exclude.
criticalAlmost certainly invalid — flag/exclude and, ideally, escalate.

Pick the field that fits your pipeline

  • Simple yes/no gate → branch on is_bot.
  • Recommendation-driven → branch on action.
  • Custom thresholds → branch on score (or level for buckets).

Handling degraded verdicts

When degraded is true, the verdict was not fully computed. The fallback is deliberately conservative (is_bot: false, action: record_only) so real users are never blocked. For reporting, treat these as unknown rather than counting them as confirmed-clean traffic.

Next steps

  • Web SDK — receive verdicts on the landing page
  • Data API — pull verdicts and stats for billing

MIT-licensed examples · CaptchaLa is operated independently