Skip to main content
Everything below is diagnostics. The decision was already made from status and spoofing; this page is for understanding what happened, populating your logs, and filing tickets with context.

Response fields

Do not build business logic on errorCode, values, confidence, or info. They are not part of the contract and their shape changes between service versions.

info: three shapes, one reader

info is polymorphic. It can arrive as an object, as a string, or as null — and null shows up in two different places: the top-level info and the nested info.info.
An object in info does not mean the person was blocked. In our test set, all 47 approvals carried info as an object, with deepfake-filter and detected: false — the filter ran and found nothing. The only field that separates approve from do-not-approve is spoofing.

imageQuality is optional, and so are its keys

imageQuality is a map of optional keys: it can be missing entirely, and when present it may carry some keys and not others. Across 116 test responses, 102 carried face, 10 carried brightSpots, and the 4 422 No Face Detected responses carried no imageQuality at all — consistent enough: no face, nothing to measure.
Read every level defensively. body.imageQuality?.face?.is_too_small is correct; body.imageQuality.face.is_too_small throws the day a 422 arrives.

Which component answered

When info is an object, its keys reveal what the service found. This table is for reading a case, not for deciding on one:
Never write logic against the value of info.service. Internal service names change. If you need to know whether diagnostics were attached, check for presence, not content.

Confidence values are not comparable

This is the most frequent misreading. Several numbers in the response are called “confidence”, they use different scales, and two of them point in opposite directions:
Never compare, average, or apply a shared threshold to these values. A confidence: 0 can mean “absolute certainty of fraud” (provider A) and so can confidence: 0.99 (provider B). Any rule of the form “if confidence is above X” produces inverted decisions depending on which component answered.

Errors

Status codes, how to tell your problems from the service’s, and which are safe to retry.
Last modified on September 9, 2026