Dashboard Statistics
The Dashboard Statistics API exposes the read-only summary numbers shown on the digital onboarding compliance dashboard — status counts, risk ratings, renewals, and monthly charts. All endpoints return aggregate counts or chart data only. No customer detail records are exposed.
The numbers match exactly what a user sees on the dashboard for the same context, and every endpoint respects the same client-level filtering.
Authentication
All requests to this API require authentication using a bearer token in the Authorization header:
Authorization: Bearer your-token-here
For details on how to obtain an authentication token, please refer to the Authentication documentation.
Client Filtering
Every endpoint accepts an optional clientIds query parameter to narrow the numbers to specific clients:
GET {base_url}/ExtStats/GetConsolidatedCount?clientIds=8b3e1c47-c1d8-4ae5-bcf6-3902f4a6c8d2&clientIds=5f4d9e07-2cb2-4a35-9b8d-a017fc1e2b88
| Behavior | Description |
|---|---|
| No filter | When clientIds is omitted, the response covers every client your API key is allowed to see. |
| Valid filter | When clientIds is provided, the response is limited to those clients. |
| Out of scope | If any requested client id is outside the set your API key is allowed to see, the request fails with 403 Forbidden. |
The same clientIds query parameter applies to all endpoints below and is not repeated in each section.
Consolidated Status Count
Counts of customer profiles grouped by their consolidated status.
GET {base_url}/ExtStats/GetConsolidatedCount
Response
{
"version": null,
"statusCode": 200,
"messages": ["Processed successfully"],
"result": [
{ "status": "Pending", "clientCount": 2338 },
{ "status": "Approved", "clientCount": 267 },
{ "status": "Rejected", "clientCount": 5 },
{ "status": "Frozen", "clientCount": 14 },
{ "status": "Expired", "clientCount": 0 },
{ "status": "Closed", "clientCount": 9 },
{ "status": "Dormant", "clientCount": 40 }
]
}
Response Fields
| Field | Type | Description |
|---|---|---|
| status | string | Display name of the status |
| clientCount | number | Number of customer profiles in this status |
AML Risk Rating Count
Counts of customers grouped by their anti-money laundering risk rating.
GET {base_url}/ExtStats/GetAmlCount
Response
{
"version": null,
"statusCode": 200,
"messages": ["Processed successfully"],
"result": [
{ "status": "High", "customerCount": 555 },
{ "status": "Medium", "customerCount": 74 },
{ "status": "Low", "customerCount": 1953 },
{ "status": "Prohibited", "customerCount": 91 }
]
}
Response Fields
| Field | Type | Description |
|---|---|---|
| status | string | Display name of the risk rating |
| customerCount | number | Number of customers with this risk rating |
Submissions Count
Counts of submissions grouped by completeness.
GET {base_url}/ExtStats/GetSubmissionsCount
Response
{
"version": null,
"statusCode": 200,
"messages": ["Processed successfully"],
"result": [
{ "submissionStatus": "Complete", "submissionCount": 2697 },
{ "submissionStatus": "Incomplete", "submissionCount": 1250 }
]
}
Response Fields
| Field | Type | Description |
|---|---|---|
| submissionStatus | string | Completeness state ("Complete" or "Incomplete") |
| submissionCount | number | Number of submissions in this state |
Classification Count
Counts of customers grouped by client classification.
GET {base_url}/ExtStats/GetClassificationCount
Response
{
"version": null,
"statusCode": 200,
"messages": ["Processed successfully"],
"result": [
{ "classificationState": "Retail", "clientCount": 233 },
{ "classificationState": "AssessedProfessional", "clientCount": 1608 },
{ "classificationState": "DeemedProfessional", "clientCount": 125 },
{ "classificationState": "MarketCounterParty", "clientCount": 12 },
{ "classificationState": "NewStatus", "clientCount": 0 }
]
}
Response Fields
| Field | Type | Description |
|---|---|---|
| classificationState | string | Display name of the classification |
| clientCount | number | Number of customers with this classification |
Ongoing Monitoring Count
Counts of ongoing monitoring cases grouped by status.
GET {base_url}/ExtStats/GetOnGoingMonitoringCount
Response
{
"version": null,
"statusCode": 200,
"messages": ["Processed successfully"],
"result": [
{ "status": "Open", "count": 0 },
{ "status": "Closed", "count": 0 },
{ "status": "UnderReview", "count": 0 }
]
}
Response Fields
| Field | Type | Description |
|---|---|---|
| status | string | Display name of the monitoring status |
| count | number | Number of cases in this status |
KYC Refresh Count
Counts of KYC refresh cases grouped by status.
GET {base_url}/ExtStats/GetKycRefreshCount
Response
{
"version": null,
"statusCode": 200,
"messages": ["Processed successfully"],
"result": [
{ "status": "Pending", "clientCount": 71 },
{ "status": "Completed", "clientCount": 5 },
{ "status": "Open", "clientCount": 32 },
{ "status": "Unknown", "clientCount": 4 }
]
}
Response Fields
| Field | Type | Description |
|---|---|---|
| status | string | Display name of the refresh status |
| clientCount | number | Number of cases in this status |
Submission Delete Request Count
Counts of submission delete requests grouped by status.
GET {base_url}/ExtStats/GetSubmissionDeleteRequestCount
Response
{
"version": null,
"statusCode": 200,
"messages": ["Processed successfully"],
"result": [
{ "status": "Pending", "clientCount": 4 },
{ "status": "Approved", "clientCount": 54 },
{ "status": "Rejected", "clientCount": 3 }
]
}
Response Fields
| Field | Type | Description |
|---|---|---|
| status | string | Display name of the delete request status |
| clientCount | number | Number of delete requests in this status |
Pending Approvals
Count of submissions waiting for approval.
GET {base_url}/ExtStats/GetSubmitForApproval
Response
{
"version": null,
"statusCode": 200,
"messages": ["Processed successfully"],
"result": [
{ "status": "Pending", "count": 1 }
]
}
Response Fields
| Field | Type | Description |
|---|---|---|
| status | string | Approval status — always "Pending" for this endpoint |
| count | number | Number of submissions awaiting approval |
Document Renewal Count
Number of customers and documents due for document renewal within a window, or already expired.
GET {base_url}/ExtStats/GetDocumentRenewalCount/{type}
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| type | string | Yes | Renewal bucket. Supported values: 30 (documents expiring within 30 days), 90 (documents expiring within 90 days), Expired (documents with an expiry date in the past). Any value other than 30 or 90 is treated as Expired. |
Response
{
"version": null,
"statusCode": 200,
"messages": ["Processed successfully"],
"result": {
"customersCount": 0,
"documentTotal": 0
}
}
Response Fields
| Field | Type | Description |
|---|---|---|
| customersCount | number | Number of customers in this bucket |
| documentTotal | number | Total number of documents in this bucket |
KYC Renewal Count
Number of customers due for KYC renewal within a window, or already overdue.
GET {base_url}/ExtStats/GetKycRenewalCount/{type}
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| type | string | Yes | Renewal bucket. Supported values: 30 (next review within 30 days), 60 (next review within 60 days), 90 (next review between 31 and 90 days — not 0–90), Overdue (next review date already in the past). Any value other than 30, 60, or 90 is treated as Overdue. |
Response
{
"version": null,
"statusCode": 200,
"messages": ["Processed successfully"],
"result": {
"customersCount": 30
}
}
Response Fields
| Field | Type | Description |
|---|---|---|
| customersCount | number | Number of customers in this bucket |
Chart Periods
The Risk Profile, Exception, and PEP chart endpoints group their data over a period supplied in the path. Supported values, lowercase, exactly as written:
| Period | Description |
|---|---|
| last 7 days | Daily points for the last seven days |
| last 12 months | Monthly points for the last twelve months |
| quarterly | Points grouped by quarter of the current year |
| yearly | Monthly points for the current year |
| previous year | Monthly points for the previous year |
The period is part of the path and must be URL-encoded (for example, last%2012%20months).
The Sanction Screening Graph endpoint accepts a different set of period values — see its own section below.
Risk Profile Chart
Customer counts by risk level over the selected period. See Chart Periods for supported {period} values.
GET {base_url}/ExtStats/GetRiskProfileChart/{period}
Response
{
"version": null,
"statusCode": 200,
"messages": ["Processed successfully"],
"result": [
{
"dateSpan": "08/05/2026 16:21:51",
"customerCount": 0,
"riskLevel": "High",
"years": "2026"
},
{
"dateSpan": "08/05/2026 16:21:51",
"customerCount": 0,
"riskLevel": "Medium",
"years": "2026"
}
]
}
Response Fields
| Field | Type | Description |
|---|---|---|
| dateSpan | string | Time bucket label. The format depends on the period: a full timestamp for daily periods (last 7 days) and a numeric month or quarter index for monthly and quarterly periods |
| customerCount | number | Number of customers in this risk level for this bucket |
| riskLevel | string | Display name of the risk level |
| years | string | Year of the bucket |
Exception Chart
Counts of exceptions over the selected period, split by entity type. See Chart Periods for supported {period} values.
GET {base_url}/ExtStats/GetExceptionChart/{period}
Response
{
"version": null,
"statusCode": 200,
"messages": ["Processed successfully"],
"result": [
{ "dateSpan": "1", "individual": 0, "legalEntity": 0, "years": "2026" },
{ "dateSpan": "2", "individual": 0, "legalEntity": 0, "years": "2026" }
]
}
Response Fields
| Field | Type | Description |
|---|---|---|
| dateSpan | string | Time bucket label. The format depends on the period: a full timestamp for daily periods (last 7 days) and a numeric month or quarter index for monthly and quarterly periods |
| individual | number | Exception count for individual customers in this bucket |
| legalEntity | number | Exception count for legal entity customers in this bucket |
| years | string | Year of the bucket |
Sanction Screening Graph
Counts of sanction screening results over the selected period, broken down by alert status. Each time bucket emits one row per alert status (Open, Closed, UnderReview).
GET {base_url}/ExtStats/GetSanctionScreeningGraph/{period}
Period
This endpoint accepts a different period vocabulary from the other charts. Values are case-sensitive and must be sent exactly as written (note the TitleCase and plural Years):
| Period | Description |
|---|---|
| Today | Points for today |
| Yesterday | Points for yesterday |
| last 7 days | Daily points for the last seven days (the only lowercase value) |
| This Month | Points for the current month |
| This Quarter | Points for the current quarter |
| This Year | Points for the current year |
| Last 12 Months | Monthly points for the last twelve months |
| Previous Years | Points for years before the current one |
The period is part of the path and must be URL-encoded (for example, Last%2012%20Months). Sending an unsupported value returns an empty result array with HTTP 200 — there is no validation error, so use one of the values above exactly.
Response
{
"version": null,
"statusCode": 200,
"messages": ["Processed successfully"],
"result": [
{ "dateSpan": "1", "alertType": "Open", "count": 40 },
{ "dateSpan": "1", "alertType": "Closed", "count": 58 },
{ "dateSpan": "1", "alertType": "UnderReview", "count": 12 },
{ "dateSpan": "2", "alertType": "Open", "count": 21 },
{ "dateSpan": "2", "alertType": "Closed", "count": 30 }
]
}
Response Fields
| Field | Type | Description |
|---|---|---|
| dateSpan | string | Time bucket label. The format depends on the period: a full timestamp for daily periods (last 7 days) and a numeric month or quarter index for monthly and quarterly periods |
| alertType | string | Screening alert status (Open, Closed, UnderReview) |
| count | number | Number of screening results with this alert status in this bucket |
PEP Chart
Counts of politically exposed person matches over the selected period, split by entity type. See Chart Periods for supported {period} values.
GET {base_url}/ExtStats/GetPepChart/{period}
Response
{
"version": null,
"statusCode": 200,
"messages": ["Processed successfully"],
"result": [
{ "dateSpan": "1", "individual": 27, "legalEntity": 1, "total": 28, "years": "2026" },
{ "dateSpan": "2", "individual": 9, "legalEntity": 0, "total": 9, "years": "2026" }
]
}
Response Fields
| Field | Type | Description |
|---|---|---|
| dateSpan | string | Time bucket label. The format depends on the period: a full timestamp for daily periods (last 7 days) and a numeric month or quarter index for monthly and quarterly periods |
| individual | number | PEP match count for individual customers in this bucket |
| legalEntity | number | PEP match count for legal entity customers in this bucket |
| total | number | Total PEP match count for this bucket |
| years | string | Year of the bucket |
Error Handling
| Status Code | Description | Solution |
|---|---|---|
| 400 | Invalid request parameters | Check the path and query parameters |
| 401 | Unauthorized access | Check the authentication token |
| 403 | Requested client id outside the allowed scope | Request only client ids your API key is allowed to see |
| 429 | Too many requests | Implement rate limiting and cache responses |