## Before you start

Make sure your RiskOS™ environment is provisioned with:

- [A workflow configured](https://help.socure.com/riskos/docs/email-risk-riskos-setup) for the **Email Risk** enrichment.
- [Regional support coverage](https://help.socure.com/riskos/docs/email-risk-overview) for the **Email Risk** enrichment.

### Choose your environment

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

```undefined
https://riskos.sandbox.socure.com/api/evaluation
```

- **No real customer data**
- **Free testing environment**
- **Unlimited API calls**

```undefined
https://riskos.socure.com/api/evaluation
```

- **Real customer data**
- **API usage charges apply**
- **Connects to live data services**

### Get an API key

1. In the Sandbox RiskOS™ Dashboard, go to [**Developer Workbench > API Keys**](https://riskos.sandbox.socure.com/developers/api-keys).
2. Copy your API key securely.

1. In the Production RiskOS™ Dashboard, go to [**Developer Workbench > API Keys**](https://riskos.socure.com/developers/api-keys).
2. Copy your API key securely.

## How it works

1. Send a `POST` request to `/api/evaluation` with at least an **email address**.
2. Socure runs the request through the configured RiskOS™ workflow and applies the Email Risk enrichment.
3. Receive a decision (`ACCEPT`, `REVIEW`, or `REJECT`) and supporting metadata.
4. Apply your routing logic based on thresholds, correlation levels, and risk signals.

## Start a new Risk Evaluation

### Endpoint
SandboxProduction

```http
POST https://riskos.sandbox.socure.com/api/evaluation
```

```http
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:

```http
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

```json
{
  "id": "APP-123456",
  "timestamp": "2025-08-27T06:10:54.298Z",
  "workflow": "consumer_onboarding",
  "data": {
    "individual": {
      "given_name": "Guillermo",
      "family_name": "McNeil",
      "email": "guillermo.mcneil@example.com",
      "address": {
        "country": "US"
      }
    }
  }
}
```

```curl
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": "APP-123456",
    "timestamp": "2025-08-27T06:10:54.298Z",
    "workflow": "consumer_onboarding",
    "data": {
      "individual": {
        "given_name": "Guillermo",
        "family_name": "McNeil",
        "email": "guillermo.mcneil@example.com",
        "address": {
          "country": "US"
        }
      }
    }
  }'
```

### Request schema

#### Top-level fields

> 📘
>
> **Note**:
>
> Email Risk requires only `data.individual.email` to return a risk score, but for improved score accuracy we recommend including the optional fields for Email Risk in the request.

| Field | Type | Required | Description | Example |
| --- | --- | --- | --- | --- |
| `id` | String | Required | Required, customer-defined unique identifier for the request.<br>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-123456"` |
| `timestamp` | String | Required | RFC 3339 timestamp indicating when the evaluation was initiated. | `"2025-08-27T06:10:54.298Z"` |
| `workflow` | String | Required | RiskOS™ workflow name configured in your environment. <br>**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. | `"consumer_onboarding"` |
| `data` | Object | Required | Main payload for the RiskOS™ workflow containing all request details. |  |
| → `individual` | Object | Required | Individual identity object containing personal and address information. | See `individual` schema below. |

#### `individual` fields

| Field | Type | Required | Description | Example |
| --- | --- | --- | --- | --- |
| `email` | String | Required | The consumer’s email address. | `"guillermo.mcneil@example.com"` |
| `given_name` | String | Optional | First name. Improves correlation accuracy. | `"Guillermo"` |
| `family_name` | String | Optional | Last name. Improves correlation accuracy. | `"McNeil"` |
| `address` | Object | Optional | Individual address fields. | See `address` schema below. |

#### `address` fields

| Field | Type | Required | Description | Example |
| --- | --- | --- | --- | --- |
| `line_1` | String | Optional | Street address line 1. | `"123 Main Street"` |
| `line_2` | String | Optional | Street address line 2. |  |
| `locality` | String | Optional | City or locality. | `"Miami"` |
| `major_admin_division` | String | Optional | State, province, or region (ISO 3166-2 format). | `"FL"` |
| `postal_code` | String | Optional | ZIP or postal code (hyphens optional). | `"33101"` |
| `country` | String | Optional | Country in ISO 3166-1 alpha-2 format (e.g., `US`, `CA`). | `"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.

```json
{
  "id": "APP-123456",
  "eval_id": "6dc8f39c-ecc3-4fe0-9283-fc8e5f99e816",
  "decision": "REVIEW",
  "data_enrichments": [
    {
      "enrichment_name": "Socure Email Risk",
      "enrichment_provider": "Socure",
      "status_code": 200,
      "request": {
        "email": "guillermo.mcneil@example.com",
        "given_name": "Guillermo",
        "family_name": "McNeil",
        "address": {
          "country": "US"
        },
        "modules": [
          "emailrisk"
        ]
      },
      "response": {
        "referenceId": "f3863a33-69ca-43c2-90e0-8b4344a41a09",
        "nameEmailCorrelation": {
          "reasonCodes": [
            "I557",
            "R551"
          ],
          "score": 0.99
        },
        "emailRisk": {
          "reasonCodes": [
            "I520",
            "R563"
          ],
          "score": 0.887,
          "scores": [
            {
              "name": "Email Risk Model (US) Norm",
              "version": "7.0",
              "score": 0.887
            }
          ]
        }
      }
    }
  ]
}
```

### 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

| 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.

| Field | Type | Description | Example |
| --- | --- | --- | --- |
| `decision` | String (enum) | Final evaluation result.<br>Possible values:<br>• `ACCEPT`<br>• `REVIEW`<br>• `REJECT`<br>**Note**: The fields returned can be customized to fit your integration or business needs. | `"REVIEW"` |
| `decision_at` | String `<Date-Time>` | RFC 3339 timestamp when the decision was finalized. | `"2025-10-01T09:12:44.387Z"` |
| `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.61` |
| `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. | `["manual_review_required"]` |
| `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. | `["kyc-us"]` |
| `notes` | String | Freeform text field for analyst or system comments about the evaluation. Often used to capture manual review rationale or investigation context. | `"Review triggered due to elevated risk indicators"` |

### 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™.<br>Possible values:<br>• `evaluation_completed`<br>• `evaluation_paused`<br>• `evaluation_in_progress` | `"evaluation_completed"` |
| `status` | String (enum) | Indicates the current state of an evaluation or case.<br>Possible values:<br>• `OPEN`<br>• `CLOSED` | `"CLOSED"` |
| `sub_status` | String | Provides additional detail about the evaluation status.<br>Example values:<br>• `Under Review`<br>• `Pending Verification`<br>• `Accept`<br>• `Reject` | `"Under Review"` |

### 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™.<br>**Note**: This is _customer-generated_. | `"APP-123456"` |
| `eval_id` | String (UUID) | RiskOS™-generated unique identifier for the evaluation. | `"6dc8f39c-ecc3-4fe0-9283-fc8e5f99e816"` |
| `workflow` | String | Name of the workflow executed. | `"consumer_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.<br>Possible values:<br>• `API`: Request submitted via the Evaluation API.<br>• `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 | Product name. | `"Socure Email Risk"` |
| `enrichment_provider` | String | Provider. | `"Socure"` |
| `status_code` | Integer | HTTP status code. | `200` |
| `request` | Object | Payload sent to provider. | See `request` schema below. |
| `response` | Object | Payload returned by provider. | See `response` schema below. |
| `is_source_cache` | Boolean | Response served from cache. | `false` |
| `total_attempts` | Integer | Number of attempts. | `1` |

#### `request` fields

| Field | Type | Description | Example |
| --- | --- | --- | --- |
| `email` | String | Email address submitted for an evaluation. | `"guillermo.mcneil@example.com"` |
| `given_name` | String | First name of the individual submitting the information. | `"Guillermo"` |
| `family_name` | String | Last name (surname) of the individual submitting the information. | `"McNeil"` |
| `address` | Object | Individual address fields. |  |
| → `country` | String | Country code in ISO 3166-1 alpha-2 format. | `"US"` |
| `modules` | Array | List of enrichment modules requested for evaluation. | `[
  "emailrisk"
]` |

#### `response` fields

| Field | Description | Type | Example |
| --- | --- | --- | --- |
| `referenceId` | Unique identifier assigned to each enrichment after a RiskOS™ workflow is finalized. | String (UUID) | `"f3863a33-69ca-43c2-90e0-8b4344a41a09"` |
| `nameEmailCorrelation` | Provides correlation score and associated reason codes for name–email matching. | Object | See `nameEmailCorrelation` schema below. |
| `emailRisk` | Contains email risk assessment scores and corresponding reason codes. | Object | See `emailRisk` schema below. |

#### `nameEmailCorrelation` fields

| Field | Type | Description | Example |
| --- | --- | --- | --- |
| `score` | Number | Correlation score between the provided name and email address. Higher values indicate stronger association. | `0.99` |
| `reasonCodes` | Array of Strings | List of reason codes contributing to the name–email correlation result. | `["I556", "I520"]` |

The email correlation value is a number between `0.01` and `0.99` that indicates the strength of the relationship between the email address and the consumer's `given_name` and `family_name`.

#### `emailRisk` fields

| Field | Type | Description | Example |
| --- | --- | --- | --- |
| `reasonCodes` | Array of Strings | List of reason codes indicating factors influencing the email risk score. | `["I520", "R563"]` |
| `score` | Number | Primary email risk score between `0.001–0.999`. A higher score indicates a greater likelihood of fraud. | `0.887` |
| `scores` | Array of Objects | Email risk model scores returned by the provider. |  |
| → `name` | String | Name of the scoring model used. | `"Email Risk Model (US) Norm"` |
| → `version` | String | Version of the scoring model. | `"7.0"` |
| → `score` | Number | Confidence score between `0.001–0.999`. | `0.887` |
