Integrate Prefill
Learn how to call the RiskOS™ Evaluation API for identity enrichment with Basic or Advanced Prefill.
Overview
This guide shows you how to:
- Collect the minimal identity signals you have from the consumer (prefer a phone number and date of birth; name, SSN, email, and address are also supported).
- Submit a
POST /api/evaluationrequest from your backend with the collected signals. - Read the Prefill response: either enriched identity data (full name, date of birth, address, and more) or an empty object.
- Use the returned data to auto-populate your onboarding forms and accelerate the flow.
Before you start
Postman Collection
You can use the following Postman collection to test the Prefill enrichment with the Evaluation endpoint.
How it works
Input signals
| Field | Type | Description | Example |
|---|---|---|---|
phone_number | String | Consumer's phone number in E.164 format. The API expects the standard E.164 format but tolerates hyphens and spaces for user convenience. | "+1-415-555-1234" |
email | String | Consumer's email address. | "[email protected]" |
date_of_birth | String | Consumer's date of birth in ISO 8601 format (YYYY-MM-DD). | "1990-05-20" |
address | Object | Consumer's physical address (full or partial). | {"line_1": "123 Main St", "locality": "SF", "postal_code": "94105"} |
national_id | String | Consumer's government-issued ID (last 4 SSN for U.S., full ID for others). | "4987" |
Note :
One or a combination of the above input signals must be provided. Phone_number + DOB is the most preferred for precision of Prefill.
Resolution rules
- If signals align → return best-matched identity
- If signals conflict, are incomplete, or have low confidence → return
{}(empty object) - Prefill never returns partial or ambiguous matches
This ensures Prefill only returns data when inputs resolve with high confidence to one SocureID.
Matching logic flow
- Conflicting signals → no match →
{} - Match confirmed → one SocureID → identity data returned
Prefill guarantees clear outcomes only — never partial, guessed, or inconsistent responses.
Common integration patterns
The table below outlines common integration patterns for Socure Prefill across different use cases.
| Example | Required Inputs | Response Returned |
|---|---|---|
| Example 1 | Phone Number + DOB | Name, SSN, Address, Email |
| Example 2 | Name + Last 4 of SSN | Full 9 SSN, DOB, Address, Phone, Email |
| Example 3 | Email + Phone number + Last 4 of SSN | Name, Full 9 SSN, DOB, Address |
Note:
Get in touch with your account support rep to set up Prefill enrichment using other inputs.
Example frontend input form (mapped to /api/evaluation payload)
/api/evaluation payload)This example screen shows how a mobile app might capture minimal user information, then use Advanced Prefill to auto-complete additional PII during onboarding using a RiskOS™ /api/evaluation request.
See the Advanced Prefill solution guide for more details on setting up OTP and incorporating device risk signals.
Each field maps to required parameters in the data.individual object:
- Email →
email - Date of Birth →
date_of_birth - Phone Number →
phone_number
You can configure which fields each workflow requires by adjusting module-level match logic in RiskOS™.

