[{"data":1,"prerenderedAt":113},["ShallowReactive",2],{"doc:\u002Fdocs\u002Fclient-verdicts":3},{"page":4,"toc":106,"updated":112},{"path":5,"title":6,"seoTitle":7,"description":8,"blocks":9},"\u002Fdocs\u002Fclient-verdicts","Client-side verdicts","Client-side Verdicts: Local Signals in the SDK","The verdicts each SDK computes on the device, what they are good for, and why decisions should still be made on your server.",[10,13,20,36,41,56,58,61,67,70,74,82,85,87,90,94],{"type":11,"text":12},"p","Every client SDK computes verdicts on the device, before and independently of the server. They arrive with the identify result as `verdicts`.",{"type":14,"samples":15},"code",[16],{"label":17,"lang":18,"code":19},"A verdict","ts","result.verdicts.automation\n\u002F\u002F { value: true, confidence: 'high', reasons: [ … ] }",{"type":21,"title":22,"fields":23},"fields","Verdict",[24,28,32],{"name":25,"type":26,"text":27},"value","boolean","Whether the verdict matched.",{"name":29,"type":30,"text":31},"confidence","string","`low`, `medium` or `high`.",{"name":33,"type":34,"text":35},"reasons","string[]","Short, stable tokens for the evidence, strongest first. Useful for logging.",{"type":37,"level":38,"text":39,"id":40},"heading",2,"Verdicts by platform","verdicts-by-platform",{"type":42,"columns":43,"rows":46},"table",[44,45],"Platform","Verdicts",[47,50,53],[48,49],"Web","`incognito`, `shields`, `tor`, `emulator`, `automation`, `farm`",[51,52],"iOS","`jailbreak`, `simulator`, `instrumentation`, `mitm`, `automation`, `tampering`, `farm`",[54,55],"Android","`root`, `emulator`, `appCloner`, `instrumentation`, `mitm`, `automation`, `tampering`, `farm`",{"type":11,"text":57},"`shields` means anti-fingerprinting protections are active. It describes a privacy choice, and on its own is never a reason to challenge anyone.",{"type":37,"level":38,"text":59,"id":60},"What they are for","what-they-are-for",{"type":62,"items":63},"list",[64,65,66],"Adapting the interface immediately, such as showing a second-factor step before the form is submitted.","Collecting without sending, with `submit: false`, to test or to debug.","Logging what the device looked like alongside your own events.",{"type":37,"level":38,"text":68,"id":69},"What they are not for","what-they-are-not-for",{"type":71,"tone":72,"text":73},"callout","warning","Do not make security decisions on local verdicts. Code running on the visitor's device can be changed by the visitor. The server runs its own detection over the report and network context, with your weights, and its score is the answer to act on.",{"type":14,"samples":75},[76,79],{"label":77,"lang":18,"code":78},"Frontend: adapt the interface","const result = await fingerly.identify({ tag: 'login' })\nif (result.verdicts.automation.value) showSecondFactorStep()",{"label":80,"lang":18,"code":81},"Backend: decide","async function decide(requestId: string) {\n  const event = await fingerly.events.get(requestId)\n  if (event.suspect_level === 'high') return refuse()\n  return allow()\n}",{"type":37,"level":38,"text":83,"id":84},"In framework SDKs","in-framework-sdks",{"type":11,"text":86},"The framework SDKs read one verdict with a confidence floor through `useVerdict`, `injectVerdict` and their equivalents, and offer `isSuspicious`, which is `true` when any verdict matched at `medium` or above.",{"type":71,"tone":88,"text":89},"note","In browsers, the verdicts on `identify()`'s result come from the initial collection tier. Verdicts over both tiers arrive with `result.deferred`.",{"type":37,"level":91,"text":92,"id":93},3,"Related","related",{"type":95,"columns":38,"cards":96},"cards",[97,102],{"title":98,"text":99,"href":100,"icon":101},"Server-side verification","Read the stored result with a secret key.","\u002Fdocs\u002Fserver-side-verification","server",{"title":103,"text":104,"href":105,"icon":62},"Signals reference","What the server scores.","\u002Fdocs\u002Fsignals",[107,108,109,110,111],{"id":40,"text":39,"level":38},{"id":60,"text":59,"level":38},{"id":69,"text":68,"level":38},{"id":84,"text":83,"level":38},{"id":93,"text":92,"level":91},"2026-09-17T16:59:11.000Z",1789667797514]