Overview
This guide mirrors the Korean reference and catalogs all 37 error pages that can appear during the Liveform mobile verification journey. Each table aligns the developer-facing code and route with the exact message your users see so support teams, operators, and developers can speak with one voice.
All error pages fall into one of four rendering paths:
/error-page/:errorType
/face-retry/:faceErrorCode
/error-page/token-*
- Next.js
Error Boundary
General error pages (/error-page/:errorType)
🔒 Authentication & authorization errors
| Type | Developer code & URL | User message | Occurrence |
|---|
| Page not found | page-not-found (/error-page/page-not-found) | “The page could not be found” | Appears when a user types a non-existent URL or opens an outdated bookmark. |
| Service blocked | service-blocked (/error-page/service-blocked) | “Submissions are temporarily paused” | Shown when an operator temporarily halts submissions but users keep visiting the link. |
| Invalid path | bad-path (/error-page/bad-path) | “Invalid URL path” | Triggered if someone edits the shared link or navigates to a non-whitelisted route. |
| Refresh detected | refresh (/error-page/refresh) | “Refresh detected” | Displayed when the user refreshes or clicks back/forward mid-flow and the session resets. |
| Unsupported browser | invalid-browser (/error-page/invalid-browser) | “Unsupported browser” | Appears on legacy browsers or environments without WebAssembly support; users must switch to a modern browser. |
| Hash validation failure | hash_problem (/error-page/hash_problem) | “Hash validation issue” | Shown if multiple tabs or skipped steps break the data integrity; the flow must restart. |
📅 Project status errors
| Type | Developer code & URL | User message | Occurrence |
|---|
| Project closed | project-closed (/error-page/project-closed) | “This project is closed and access is restricted” | Users reopening a finished campaign see that no further submissions are allowed. |
| Period expired | period (/error-page/period) | “Project submission window expired” | Triggered when someone visits after the allowed submission window has ended. |
| Submission count limit | submission-number-limit (/error-page/submission-number-limit) | “You submitted more than 15 times” | Trial projects stop additional attempts once the 15 submission cap is exceeded. |
📤 Submission status errors
| Type | Developer code & URL | User message | Occurrence |
|---|
| Already approved | already_approved (/error-page/already_approved) | “This device has already been verified” | A device/browser that already completed verification is blocked until the waiting period ends. |
| Already rejected | already_rejected (/error-page/already_rejected) | “This submission was already rejected” | The user tries again before the rejection cooldown expires and is told to wait. |
| Pending review | already_pending (/error-page/already_pending) | “Your submission is under review” | A new submission is attempted while the previous one is still under review. |
| Processed (approved) | processed_submission-approved (/error-page/processed_submission-approved) | “This submission was already processed (approved)“ | Reopening an approved result simply reminds the user no further action is needed. |
| Processed (rejected) | processed_submission-rejected (/error-page/processed_submission-rejected) | “Verification was rejected” | Reopening a rejected result shows the remaining wait time before a retry. |
| IP already approved | ip_already_approved (/error-page/ip_already_approved) | “This IP address has already been approved” | Another user on the same network tries to redo a verification that already succeeded. |
| IP already rejected | ip_already_rejected (/error-page/ip_already_rejected) | “This IP address has already been rejected” | The same network repeatedly fails or is still within a rejection cooldown; users must switch networks. |
| Type | Developer code & URL | User message | Occurrence |
|---|
| Email already rejected | email_already_rejected (/error-page/email_already_rejected) | “Verification rejected / This email was already rejected” | Reusing an email that is still within a rejection waiting period shows the remaining cooldown. |
🛡️ Security & fraud detection
| Type | Developer code & URL | User message | Occurrence |
|---|
| Suspected forgery | suspected-forgery (/error-page/suspected-forgery) | “Suspected forgery detected” | Triggered when the captured ID looks blurry, manipulated, or otherwise inauthentic; the user must reshoot. |
| File upload not allowed | not-allow-file-upload (/error-page/not-allow-file-upload) | “File upload is not allowed” | Secure browsers, private mode, or denied camera/file permissions prevent uploads; users must enable access or switch devices. |
| Duplicate face detected | face_validation_error (/error-page/face_validation_error) | “Duplicate face detected” | The system detects the same face from a previous submission and instructs the user to contact support. |
| Abnormal action | abnormal_action (/error-page/abnormal_action) | “Abnormal behavior detected” | Uploading screenshots, over-edited images, or identical selfies triggers this message and forces a proper retry. |
⚠️ Anomaly (QS) errors
| Type | Developer code & URL | User message | Occurrence |
|---|
| Abnormal verification denied | abnormal_verification_denied (/error-page/abnormal_verification_denied) | “Abnormal verification denied” | Rapid risky attempts lower the trust score; the user must wait for the timer to expire. |
| Abnormal rejected | abnormal_rejected (/error-page/abnormal_rejected) | “Abnormal rejection” | Severe anomalies trigger an immediate rejection and require security issues to be resolved before retrying. |
| IPQS system error | ipqs_system_error (/error-page/ipqs_system_error) | “IPQS system error” | VPNs or unstable networks prevent the IP safety check; users should switch to a reliable connection. |
🌍 IP risk errors
| Type | Developer code & URL | User message | Occurrence |
|---|
| Risky category | ipRisk_failCategory (/error-page/ipRisk_failCategory) | “IP risk category failed” | Connections from VPNs, Tor, or data centers are blocked until users switch networks. |
| Distance check failed | distanceChecks_ipGeo (/error-page/distanceChecks_ipGeo) | “IP distance check failed” | When GPS and IP geolocation are far apart (e.g., local GPS but overseas VPN) the user must disable the VPN. |
| Blacklisted country | blackliskCountries (/error-page/blackliskCountries) | “Blacklisted country” | Access from restricted countries is denied with guidance that the service is unavailable there. |
| Risk duration lock | ipRisk_durationHours (/error-page/ipRisk_durationHours) | “IP risk duration limit” | Repeated risky attempts lock the IP for a set duration; users can only retry after the timer ends. |
⏱️ Rate limit & lockout
| Type | Developer code & URL | User message | Occurrence |
|---|
| Rate limit exceeded | rate_limit_exceeded (/error-page/rate_limit_exceeded) | “Request limit exceeded” | Too many refreshes or submissions in a short period trigger a temporary pause. |
| Account locked | locked_out (/error-page/locked_out) | “Account locked” | Numerous failures or suspicious activity lock the account until the displayed timer expires. |
🔵 Token error pages (/error-page/token-*)
| Type | Developer code & URL | User message | Occurrence |
|---|
| Token missing | token-missing (/error-page/token-missing) | “Token ID is not active” / “Try again on another mobile device” | Copying a link without its token parameter or opening an incomplete URL triggers this page. |
| Token expired | token-expired (/error-page/token-expired) | “Token expired” / “Try again on another mobile device” | Very old or reused links surface this message; users need a fresh token. |
| Token already approved | token-approved (/error-page/token-approved) | “Token already approved” | A token that already completed verification is reopened, so duplicates are blocked. |
| Token pending | token-pending (/error-page/token-pending) | “Token under review” | The same token is accessed while its submission is still under review; users must wait. |
| Token rejected | token-rejected (/error-page/token-rejected) | “Token rejected” | The token previously failed verification and requires contacting an operator before retrying. |
🔄 Face retry (/face-retry/:faceErrorCode)
| Type | Developer code & URL | User message | Occurrence |
|---|
| Dynamic face reshoot | face-retry/:faceErrorCode | Localized per error code / Button: “Retake” | Poor lighting, misaligned faces, or other capture issues prompt a reshoot; certain codes (e.g., invalid_submission_status) hide the reshoot button entirely. |
❌ Runtime errors (Error Boundary)
| Type | Developer code & URL | User message | Occurrence |
|---|
| Runtime error | Next.js Error Boundary | Default: “Your request failed”, “KYC verification was rejected” Special: “Unsupported browser” (WebAssembly error), “This browser does not support storage functionality” | Network drops, force refreshes, or storage-disabled environments (private mode) can crash the app; users should tap “Retry” or switch to a modern browser/standard mode. |
Use these tables to align support scripts, monitoring alerts, and QA scenarios so every stakeholder is describing the same screen with the same vocabulary.