Skip to main content

Fenergo Risk API Overview

APIs Referenced
Risk Command
Risk Query

Risk Models and Retrieving by API

At the top level of configuration there is a "Risk Model ID". This ID does not represent the current "Version" of the risk model and at the version level this identifier is referred to as the "parentRiskModelId". There can only be one active version of a risk model. These identifiers are important for performing a calculation because a risk calculation takes parameters to indicate which version of the "Risk Model, Risk Configuration Model and Threshold Model" to use in that calculation.

Get All Risk models

To retrieve back all the configured Risk Models from the API use the following GET REQUEST. In the below example a single risk model and single version is returned but this API returns ALL the risk models and ALL the version of that Model. The "Data" and "Version" objects in the below response are Arrays.

Get All Risk Modeks
HTTP GET REQUEST:
=================
{{baseURL}}/riskquery/api/risk-model

HTTP GET RESPONSE SCHEMA:
========================
{
"data": [
{
"id": "c57334de-9d9e-4953-a271-338199ef00ca",
"versions": [
{
"id": "134b714d-a350-4eb5-aa29-70612bb9c32f",
"parentRiskModelId": "c57334de-9d9e-4953-a271-338199ef00ca",
"versionNumber": 1,
"effectiveFrom": "2021-10-15T00:00:00+00:00",
"effectiveUntil": null,
"publicationDate": "2021-10-15T13:29:03.88+00:00",
"status": "Published",
"name": "KYC Level Calculation Model",
"created": "2021-10-15T13:20:14.641+00:00",
"riskFactorGroups": [
{
"name": "Simplified Due Diligence",
"riskLevelCalculationAlgorithm": "max",
"weight": 1,
"riskFactors": [
{
"name": "approvedRegulator",
"weight": 1,
"overrideScore": null,
"isMandatory": false,
"selectedRiskLevel": null,
"selectedRiskValue": null,
"riskLevelCalculationAlgorithm": "max",
"inputValues": []
},
{
"name": "approvedExchange",
"weight": 1,
"overrideScore": null,
"isMandatory": false,
"selectedRiskLevel": null,
"selectedRiskValue": null,
"riskLevelCalculationAlgorithm": "max",
"inputValues": []
}
],
"childRiskFactorGroups": []
},
{
"name": "Enhanced Due Diligence",
"riskLevelCalculationAlgorithm": "max",
"weight": 1,
"riskFactors": [
{
"name": "areThereDoubtsOfTheVeracityOrAccuracyOfKyc",
"weight": 1,
"overrideScore": null,
"isMandatory": false,
"selectedRiskLevel": null,
"selectedRiskValue": null,
"riskLevelCalculationAlgorithm": "max",
"inputValues": []
},
{
"name": "isTheClientRegisteredOrOperatingInAnEddCountry",
"weight": 1,
"overrideScore": null,
"isMandatory": false,
"selectedRiskLevel": null,
"selectedRiskValue": null,
"riskLevelCalculationAlgorithm": "max",
"inputValues": []
},
{
"name": "doesTheCounterpartyHaveAnOpaqueOwnershipStructure",
"weight": 1,
"overrideScore": null,
"isMandatory": false,
"selectedRiskLevel": null,
"selectedRiskValue": null,
"riskLevelCalculationAlgorithm": "max",
"inputValues": []
},
{
"name": "isThereEvidenceOfSanctionConnections",
"weight": 1,
"overrideScore": null,
"isMandatory": false,
"selectedRiskLevel": null,
"selectedRiskValue": null,
"riskLevelCalculationAlgorithm": "max",
"inputValues": []
},
{
"name": "isThereEvidenceOfHighRiskPePs",
"weight": 1,
"overrideScore": null,
"isMandatory": false,
"selectedRiskLevel": null,
"selectedRiskValue": null,
"riskLevelCalculationAlgorithm": "max",
"inputValues": []
},
{
"name": "isThereEvidenceOfFinancialCrimeAdverseMedia",
"weight": 1,
"overrideScore": null,
"isMandatory": false,
"selectedRiskLevel": null,
"selectedRiskValue": null,
"riskLevelCalculationAlgorithm": "max",
"inputValues": []
},
{
"name": "areTheSofSowDerivedFromAnEddHighRiskCountry",
"weight": 1,
"overrideScore": null,
"isMandatory": false,
"selectedRiskLevel": null,
"selectedRiskValue": null,
"riskLevelCalculationAlgorithm": "max",
"inputValues": []
},
{
"name": "areThereSuspicionsOfAFinancialCrimeRisk",
"weight": 1,
"overrideScore": null,
"isMandatory": false,
"selectedRiskLevel": null,
"selectedRiskValue": null,
"riskLevelCalculationAlgorithm": "max",
"inputValues": []
}
],
"childRiskFactorGroups": []
}
],
"isActive": true,
"signees": [
{
"subject": "b97f38eb-0b4f-429a-bd30-2def4391797f",
"role": null,
"name": null,
"successor": null,
"action": {
"comment": null,
"decision": "Approve",
"created": "2021-10-15T13:29:03.88+00:00"
},
"hasProcessedRequest": true
}
]
}
]
}
],
"messages": null
}

