Integration Guide

Learn how to call the RiskOS™ Evaluation API for identity verification with Socure Verify or Verify Plus.

Socure Verify API integration guide

This guide walks you through how to integrate with Socure’s /api/evaluation endpoint using the Verify or Verify Plus enrichments. You’ll learn how to send identity data, parse the response, and apply decision logic to support onboarding, trust and safety, fraud prevention, or compliance workflows.


Before you start

Make sure your RiskOS™ environment is provisioned with:

A workflow configured for the Verify or Verify Plus enrichment.
Regional support coverage for the Verify or Verify Plus enrichment.

Choose your environment

Start with Sandbox for development and testing, then move to Production for live applications.

https://riskos.sandbox.socure.com/api/evaluation
  • No real customer data
  • Free testing environment
  • Unlimited API calls

Get an API key

  1. In the Sandbox RiskOS™ Dashboard, go to Developer Workbench > API Keys.
  2. Copy your API key securely.

How it works

  1. Send a POST request to /api/evaluation with identity data.
  2. Socure runs the request through configured RiskOS™ workflow with tailored enrichments.
  3. Receive a decision (ACCEPT, REVIEW, or REJECT) and supporting metadata.
  4. Apply your routing logic based on the result.

Common integration patterns

The table below outlines common integration patterns for Socure Verify and Verify Plus, including typical input requirements and expected outcomes across different markets and use cases.

RegionModuleRequired InputsResponse
U.S. Fintech & Responsible Gaming onboardingverifyplusname + dob + last 4 of SSN + address + email + phoneFull profile + audit trail
U.S. Public benefitsverifyname + dob + SSN + address + email + phoneMatch score + reason codes
Brazilverifyname, dob, CPF, address, phone, emailMatch score + reason codes
Indiaverifyname, dob, Aadhaar or PAN, address, phone, emailMatch score + reason codes
Canadaverifyname, dob, SIN, address, phone, emailMatch score + reason codes
Mexicoverifyname, dob, CURP or INE, address, phoneMatch score + reason codes
Germanyverifyname, dob, national ID or passport, address, phone, emailMatch score + reason codes
Japanverifyname, dob, MyNumber or residence card, address, phoneMatch score + reason codes
United Kingdomverifyname, dob, address, phone, emailMatch score + reason codes
Franceverifyname, dob, national ID or passport, address, phone, emailMatch score + reason codes
Italyverifyname, dob, codice fiscale or national ID, address, phone, emailMatch score + reason codes
South Koreaverifyname, dob, RRN or passport, address, phoneMatch score + reason codes
Australiaverifyname, dob, Medicare or passport, address, phone, emailMatch score + reason codes
Spainverifyname, dob, DNI/NIE, address, phone, emailMatch score + reason codes
Indonesiaverifyname, dob, NIK or passport, address, phone, emailMatch score + reason codes
Netherlandsverifyname, dob, BSN, address, phone, emailMatch score + reason codes
Turkeyverifyname, dob, TCKN, address, phoneMatch score + reason codes
Saudi Arabiaverifyname, dob, national ID or Iqama, address, phoneMatch score + reason codes
Switzerlandverifyname, dob, AHV or passport, address, phone, emailMatch score + reason codes
Taiwanverifyname, dob, national ID or passport, address, phoneMatch score + reason codes
Polandverifyname, dob, PESEL, address, phone, emailMatch score + reason codes
Swedenverifyname, dob, personnummer, address, phone, emailMatch score + reason codes
Belgiumverifyname, dob, national number or eID, address, phone, emailMatch score + reason codes
Thailandverifyname, dob, Thai ID or passport, address, phoneMatch score + reason codes
Irelandverifyname, dob, passport or PPSN, address, phone, emailMatch score + reason codes
Argentinaverifyname, dob, DNI, address, phone, emailMatch score + reason codes
Austriaverifyname, dob, passport or national ID, address, phone, emailMatch score + reason codes
Norwayverifyname, dob, fødselsnummer or passport, address, phone, emailMatch score + reason codes
United Arab Emiratesverifyname, dob, Emirates ID, address, phone, emailMatch score + reason codes
Singaporeverifyname, dob, NRIC or FIN, address, phone, emailMatch score + reason codes
📘

