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