DocV is asynchronous: the consumer completes capture on their own device with no further backend interaction, so the original API response can't carry the outcome. Once capture finishes, RiskOS™ resumes the paused evaluation and produces a decision. You receive that result in one of two ways.

## Two ways to receive results

| Method | How it works | Use it when |
| --- | --- | --- |
| **[Webhooks](https://help.socure.com/riskos/docs/docv-receive-results#method-1-webhooks-recommended)** (recommended) | RiskOS™ pushes the result to your endpoint in real time as the evaluation completes. | You can host a public endpoint and want results delivered automatically. |
| **[GET request](https://help.socure.com/riskos/docs/docv-receive-results#method-2-poll-with-a-get-request)** (polling) | Your backend requests the evaluation's current state on demand. | You can't host a webhook endpoint, or you need to reconcile a missed webhook or confirm the decision before acting. |

Both methods return the same result schema. Webhooks are the recommended path; use a GET request as a fallback or to reconcile state. The [Decision handling](https://help.socure.com/riskos/docs/docv-receive-results#decision-handling) steps that follow apply no matter which method you use.

## Method 1: Webhooks (recommended)

DocV delivers results through two webhook events. Subscribe to both for full visibility, then act on the final decision.

### Subscribe to webhooks

Configure your webhook endpoint and event subscriptions in the RiskOS™ Dashboard before you run an evaluation. Subscribe to two events:

- **`evaluation_completed`** — fires when the evaluation finishes; carries the final decision and DocV results. Subscribe to this if you only need the outcome for decision-making.
- **`case_notes_added`** — fires as the consumer moves through capture; carries lightweight progress notes. Subscribe to this as well if you want progress visibility.

To subscribe:

1. In the RiskOS™ Dashboard, go to **Developer Workbench > Webhooks**.
2. Create (or edit) a webhook and subscribe to the **`case_notes_added`** and **`evaluation_completed`** event types.
3. Click **Continue to Test**, then **Save** to begin receiving real-time notifications.

For endpoint configuration, retries, and signature verification, see [Configure Webhooks in RiskOS™](https://help.socure.com/riskos/docs/webhooks). For the exhaustive event and payload schemas, see the [API Reference](https://help.socure.com/riskos/reference).

### Workflow completion

The paused evaluation resumes only on a **terminal** capture event. Intermediate progress events leave the workflow paused.

| Capture outcome | Resumes workflow? | Result |
| --- | --- | --- |
| `Session Complete` | Yes | Capture finished; the workflow continues and produces a decision. |
| `Session Expired` | Yes | Link expired; the workflow resumes with a terminal-negative outcome. |
| `Consent Declined` | Yes | Consumer declined consent; the workflow resumes with a terminal-negative outcome. |
| Progress events (app opened, images uploaded) | No | Indicators only; the workflow stays paused. |

### Capture progress: `case_notes_added`

These lightweight events track where the consumer is in the capture flow. They do **not** contain PII.

| `data.notes` value | When it fires |
| --- | --- |
| `Capture App Opened` | Consumer opened the Capture App. |
| `Document Front Uploaded` | Front of the document uploaded. |
| `Document Back Uploaded` | Back of the document uploaded. |
| `Document Selfie Uploaded` | Selfie uploaded. |
| `Documents Upload Successful` | All required images uploaded. |
| `Session Complete` | Capture and upload completed. |
| `Consent Declined` | Consumer declined consent (terminal). |
| `Session Expired` | Capture link expired (terminal). By default, the link expires 24 hours after it is created. |

#### Terminal note classification:
Treat **Consent Declined** and **Session Expired** as **terminal-negative**, and **Session Complete** and **Documents Upload Successful** as **terminal-positive**.

#### Final decision: `evaluation_completed`

This event fires when the evaluation finishes. The top-level `data.decision` (uppercase `ACCEPT`, `REVIEW`, `REJECT`) is the **workflow decision**. The DocV module decision and extracted data are nested inside `data.data_enrichments`.

A complete `evaluation_completed` payload includes workflow metadata, the `SocureDocRequest` enrichment, and the `Socure Document Verification` enrichment with extracted `documentData` and the `digitalIntelligence.device` block.

### Automate terminal handling
You can configure your workflow to act on a terminal capture outcome automatically, without manual review. Add a [Condition step](https://help.socure.com/riskos/docs/create-and-edit) or [Decision Rules step](https://help.socure.com/riskos/docs/decision-rules) after the Document Request enrichment:

- **Auto-cancel** — check for a `Session Expired` or `Consent Declined` outcome, then route to a [Decision step](https://help.socure.com/riskos/docs/decision) configured with a **Cancel** outcome.
- **Auto-resubmit** — check for a `resubmit` enrichment decision, then route to a Decision step configured with a **Resubmit** outcome to prompt the consumer to recapture without a manual review.