Note:

Verify Plus is only available in the United States. For international workflows, use Verify.


Example frontend input form (mapped to /api/evaluation payload)

This example screen shows how a mobile app might capture user information during onboarding before triggering a RiskOS™ /api/evaluation request.

Each field maps to required parameters in the data.individual object:

  • First Name → given_name
  • Last Name → family_name
  • Date of Birth → date_of_birth
  • National ID → national_id

You can configure which fields are required per workflow by adjusting module-level match logic in RiskOS™.


Start a new Risk Evaluation

Endpoint

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, along 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": "APP-987654",
  "timestamp": "2025-08-13T06:10:54.298Z",
  "workflow": "consumer_onboarding",
  "data": {
    "individual": {
      "given_name": "Jonathan",
      "family_name": "Reyes",
      "national_id": "1234",
      "phone_number": "+639171234567",
      "email": "[email protected]",
      "date_of_birth": "1979-07-30",
      "ip_address": "203.87.128.100",
      "address": {
        "street_address": "123 Rizal Avenue",
        "locality": "Portland",
        "major_admin_division": "OR",
        "postal_code": "85142",
        "country": "US"
      }
    }
  }
}
curl --location '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": "APP-987654",
  "timestamp": "2025-08-13T06:10:54.298Z",
  "workflow": "consumer_onboarding",
  "data": {
    "individual": {
      "given_name": "Jonathan",
      "family_name": "Reyes",
      "national_id": "1234",
      "phone_number": "+639171234567",
      "email": "[email protected]",
      "date_of_birth": "1979-07-30",
      "ip_address": "203.87.128.100",
      "address": {
        "street_address": "123 Rizal Avenue",
        "locality": "Portland",
        "major_admin_division": "OR",
        "postal_code": "85142",
        "country": "US"
      }
    }
  }
}'

Request schema

Top-level fields

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.

"APP-987654"

timestamp

String

Required

Timestamp when evaluation was initiated.

"2025-05-18T02:09:25Z"

workflow

String

Required

RiskOS™ workflow name configured in your environment.

"business_onboarding"

data

Object

Required

Main payload containing business and individual information.

individual

Object

Required

Primary identity object containing individual's information.

See individual schema below.


individual fields

Validation rules & accuracy guidance

These rules ensure RiskOS™ has enough information to perform a reliable identity match.

Identity Verification Requirements

At least ONE of the following combinations must be provided:

  • Name + Date of Birth
    • given_name + family_name + date_of_birth
  • Name + Phone
    • given_name + family_name + phone_number
  • Name + Address
    • given_name + family_name + address
  • National ID (Standalone)
    • national_id (can be provided alone or with other fields)
    • U.S.: Full SSN/TIN or last 4 digits of SSN
    • Other countries: Full government-issued ID
Accuracy Guidance

More PII fields = higher matching accuracy and coverage. Recommended combinations:

  • Best Accuracy
    • national_id (full SSN/TIN) + given_name / family_name + date_of_birth + phone_number + address
  • Better Accuracy
    • given_name / family_name + date_of_birth + phone_number + address
  • Good Accuracy
    • given_name / family_name + any two additional fields
  • Minimum Viable
    • given_name / family_name + one additional field
    • OR national_id alone (last 4 SSN requires additional fields for verification)
    • OR phone_number + date_of_birth
FieldTypeRequiredDescriptionExample
given_nameStringConditionally RequiredFirst name of the individual."Jonathan"
family_nameStringConditionally RequiredLast name of the individual."Reyes"
national_idStringConditionally RequiredGovernment-issued ID (last 4 SSN for U.S., full ID for others)."1234"
date_of_birthStringConditionally RequiredDate of birth in YYYY-MM-DD format."1979-07-30"
emailStringOptionalIndividual’s email address."[email protected]"
phone_numberStringConditionally RequiredPhone number in E.164 format."+639171234567"
ip_addressStringOptionalIP address in IPv4 or IPv6 format."203.87.128.100"
addressObjectConditionally RequiredResidential address of the individual.See address schema below.

