- Overview
- Financial Crime Compliance (FCC) solutions
- Loan Origination Solution
RPA Integration Contracts that connect the Quality Control (QA/QC) pipeline to your core banking, loan origination, and document management systems, with each contract type's schema and how to register implementations in FINSProcessRegistry.
RPA Integration Contracts are the extensibility framework that connects the QA/QC processing pipeline to your institution's core banking, loan origination, and document management systems. Each contract type defines the input and output schema for a specific integration point in the workflow.
You implement each contract as an Orchestrator process and register it in the FINSProcessRegistry Data Fabric table. The Maestro process discovers these registrations at runtime and invokes the appropriate process for each step.
There are no pre-built connectors included with QA/QC. Your institution builds the RPA implementations against your specific systems (Symitar, Encompass, OnBase, or any other), and the contract schemas provide the standardized interface they must satisfy. This separation keeps the orchestration logic independent of any specific banking system.
Overview
QA/QC requires data from multiple banking systems that are unique to your institution. To connect it to your systems, RPAs must be built that:
- Call the Maestro process API endpoint with the loan identifier and loan type to start processing
- Pull document data from the systems of record and write to Orchestrator storage buckets
- Pull JSON/XML data from the systems of record
- Transform data into the standardized formats defined in this document
RPA registry pattern
Register your data integration RPAs with the solution by placing their RPA type, path, and related details into the Data Fabric FINSProcessRegistry table. The Maestro process invokes these RPAs by name during execution.
FINSProcessRegistry table schema
| Field | Type | Description |
|---|---|---|
Id | UNIQUEIDENTIFIER | Internal primary key |
RPAName | NVARCHAR(200) | RPA identifier used for invocation |
DisplayName | NVARCHAR(500) | Human-readable name |
Description | NVARCHAR(2000) | What this RPA does |
OrchestratorFolderPath | NVARCHAR(500) | Orchestrator folder path where the process is deployed |
ProcessName | NVARCHAR(200) | Process name in Orchestrator |
ProcessType | FINSProcessType | Type: DocumentRetrieval, DataRetrieval, DataParse |
RPATypeVersion | NVARCHAR(50) | Version of the contract schema this process implements, for example 1.0 |
EntryPointName | NVARCHAR(200) | Entry point name within the process |
IsActive | BIT | Whether RPA is enabled |
CreatedAt | DATETIMEOFFSET | When RPA was registered |
LastInvokedAt | DATETIMEOFFSET | When RPA was last invoked |
RPA types
| RPAType | Purpose | When invoked |
|---|---|---|
| DocumentRetrieval | Pull the loan's document files and write them to the storage bucket under the provided prefix | After loan trigger |
| DataRetrieval | Pull structured data from core banking, LOS, or other systems | After loan trigger |
| DataParse | Transform/parse retrieved data into standardized formats | After DataRetrieval |
Process Trigger Contract
To start the QA/QC workflow, the customer's dispatcher RPA calls the Maestro process's HTTP API endpoint when a new loan requires processing. UiPath does not provide this dispatcher; your institution builds and maintains it.
Endpoint location
The API trigger is deployed as part of the solution package, at <Solution folder>/Automations/Triggers/API Triggers/LoanQAQC API Trigger. The endpoint URL is available at that location, in the following format:
https://cloud.uipath.com/<org_name>/<tenant_name>/orchestrator_/t/<guid>/agenticprocess
https://cloud.uipath.com/<org_name>/<tenant_name>/orchestrator_/t/<guid>/agenticprocess
Request body
The endpoint accepts a POST request with the following JSON body:
{
"Version": 1,
"SourceLoanId": "LOAN-2025-001234",
"SourceLoanType": "CommercialRealEstate"
}
{
"Version": 1,
"SourceLoanId": "LOAN-2025-001234",
"SourceLoanType": "CommercialRealEstate"
}
Field definitions
| Field | Type | Required | Description |
|---|---|---|---|
Version | integer | Yes | Schema version number (currently 1). Allows for future schema changes without breaking existing integrations. |
SourceLoanId | string | Yes | Unique loan identifier from the Loan Origination System. Used to correlate all data extraction and agent outputs. |
SourceLoanType | string | Yes | Unique loan type identifier from the admin configuration. Used to filter which business rules apply during execution. |
Example request
A complete call, including the headers Orchestrator requires:
curl -X POST \
"https://cloud.uipath.com/<org_name>/<tenant_name>/orchestrator_/t/<guid>/agenticprocess" \
-H "Authorization: Bearer <access_token>" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "X-UIPATH-FolderKey: <folder_key>" \
-d '{
"Version": 1,
"SourceLoanId": "LOAN-2025-001234",
"SourceLoanType": "CommercialRealEstate"
}'
curl -X POST \
"https://cloud.uipath.com/<org_name>/<tenant_name>/orchestrator_/t/<guid>/agenticprocess" \
-H "Authorization: Bearer <access_token>" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "X-UIPATH-FolderKey: <folder_key>" \
-d '{
"Version": 1,
"SourceLoanId": "LOAN-2025-001234",
"SourceLoanType": "CommercialRealEstate"
}'
Where to find each value
| Placeholder | Where to find it |
|---|---|
<org_name>, <tenant_name>, <guid> | Already contained in the endpoint URL. Using the URL as-is is more reliable than assembling it by hand. |
<access_token> | An OAuth 2.0 bearer token. See the authentication implementation note. |
<folder_key> | The key of the Orchestrator folder the solution is deployed to. See the folder scoping implementation note. |
Implementation notes
- Authentication: The endpoint is protected by UiPath Orchestrator authentication and requires a valid OAuth 2.0 bearer token in the
Authorizationheader. The token comes from a Confidential External Application (Admin → External Applications) granted the OrchestratorOR.Jobsscope, whoseclient_idandclient_secretare exchanged for a token via the client-credentials flow. An application already configured for the tenant can be reused. - Folder scoping: The
X-UIPATH-FolderKeyheader tells Orchestrator which deployed folder to start the process in. When the caller is a coded agent or an RPA running on an Orchestrator robot, the robot already runs inside a folder, so this context is supplied automatically at runtime and the header can be omitted. When the caller has no robot context, such as acurlor backend client, or a Studio Web workflow using the Integration Service Orchestrator HTTP Request connector, the folder is passed explicitly using eitherX-UIPATH-FolderKey(folder key) orX-UIPATH-OrganizationUnitId(numeric folder ID). The folder key or ID is shown in Orchestrator under the Solution folder's settings. - Dispatcher responsibility: Your institution builds and maintains the dispatcher RPA or process that monitors the LOS for loan changes and calls the API trigger. UiPath does not provide this dispatcher.
- Idempotency: If the same
SourceLoanIdis submitted multiple times, the solution processes it again. Preventing duplicate submissions is the dispatcher's responsibility.
Document Retrieval RPA Contract
Retrieves the loan's documents from the document repository, including OnBase, FileNet, and SharePoint, and writes them to the Orchestrator storage bucket. QA/QC provides the target bucket and the loan's directory prefix; the RPA uploads every document for the loan under that prefix, preserving each file's own name.
QA/QC then scans the prefix to build the document manifest. There is no separate metadata or index step.
Input fields
| Field | Type | Required | Description |
|---|---|---|---|
version | integer | Yes | Contract version for compatibility checking |
loan_id | string | Yes | Loan identifier for correlation |
target_bucket_name | string | Yes | Orchestrator storage bucket to upload the files to |
target_prefix | string | Yes | The loan's directory prefix within the bucket ({loan_id}-{record_id_prefix}). Upload every document for this loan under this prefix; do not write outside it. |
Input example
{
"version": 2,
"loan_id": "LOAN-2025-001234",
"target_bucket_name": "LoanQAQC",
"target_prefix": "LOAN-2025-001234-a1b2c3d4"
}
{
"version": 2,
"loan_id": "LOAN-2025-001234",
"target_bucket_name": "LoanQAQC",
"target_prefix": "LOAN-2025-001234-a1b2c3d4"
}
Output fields
| Field | Type | Description |
|---|---|---|
version | integer | Contract version, echoed from the input |
loan_id | string | Loan identifier, echoed from the input |
status | enum | Overall outcome: success or failed |
uploaded | array | File names uploaded under target_prefix |
QA/QC reconciles the uploaded list against the files it finds under target_prefix, which remain the source of truth.
An empty uploaded list (no files) is a valid, non-error outcome: QA/QC records that there was nothing to extract or evaluate for the loan and completes the run.
Output example
{
"version": 2,
"loan_id": "LOAN-2025-001234",
"status": "success",
"uploaded": [
"Application_Form.pdf",
"Credit_Report.pdf",
"Appraisal.pdf"
]
}
{
"version": 2,
"loan_id": "LOAN-2025-001234",
"status": "success",
"uploaded": [
"Application_Form.pdf",
"Credit_Report.pdf",
"Appraisal.pdf"
]
}
Data Retrieval RPA Contract
Retrieves raw data from multiple source systems (core banking, LOS, etc.) in a single call and returns it to QA/QC. This RPA returns raw data exactly as it comes from each source system. Data transformation happens in the Data Parse RPA Contract.
Input fields
| Field | Type | Required | Description |
|---|---|---|---|
version | integer | Yes | Contract version for compatibility checking |
loan_id | string | Yes | Loan identifier to retrieve data for |
Input example
{
"version": 1,
"loan_id": "LOAN-2025-001234"
}
{
"version": 1,
"loan_id": "LOAN-2025-001234"
}
Output fields
| Field | Type | Description |
|---|---|---|
version | integer | Schema version for forward compatibility |
loan_id | string | Loan identifier for correlation |
sources[] | array | Array of source data objects |
.friendly_name | string | Logical name for this source (e.g., core, los) |
.source_system | string | Actual system name (e.g., Symitar, Encompass) |
.extraction_timestamp | datetime | When the data was extracted |
.success | boolean | Whether this source was queried successfully |
.custom_data | object | Raw data from source; structure varies by system |
.error_code / .error_message | string | Error details if success is false |
Output example
{
"version": 1,
"loan_id": "LOAN-2025-001234",
"success": true,
"sources": [
{
"friendly_name": "core",
"source_system": "Symitar",
"extraction_timestamp": "2025-12-15T11:00:00Z",
"success": true,
"custom_data": {
"source_loan_id": "7095054-0104",
"loan_record": {
"description": "COMMERCIAL AUTO USED",
"type": 5015,
"id": "0104",
"vin": "FPPFH3D77LABCD751",
"micr_account_number": "20104007095054",
"first_payment_date": "11/10/2025 00:00:00",
"open_date": "10/10/2025 00:00:00",
"maturity_date": "10/10/2030 00:00:00",
"payment_count": 60,
"balance": "30219.88",
"original_balance": "31184",
"payment": "617.48",
"interest_rate": "7",
"ecoa_code": 11,
"credit_reporting_code": 1
},
"pledge_name_records": [
{
"long_name": "OEDIPUS T MANTRA",
"birth_date": "05/09/1980 00:00:00",
"ssn": "241434220",
"address": {
"street": "1174 BOARDWALK",
"city": "EASTLAKE",
"state": "NV",
"zip_code": "68990"
}
}
],
"tracking_30": { "...": "..." },
"tracking_51": { "...": "..." },
"tracking_80": { "...": "..." }
}
},
{
"friendly_name": "los",
"source_system": "Encompass",
"extraction_timestamp": "2025-12-15T11:00:05Z",
"success": true,
"custom_data": {
"loan_number": "LOAN-2025-001234",
"loan_program": "HELOC_VARIABLE",
"approved_amount": 150000.00,
"interest_rate": 7.25,
"credit_score": 742,
"application_notes": "Longtime member requesting kitchen renovation."
}
}
]
}
{
"version": 1,
"loan_id": "LOAN-2025-001234",
"success": true,
"sources": [
{
"friendly_name": "core",
"source_system": "Symitar",
"extraction_timestamp": "2025-12-15T11:00:00Z",
"success": true,
"custom_data": {
"source_loan_id": "7095054-0104",
"loan_record": {
"description": "COMMERCIAL AUTO USED",
"type": 5015,
"id": "0104",
"vin": "FPPFH3D77LABCD751",
"micr_account_number": "20104007095054",
"first_payment_date": "11/10/2025 00:00:00",
"open_date": "10/10/2025 00:00:00",
"maturity_date": "10/10/2030 00:00:00",
"payment_count": 60,
"balance": "30219.88",
"original_balance": "31184",
"payment": "617.48",
"interest_rate": "7",
"ecoa_code": 11,
"credit_reporting_code": 1
},
"pledge_name_records": [
{
"long_name": "OEDIPUS T MANTRA",
"birth_date": "05/09/1980 00:00:00",
"ssn": "241434220",
"address": {
"street": "1174 BOARDWALK",
"city": "EASTLAKE",
"state": "NV",
"zip_code": "68990"
}
}
],
"tracking_30": { "...": "..." },
"tracking_51": { "...": "..." },
"tracking_80": { "...": "..." }
}
},
{
"friendly_name": "los",
"source_system": "Encompass",
"extraction_timestamp": "2025-12-15T11:00:05Z",
"success": true,
"custom_data": {
"loan_number": "LOAN-2025-001234",
"loan_program": "HELOC_VARIABLE",
"approved_amount": 150000.00,
"interest_rate": 7.25,
"credit_score": 742,
"application_notes": "Longtime member requesting kitchen renovation."
}
}
]
}
Data Parse RPA Contract
Transforms raw data from a single source system into the normalized format expected by QA/QC. QA/QC calls this contract once for each source returned by the Data Retrieval RPA Contract.
Input fields
| Field | Type | Description |
|---|---|---|
version | integer | Contract version for compatibility checking |
loan_id | string | Loan identifier for correlation |
friendly_name | string | Logical name for this source (e.g., core, los) |
source_system | string | Actual system name (e.g., Symitar, Encompass) |
extraction_timestamp | datetime | When the data was extracted |
custom_data | object | Raw data from the source system to be parsed/mapped |
Input example
QA/QC passes one source's raw payload at a time. The custom_data structure varies by institution and source system.
{
"version": 1,
"loan_id": "LOAN-2025-001234",
"friendly_name": "core",
"source_system": "Symitar",
"extraction_timestamp": "2025-12-15T11:00:00Z",
"custom_data": {
"source_loan_id": "7095054-0104",
"loan_record": {
"description": "COMMERCIAL AUTO USED",
"balance": "30219.88",
"original_balance": "31184",
"payment": "617.48",
"interest_rate": "7",
"maturity_date": "10/10/2030 00:00:00",
"vin": "FPPFH3D77LABCD751"
},
"pledge_name_records": [
{
"long_name": "OEDIPUS T MANTRA",
"birth_date": "05/09/1980 00:00:00",
"address": {
"street": "1174 BOARDWALK",
"city": "EASTLAKE",
"state": "NV",
"zip_code": "68990"
}
}
],
"tracking_30": {
"vehicle_make": "CHEVROLET",
"vehicle_model": "CAMARO",
"vehicle_vin": "FPPFH3D77LABCD751",
"collateral_value": "27999",
"loan_to_value": "111.375"
}
}
}
{
"version": 1,
"loan_id": "LOAN-2025-001234",
"friendly_name": "core",
"source_system": "Symitar",
"extraction_timestamp": "2025-12-15T11:00:00Z",
"custom_data": {
"source_loan_id": "7095054-0104",
"loan_record": {
"description": "COMMERCIAL AUTO USED",
"balance": "30219.88",
"original_balance": "31184",
"payment": "617.48",
"interest_rate": "7",
"maturity_date": "10/10/2030 00:00:00",
"vin": "FPPFH3D77LABCD751"
},
"pledge_name_records": [
{
"long_name": "OEDIPUS T MANTRA",
"birth_date": "05/09/1980 00:00:00",
"address": {
"street": "1174 BOARDWALK",
"city": "EASTLAKE",
"state": "NV",
"zip_code": "68990"
}
}
],
"tracking_30": {
"vehicle_make": "CHEVROLET",
"vehicle_model": "CAMARO",
"vehicle_vin": "FPPFH3D77LABCD751",
"collateral_value": "27999",
"loan_to_value": "111.375"
}
}
}
Output fields
| Field | Type | Description |
|---|---|---|
success | boolean | Whether parsing completed successfully |
loan_id | string | Loan identifier for correlation |
mapped_data | object | Data mapped to well-known schema fields |
.source | string | Data source identifier |
.source_loan_id | string | Source system loan ID |
.version | string | Data contract version |
.loan_info | object | Core loan information |
..loan_type | string | Type of loan product (e.g., HELOC, AUTO LOAN) |
..loan_application_id | string | Loan application ID |
..app_date | string | Application submission date (format: YYYY-MM-DD) |
..loan_amount | string | Requested loan amount in dollars |
..due_date | string | Due date (format: YYYY-MM-DD) |
Additionally, the mapped_data object may include extra properties depending on your institution's QA/QC rules.
Output example
The output returns data mapped to the well-known schema fields. The available target fields are defined in the Schema Appendix of the Technical Overview.
{
"success": true,
"loan_id": "LOAN-2025-001234",
"friendly_name": "core",
"source_system": "Symitar",
"extraction_timestamp": "2025-12-15T11:00:00Z",
"mapped_data": {
"source": "Symitar",
"source_loan_id": "7095054-0104",
"version": "2.0.0",
"loan_info": {
"loan_description": "COMMERCIAL AUTO USED",
"loan_type": "5015",
"loan_id": "0104",
"account_number": "20104007095054",
"loan_application_id": "7095054-0104",
"app_date": "2025-10-10",
"open_date": "2025-10-10",
"maturity_date": "2030-10-10",
"loan_term": "60",
"loan_amount": "31184.00",
"current_balance": "30219.88",
"monthly_payment": "617.48",
"due_date": "2025-12-10",
"interest_rate": "7.000"
},
"applicant": [
{
"applicant_type": "Main Applicant",
"full_name": "OEDIPUS T MANTRA",
"first_name": "OEDIPUS",
"middle_name": "T",
"last_name": "MANTRA",
"ssn": "241434220",
"date_of_birth": "1980-05-09",
"applicant_street": "1174 BOARDWALK",
"applicant_city": "EASTLAKE",
"applicant_state": "NV",
"applicant_zip": "68990"
}
],
"guarantor": [
{ "guarantor_name": "NICHOLAUS CLAUSE" }
],
"credit_report": [
{
"credit_report_first_name": "OEDIPUS",
"credit_report_last_name": "MANTRA",
"credit_report_request_date": "2025-09-30",
"credit_score": "711"
}
],
"vehicle": {
"vehicle_vin": "FPPFH3D77LABCD751",
"vehicle_make": "CHEVROLET",
"vehicle_model": "CAMARO",
"vehicle_year": "2020",
"collateral_value": "27999.00",
"loan_to_value": "111.375",
"titled_in_state": "FL"
},
"business_info": {
"borrower_entity_name": "MERRY JINGLES LLC",
"aggregate_business_name": "MERRY JINGLES LLC",
"business_risk_rating": "4",
"naics_number": "485310",
"gross_annual_revenue": "120000.00",
"aggregate_total_exposure": "83486.00"
}
}
}
{
"success": true,
"loan_id": "LOAN-2025-001234",
"friendly_name": "core",
"source_system": "Symitar",
"extraction_timestamp": "2025-12-15T11:00:00Z",
"mapped_data": {
"source": "Symitar",
"source_loan_id": "7095054-0104",
"version": "2.0.0",
"loan_info": {
"loan_description": "COMMERCIAL AUTO USED",
"loan_type": "5015",
"loan_id": "0104",
"account_number": "20104007095054",
"loan_application_id": "7095054-0104",
"app_date": "2025-10-10",
"open_date": "2025-10-10",
"maturity_date": "2030-10-10",
"loan_term": "60",
"loan_amount": "31184.00",
"current_balance": "30219.88",
"monthly_payment": "617.48",
"due_date": "2025-12-10",
"interest_rate": "7.000"
},
"applicant": [
{
"applicant_type": "Main Applicant",
"full_name": "OEDIPUS T MANTRA",
"first_name": "OEDIPUS",
"middle_name": "T",
"last_name": "MANTRA",
"ssn": "241434220",
"date_of_birth": "1980-05-09",
"applicant_street": "1174 BOARDWALK",
"applicant_city": "EASTLAKE",
"applicant_state": "NV",
"applicant_zip": "68990"
}
],
"guarantor": [
{ "guarantor_name": "NICHOLAUS CLAUSE" }
],
"credit_report": [
{
"credit_report_first_name": "OEDIPUS",
"credit_report_last_name": "MANTRA",
"credit_report_request_date": "2025-09-30",
"credit_score": "711"
}
],
"vehicle": {
"vehicle_vin": "FPPFH3D77LABCD751",
"vehicle_make": "CHEVROLET",
"vehicle_model": "CAMARO",
"vehicle_year": "2020",
"collateral_value": "27999.00",
"loan_to_value": "111.375",
"titled_in_state": "FL"
},
"business_info": {
"borrower_entity_name": "MERRY JINGLES LLC",
"aggregate_business_name": "MERRY JINGLES LLC",
"business_risk_rating": "4",
"naics_number": "485310",
"gross_annual_revenue": "120000.00",
"aggregate_total_exposure": "83486.00"
}
}
}