1. Three stages where failures occur
In the Face Auth URL flow, the screen the user sees depends on where the failure happens.Entry — QueryString and token validation
pid, the encrypted sid, and token in the URL. On failure the user is redirected to an error page and verification never starts. → 2. Entry stage validation failuresPre-load — project and submission lookup
Authentication — judgment after the selfie capture
2. Entry stage validation failures
2-1. Missing required parameters
Face Auth does not run without a query string. A URL carrying onlypid will not start verification; the minimum runnable form requires the sid to reference, encrypted and passed inside encrypted.
encrypted value may render a “Page not found” screen instead of the error-code page above.Observed case (2026-08): pid and URL encoding were both correct, but the plaintext had been built as a query string (sid=...&authUserId=...). The URL did not redirect to the PV-40015 error page — it stayed on /face-auth and showed “Page not found”. Switching the plaintext to a JSON string made it work.If the verification screen does not appear, check in this order.- Plaintext format — what you encrypt is a JSON string (for example
{"sid":"..."}). Encryptingkey=valuepairs joined with&decrypts fine but yields nosid. - URL encoding — a
+in the Base64 output decodes as a space in the URL, so decryption itself fails. ApplyencodeURIComponent. sidstatus — confirm the referenced eKYC submission isapproved.
2-2. Token validation failures
If token expiration is enabled on the FaceAuth project, a failedtoken validation redirects to a TK- error page. For the codes (TK-10000 – TK-10004) and their messages, see the token error page section of Error Codes and Error Pages.
token operates separately from the main ID Check project’s private mode token and pre-registered token — it uses its own token DB and expiration pipeline. For its behavior see FaceAuth Getting Started — Definition of Request Parameters, and for the dashboard setting see FACE AUTH Guide — Token Expiration Condition Settings.3. Pre-load stage server errors
Server errors raised while retrieving project options and the referenced submission. All areSE- codes, and the user is prompted to retry.
4. Authentication stage user-facing messages
After the selfie is captured, the result of the authentication API call branches in two ways.4-1. HTTP StatusCode is not 200 (abnormal processing)
All causes are collapsed into a single message, shown as an AlertPopup."Failed to process your request.\nPlease try again."Internal error codes are never exposed to the user. Diagnose the cause from the webhook or the GET/FaceAuth response.4-2. HTTP StatusCode is 200 but processing did not succeed (rejected)
auth_status is returned as rejected, and the message shown depends on fail_code.
no_face and face_compare_fail share one message, as do active_liveness_fail and passive_liveness_fail. Use fail_code — not the message — to identify which check failed.rejected_comment strings delivered through the API response and webhooks (for example, face compare similarity score is lower than threshold) are separate values — see POST/Faceauth — Failure Codes.4-3. Liveness failure codes
Liveness verification runs according to the project policy’slivenessMode setting (passive / active), and returns the following codes on failure.
rejected_comment is the value delivered through the API response and webhooks. Both codes share the same comment string, so use fail_code to determine which liveness check failed.