address

FieldTypeRequiredDescriptionExample
street_addressStringRequiredStreet name and number."123 Rizal Avenue"
localityStringRequiredCity or locality."Portland"
major_admin_divisionStringRequiredState, province, or region."OR"
postal_codeStringRequiredPostal or ZIP code."85142"
countryStringRequiredTwo-letter ISO 3166-1 alpha-2 country code."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": "APP-987654",
  "workflow": "api_individual_onboarding",
  "workflow_id": "fae769dc-832f-4619-a386-54873b8861e5",
  "workflow_version": "65.1.0",
  "eval_source": "API",
  "eval_id": "c9e53a0f-35f4-4d18-bf26-ec1788c9f47a",
  "eval_start_time": "2025-11-17T20:03:49.123613925Z",
  "eval_end_time": "2025-11-17T20:03:49.686548734Z",
  "decision": "ACCEPT",
  "decision_at": "2025-11-17T20:03:49.686428264Z",
  "status": "CLOSED",
  "sub_status": "Accept",
  "tags": [
    "low_id_coverage",
    "manual_review_required"
  ],
  "notes": "",
  "review_queues": [
    "kyc-apac-philippines"
  ],
  "data_enrichments": [
    {
      "enrichment_name": "Socure KYC PROD SBX",
      "enrichment_endpoint": "https://sandbox.socure.com/api/3.0/EmailAuthScore",
      "enrichment_provider": "Socure",
      "status_code": 200,
      "request": {
        "city": "Danbury",
        "consentTimestamp": "2025-11-17T20:03:48.252000Z",
        "country": "US",
        "countryOfOrigin": "US",
        "customerUserId": "custom-customer_user_id",
        "date_of_birth": "1958-01-31",
        "firstName": "Ananda",
        "gender": "Male",
        "homeNumber": "+1-203-798-6508",
        "mobileNumber": "+12037986508",
        "modules": [
          "kyc"
        ],
        "nationalId": "700-01-3784",
        "parentTxnId": "bcbb1fef-c125-42ea-a059-aee00381835f",
        "physicalAddress": "2 Moran Ave",
        "physicalAddress2": "Address line 2",
        "riskOSId": "Effectiv-Test-kyc-1763409828252",
        "state": "CT",
        "surName": "test",
        "userConsent": true,
        "userId": "data-individual-id",
        "workflow": "api_individual_onboarding",
        "zip": "06810"
      },
      "response": {
        "customerProfile": {
          "customerUserId": "custom-customer_user_id",
          "userId": "data-individual-id"
        },
        "kyc": {
          "fieldValidations": {
            "city": 0.99,
            "dob": 0.99,
            "firstName": 0.99,
            "mobileNumber": 0.99,
            "ssn": 0.99,
            "state": 0.99,
            "streetAddress": 0.99,
            "surName": 0.99,
            "zip": 0.99
          },
          "reasonCodes": [
            "I919"
          ],
          "socureId": "0318d3c3-541c-4090-8250-dec3e41efa89",
          "sourceAttribution": [
            "Credit",
            "Government",
            "Education"
          ]
        },
        "referenceId": "8d92942e-af40-47b3-9b19-3f13456f401b"
      },
      "is_source_cache": false,
      "total_attempts": 1
    }
  ],
  "computed": {
    "CONDITION": true,
    "socure_kyc_response": {
      "__third_party_name__": "Socure KYC PROD SBX",
      "customerProfile": {
        "customerUserId": "custom-customer_user_id",
        "userId": "data-individual-id"
      },
      "kyc": {
        "fieldValidations": {
          "city": 0.99,
          "dob": 0.99,
          "firstName": 0.99,
          "mobileNumber": 0.99,
          "ssn": 0.99,
          "state": 0.99,
          "streetAddress": 0.99,
          "surName": 0.99,
          "zip": 0.99
        },
        "reasonCodes": [
          "I919"
        ],
        "socureId": "0318d3c3-541c-4090-8250-dec3e41efa89",
        "sourceAttribution": [
          "Credit",
          "Government",
          "Education"
        ]
      },
      "referenceId": "8d92942e-af40-47b3-9b19-3f13456f401b"
    }
  },
  "aggregations": { },
  "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, along 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)

