Handle Results
After creating an evaluation, use the response to determine how your application should route the user and continue the verification flow.
Interpret the response
The response determines how your application should proceed.
If the workflow returns ON_HOLD, inspect response tags and sub_status to determine the next step.
Note:
Do not route based on
statusalone. Usedecision,sub_status, andtagstogether to determine the next step.
For the full response schema and all available fields, see the Evaluation API Reference.
How decisions are determined
RiskOS™ evaluates device, identity, and fraud signals in stages.
The evaluation begins with Digital Intelligence (device risk). If high-risk signals are detected (such as bots, emulators, or high-risk VPNs), RiskOS™ may return a REJECT decision immediately.
If the evaluation passes initial checks, RiskOS™ continues with identity verification and enrichment.
Decision outcomes
| Decision | What it means |
|---|---|
ACCEPT | The user passed automated device and identity checks |
REJECT | The user failed a critical risk or verification check |
REVIEW | Additional verification is required (step-up such as One-Time Passcode or Document Verification) |
Tip:
Use the
tagsfield in the response to understand why a decision was made and how to route the user.
Possible outcomes
POST /evaluation
├── REJECT → Stop onboarding
├── REVIEW → Additional verification required
│ ├── One-Time Passcode required
│ └── Additional PII required
└── ACCEPT → Prefill availableResponse handling
| Status / Signal | What it means | What to do next |
|---|---|---|
REJECT | The evaluation failed an early risk check or One-Time Passcode did not complete successfully. | Stop or route to fallback. |
ON_HOLD + sub_status = Awaiting Customer OTP + OTP Triggered | One-Time Passcode verification is required. | Prompt for One-Time Passcode and resume the evaluation. |
ON_HOLD + Additional PII requested or sub_status = More information needed | More identity data is required. | Collect full identity data and resume the evaluation. |
ACCEPT + Prefill Successful | Prefill data is approved for display. | Show prefilled form and continue. |
ACCEPT + Prefill Unsuccessful | Prefill did not produce displayable data. | Show a blank form and continue manually. |
Response notes
- One-Time Passcode failure results in
REJECT, not anotherON_HOLDstate. - Prefill may succeed or fail; handle both scenarios.
- DocV is triggered from multiple step-up conditions across fraud, identity, and risk signals.
Example responses
Use decision, status, sub_status, and tags together to determine the next step in your flow.
One-Time Passcode required
{
"decision": "REVIEW",
"status": "ON_HOLD",
"sub_status": "Awaiting Customer OTP",
"tags": ["OTP Triggered"]
}What to do:
- Prompt the user to enter a 6-digit One-Time Passcode.
- Resume the evaluation after submission.
Prefill available
{
"decision": "ACCEPT",
"status": "CLOSED",
"tags": ["Prefill Successful"]
}What to do:
- Display prefilled identity data
- Allow the user to confirm or complete missing fields.
- Continue the onboarding flow.
Prefill unavailable
{
"decision": "ACCEPT",
"status": "CLOSED",
"tags": ["Prefill Unsuccessful"]
}What to do:
- Display a blank onboarding form.
- Collect identity data manually.
Additional PII required
{
"decision": "REVIEW",
"status": "ON_HOLD",
"sub_status": "More information needed",
"tags": ["Additional PII Requested"]
}What to do:
- Collect full identity data (name, address, etc.).
- Resume the evaluation.
High risk reject
{
"decision": "REJECT",
"status": "CLOSED",
"tags": ["Phone - High Risk"]
}What to do:
- Stop the flow or route to fallback handling.
Routing logic
| Condition | Action |
|---|---|
REJECT | Stop the flow or route to fallback. |
REVIEW + OTP Triggered | Prompt for One-Time Passcode. |
REVIEW + Additional PII Requested | Collect full identity data. |
ACCEPT + Prefill Successful | Display prefilled identity data. |
ACCEPT + Prefill Unsuccessful | Display a blank form. |
Handle One-Time Passcode
If the response indicates One-Time Passcode is required:
decision = REVIEWstatus = ON_HOLDsub_status = Awaiting Customer OTPtags = ["OTP Triggered"]
What to do
- Prompt the user to enter a 6-digit One-Time Passcode.
- Submit the One-Time Passcode using
PATCH /api/evaluation/{eval_id}. - Continue the evaluation.
See Handle Additional Verification for the full One-Time Passcode flow.
Handle additional identity data
If additional identity data is required:
sub_status = More information neededtags = ["Additional PII Requested"]
What to do
- Display your full onboarding form.
- Collect required identity fields (name, address, etc.).
- Submit the data using
PATCH /api/evaluation/{eval_id}. - Continue the evaluation.
Handle Prefill
Prefill data may not always be approved for display, even when available. In these cases, display a blank onboarding form and collect identity data manually.
Prefill successful
- Display prefilled identity data.
- Allow the user to confirm or edit fields.
- Continue onboarding.
Prefill unavailable
- Display a blank onboarding form.
- Collect identity data manually.
Handle Document Verification (DocV)
If additional verification is required, RiskOS™ may trigger Document Verification.
What to do
- Detect the DocV trigger.
- Direct the user to complete document capture.
- Wait for completion.
- Continue the evaluation or wait for final decision.
See Handle Additional Verification for the full DocV flow.
Final decision
Some evaluations complete immediately, while others (such as DocV flows) complete asynchronously.
| Decision | What to do |
|---|---|
ACCEPT | Continue onboarding |
REJECT | Stop or route to fallback |
Error handling
If the API returns an HTTP error (4xx or 5xx), your application should handle it before processing any evaluation logic.
| Status code | Meaning | What to do |
|---|---|---|
400 | Bad request — missing or invalid fields | Check request body against required fields. |
401 | Unauthorized — invalid or missing API key | Verify your Authorization header. |
404 | Not found — invalid eval_id or endpoint | Confirm the eval_id and endpoint URL. |
429 | Rate limited | Back off and retry after the Retry-After header value. |
500 | Internal server error | Retry with exponential backoff (max three attempts). |
For the full error schema and all error codes, see the Errors Reference.
Data handling
What to persist
Store these fields:
ideval_iddecisionstatussub_statusworkflow(optional)
Implementation flow
- Start an evaluation.
- Store the
eval_id. - Interpret the response.
- Route the user:
- One-Time Passcode
- Additional PII
- Prefill
- Reject
- Continue using
PATCH /api/evaluation. - Handle final decision.
Summary
- The API response determines the next step.
- Your application controls the user experience.
- Routing is based on
decision,sub_status, andtags. - Continue the evaluation until a final decision is reached.
Updated 1 day ago
