> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lendflow.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Ocrolus Document Verification

## Ocrolus Document Verification

Ocrolus Document Verification analyzes application bank documents for fraud signals and document authenticity. The Workflow Builder block ID is `ocrolus_doc_verification`, and it supports business entities only.

<Note>
  The block is registered against the shared `ocrolus_cfa` service entitlement, which is also used by the Ocrolus cash-flow block. Inside the Document Verification block, the operation presented and requested is `ocrolus_fraud_signals`.
</Note>

## Requirements

| Application field | Requirement | Notes |
| - | - | - |
| Bank statement files | Conditional | Required when supported Plaid data is unavailable; used to create or select the Ocrolus book. |
| Supported Plaid data | Conditional | Required when bank statement files are unavailable; used to create or select the Ocrolus book. |

## Run Ocrolus Document Verification

Call [Enrich Business Credit Application](/api-reference/workflow-management/enrich-business-credit-application) with the Fraud Signals service. For uploaded bank statements, the request shape is:

```json theme={"system"}
{
  "provider": ["ocrolus_fraud_signals"],
  "options": {
    "bookOption": "bank_statements",
    "bookClass": "instant",
    "bookVersion": 1
  }
}
```

The operation is asynchronous. Retrieve commercial data for `ocrolus_fraud_signals`. Its lifecycle appears at `statuses.ocrolus_fraud_signals`; stored book data includes the Fraud Signals result for the selected Ocrolus book.

## Data Orchestration availability

Ocrolus Fraud Signals is available to Data Orchestration through `ocrolus_fraud_signals` conditions, including authenticity score and unauthentic-document checks. If prerequisite book data is obtainable from bank statements or supported Plaid data, Data Orchestration can request the asynchronous Ocrolus prerequisite and pause until it completes.

The Document Verification block's shared `ocrolus_cfa` registration controls block availability; it does not rename Fraud Signals to CFA or make the displayed result a cash-flow-analysis response.

## What the service returns

| Response area | Meaning |
| - | - |
| Document analysis | One result per uploaded document, including processing status and whether the PDF is image based. |
| Form analysis | Ocrolus's detected form type and authenticity analysis for each form. |
| Authenticity | Score, model version, and reason codes for a form. |
| Signals | Provider-detected document signals and supporting visualizations, when present. |

## Representative response

```json theme={"system"}
[
  {
    "detect_status": "COMPLETED",
    "uploaded_doc_type": "BANK_STATEMENT",
    "uploaded_doc_uuid": "33eb5e94-80f7-488b-90c7-bf5ff6342030",
    "is_image_based_pdf": false,
    "form_analysis": [
      {
        "form_type": "BANK_STATEMENT",
        "form_uuid": "33eb5e94-80f7-488b-90c7-bf5ff6342030",
        "signals": [],
        "visualizations": [],
        "form_authenticity": {
          "score": 90,
          "version": "1.0",
          "reason_codes": []
        }
      }
    ]
  }
]
```

## Response attributes

| Attribute | Type | Meaning | Possible values or units | When returned |
| - | - | - | - | - |
| `[]` | Array | Stored `doc_analysis` results for the selected book. | Zero or more document objects. | After Fraud Signals completes. |
| `[].detect_status` | String | Ocrolus document-analysis status. | `COMPLETED` in the current success fixture; other values are provider controlled. | For each document. |
| `[].uploaded_doc_type` | String | Type assigned to the uploaded document. | For example, `BANK_STATEMENT`. | For each document. |
| `[].uploaded_doc_uuid` | String | Ocrolus document identifier. | UUID. | For each document. |
| `[].is_image_based_pdf` | Boolean | Whether the uploaded PDF is image based. | `true` or `false`. | For each document. |
| `[].form_analysis` | Array | Forms identified within the document. | Zero or more form objects. | For each document. |
| `[].form_analysis[].form_type` | String | Detected form type. | Provider-controlled type. | For each detected form. |
| `[].form_analysis[].signals` | Array | Fraud or authenticity signals. | Zero or more provider objects. | For each detected form. |
| `[].form_analysis[].form_authenticity.score` | Number | Form authenticity score. | Numeric score; Data Orchestration treats a non-null score below `50` as an unauthentic document. | When scored. |
| `[].form_analysis[].form_authenticity.version` | String | Authenticity-model version. | Provider version string. | When scored. |
| `[].form_analysis[].form_authenticity.reason_codes` | Array | Provider reasons supporting the score. | Zero or more provider codes. | When supplied. |

## Errors and statuses

* Missing bank statements and supported Plaid data make the Ocrolus prerequisite unobtainable.
* A queued or started status does not mean document analysis is complete. Wait for a terminal lifecycle status and stored Fraud Signals data.
* An Ocrolus book or provider error is recorded in the service lifecycle; the response array can remain unavailable when processing fails.
* The Data Orchestration unauthentic-document condition returns `true` when any non-null form authenticity score is below `50`.

## FAQ

<AccordionGroup>
  <Accordion title="Why is this block associated with ocrolus_cfa?">
    The registered Document Verification block shares the `ocrolus_cfa` service entitlement with the Ocrolus CFA block. The Document Verification interface itself runs and displays `ocrolus_fraud_signals`.
  </Accordion>

  <Accordion title="Does this use the document-verification upload endpoint?">
    No. Ocrolus uses application bank statements or supported Plaid data and stores results with the Ocrolus book and commercial data.
  </Accordion>

  <Accordion title="Can Ocrolus Fraud Signals run in Data Orchestration?">
    Yes. Data Orchestration exposes Fraud Signals conditions and can fetch the asynchronous prerequisite when suitable source data exists.
  </Accordion>
</AccordionGroup>