These fields describe the outcome of an evaluation and any routing applied by the workflow.

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-11-17T20:03:49.686428264Z"
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.Not returned
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.["low_id_coverage", "manual_review_required"]
review_queuesArray of StringsLists any manual review queues the evaluation was sent to. Empty when the case is fully auto-resolved without human review.["kyc-apac-philippines"]
notesStringFreeform text field for analyst or system comments about the evaluation. Often used to capture manual review rationale or investigation context.""

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 enumInternal RiskOS™ evaluation lifecycle state.

Possible values:
evaluation_completed
evaluation_paused
evaluation_in_progress
"evaluation_completed"
statusString enumCase-level status of the evaluation.

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.
"APP-987654"
eval_idString (UUID)RiskOS-generated unique identifier for the evaluation."c9e53a0f-35f4-4d18-bf26-ec1788c9f47a"
workflowStringName of the workflow executed."api_individual_onboarding"
workflow_idString (UUID)Unique identifier for the workflow run."fae769dc-832f-4619-a386-54873b8861e5"
workflow_versionStringVersion of the executed workflow."65.1.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-11-17T20:03:49.123613925Z"
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-11-17T20:03:49.686548734Z"
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. Each object corresponds to a module executed as part of the Consumer Onboarding workflow.

FieldTypeDescriptionExample
enrichment_nameStringName of the enrichment executed."Socure KYC PROD SBX"
enrichment_providerStringProvider of the enrichment."Socure"
status_codeIntegerHTTP status returned by the enrichment call.200
requestObjectProvider request payload (for observability and debugging).See request schema below.
responseObjectNormalized enrichment response.See response schema below.
is_source_cacheBooleanIndicates whether cached data was used.false
total_attemptsIntegerNumber of attempts made to retrieve the data.1

request fields

FieldTypeDescriptionExample
countryStringISO 3166-1 alpha-2 country code."US"
firstNameStringConsumer’s given name."Jonathan"
surNameStringConsumer’s family name."Reyes"
nationalIdStringGovernment-issued identifier (SSN, national ID, etc.)."786-00-1234"
dobString (YYYY-MM-DD)Consumer’s date of birth."1979-07-30"
streetAddressStringStreet address of residence."123 Rizal Avenue"
cityStringCity of residence."Portland"
stateStringState, province, or region."OR"
zipStringPostal or ZIP code."85142"
ipAddressStringIP address observed during the session."203.87.128.100"
phoneStringPhone number in E.164 format."+639171234567"
emailStringConsumer’s email address."[email protected]"

response fields

FieldTypeDescriptionExample
referenceIdString (UUID)Unique identifier assigned to each enrichment after a RiskOS™ workflow is finalized."f3863a33-69ca-43c2-90e0-8b4344a41a09"
socureIdString (UUID)Socure’s persistent identity ID. Used for Graph Intelligence correlations."ab06216f-b88b-4be8-8075-933bb5c2303c"
verifyplusObjectResults from the Verify Plus evaluation.See verifyplus schema below.

verifyplus fields

FieldTypeDescriptionExample
reasonCodesArray of StringsDecision reasons (e.g., "I919", "R948").["I919", "R948"]
fieldValidationsObjectConfidence scores (0–1) for each submitted field.{"nationalId": 0.01}
sourceAttributionArray of StringsData sources used in the verification process.["Credit", "Property Tax"]
bestMatchedEntityObjectThe best identity match returned.See bestMatchedEntity schema below.

bestMatchedEntity fields

