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:

  1. 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).
  2. Submit a POST /api/evaluation request from your backend with the collected signals.
  3. Read the Prefill response: either enriched identity data (full name, date of birth, address, and more) or an empty object.
  4. Use the returned data to auto-populate your onboarding forms and accelerate the flow.

Before you start

Configure and publish a workflow for the Prefill enrichment.
Confirm regional coverage for the Prefills enrichment.
Get your API key from the API & SDK Keys page in the RiskOS™ Dashboard.

Postman Collection

You can use the following Postman collection to test the Prefill enrichment with the Evaluation endpoint.

Open in Postman

How it works

Input signals

FieldTypeDescriptionExample
phone_numberStringConsumer'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"
emailStringConsumer's email address."[email protected]"
date_of_birthStringConsumer's date of birth in ISO 8601 format (YYYY-MM-DD)."1990-05-20"
addressObjectConsumer's physical address (full or partial).{"line_1": "123 Main St", "locality": "SF", "postal_code": "94105"}
national_idStringConsumer'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.

ExampleRequired InputsResponse Returned
Example 1Phone Number + DOBName, SSN, Address, Email
Example 2Name + Last 4 of SSNFull 9 SSN, DOB, Address, Phone, Email
Example 3Email + Phone number + Last 4 of SSNName, 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)

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/evaluation
POST https://riskos.socure.com/api/evaluation

Authentication 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 version

Example 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:

  • email
  • phone_number
  • national_id (last 4 or full SSN/ITIN)
  • address.line_1 + address.postal_code

Top-level fields

Path: root request object

FieldTypeRequiredDescriptionExample
idStringRequired

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"
timestampStringRequiredRFC 3339 timestamp when the request was created."2025-10-07T23:50:03Z"
workflowStringRequiredRiskOS™ 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"
dataObjectRequiredMain payload containing business and individual information
line_of_businessStringOptionalBusiness context (for example, "onboarding")."onboarding"
channelStringOptionalChannel context (for example, "mobile")."mobile"
individualObjectRequiredPrimary identity object.See individual schema below.

individual fields

Path: data.individual

FieldTypeRequiredDescriptionExample
given_nameStringOptionalFirst name of the individual."Sarah"
family_nameStringOptionalLast name of the individual."Miles"
national_idStringOptionalGovernment-issued ID (last 4 SSN for U.S., full ID for others)."4987"
date_of_birthStringOptionalDate of birth in YYYY-MM-DD format."1988-07-22"
addressObjectOptionalResidential address of the individual.See address schema below.
phone_numberStringOptionalPhone number in E.164 format."14155553311"
emailStringOptionalIndividual’s email address."[email protected]"

address

Path: data.individual.address

FieldTypeRequiredDescriptionExample
line_1StringOptionalStreet address line 1."812 N 5th Ave"
line_2StringOptionalStreet address line 2."Apt 12"
localityStringOptionalCity."Seattle"
major_admin_divisionStringOptionalState, province, or region."WA"
postal_codeStringOptionalPostal or ZIP code."98109"
countryStringRequiredCountry 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

AreaFieldsHow to use it
Decision and routingdecision, 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 resultsModule-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 traceabilityid, eval_idPersist these identifiers to correlate API calls, logs, webhooks, GET requests, and support cases.
Enrichment executiondata_enrichments[] (response, status_code, total_attempts, is_source_cache)Inspect enrichment outputs and detect provisioning issues, partial failures, retries, or cached responses.
Workflow contextworkflow, workflow_id, workflow_versionUnderstand which workflow ran and which version produced the result. Useful for debugging and historical analysis.
Evaluation lifecycleeval_status, status, sub_statusExecution and case state only. Useful for monitoring and asynchronous workflows. Do not use for business decisions.
Execution contexteval_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.

decision values are workflow-specific and may differ from the examples shown in this guide.

FieldTypeDescriptionExample
decisionString enumFinal evaluation result.

Possible values:
ACCEPT
REVIEW
REJECT

Note: The fields returned can be customized to fit your integration or business needs.
"ACCEPT"
decision_atString <Date-Time>RFC 3339 timestamp when the decision was finalized."2025-10-07T23:50:03.738648201Z"
scoreNumberIf 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
tagsArray of stringsArray 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 stringsLists any manual review queues the evaluation was sent to. Empty when the case is fully auto-resolved without human review.[]
notesStringFreeform 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.

FieldTypeDescriptionExample
eval_statusString enumIndicates the current state of an evaluation in RiskOS™.

Possible values:
evaluation_completed
evaluation_paused
evaluation_in_progress
"evaluation_completed"
statusString enumIndicates the current state of an evaluation or case.

Possible values:
OPEN
CLOSED
"CLOSED"
sub_statusStringProvides 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.

FieldTypeDescriptionExample
idString (UUID or custom string)Your evaluation identifier within RiskOS™.

Note: This is customer-generated.
"prefill_test_case_
01_Name_Phoneno_4SSN"
eval_idString (UUID)RiskOS™-generated unique identifier for the evaluation."6d004b47-e9c7-4f5d-b8c9-79d7039dd161"
workflowStringName of the workflow executed."individual_onboarding"
workflow_idString (UUID)Unique identifier for the workflow run."dc7f261e-b158-477e-9770-7e4eae066156"
workflow_versionStringVersion of the executed workflow."28.16.0"

Execution context

These fields provide timing and environment context for the evaluation.

FieldTypeDescriptionExample
eval_sourceString enumIndicates 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_time to compute total processing time."2025-10-07T23:50:03.738794253Z"
environment_nameStringIndicates 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.