Get Current Active Risk Model

The "Risk Model Id" can be used to retrieve the current "Active" version of that Model by using the following API call. The response will contain the only the current Active Risk Model.

Get Specific Risk Model
HTTP GET URL FORMAT:
====================
{{baseURL}}/riskquery/api/risk-model/{modelId}}

HTTP GET URL FORMAT:
====================
{{baseURL}}/riskquery/api/risk-model/c57334de-9d9e-4953-a271-338199ef00ca

Get Risk Model By Version Number

Users can also get a specific version of the risk Model by Version Number by making the following API Call.

Get Risk Model by Id
HTTP GET URL FORMAT:
====================
{{baseURL}}/riskquery/api/risk-model/{id}/version/{versionNumber}

HTTP GET URL FORMAT:
====================
{{baseURL}}/riskquery/api/risk-model/c57334de-9d9e-4953-a271-338199ef00ca/version/1

Risk Configuration Models and Retrieving by API

Similar to the Risk Model, the Risk Configuration Models has a top level "id". This is the "Risk Configuration Model Id". This ID does not represent the current "Version" of the risk configuration model and at the version level this identifier is referred to as the "parentRiskConfigurationModelId". There can only be one active version of a risk configuration model.

These identifiers are important for performing a calculation because a risk calculation takes this parameter to indicate which version of the "Risk Configuration Model" to use in that calculation.

Get All Risk Configuration Models

To retrieve back all the Risk Configuration Models from the API use the following GET REQUEST. In the below example a single risk configuration model and single version is returned but this API call returns ALL the risk configuration models and ALL the versions. The "Data" and "Version" objects in the below response are Arrays.

Get All Risk Configuration Models
HTTP GET REQUEST:
=================
{{baseURL}}/riskquery/api/risk-configuration

HTTP GET RESPONSE:
========================

{
"data": [
{
"id": "b2099029-500e-44bf-99ab-369ffc1a5a64",
"versions": [
{
"id": "f11ebbbe-8764-476e-af80-987a11d5e4d8",
"parentRiskConfigurationModelId": "b2099029-500e-44bf-99ab-369ffc1a5a64",
"versionNumber": 1,
"effectiveFrom": "2021-10-15T00:00:00+00:00",
"effectiveUntil": null,
"publicationDate": "2021-10-15T13:29:21.636+00:00",
"status": "Published",
"name": "KYC Level Calculation Configuration",
"created": "2021-10-15T13:20:15.082+00:00",
"riskConfigurationCollections": [],
"isActive": true,
"signees": [
{
"subject": "b97f38eb-0b4f-429a-bd30-2def4391797f",
"role": null,
"name": null,
"successor": null,
"action": {
"comment": null,
"decision": "Approve",
"created": "2021-10-15T13:29:21.636+00:00"
},
"hasProcessedRequest": true
}
]
}
]
}
]
}

Get Current Active Risk Configuration Model

The "Risk Configuration Model Id" can be used to retrieve the current "Active" version of that Configuration Model by using the following API call. The response will contain the only the current Active Risk Configuration Model.

Get Current Active Risk Configuration Model
HTTP GET URL FORMAT:
====================
{{baseURL}}/riskquery/api/risk-configuration/{configurationId}}

HTTP GET URL FORMAT:
====================
{{baseURL}}/riskquery/api/risk-configuration/b2099029-500e-44bf-99ab-369ffc1a5a64

Get Specific Version of Risk Configuration Models

Get Specific Version of Risk Configuration Models
HTTP GET URL FORMAT:
====================
{{baseURL}}/riskquery/api/risk-configuration/{configurationId}/Version/{versionNumber}

HTTP GET URL FORMAT:
====================
{{baseURL}}/riskquery/api/risk-configuration/b2099029-500e-44bf-99ab-369ffc1a5a64/version/1s

Risk Threshold Models and Retrieving by API

Similar to the Risk Model, the Risk Threshold Models has a top level id. This is the "Risk Threshold Model Id". This ID does not represent the current "Version" of the risk threshold model and at the version level this identifier is referred to as the "parentThresholdModelId". There can only be one active version of a risk threshold model.

These identifiers are important for performing a calculation because a risk calculation takes this parameter to indicate which version of the "Risk Threshold Model" to use in that calculation.

Get All Risk Threshold Models

To retrieve back all the Risk Threshold Models from the API use the following GET REQUEST. In the below example a single risk threshold model and single version is returned but this API call returns ALL the risk configuration models and ALL the versions. The "Data" and "Version" objects in the below response are Arrays.

