- FaceAuthSubmission object — used by the POST creation response, the
items[]elements of the list lookup, and the single lookup response. - Error responses — the error format shared by every endpoint.
- Migrating from the previous API — what changes when moving a
/v3/faceauthintegration to/v3/face-auth.
FaceAuthSubmission object
An object holding the information for a single FaceAuth submission: the authentication result, the policy used for the decision, and the decision scores.Top-level fields
approved or rejected.yyyy-MM-dd'T'HH:mm:ss.SSSZ RFC 3339 UTC format. (For example, 2026-08-11T10:09:14.028Z)form means the Face Auth URL screen, api means POST /v3/face-auth.null for submissions that have not been deleted.null for approved submissions.null for approved submissions.policy. Every other field is the same.policy items
A snapshot of the project settings at processing time. Changing the project settings afterwards does not change the values on submissions that already exist. All six items (faceSimilarity, occluded, faceCover, headCover, liveness, activeLiveness) carry the two fields below.
threshold.null when enabled is false or when the policy does not use a numeric criterion.enabled is a project setting, not an execution result.A policy that is turned on may still not run, depending on the submission method. Whether it actually ran is determined by the corresponding field in result: null means it did not run. Today the only place this difference appears is activeLiveness. A submitType: api submission returns result.activeLivenessScore as null even when enabled is true, and that is expected.result fields
The result field of a policy that did not run isnull. For example, a submission with policy.liveness.enabled set to false has livenessScore as null.
null for submitType: api submissions.value: true means the face was judged covered and the submission was rejected.value: false means it was judged not worn and the submission was rejected. Its properties are the same as occluded.value: false means it was judged not worn and the submission was rejected. Its properties are the same as occluded.occluded, faceCover, and headCover share the same structure. When the check did not run, the whole object is null — it is never returned with only its properties set to null.signals fields
Supplementary information collected on the Face Auth URL screen. OnlysubmitType: form submissions with collected values carry data here; submitType: api submissions and submissions with nothing collected have the whole object as null. It is informational and is not used for the authentication decision.
null, not an empty array.rejectComment and failCode
rejectComment is a human-readable explanation; failCode is the code to branch on.
The two arrays correspond index by index and always have the same length. The reason for failCode[0] is rejectComment[0].
failCode values, see POST /v3/face-auth — Rejection codes.
Parsing notes
- The set of keys in a response is always the same. Missing values come back as
null, soundefinedchecks and key-existence checks are unnecessary. 0is a valid value forpolicy.*.threshold. Do not use a falsy check to decide whether a policy is configured — useenabled.- Array fields are
null, not an empty array, when there is no value. Default them with?? []or check!== nullbefore iterating. - Nested objects (
occluded,faceCover,headCover,signals) arenullas a whole when they do not apply. Check the parent fornullbefore reading its properties. - When a threshold and a score are equal, the threshold is considered met.
- Scores may include decimals rather than being integers. Parse them as numbers, not strings.
Error responses
Errors returned by the ARGOS application use the format below.code and message.
Authentication layer errors (401, 403)
- Handle
401and authentication-layer403by HTTP status, not bycode. Neither response has acodefield. 403has two causes with different response formats. If acodefield is present the application returned it; if not, the authentication layer blocked the request.- The
messageof an authentication-layer error is not generated by ARGOS and may change without notice. Do not parse it.
Error code list
Migrating from the previous API
If you integrate against the previous endpoint/v3/faceauth, review the changes below. The paths, field names, response envelopes, and error format have all changed.
Endpoints
authId is now a path parameter rather than a query parameter, and the list lookup and single lookup are separate endpoints.
Response envelopes
faceAuth_projectId and statusCode have been removed from responses.
Field names
Structural changes
policy — from flat thresholds to nested objects
policy — from flat thresholds to nested objects
faceSimilarity_threshold: 85, and only occluded_threshold was a boolean.The new API gives each item an { enabled, threshold } object. Whether a policy applied is determined by enabled, not by the value of threshold. occluded uses no numeric criterion, so its threshold is always null.result — occluded, faceCover, and headCover are objects
result — occluded, faceCover, and headCover are objects
occluded: false (boolean) or headCover: 0 (number). In the new API all three are { value, confidence } objects, and the whole object is null when the check did not run.Pagination — from a composite key to a single cursor
Pagination — from a composite key to a single cursor
nextPage_key and expected its authId and createTime back as nextKey_id and nextKey_date, with the page size set by count (1–2,000, default 2,000).The new API returns a single signed string, nextCursor, which you pass back verbatim as cursor, with the page size set by limit (10–200, default 100). A limit outside the range is no longer ignored — it returns 400 REQUEST_INVALID.Image download — from a binary body to a 302 redirect
Image download — from a binary body to a 302 redirect
302 Found with a short-lived download URL in the Location header, so the HTTP client must be configured to follow redirects (curl --location).Error format — from three formats to one
Error format — from three formats to one
{ message, errorCode, statusCode }, { traceId, errorCode, message }, and { message, statusCode } across endpoints, and the image endpoint returned every authentication failure as 403.The new API returns all application errors as { code, message }, with authentication-layer errors as the only exception. See Error responses above.