Start an evaluation
Endpoint
Start with Sandbox for development and testing, then move to Production for live applications.
POST https://riskos.sandbox.socure.com/api/evaluationPOST https://riskos.socure.com/api/evaluationAuthentication and headers
Include your API key in the Authorization header as a Bearer token, with standard JSON headers:
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Accept: application/json
X-API-Version: 2025-01-01.orion # optional – pins a specific API versionExample request
{
"id": "prefill_test_case_01_Name_Phoneno_4SSN",
"timestamp": "2025-11-25T20:50:21.000Z",
"workflow": "individual_onboarding",
"data": {
"line_of_business": "onboarding",
"channel": "mobile",
"individual": {
"given_name": "Sarah",
"family_name": "Miles",
"date_of_birth": "1988-07-22",
"national_id": "4987",
"id": "",
"phone_number": "14155553311",
"address": {
"line_1": "",
"line_2": "",
"locality": "",
"major_admin_division": "",
"postal_code": "",
"country": "US"
}
}
}
}curl --location --request POST 'https://riskos.sandbox.socure.com/api/evaluation' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--data-raw '{
"id": "prefill_test_case_01_Name_Phoneno_4SSN",
"timestamp": "2025-11-25T20:51:06.000Z",
"workflow": "individual_onboarding",
"data": {
"line_of_business": "onboarding",
"channel": "mobile",
"individual": {
"given_name": "Sarah",
"family_name": "Miles",
"date_of_birth": "1988-07-22",
"national_id": "4987",
"id": "",
"phone_number": "14155553311",
"address": {
"line_1": "",
"line_2": "",
"locality": "",
"major_admin_division": "",
"postal_code": "",
"country": "US"
}
}
}
}'Request schema
Validation rules & accuracy guidance
Prefill returns identity data for the SocureID that the provided signals resolve to. These rules ensure RiskOS™ has a signal to match on.
Required fields
Prefill is enabled in your RiskOS™ workflow, so no single request field is mandatory. Provide at least one identity signal (see the next dropdown).
Conditionally required fields
Provide at least one of the following identity signals:
emailphone_numbernational_id(last 4 or full SSN/ITIN)address.line_1+address.postal_code
Top-level fields
Path: root request object
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
id | String | Required | Required, customer-defined unique identifier for the request. This value must be unique for each evaluation. Reusing an ID causes RiskOS™ to treat the request as a re-run and can impact processing behavior, results, and downstream workflows. | "prefill_test_case_01_Name_Phoneno_4SSN" |
timestamp | String | Required | RFC 3339 timestamp when the request was created. | "2025-10-07T23:50:03Z" |
workflow | String | Required | RiskOS™ workflow name configured in your environment. Note: The workflow name must be unique within your RiskOS™ environment. It is not scoped by use case and must identify a single active workflow for each Evaluation API request. | "individual_onboarding" |
data | Object | Required | Main payload containing business and individual information | |
→line_of_business | String | Optional | Business context (for example, "onboarding"). | "onboarding" |
→channel | String | Optional | Channel context (for example, "mobile"). | "mobile" |
→individual | Object | Required | Primary identity object. | See individual schema below. |
individual fields
individual fieldsPath: data.individual
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
given_name | String | Optional | First name of the individual. | "Sarah" |
family_name | String | Optional | Last name of the individual. | "Miles" |
national_id | String | Optional | Government-issued ID (last 4 SSN for U.S., full ID for others). | "4987" |
date_of_birth | String | Optional | Date of birth in YYYY-MM-DD format. | "1988-07-22" |
address | Object | Optional | Residential address of the individual. | See address schema below. |
phone_number | String | Optional | Phone number in E.164 format. | "14155553311" |
email | String | Optional | Individual’s email address. | "[email protected]" |
address
addressPath: data.individual.address
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
line_1 | String | Optional | Street address line 1. | "812 N 5th Ave" |
line_2 | String | Optional | Street address line 2. | "Apt 12" |
locality | String | Optional | City. | "Seattle" |
major_admin_division | String | Optional | State, province, or region. | "WA" |
postal_code | String | Optional | Postal or ZIP code. | "98109" |
country | String | Required | Country code in ISO 3166-1 alpha-2 format. | "US" |
Example response
When you call the Evaluation API, RiskOS™ returns a JSON payload that includes the final decision, evaluation metadata, and enrichment-specific results.
{
"id": "prefill_test_case_01_Name_Phoneno_4SSN",
"eval_id": "6d004b47-e9c7-4f5d-b8c9-79d7039dd161",
"workflow": "individual_onboarding",
"workflow_id": "dc7f261e-b158-477e-9770-7e4eae066156",
"eval_start_time": "2025-10-07T23:50:03.60187976Z",
"eval_end_time": "2025-10-07T23:50:03.738794253Z",
"workflow_version": "28.16.0",
"eval_source": "API",
"status": "CLOSED",
"sub_status": "Accept",
"decision": "ACCEPT",
"decision_at": "2025-10-07T23:50:03.738648201Z",
"tags": [],
"review_queues": [],
"data_enrichments": [
{
"enrichment_name": "Socure Prefill",
"enrichment_endpoint": "https://sandbox.socure.com/api/3.0/EmailAuthScore",
"enrichment_provider": "Socure",
"status_code": 200,
"request": {
"country": "US",
"dob": "1988-07-22",
"firstName": "Sarah",
"mobileNumber": "14155553311",
"modules": [
"prefill"
],
"nationalId": "4987",
"parentTxnId": "6d004b47-e9c7-4f5d-b8c9-79d7039dd161",
"riskOSId": "prefill_test_case_01_Name_Phoneno_4SSN",
"surName": "Miles",
"workflow": "individual_onboarding"
},
"response": {
"prefill": {
"socureId": "819509ab-5ab8-475c-a084-5f209dcff940",
"firstName": "John",
"middleName": "",
"surName": "Smith",
"suffix": "",
"nationalId": "123456789",
"ssnFirst5": "12345",
"dob": "1985-02-18",
"mobileNumber": "+12015550123",
"streetAddress": "123 Main St",
"city": "Jersey City",
"state": "NJ",
"zip": "07306",
"aliases": [],
"associatedAddresses": [
{
"streetAddress": "178 Wesley St",
"city": "Seattle",
"firstSeenDate": "2020-01-15",
"state": "WA",
"streetAddress": "812 N 5th Ave Apt 12",
"zip": "98109",
"lastSeenDate": "2026-05-03",
"isMatched": false,
"isLatest": true
},
{
"streetAddress": "2434 S Style Ave",
"city": "Portland",
"firstSeenDate": "2019-09-30",
"state": "OR",
"streetAddress": "23 Ridgeway Blvd",
"zip": "97204",
"lastSeenDate": "2023-06-16",
"isMatched": false,
"isLatest": false
}
],
"associatedEmails": [
{
"emailAddress": "[email protected]",
"firstSeenDate": "2015-05-18",
"lastSeenDate": "2024-01-10",
"isMatched": false,
"isLatest": true
},
{
"emailAddress": "[email protected]",
"firstSeenDate": "2012-11-02",
"lastSeenDate": "",
"isMatched": false,
"isLatest": false
}
],
"associatedPhoneNumbers": [
{
"firstSeenDate": "2023-11-05",
"lastSeenDate": "2026-01-27",
"phoneNumber": "+12015550123",
"isMatched": false,
"isLatest": true
},
{
"firstSeenDate": "2016-06-12",
"lastSeenDate": "2025-03-14",
"phoneNumber": "+14155553311",
"isMatched": true,
"isLatest": false
},
{
"firstSeenDate": "2017-02-11",
"lastSeenDate": "2024-03-10",
"phoneNumber": "+14155558789",
"isMatched": false,
"isLatest": false
}
],
"driverLicense": "S1234-56789-01234"
},
"referenceId": "117f2c07-15a1-4438-b301-2c6a9c4a2123"
},
"is_source_cache": false,
"total_attempts": 1
}
],
"eval_status": "evaluation_completed",
"environment_name": "Sandbox"
}
Key response fields
RiskOS™ returns a consistent set of top-level fields that describe the outcome of an evaluation, with enrichment-specific results that depend on your workflow configuration.
Where to find specific results
| Area | Fields | How to use it |
|---|---|---|
| Decision and routing | decision, decision_at, tags, review_queues, notes, score | Primary 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_id | Persist 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_version | Understand which workflow ran and which version produced the result. Useful for debugging and historical analysis. |
| Evaluation lifecycle | eval_status, status, sub_status | Execution 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_name | Observability 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 |
|---|---|---|---|
decision | String enum | Final evaluation result. Possible values: • ACCEPT• REVIEW• REJECTNote: The fields returned can be customized to fit your integration or business needs. | "ACCEPT" |
decision_at | String <Date-Time> | RFC 3339 timestamp when the decision was finalized. | "2025-10-07T23:50:03.738648201Z" |
score | Number | 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 decision value. | 0.91 |
tags | Array 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_queues | Array of strings | Lists any manual review queues the evaluation was sent to. Empty when the case is fully auto-resolved without human review. | [] |
notes | String | Freeform text field for analyst or system comments about the evaluation. Often used to capture manual review rationale or investigation context. | "Identity verified with high confidence" |
Evaluation lifecycle and status
These fields describe where the evaluation is in its lifecycle and are useful for monitoring and asynchronous workflows.
| Field | Type | Description | Example |
|---|---|---|---|
eval_status | String enum | Indicates the current state of an evaluation in RiskOS™. Possible values: • evaluation_completed• evaluation_paused• evaluation_in_progress | "evaluation_completed" |
status | String enum | Indicates the current state of an evaluation or case. Possible values: • OPEN• CLOSED | "CLOSED" |
sub_status | String | Provides additional detail about the evaluation status. Example values: • Under Review• Pending Verification• Accept• Reject | "Accept" |
Identifiers and traceability
Use these fields to correlate requests, logs, webhooks, and support cases.
| Field | Type | Description | Example |
|---|---|---|---|
id | String (UUID or custom string) | Your evaluation identifier within RiskOS™. Note: This is customer-generated. | "prefill_test_case_01_Name_Phoneno_4SSN" |
eval_id | String (UUID) | RiskOS™-generated unique identifier for the evaluation. | "6d004b47-e9c7-4f5d-b8c9-79d7039dd161" |
workflow | String | Name of the workflow executed. | "individual_onboarding" |
workflow_id | String (UUID) | Unique identifier for the workflow run. | "dc7f261e-b158-477e-9770-7e4eae066156" |
workflow_version | String | Version of the executed workflow. | "28.16.0" |
Execution context
These fields provide timing and environment context for the evaluation.
| Field | Type | Description | Example |
|---|---|---|---|
eval_source | String 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_time | String <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_time | String <Date-Time> | RFC 3339 timestamp for when RiskOS™ finished processing the evaluation. Can be paired with eval_start_time to compute total processing time. | "2025-10-07T23:50:03.738794253Z" |
environment_name | String | Indicates which environment the evaluation ran in. Typically Sandbox for testing or Production for live traffic. | "Sandbox" |
Enrichment results
Enrichment outputs are returned in the data_enrichments array.
| Field | Type | Description | Example |
|---|---|---|---|
enrichment_name | String | Name of the module or service executed (for example, Digital Intelligence, Verify Plus, Sigma Synthetic). | "Socure Prefill" |
enrichment_endpoint | String | API endpoint that processed the enrichment. | "https://sandbox.socure.com/api/3.0/EmailAuthScore" |
enrichment_provider | String | Provider of the enrichment service (Socure, RestAPI, etc.). | "Socure" |
status_code | Integer | HTTP status returned by the enrichment API call. | 200 |
request | Object | Request payload sent to the enrichment service. | See request schema below. |
response | Object | Normalized response data from the enrichment service. | See response schema below. |
error | String | Populated only if the enrichment encountered an error. | |
is_source_cache | Boolean | Indicates whether cached data was used instead of a live API call. | false |
total_attempts | Integer | Number of attempts made to retrieve the enrichment data. | 1 |
request fields
request fields| Field | Type | Description | Example |
|---|---|---|---|
country | String | Country code in ISO 3166-1 alpha-2 format. | "US" |
firstName | String | First name submitted. | "Sarah" |
surName | String | Last name submitted. | "Miles" |
mobileNumber | String | Phone number submitted, in E.164 format. | "14155553311" |
email | String | Email address submitted. | "[email protected]" |
nationalId | String | National identifier (for example, SSN). | "4987" |
dob | String (YYYY-MM-DD) | Date of birth. | "1988-07-22" |
modules | Array of strings | Modules requested. | ["prefill"] |
parentTxnId | String (UUID) | Parent transaction ID. | "6d004b47-e9c7-4f5d-b8c9-79d7039dd161" |
riskOSId | String | RiskOS™ transaction ID. | "prefill_test_case_01_Name_Phoneno_4SSN" |
workflow | String | Workflow name. | "individual_onboarding" |
response fields
response fields| Field | Type | Description | Example |
|---|---|---|---|
prefill | Object | Prefill data block. | See prefill schema. |
referenceId | String (UUID) | Unique identifier assigned to each enrichment after a RiskOS™ workflow is finalized. | "117f2c07-15a1-4438-b301-2c6a9c4a2123" |
prefill fields
prefill fields| Field | Type | Description | Example |
|---|---|---|---|
socureId | String (UUID) | Socure’s persistent identity ID. Used for Graph Intelligence correlations. | "819509ab-5ab8-475c-a084-5f209dcff940" |
firstName | String | Resolved first name. | "John" |
middleName | String | Resolved middle name. | "" |
surName | String | Resolved last name. | "Smith" |
suffix | String | Suffix (for example, "Jr."). | "" |
nationalId | String | Resolved full 9-digit SSN or equivalent. | "123456789" |
ssnFirst5 | String | The first five digits of the resolved SSN. | "12345" |
dob | String (YYYY-MM-DD) | Resolved date of birth. | "1985-02-18" |
mobileNumber | String | Resolved mobile phone number in E.164 format. | "+12015550123" |
streetAddress | String | Resolved street address of the identity. | "123 Main St" |
city | String | Resolved city of the identity. | "Jersey City" |
state | String | Resolved state of the identity. | "NJ" |
zip | String | Resolved ZIP code of the identity. | "07306" |
aliases | Array of strings | Known aliases. | ["S Smith", "John S"] |
associatedAddresses | Array of objects | Addresses linked to the identity. | See schema below. |
associatedEmails | Array of objects | Emails linked to the identity. | See schema below. |
associatedPhoneNumbers | Array of objects | Phones linked to the identity. | See schema below. |
driverLicense | String | Resolved driver's license number. | "S1234-56789-01234" |
associatedPhoneNumbers fields
associatedPhoneNumbers fieldsSupports up to 10 phone numbers to provide flexibility for either manual entry or selection of known phone numbers. The top ranked, first indexed phone number should be prefilled by default, with the option for the user to:
- Replace it with another phone number, or
- Select from the last three known phone numbers via a radio button option.
The top ranked, first indexed phone number in the array may be different than the most recent phone number, though they often are congruent. The most top ranked and recent phone numbers might not match the input phone number.
Note:
associatedPhoneNumbersis always an array of objects, even when only one address is on file.
| Field | Type | Description | Example |
|---|---|---|---|
phoneNumber | String | The phone number in E.164 format, including country code. | "+12015550123" |
firstSeenDate | String (YYYY-MM-DD) | The date the phone number was first observed. | "2015-01-10" |
lastSeenDate | String (YYYY-MM-DD) | The timestamp of the most recent presentation of the data. | "2026-06-29" |
isMatched | Boolean | Indicates whether the phone number was matched to the best-matched entity. ( applicable only when Verify module is called) | true |
isLatest | Boolean | Indicates whether this phone number is the most recent (current) number associated with the best-matched entity. | true |
associatedAddresses fields
associatedAddresses fieldsSupports up to 10 addresses to provide flexibility for either manual entry or selection of known phone numbers. The top ranked, first indexed address should be prefilled by default, with the option for the user to:
- Replace it with another address, or
- Select from the last three known addresses via a radio button.
The top ranked, first indexed address in the array may be different than the most recent address, though they often are congruent. The most top ranked and recent addresses might not match the input address.
Note:
associatedAddressesis always an array of objects, even when only one address is on file.
| Field | Type | Description | Example |
|---|---|---|---|
streetAddress | String | The street address, including house number and street name. | "108 Smokerise Blvd" |
city | String | The city in which the address is located. | "Longwood" |
state | String | The two-letter U.S. state abbreviation. | "FL" |
zip | String | The ZIP code or postal code for the address. | "32779-3315" |
county | String | The county associated with the best-matched entity’s address. | "US" |
firstSeenDate | String (YYYY-MM-DD) | The date the address was first observed. | "2022-03-01" |
lastSeenDate | String (YYYY-MM-DD) | The date of the most recent presentation of the data. | "2024-11-18" |
isMatched | Boolean | Indicates whether the address was matched to the best-matched entity. ( applicable only when Verify module is called) | true |
isLatest | Boolean | Indicates whether this address is the most recent (current) address associated with the best-matched entity. | false |
associatedEmails fields
associatedEmails fieldsSupports up to 10 emails to provide flexibility for either manual entry or selection of known emails. The top ranked, first indexed email should be prefilled by default, with the option for the user to:
- Replace it with another email, or
- Select from the last three known emails via a radio button option.
The top ranked, first indexed email in the array may be different than the most recent email, though they often are congruent. The most top ranked and recent emails might not match the input email.
Note:
associatedEmailsis always an array of objects, even when only one address is on file.
| Field | Type | Description | Example |
|---|---|---|---|
emailAddress | String | The email address associated with the best-matched entity. | "[email protected]" |
firstSeenDate | String (YYYY-MM-DD) | The date the email address was first observed. | "2015-01-10" |
lastSeenDate | String (YYYY-MM-DD) | The date of the most recent presentation of the data. | "2026-06-29" |
isMatched | Boolean | Indicates whether the email was matched to the best-matched entity. ( applicable only when Verify module is called) | true |
isLatest | Boolean | Indicates whether this is the most recent (current) associated email. | true |
Best practices
Integration and maintenance
- Implement fallback logic for cases where Prefill fails
- Log Prefill results for analytics and continuous improvement
- Advanced Prefill only: allow user override of prefilled data to maintain user control.
User experience (Advanced Prefill only)
- Clearly indicate prefilled fields to users (e.g., with visual cues)
- Provide easy edit functionality for all prefilled data
Security and compliance
- Store minimal PII — avoid unnecessary persistence to practice good data privacy and security
- Implement proper data retention policies for Prefill responses
- Use secure transmission (TLS 1.2+) for all API communications
Performance optimization
- Set appropriate timeouts for API calls
- Monitor API response times and optimize accordingly
Validation checklist
Validation
Test coverage
User experience
Logging and observability
Updated 10 days ago