Get All Risk Threshold Models
HTTP GET REQUEST:
=================
{{baseURL}}/riskquery/api/threshold-model

HTTP GET RESPONSE:
========================

{
"data": [
{
"id": "a7d65d44-63ed-414e-9e69-0e71d77420ea",
"versions": [
{
"id": "564d3210-3f3c-45ef-b047-ee84676bf553",
"parentThresholdModelId": "a7d65d44-63ed-414e-9e69-0e71d77420ea",
"versionNumber": 1,
"effectiveFrom": "2021-10-15T00:00:00+00:00",
"effectiveUntil": null,
"publicationDate": "2021-10-15T13:29:32.919+00:00",
"status": "Published",
"name": "KYC Level Thresholds",
"created": "2021-10-15T13:20:17.085+00:00",
"thresholds": [
{
"name": "Simplified",
"minimumValue": 11,
"maximumValue": 99,
"nextReviewPeriod": 1
},
{
"name": "Standard",
"minimumValue": 1,
"maximumValue": 10,
"nextReviewPeriod": 1
},
{
"name": "Enhanced",
"minimumValue": 100,
"maximumValue": 1001,
"nextReviewPeriod": 1
}
],
"isActive": true,
"signees": [
{
"subject": "b97f38eb-0b4f-429a-bd30-2def4391797f",
"role": null,
"name": null,
"successor": null,
"action": {
"comment": null,
"decision": "Approve",
"created": "2021-10-15T13:29:32.919+00:00"
},
"hasProcessedRequest": true
}
]
}
]
}
]
}

Get Current Active Risk Threshold Model

Get Current Active Risk Threshold Model
HTTP GET URL FORMAT:
====================
{{baseURL}}/riskquery/api/threshold-model/{thresholdId}

HTTP GET URL FORMAT:
====================
{{baseURL}}/riskquery/api/threshold-model/a7d65d44-63ed-414e-9e69-0e71d77420ea

Get Specific Version of Risk Threshold Models


HTTP GET URL FORMAT:
====================
{{baseURL}}/riskquery/api/threshold-model/{thresholdId}/Version/{versionNumber}

HTTP GET URL FORMAT:
====================
{{baseURL}}/riskquery/api/threshold-model/a7d65d44-63ed-414e-9e69-0e71d77420ea/version/1

Risk Calculation call using the APIs

As described the Risk Engine is Stateless and a Risk Calculation can be sent via the API outside the scope of a Journey and Risk Task.

The HTTP POST Method for calculating risk is below:

Risk Calculation call using the APIs
HTTP POST REQUEST URL:
======================
{{baseURL}}/riskquery/api/risk-assessment

HTTP POST BODY:
===============

{
"data": {
"riskModelId": "c57334de-9d9e-4953-a271-338199ef00ca",
"riskModelVersionNumber": 1,
"thresholdModelId": "a7d65d44-63ed-414e-9e69-0e71d77420ea",
"thresholdModelVersionNumber": 1,
"riskConfigurationModelId": "b2099029-500e-44bf-99ab-369ffc1a5a64",
"riskConfigurationModelVersionNumber": 1,
"inputData": [
{
"name": "approvedRegulator",
"value": "No",
"weight": 1
},
{
"name": "approvedExchange",
"value": "No",
"weight": 1
},
{
"name": "areThereDoubtsOfTheVeracityOrAccuracyOfKyc",
"value": "No",
"weight": 1
},
....
....
....
{.....OTHER RISK FACTORS.....}
]
}
}

HTTP RESPONSE:
==============

