status and spoofing; this page is for understanding what happened, populating your logs, and filing tickets with context.
Response fields
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.
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.
body.imageQuality?.face?.is_too_small is correct; body.imageQuality.face.is_too_small throws the day a 422 arrives.
Which component answered
Wheninfo 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:Errors
Status codes, how to tell your problems from the service’s, and which are safe to retry.