FieldTypeDescriptionExample
firstNameStringResolved first name."Jonathan"
middleNameString or NullResolved middle name.null
surNameStringResolved last name."Reyes"
suffixString or NullSuffix (e.g., "Jr.").null
ssnStringResolved SSN or national ID."786-00-1234"
ssnIssuedStringYear or range when SSN was issued."1999-2000"
dobString (YYYY-MM-DD)Resolved date of birth."1999-07-05"
mobileNumberStringResolved phone number."+13475550100"
emailAddressStringResolved email address."[email protected]"
deceasedDateString or NullDate of death, if applicable.null
normalizedAddressObjectStandardized address.See schema below.
associatedPhoneNumbersArray of ObjectsPhones linked to the identity.See schema below.
associatedAddressesArray of ObjectsAddresses linked to the identity.See schema below.
associatedEmailsArray of ObjectsEmails linked to the identity.See schema below.

normalizedAddress fields

FieldTypeDescriptionExample
streetAddressStringThe street address of the normalized input address."123 Rizal Avenue"
cityStringThe city in which the normalized input address is located."Portland"
stateStringThe state in which the normalized input address is located."OR"
zipStringThe ZIP code in which the normalized input address is located"97223"
countyStringThe country in which the normalized input address is located"US"

associatedPhoneNumbers fields

FieldTypeDescriptionExample
phoneNumberStringThe phone number in E.164 format, including country code."+12063588927"
firstSeenDateString (YYYY-MM-DD)The date the phone number was first observed."2010-03-01"
lastSeenDateString (YYYY-MM-DD)The timestamp of the most recent presentation of the data."2023-05-08"
isMatchedBooleanIndicates whether the phone number was matched to the best-matched entity.true
isLatestBooleanIndicates whether this phone number is the most recent (current) number associated with the best-matched entity.true

associatedAddresses fields

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.true
isLatestBooleanIndicates whether this address is the most recent (current) address associated with the best-matched entity.false

associatedEmails fields

FieldTypeDescriptionExample
emailAddressStringThe email address associated with the best-matched entity."[email protected]"
firstSeenDateString (YYYY-MM-DD)The date the email address was first observed."1999-09-12"
lastSeenDateString (YYYY-MM-DD)The date of the most recent presentation of the data."2010-09-13"
isMatchedBooleanIndicates whether the email was matched to the best-matched entity.true
isLatestBooleanIndicates whether this is the most recent (current) associated email.false

Apply routing logic

Apply the decision parameter to your application:

if response.get("decision") == "ACCEPT":
    proceed_with_onboarding()
elif response.get("decision") == "REVIEW":
    trigger_manual_review(queue=response.get("review_queues", ["Default"])[0])
elif response.get("decision") == "REJECT":
    reject_application(reason="Identity verification failed")
else:
    log_warning("Unknown decision value", response.get("decision"))

Use RiskOS™ logs to trace enrichment execution and reason code evaluation logic. For auditability, log the full response payload and decision scores per field.


Best practices for integration and maintenance

  • Always validate API inputs against the expected schema.
  • Use sandbox mode and known test identities during QA.
  • Enable and monitor reasonCodes and sourceAttribution for transparency and auditability.
  • Use decision, tags, and review_queues to drive routing logic in your RiskOS™ workflow.
  • Log and store evaluation payloads and responses for compliance, dispute resolution, and improvement.

Other relevant API endpoints exposed via RiskOS™

RiskOS™ supports a range of identity verification use cases through modular API endpoints. These modules can be configured independently or combined within workflows to meet regional compliance requirements, fraud detection strategies, and onboarding needs.


Validation checklist

Test coverage

Known good identities → ACCEPT
Bad/mismatched identities → REJECT or REVIEW
Edge cases logged + reviewed

Schema & error handling

Fields match schema across environments
Errors are structured and retryable
Use exponential fallback with jitter for resubmissions

Logging & observability

Log full request/response
Include correlation IDs
Redact secrets from logs

Exception routing

Escalation paths defined for REVIEW
Support team has access to logs + scores