{
"data": {
"entityRiskRating": 2,
"entityRiskCategory": "Standard",
"riskFactorGroupAssessments": [
{
"riskFactorGroupName": "Simplified Due Diligence",
"riskRating": 1,
"riskCategory": "Standard",
"weight": 1,
"weightedRiskRating": 1,
"calculationAlgorithm": "max",
"calculatedRiskFactorName": "approvedRegulator",
"riskFactorAssessments": [
{
"riskFactorName": "approvedRegulator",
"riskCategory": "Standard",
"riskRating": 1,
"weight": 1,
"weightedRiskRating": 1,
"overrideScore": null,
"calculatedInputValueValue": "No",
"riskLevelCalculationAlgorithm": null,
"inputValueAssessments": [
{
"value": "No",
"riskCategory": "Standard",
"riskRating": 1,
"weight": 1,
"weightedRiskRating": 1
}
]
},
{
"riskFactorName": "approvedExchange",
"riskCategory": "Standard",
"riskRating": 1,
"weight": 1,
"weightedRiskRating": 1,
"overrideScore": null,
"calculatedInputValueValue": "No",
"riskLevelCalculationAlgorithm": null,
"inputValueAssessments": [
{
"value": "No",
"riskCategory": "Standard",
"riskRating": 1,
"weight": 1,
"weightedRiskRating": 1
}
]
}
]
},
{
"riskFactorGroupName": "Enhanced Due Diligence",
"riskRating": 1,
"riskCategory": "Standard",
"weight": 1,
"weightedRiskRating": 1,
"calculationAlgorithm": "max",
"calculatedRiskFactorName": "areThereDoubtsOfTheVeracityOrAccuracyOfKyc",
"riskFactorAssessments": [
{
"riskFactorName": "areThereDoubtsOfTheVeracityOrAccuracyOfKyc",
"riskCategory": "Standard",
"riskRating": 1,
"weight": 1,
"weightedRiskRating": 1,
"overrideScore": null,
"calculatedInputValueValue": "No",
"riskLevelCalculationAlgorithm": null,
"inputValueAssessments": [
{
"value": "No",
"riskCategory": "Standard",
"riskRating": 1,
"weight": 1,
"weightedRiskRating": 1
}
]
},
{
"riskFactorName": "isTheClientRegisteredOrOperatingInAnEddCountry",
"riskCategory": "Standard",
"riskRating": 1,
"weight": 1,
"weightedRiskRating": 1,
"overrideScore": null,
"calculatedInputValueValue": "No",
"riskLevelCalculationAlgorithm": null,
"inputValueAssessments": [
{
"value": "No",
"riskCategory": "Standard",
"riskRating": 1,
"weight": 1,
"weightedRiskRating": 1
}
]
},
{
"riskFactorName": "doesTheCounterpartyHaveAnOpaqueOwnershipStructure",
"riskCategory": "Standard",
"riskRating": 1,
"weight": 1,
"weightedRiskRating": 1,
"overrideScore": null,
"calculatedInputValueValue": "No",
"riskLevelCalculationAlgorithm": null,
"inputValueAssessments": [
{
"value": "No",
"riskCategory": "Standard",
"riskRating": 1,
"weight": 1,
"weightedRiskRating": 1
}
]
},
{
"riskFactorName": "isThereEvidenceOfSanctionConnections",
"riskCategory": "Standard",
"riskRating": 1,
"weight": 1,
"weightedRiskRating": 1,
"overrideScore": null,
"calculatedInputValueValue": "No",
"riskLevelCalculationAlgorithm": null,
"inputValueAssessments": [
{
"value": "No",
"riskCategory": "Standard",
"riskRating": 1,
"weight": 1,
"weightedRiskRating": 1
}
]
},
{
"riskFactorName": "isThereEvidenceOfHighRiskPePs",
"riskCategory": "Standard",
"riskRating": 1,
"weight": 1,
"weightedRiskRating": 1,
"overrideScore": null,
"calculatedInputValueValue": "No",
"riskLevelCalculationAlgorithm": null,
"inputValueAssessments": [
{
"value": "No",
"riskCategory": "Standard",
"riskRating": 1,
"weight": 1,
"weightedRiskRating": 1
}
]
},
{
"riskFactorName": "isThereEvidenceOfFinancialCrimeAdverseMedia",
"riskCategory": "Standard",
"riskRating": 1,
"weight": 1,
"weightedRiskRating": 1,
"overrideScore": null,
"calculatedInputValueValue": "No",
"riskLevelCalculationAlgorithm": null,
"inputValueAssessments": [
{
"value": "No",
"riskCategory": "Standard",
"riskRating": 1,
"weight": 1,
"weightedRiskRating": 1
}
]
},
{
"riskFactorName": "areTheSofSowDerivedFromAnEddHighRiskCountry",
"riskCategory": "Standard",
"riskRating": 1,
"weight": 1,
"weightedRiskRating": 1,
"overrideScore": null,
"calculatedInputValueValue": "No",
"riskLevelCalculationAlgorithm": null,
"inputValueAssessments": [
{
"value": "No",
"riskCategory": "Standard",
"riskRating": 1,
"weight": 1,
"weightedRiskRating": 1
}
]
},
{
"riskFactorName": "areThereSuspicionsOfAFinancialCrimeRisk",
"riskCategory": "Standard",
"riskRating": 1,
"weight": 1,
"weightedRiskRating": 1,
"overrideScore": null,
"calculatedInputValueValue": "No",
"riskLevelCalculationAlgorithm": null,
"inputValueAssessments": [
{
"value": "No",
"riskCategory": "Standard",
"riskRating": 1,
"weight": 1,
"weightedRiskRating": 1
}
]
}
]
}
],
"riskModelName": "KYC Level Calculation Model",
"riskModelVersion": 1,
"riskConfigurationModelName": "KYC Level Calculation Configuration",
"riskConfigurationModelVersion": 1,
"thresholdModelName": "KYC Level Thresholds",
"thresholdModelVersion": 1
},
"messages": null
}