FieldTypeDescriptionExample
enrichment_nameStringName of the module or service executed (for example, Digital Intelligence, Verify Plus, Sigma Synthetic)."Socure Prefill"
enrichment_endpointStringAPI endpoint that processed the enrichment."https://sandbox.socure.com/
api/3.0/EmailAuthScore"
enrichment_providerStringProvider of the enrichment service (Socure, RestAPI, etc.)."Socure"
status_codeIntegerHTTP status returned by the enrichment API call.200
requestObjectRequest payload sent to the enrichment service.See request schema below.
responseObjectNormalized response data from the enrichment service.See response schema below.
errorStringPopulated only if the enrichment encountered an error.
is_source_cacheBooleanIndicates whether cached data was used instead of a live API call.false
total_attemptsIntegerNumber of attempts made to retrieve the enrichment data.1

request fields

FieldTypeDescriptionExample
countryStringCountry code in ISO 3166-1 alpha-2 format."US"
firstNameStringFirst name submitted."Sarah"
surNameStringLast name submitted."Miles"
mobileNumberStringPhone number submitted, in E.164 format."14155553311"
emailStringEmail address submitted."[email protected]"
nationalIdStringNational identifier (for example, SSN)."4987"
dobString (YYYY-MM-DD)Date of birth."1988-07-22"
modulesArray of stringsModules requested.["prefill"]
parentTxnIdString (UUID)Parent transaction ID."6d004b47-e9c7-4f5d-b8c9-79d7039dd161"
riskOSIdStringRiskOS™ transaction ID."prefill_test_case_01_Name_Phoneno_4SSN"
workflowStringWorkflow name."individual_onboarding"

response fields

FieldTypeDescriptionExample
prefillObjectPrefill data block.See prefill schema.
referenceIdString (UUID)Unique identifier assigned to each enrichment after a RiskOS™ workflow is finalized."117f2c07-15a1-4438-b301-2c6a9c4a2123"

prefill fields

FieldTypeDescriptionExample
socureIdString (UUID)Socure’s persistent identity ID. Used for Graph Intelligence correlations."819509ab-5ab8-475c-a084-5f209dcff940"
firstNameStringResolved first name."John"
middleNameStringResolved middle name.""
surNameStringResolved last name."Smith"
suffixStringSuffix (for example, "Jr.").""
nationalIdStringResolved full 9-digit SSN or equivalent."123456789"
ssnFirst5StringThe first five digits of the resolved SSN."12345"
dobString (YYYY-MM-DD)Resolved date of birth."1985-02-18"
mobileNumberStringResolved mobile phone number in E.164 format."+12015550123"
streetAddressStringResolved street address of the identity."123 Main St"
cityStringResolved city of the identity."Jersey City"
stateStringResolved state of the identity."NJ"
zipStringResolved ZIP code of the identity."07306"
aliasesArray of stringsKnown aliases.["S Smith", "John S"]
associatedAddressesArray of objectsAddresses linked to the identity.See schema below.
associatedEmailsArray of objectsEmails linked to the identity.See schema below.
associatedPhoneNumbersArray of objectsPhones linked to the identity.See schema below.
driverLicenseStringResolved driver's license number."S1234-56789-01234"

associatedPhoneNumbers fields

Supports 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: associatedPhoneNumbers is always an array of objects, even when only one address is on file.

FieldTypeDescriptionExample
phoneNumberStringThe phone number in E.164 format, including country code."+12015550123"
firstSeenDateString (YYYY-MM-DD)The date the phone number was first observed."2015-01-10"
lastSeenDateString (YYYY-MM-DD)The timestamp of the most recent presentation of the data."2026-06-29"
isMatchedBooleanIndicates whether the phone number was matched to the best-matched entity. ( applicable only when Verify module is called)true
isLatestBooleanIndicates whether this phone number is the most recent (current) number associated with the best-matched entity.true

associatedAddresses fields

Supports 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: associatedAddresses is always an array of objects, even when only one address is on file.

FieldTypeDescriptionExample
streetAddressStringThe street address, including house number and street name."108 Smokerise Blvd"
cityStringThe city in which the address is located."Longwood"
stateStringThe two-letter U.S. state abbreviation."FL"
zipStringThe ZIP code or postal code for the address."32779-3315"
countyStringThe county associated with the best-matched entity’s address."US"
firstSeenDateString (YYYY-MM-DD)The date the address was first observed."2022-03-01"
lastSeenDateString (YYYY-MM-DD)The date of the most recent presentation of the data."2024-11-18"
isMatchedBooleanIndicates whether the address was matched to the best-matched entity. ( applicable only when Verify module is called)true
isLatestBooleanIndicates whether this address is the most recent (current) address associated with the best-matched entity.false

associatedEmails fields

Supports 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: associatedEmails is always an array of objects, even when only one address is on file.

FieldTypeDescriptionExample
emailAddressStringThe email address associated with the best-matched entity."[email protected]"
firstSeenDateString (YYYY-MM-DD)The date the email address was first observed."2015-01-10"
lastSeenDateString (YYYY-MM-DD)The date of the most recent presentation of the data."2026-06-29"
isMatchedBooleanIndicates whether the email was matched to the best-matched entity. ( applicable only when Verify module is called)true
isLatestBooleanIndicates 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

You’re provisioned for Prefill
Input formatting follows API specs (for example, E.164 for phone)
Your integration handles null / empty responses
You’ve tested against known-good and synthetic inputs in Sandbox

Test coverage

Complete form population with prefill scenarios
Partial form population with user confirmation
No match scenarios → Manual entry fallback
Edge cases (missing data, API timeouts, etc.) → Graceful degradation

User experience

Clear visual indication of prefilled vs. user-entered data
Easy edit functionality for all prefilled fields
Fallback to manual entry when Prefill fails

Logging and observability

Log full request/response for debugging
Track Prefill success rates and user acceptance rates
For batch/parallel use cases, contact your Solutions Engineer

Did this page help you?