Integration Guide
Learn how to connect your application to KYC + Fraud + Watchlist > DocV Step up in RiskOS™. These guides provide the end-to-end technical requirements for gathering identity data, managing device risk, and processing onboarding decisions.
Start buildingBefore you start
Before you begin your implementation, ensure you have the following ready
riskos.sandbox.socure.com for all requests.evaluation_completed events.Postman Collection
The following Postman collection can be used to test the KYC + Fraud + Watchlist > DocV Step up solution with the Evaluation endpoint.
Select your integration
Choose the tab below that matches your product's architecture to see the specific implementation steps, code snippets, and payload requirements.
Hosted flow
This integration allows your platform to:
- Generate a verification session
- Redirect the user to a RiskOS™ hosted onboarding experience
- Receive a final decision asynchronously
- Route the user based on the outcome
Your application does not collect identity data directly. RiskOS™ manages the full verification experience and returns control to your redirect_uri when complete.
How document verification works
If additional verification is required during the hosted flow, RiskOS™ will trigger Predictive Document Verification (DocV).
Users may be asked to:
- Capture a government-issued ID
- Take a biometric selfie
- Complete liveness verification
Final decisions are delivered asynchronously via webhook. You must configure a webhook endpoint to receive evaluation_completed events.
sequenceDiagram
autonumber
participant User as End User
participant App as Your Platform
participant Socure as Socure
User->>App: Attempt action to trigger DocV
App->>Socure: POST /api/evaluation with PII and DocV settings
Socure-->>App: Respond w/ transaction token
App-->>User: Show Web SDK to prompt document capture
User->>Socure: Submit document images and selfie to Socure
activate Socure
Note over Socure: Process submission, run document verification & watchlist screening
Socure-->>App: Final decision (APPROVE / REJECT)
deactivate Socure
App-->>User: Show Onboarding ResultHow it works
Customize the hosted experience
Add your logo, branding, and customized copy on the Templates tab in the RiskOS™ Dashboard.
Generate and launch the Hosted Flow
Use the Hosted Flow to delegate identity collection, fraud checks, watchlist screening, and optional Document Verification (DocV) to RiskOS™. This workflow is asynchronous.
1. Create an evaluation (
POST)Your server must initiate the hosted workflow by sending a
POSTrequest to the Evaluation endpoint. Include your workflow name and aredirect_uriwhere the user should return after completing the hosted flow.- Endpoint:
POST /api/evaluation
curl --request POST \ --url "https://riskos.sandbox.socure.com/api/evaluation" \ --header "Accept: application/json" \ --header "Content-Type: application/json" \ --header "Authorization: Bearer YOUR_API_KEY" \ --data '{ "id": "17e9a02a-a5a7-442b-9b28-2034e1ed9d53", "timestamp": "2025-08-14T20:10:04.535Z", "workflow": "consumer_onboarding", "data": { "individual": { "docv": { "config": { "send_message": true } } "custom": { "redirect_uri": "https://yourapp.com/callback" } } }'Request schemaField Type Required Description Example idString (UUID) Required Unique identifier for this evaluation request. Must be unique per submission. 17e9a02a-a5a7-442b-9b28-2034e1ed9d53timestampString (RFC 3339 Date-Time) Required Time the evaluation request was initiated by your system. 2025-08-14T20:10:04.535ZworkflowString Required The Hosted Flow workflow name configured in RiskOS™ (e.g., consumer_onboarding).consumer_onboardingdataObject Required Container object for workflow inputs and configuration. — data.custom.redirect_uriString (URL) Required URL where the user will be redirected after completing the Hosted Flow. https://yourapp.com/callbackdocvfieldsUse the fields in the table below to configure Predictive DocV behavior within your workflow.
Field Type Required Description Example configObject Optional Configuration options controlling Capture App behavior and document verification flow for a given transaction. See configschema below.→ send_messageBoolean Optional Set to trueto send an SMS to the provided phone number with the document request URL. Defaults tofalse.
- US & Canada: sent from short code33436
- Other countries: sent from +1 (510) 330-19xxtrue→ languageString Optional Determines Capture App UI language. Defaults to en-us."en-us"→ use_case_keyString Optional Deploys a specific Capture App flow created in RiskOS™. Defaults to the account’s default flow or the flow configured in the RiskOS™ workflow. "default_capture_flow"→ redirectObject Optional Object containing post-capture redirect behavior. See redirectschema below.→ redirect.methodString Conditional Required if redirectis provided. AcceptsGETorPOST."POST"→ redirect.urlString Conditional Required if redirectis provided. The destination URL to send the consumer after capture. Can include query strings for transaction tracking."https://example.com/docv"→ document_typeString Optional Restrict to a single document type ( licenseorpassport) for a simplified flow. Users skip the document type selection screen when passed."license"Example response
The response returns a hosted
redirect_uriand aneval_id. The evaluation will returnstatus = ON_HOLDwhile waiting for user interaction.{ "id": "4e67a341-826c-4813-99b4-6c91cf2de4f7", "workflow": "consumer_onboarding", "workflow_id": "63e7534e-675e-4e7b-985b-f578d98347d0", "workflow_version": "11.71.0", "eval_source": "API", "eval_id": "1cc8f438-3c65-47ec-a1de-ad828dbcfa25", "eval_start_time": "2026-02-17T23:16:06.555204712Z", "eval_end_time": "2026-02-17T23:16:06.555902399Z", "decision": "REVIEW", "decision_at": "2026-02-17T23:16:06.555912097Z", "status": "ON_HOLD", "sub_status": "More information needed", "tags": [], "notes": "", "review_queues": [ "Default Queue" ], "eval_status": "evaluation_paused", "environment_name": "Sandbox" }Response schema
The following fields are returned in the Evaluation API response.
Field Type Description Example idString (UUID or custom string) Customer-generated identifier supplied in the original POSTrequest."4e67a341-826c-4813-99b4-6c91cf2de4f7"workflowString Name of the workflow executed. "consumer_onboarding"workflow_idString (UUID) Unique identifier for the workflow run. "63e7534e-675e-4e7b-985b-f578d98347d0"workflow_versionString Version of the executed workflow. "11.71.0"eval_sourceString (enum) Indicates where the evaluation was initiated from. Possible values: API,Dashboard."API"eval_idString (UUID) RiskOS-generated unique identifier for the evaluation. Persist this value to correlate webhooks and GETrequests."1cc8f438-3c65-47ec-a1de-ad828dbcfa25"eval_start_timeString <Date-Time>RFC 3339 timestamp when RiskOS™ began processing the evaluation. "2026-02-17T23:16:06.555204712Z"eval_end_timeString <Date-Time>RFC 3339 timestamp when processing completed or paused. "2026-02-17T23:16:06.555902399Z"decisionString (enum) Evaluation result. Possible values include ACCEPT,REVIEW,REJECT,RESUBMIT."REVIEW"decision_atString <Date-Time>RFC 3339 timestamp when the decision was finalized. "2026-02-17T23:16:06.555912097Z"statusString (enum) Case-level status of the evaluation. Possible values: OPEN,CLOSED,ON_HOLD."ON_HOLD"sub_statusString Provides additional detail about the evaluation status. "More information needed"eval_statusString (enum) Internal evaluation lifecycle state. Possible values: evaluation_completed,evaluation_paused,evaluation_in_progress."evaluation_paused"tagsArray of Strings Labels applied during the workflow to highlight routing decisions or notable signals. []review_queuesArray of Strings Manual review queues the evaluation was sent to. ["Default Queue"]notesString Freeform text for analyst or system comments about the evaluation. ""environment_nameString Environment where the evaluation was executed. Typically SandboxorProduction."Sandbox"- Endpoint:
Redirect and launch the Hosted Flow
Immediately redirect the user to the
redirect_urireturned in the evaluation response. RiskOS™ now manages the full onboarding experience.During the hosted session, RiskOS™ may:
- Collect phone number and date of birth
- Perform KYC and Watchlist screening
- Step-up to Document Verification (DocV), if risk thresholds are met
Web integration
If integrating in a web application, redirect the user to the hosted
redirect_uri. You may open it in the same tab or a new tab.window.location.href = hostedRedirectUriNative iOS integration
Launch the RiskOS™ Hosted Flow using an in-app browser such as
SFSafariViewController.import SafariServices let safariVC = SFSafariViewController(url: URL(string: hostedRedirectUri)!) present(safariVC, animated: true)Native Android integration
Launch the RiskOS™ Hosted Flow using Chrome Custom Tabs for a secure in-app browser experience.
val customTabsIntent = CustomTabsIntent.Builder().build() customTabsIntent.launchUrl(this, Uri.parse(hostedRedirectUri))Your application does not collect or process PII during this stage.
Important: The redirect indicates the UX is complete. The final decision is delivered asynchronously via webhook.
Receive the final decision (Webhook)
After the Capture App flow completes, RiskOS™ resumes the paused evaluation asynchronously. The final result is delivered via a webhook event.
To receive the final decision, configure a webhook endpoint on the Developer Workbench > Webhooks page in the RiskOS™ Dashboard.
Listen for the
evaluation_completedeventRiskOS™ sends an
evaluation_completedevent when processing finishes. The final outcome is indata.decision.{ "event_type": "evaluation_completed", "event_id": "3b31289c-2d4a-4107-80bc-dda63031d5a0", "event_at": "2025-07-17T01:20:01Z", "data": { "eval_id": "11111111-2222-3333-4444-555555555555", "id": "client-transaction-12345", "workflow": "consumer_onboarding", "workflow_id": "5937a624-f298-452c-9169-ceeae9e66b74", "workflow_version": "1.0.0", "environment_name": "Sandbox", "eval_source": "API", "eval_start_time": "2025-07-17T01:18:27Z", "eval_end_time": "2025-07-17T01:20:01Z", "eval_status": "evaluation_completed", "decision": "ACCEPT", "decision_at": "2025-07-17T01:20:01Z", "status": "CLOSED", "sub_status": "Accept", "tags": [], "notes": "", "review_queues": [ "Default Queue" ], "data_enrichments": [ { "enrichment_name": "Socure Document Request - Default Flow", "enrichment_endpoint": "https://service.socure.com/api/5.0/documents/request", "enrichment_provider": "SocureDocRequest", "status_code": 200, "response": { "referenceId": "ed6a5077-b272-4a75-8c21-b284e10927cd", "status": "SESSION_COMPLETE", "data": { "docvTransactionToken": "7d6ad42b-f804-4255-b25e-268b8a77c86f", "url": "https://verify.socure.com/#/dv/7d6ad42b-f804-4255-b25e-268b8a77c86f" } } }, { "enrichment_name": "Socure Document Verification", "enrichment_endpoint": "https://service.socure.com/api/5.0/documents/verify", "enrichment_provider": "Socure", "status_code": 200, "response": { "referenceId": "ed6a5077-b272-4a75-8c21-b284e10927c", "documentVerification": { "decision": { "name": "standard", "value": "accept" }, "reasonCodes": [ "I831", "I836" ], "documentType": { "type": "Drivers License", "country": "USA", "state": "NY" }, "documentData": { "firstName": "Test", "surName": "User", "fullName": "Test User", "dob": "1990-01-01", "documentNumber": "TST1234567", "expirationDate": "2030-01-01" } } } } ] } }Key response fieldsRiskOS™ returns a consistent set of top-level fields that describe the outcome of an evaluation, along with enrichment-specific results that depend on your workflow configuration.
Where to find specific resultsArea Fields How to use it Decision and routing decision,decision_at,tags,review_queues,notes,scorePrimary control signals. Branch application logic using decision. Use tags, queues, notes, and score for secondary routing, review, and explanation.Module results Module-specific fields (for example: reasonCodes, scores, extracted attributes)Evidence and signals produced by workflow modules. Use for escalation, compliance review, investigation, and audit. Identifiers and traceability id,eval_idPersist these identifiers to correlate API calls, logs, webhooks, GET requests, and support cases. Enrichment execution data_enrichments[](response,status_code,total_attempts,is_source_cache)Inspect enrichment outputs and detect provisioning issues, partial failures, retries, or cached responses. Workflow context workflow,workflow_id,workflow_versionUnderstand which workflow ran and which version produced the result. Useful for debugging and historical analysis. Evaluation lifecycle eval_status,status,sub_statusExecution and case state only. Useful for monitoring and asynchronous workflows. Do not use for business decisions. Execution context eval_source,eval_start_time,eval_end_time,environment_nameObservability and performance metadata for latency tracking, environment validation, and API vs Dashboard attribution. Decision and routing (primary control signals)Use these fields to determine what action your application should take.
decisionvalues are workflow-specific and may differ from the examples shown in this guide.Field Type Description Example decisionString (enum) Final evaluation result.
Possible values:
•ACCEPT
•REVIEW
•REJECT
Note: The fields returned can be customized to fit your integration or business needs."REVIEW"decision_atString <Date-Time>RFC 3339 timestamp when the decision was finalized. "2025-10-18T14:09:22.641Z"scoreNumber If configured for a workflow, provides an aggregate score of all steps. This can be used for risk banding, additional routing, or analytics alongside the primary decisionvalue.0.63tagsArray of Strings Array of labels applied during the workflow to highlight routing choices, notable signals, or rule outcomes. Useful for reporting, segmentation, or UI highlighting in the RiskOS™ Dashboard. []review_queuesArray of Strings Lists any manual review queues the evaluation was sent to. Empty when the case is fully auto-resolved without human review. []notesString Freeform text field for analyst or system comments about the evaluation. Often used to capture manual review rationale or investigation context. "Manual review recommended based on risk signals"Evaluation lifecycle and statusThese fields describe where the evaluation is in its lifecycle and are useful for monitoring and asynchronous workflows.
Field Type Description Example eval_statusString (enum) Indicates the current state of an evaluation in RiskOS™.
Possible values:
•evaluation_completed
•evaluation_paused
•evaluation_in_progress"evaluation_completed"statusString (enum) Indicates the current state of an evaluation or case.
Possible values:
•OPEN
•CLOSED"CLOSED"sub_statusString Provides additional detail about the evaluation status.
Example values:
•Under Review
•Pending Verification
•Accept
•Reject"Under Review"Identifiers and traceabilityUse these fields to correlate requests, logs, webhooks, and support cases.
Field Type Description Example idString (UUID or custom string) Your evaluation identifier within RiskOS™.
Note: This is customer-generated."APP-123456"eval_idString (UUID) RiskOS-generated unique identifier for the evaluation. "6dc8f39c-ecc3-4fe0-9283-fc8e5f99e816"workflow_idString (UUID) Unique identifier for the workflow run. "dc7f261e-b158-477e-9770-7e4eae066156"workflow_versionString Version of the executed workflow. "28.16.0"Execution contextThese fields provide timing and environment context for the evaluation.
Field Type Description Example eval_sourceString enum Indicates where the evaluation was initiated from.
Possible values:
•API: Request submitted via the Evaluation API.
•Dashboard: Case created or evaluated through the RiskOS™ Dashboard."API"eval_start_timeString <Date-Time>RFC 3339 timestamp for when RiskOS™ started processing the evaluation. Useful for latency and performance monitoring. "2025-10-07T23:50:03.60187976Z"eval_end_timeString <Date-Time>RFC 3339 timestamp for when RiskOS™ finished processing the evaluation. Can be paired with eval_start_timeto compute total processing time."2025-10-07T23:50:03.738794253Z"environment_nameString Indicates which environment the evaluation ran in. Typically Sandboxfor testing orProductionfor live traffic."Sandbox"Enrichment resultsEnrichment outputs are returned in the
data_enrichmentsarray.Field Type Description Example enrichment_nameString Name of the enrichment executed as part of the evaluation. "Socure DocV"enrichment_endpointString API endpoint used for the enrichment request. "https://sandbox.dev.socure.com/api/3.0/DocumentVerification"enrichment_providerString Provider responsible for the enrichment. "Socure"status_codeInteger HTTP status code returned by the enrichment provider. 200requestObject Payload sent to the enrichment provider (often redacted in documentation examples). { ... }responseObject Enrichment response payload containing DocV results. See documentVerificationresponse schema below.documentVerificationfieldsField Type Description Example reasonCodesArray of Strings List of rule or insight codes returned from DocV analysis. ["I834","I823","I826","I845","I820"]documentTypeObject Details about the document type provided for verification. See documentTypefieldsdecisionObject Result of the document verification analysis. See decisionfieldsdocumentDataObject Parsed data extracted from the submitted document. See documentDatafieldsreasonCodesare machine-readable flags that explain why a decision occurred (e.g., data mismatches, capture issues, authenticity checks). They appear under the DocV enrichment response and are intended for routing, UX, and review workflows.Where you’ll see them
data_enrichments.response.documentVerification.reasonCodes
How to use them
- Drive resubmission UX (e.g., prompt for glare removal if an image quality code is present).
- Route to manual review when authenticity or data consistency codes indicate risk.
- Log for audit and analytics.
The full catalog of reason codes and their descriptions is available in your Socure documentation/console or in the reason code list in the RiskOS™ Dashboard.
documentTypeField Type Description Example typeString Human-readable document type. "Drivers License"countryString Country associated with the document type. "USA"stateString State/region associated with the document type. "NY"Supported document types
Below are the document types you may encounter in
documentVerification.documentTypeand when configuring capture flows. Coverage and acceptance may vary by country and program.Document Type Description Drivers License A government-issued license permitting the consumer to operate a motor vehicle. Identification Card A non-driver government-issued photo ID for verifying identity. Passport An official government document certifying identity and nationality, used for international travel. Employment Authorization Card A document issued by USCIS that proves authorization to work in the U.S. Permanent Resident Card A document (e.g., U.S. Green Card) proving the consumer’s lawful permanent resident status. Passport Card A wallet-sized U.S. document used for land and sea travel between certain countries. Military ID An ID card issued by a country’s armed forces to identify active-duty or retired service members. Health Card An ID card issued by a government or insurer to access health services. Visa An official endorsement permitting the consumer to enter, stay, or work in a foreign country. Social Security Card A U.S. government-issued card showing the consumer’s Social Security Number (SSN). Weapons License A document permitting the consumer to carry or own firearms or other regulated weapons. Tribal ID Card A government-recognized identity card issued by a Native American or Indigenous tribe. Mexican Permanent Resident Card An identity document for foreign nationals authorized to live permanently in Mexico. decisionDocV responses are recommendations only. They are intended to inform your decisioning process and should be integrated into your organization’s broader risk strategy.
Field Type Description Example nameString Internal label representing the configured decision rule set (e.g., "lenient"or"strict")."lenient"valueString Outcome of the DocV analysis. One of:
•accept— Images met validation criteria and were verified.
•reject— Images failed some or all required validation criteria.
•resubmit— User must resubmit due to unacceptable image quality or missing data.
•review— Images did not meet configured criteria and should be manually reviewed. Returned only if enabled in your DocV Product Settings."reject"documentDataThe
documentDataobject contains the extracted data from OCR, barcode, or MRZ.If DocV cannot extract sufficient information due to poor image quality or unreadable fields, the
documentDataobject will not be present, and the decision will beresubmit.Field Type Description Example personalNumberString The personal identifier value extracted from the ID, when applicable.
Note: The meaning and availability of this value vary by country and document type, but it generally represents an identifier tied to the individual rather than the document itself (for example, a tax identification number or voter ID)."123456"personalNumberTypeString Indicates what the personal number represents. Supported values depend on the issuing country and document type. BRA_CPFfirstNameString First/given name parsed from the document. "John"surNameString Last/family name parsed from the document. "Smith"fullNameString Full name as printed on the document. "John Smith"addressString Single-line address string (as returned). "32194 N College Ave, New York City, NY 10001"parsedAddressObject Structured address parts extracted from address.See parsedAddressfieldsdocumentNumberString Document identifier/number. "00000000"dobString Date of birth (YYYY-MM-DD). "1989-05-07"issueDateString Document issue date (YYYY-MM-DD). "2021-01-12"expirationDateString Document expiration date (YYYY-MM-DD). "2029-05-07"barcodeObject Contains identity and license details parsed from the barcode of a government-issued ID. See barcodefields.parsedAddressfieldsField Type Description Example physicalAddressString Primary street address (line 1) of the parsed location. "32194 N College Ave"physicalAddress2String Combined city, state, and postal code as returned from parsing. "New York City NY 10001"cityString City component extracted from the parsed address. "New York City"stateString State, province, or regional code component extracted from the address. "NY"countryString ISO 3166-1 alpha-2 country code associated with the parsed address. "US"zipString Postal or ZIP code component extracted from the parsed address. "10001"barcodefieldsField Type Description Example firstNameString The individual’s given or first name as encoded in the barcode. "John"middleNameString The individual’s middle name or initial extracted from the barcode. "Larry"surNameString The individual’s last name or family name as encoded in the barcode. "Smith"nameSuffixString Any name suffix present, such as Jr., Sr., II, or III. "JR"complianceTypeString Code representing the license’s compliance type (e.g., Federal or state). "F"licenseClassString The class or category of license (e.g., commercial, operator, etc.). "C"Route the user based on the final decision
Because the evaluation completes asynchronously, your frontend should wait for your backend to persist the final decision, then route the user accordingly.
ACCEPT→ Continue onboardingREJECT→ Route to fallback or review flow
One common approach is polling your API until the stored decision changes.
if (data.status?.decision === "ACCEPT") { router.push("/success"); } if (data.status?.decision === "REJECT") { router.push("/review"); }
Final integration validation checklist
ACCEPT, allow the user to complete their intended action (for example, account creation or payment transaction)REJECT flowACCEPT, allow the user to complete their intended actionUpdated about 2 hours ago
