Purple Risk & Compliance API Documentation
Machine-readable OpenAPI 3.0 specification: https://marketplace.moveworks.com/api/purple-suite/risk-compliance/openapi.json
The consolidated all-apps document at https://marketplace.moveworks.com/api/purple-suite/openapi.json can be narrowed to this app with ?apps=risk-compliance, or combined with other apps comma-separated (e.g. ?apps=risk-compliance,itsm).
Overview
Endpoints
GET /api/purple-suite/risk-compliance/customers/{id}/risk-summary
Get customer risk summary
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Aggregated risk summary
application/jsoncustomer_idstringkyc_profileobjectKycProfileidstringcustomer_idstringcountrystringstatusstringrisk_levelstringlast_reviewed_atstringnext_review_duestringpep_flagbooleandocumentsarrayarray of:
doc_typestringstatusstringexpires_atstring
outstanding_itemsarrayarray of:
string
createdAtstringupdatedAtstring
open_remediationarrayarray of:
RemediationCaseidstringcustomer_idstringkyc_profile_idstringcountrystringreasonstringstatusstringassigned_tostringdue_datestringactionsarrayarray of:
actionstringownerstringduestringdonebooleancreated_atstring
status_historyarrayarray of:
statusstringnotestringrecorded_atstring
createdAtstringupdatedAtstring
fraud_alertsarrayarray of:
FraudAlertidstringcustomer_idstringcountrystringindicatorstringseveritystringstatusstringscoreintegerflagged_activitystringcase_idstringdetected_atstringcreatedAtstringupdatedAtstring
fraud_casesarrayarray of:
FraudCaseidstringcustomer_idstringcountrystringalert_idsarrayarray of:
string
statusstringdispositionstringrisk_indicatorsarrayarray of:
string
assigned_investigatorstringcase_notesarrayarray of:
notestringrecorded_atstring
status_historyarrayarray of:
statusstringnotestringrecorded_atstring
createdAtstringupdatedAtstring
watchlist_hitsarrayarray of:
WatchlistEntryidstringcustomer_idstringcountrystringnamestringlist_typestringmatch_strengthintegercreatedAtstringupdatedAtstring
GET /api/purple-suite/risk-compliance/kyc_profiles
List KYC profiles
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
limit | query | integer | no | Max items per page (default 50) |
cursor | query | string | no | Pass the previous response's nextCursor to fetch the next page |
$filter | query | string | no | OData filter expression. Comparison operators: eq, ne, gt, ge, lt, le. Logical: and, or, not, with parentheses for grouping. String functions: contains(field,'x'), startswith(field,'x'), endswith(field,'x'). Membership: field in ('a','b'). Case-insensitive matching via tolower(field) / toupper(field). Nested fields use a slash, e.g. pto_balance/vacation_days. String literals use single quotes; dates are ISO-8601. Examples: "status eq 'active'"; "salary gt 50000 and department eq 'Engineering'"; "contains(tolower(name),'acme')"; "closeDate gt 2026-01-01". |
$select | query | string | no | Comma-separated list of fields to return, e.g. "id,firstName,email". Nested fields via slash ("pto_balance/vacation_days"). The id field is always included. |
$orderby | query | string | no | Sort clause(s), comma-separated, each "field [asc|desc]" (asc is the default). Example: "createdAt desc, lastName asc". Null values sort last. |
$search | query | string | no | Free-text, case-insensitive substring match across the resource's searchable fields. |
$top | query | integer | no | Maximum number of items to return (page size). |
$skip | query | integer | no | Number of matching items to skip before returning results (offset paging). Combine with $top. |
$count | query | boolean | no | When true, include @odata.count (total matches after $filter/$search, before paging) in the response. |
country | query | string | no | Filter to a single country (IN | AU | US) |
customer_id | query | string | no | Filter by customer id |
status | query | string | no | Filter by KYC status |
risk_level | query | string | no | Filter by risk level |
Responses
200- Paginated list
application/jsondataarrayarray of:
KycProfileidstringcustomer_idstringcountrystringstatusstringrisk_levelstringlast_reviewed_atstringnext_review_duestringpep_flagbooleandocumentsarrayarray of:
doc_typestringstatusstringexpires_atstring
outstanding_itemsarrayarray of:
string
createdAtstringupdatedAtstring
nextCursorstringtotalinteger
POST /api/purple-suite/risk-compliance/kyc_profiles
Create KYC profile
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes |
Request body
application/json — required
KycProfile
idstringcustomer_idstringcountrystringstatusstringrisk_levelstringlast_reviewed_atstringnext_review_duestringpep_flagbooleandocumentsarrayarray of:
doc_typestringstatusstringexpires_atstring
outstanding_itemsarrayarray of:
string
createdAtstringupdatedAtstring
Responses
201- Created
application/jsonKycProfileidstringcustomer_idstringcountrystringstatusstringrisk_levelstringlast_reviewed_atstringnext_review_duestringpep_flagbooleandocumentsarrayarray of:
doc_typestringstatusstringexpires_atstring
outstanding_itemsarrayarray of:
string
createdAtstringupdatedAtstring
GET /api/purple-suite/risk-compliance/kyc_profiles/{id}
Get KYC profile
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Found
application/jsonKycProfileidstringcustomer_idstringcountrystringstatusstringrisk_levelstringlast_reviewed_atstringnext_review_duestringpep_flagbooleandocumentsarrayarray of:
doc_typestringstatusstringexpires_atstring
outstanding_itemsarrayarray of:
string
createdAtstringupdatedAtstring
404- Not found
DELETE /api/purple-suite/risk-compliance/kyc_profiles/{id}
Delete KYC profile
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Deleted
application/jsonsuccessbooleanidstring
404- Not found
PATCH /api/purple-suite/risk-compliance/kyc_profiles/{id}
Update KYC profile
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json
KycProfile
idstringcustomer_idstringcountrystringstatusstringrisk_levelstringlast_reviewed_atstringnext_review_duestringpep_flagbooleandocumentsarrayarray of:
doc_typestringstatusstringexpires_atstring
outstanding_itemsarrayarray of:
string
createdAtstringupdatedAtstring
Responses
200- Updated
application/jsonKycProfileidstringcustomer_idstringcountrystringstatusstringrisk_levelstringlast_reviewed_atstringnext_review_duestringpep_flagbooleandocumentsarrayarray of:
doc_typestringstatusstringexpires_atstring
outstanding_itemsarrayarray of:
string
createdAtstringupdatedAtstring
404- Not found
GET /api/purple-suite/risk-compliance/remediation_cases
List KYC remediation cases
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
limit | query | integer | no | Max items per page (default 50) |
cursor | query | string | no | Pass the previous response's nextCursor to fetch the next page |
$filter | query | string | no | OData filter expression. Comparison operators: eq, ne, gt, ge, lt, le. Logical: and, or, not, with parentheses for grouping. String functions: contains(field,'x'), startswith(field,'x'), endswith(field,'x'). Membership: field in ('a','b'). Case-insensitive matching via tolower(field) / toupper(field). Nested fields use a slash, e.g. pto_balance/vacation_days. String literals use single quotes; dates are ISO-8601. Examples: "status eq 'active'"; "salary gt 50000 and department eq 'Engineering'"; "contains(tolower(name),'acme')"; "closeDate gt 2026-01-01". |
$select | query | string | no | Comma-separated list of fields to return, e.g. "id,firstName,email". Nested fields via slash ("pto_balance/vacation_days"). The id field is always included. |
$orderby | query | string | no | Sort clause(s), comma-separated, each "field [asc|desc]" (asc is the default). Example: "createdAt desc, lastName asc". Null values sort last. |
$search | query | string | no | Free-text, case-insensitive substring match across the resource's searchable fields. |
$top | query | integer | no | Maximum number of items to return (page size). |
$skip | query | integer | no | Number of matching items to skip before returning results (offset paging). Combine with $top. |
$count | query | boolean | no | When true, include @odata.count (total matches after $filter/$search, before paging) in the response. |
country | query | string | no | Filter to a single country (IN | AU | US) |
customer_id | query | string | no | Filter by customer id |
status | query | string | no | Filter by status |
reason | query | string | no | Filter by reason |
Responses
200- Paginated list
application/jsondataarrayarray of:
RemediationCaseidstringcustomer_idstringkyc_profile_idstringcountrystringreasonstringstatusstringassigned_tostringdue_datestringactionsarrayarray of:
actionstringownerstringduestringdonebooleancreated_atstring
status_historyarrayarray of:
statusstringnotestringrecorded_atstring
createdAtstringupdatedAtstring
nextCursorstringtotalinteger
POST /api/purple-suite/risk-compliance/remediation_cases
Open remediation case
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes |
Request body
application/json — required
RemediationCase
idstringcustomer_idstringkyc_profile_idstringcountrystringreasonstringstatusstringassigned_tostringdue_datestringactionsarrayarray of:
actionstringownerstringduestringdonebooleancreated_atstring
status_historyarrayarray of:
statusstringnotestringrecorded_atstring
createdAtstringupdatedAtstring
Responses
201- Created
application/jsonRemediationCaseidstringcustomer_idstringkyc_profile_idstringcountrystringreasonstringstatusstringassigned_tostringdue_datestringactionsarrayarray of:
actionstringownerstringduestringdonebooleancreated_atstring
status_historyarrayarray of:
statusstringnotestringrecorded_atstring
createdAtstringupdatedAtstring
GET /api/purple-suite/risk-compliance/remediation_cases/{id}
Get remediation case
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Found
application/jsonRemediationCaseidstringcustomer_idstringkyc_profile_idstringcountrystringreasonstringstatusstringassigned_tostringdue_datestringactionsarrayarray of:
actionstringownerstringduestringdonebooleancreated_atstring
status_historyarrayarray of:
statusstringnotestringrecorded_atstring
createdAtstringupdatedAtstring
404- Not found
DELETE /api/purple-suite/risk-compliance/remediation_cases/{id}
Delete remediation case
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Deleted
application/jsonsuccessbooleanidstring
404- Not found
PATCH /api/purple-suite/risk-compliance/remediation_cases/{id}
Update remediation case
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json
RemediationCase
idstringcustomer_idstringkyc_profile_idstringcountrystringreasonstringstatusstringassigned_tostringdue_datestringactionsarrayarray of:
actionstringownerstringduestringdonebooleancreated_atstring
status_historyarrayarray of:
statusstringnotestringrecorded_atstring
createdAtstringupdatedAtstring
Responses
200- Updated
application/jsonRemediationCaseidstringcustomer_idstringkyc_profile_idstringcountrystringreasonstringstatusstringassigned_tostringdue_datestringactionsarrayarray of:
actionstringownerstringduestringdonebooleancreated_atstring
status_historyarrayarray of:
statusstringnotestringrecorded_atstring
createdAtstringupdatedAtstring
404- Not found
POST /api/purple-suite/risk-compliance/remediation_cases/{id}/transition
Transition a remediation case
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json — required
statusstring requiredreasonstring
Responses
200- Updated
application/jsonRemediationCaseidstringcustomer_idstringkyc_profile_idstringcountrystringreasonstringstatusstringassigned_tostringdue_datestringactionsarrayarray of:
actionstringownerstringduestringdonebooleancreated_atstring
status_historyarrayarray of:
statusstringnotestringrecorded_atstring
createdAtstringupdatedAtstring
400- Invalid status
404- Not found
422- Invalid state transition
POST /api/purple-suite/risk-compliance/remediation_cases/{id}/actions
Log remediation follow-up action
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json — required
actionstring requiredownerstringduestring
Responses
200- Updated
application/jsonRemediationCaseidstringcustomer_idstringkyc_profile_idstringcountrystringreasonstringstatusstringassigned_tostringdue_datestringactionsarrayarray of:
actionstringownerstringduestringdonebooleancreated_atstring
status_historyarrayarray of:
statusstringnotestringrecorded_atstring
createdAtstringupdatedAtstring
400- Invalid body
404- Not found
GET /api/purple-suite/risk-compliance/fraud_alerts
List fraud alerts
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
limit | query | integer | no | Max items per page (default 50) |
cursor | query | string | no | Pass the previous response's nextCursor to fetch the next page |
$filter | query | string | no | OData filter expression. Comparison operators: eq, ne, gt, ge, lt, le. Logical: and, or, not, with parentheses for grouping. String functions: contains(field,'x'), startswith(field,'x'), endswith(field,'x'). Membership: field in ('a','b'). Case-insensitive matching via tolower(field) / toupper(field). Nested fields use a slash, e.g. pto_balance/vacation_days. String literals use single quotes; dates are ISO-8601. Examples: "status eq 'active'"; "salary gt 50000 and department eq 'Engineering'"; "contains(tolower(name),'acme')"; "closeDate gt 2026-01-01". |
$select | query | string | no | Comma-separated list of fields to return, e.g. "id,firstName,email". Nested fields via slash ("pto_balance/vacation_days"). The id field is always included. |
$orderby | query | string | no | Sort clause(s), comma-separated, each "field [asc|desc]" (asc is the default). Example: "createdAt desc, lastName asc". Null values sort last. |
$search | query | string | no | Free-text, case-insensitive substring match across the resource's searchable fields. |
$top | query | integer | no | Maximum number of items to return (page size). |
$skip | query | integer | no | Number of matching items to skip before returning results (offset paging). Combine with $top. |
$count | query | boolean | no | When true, include @odata.count (total matches after $filter/$search, before paging) in the response. |
country | query | string | no | Filter to a single country (IN | AU | US) |
customer_id | query | string | no | Filter by customer id |
indicator | query | string | no | Filter by indicator |
severity | query | string | no | Filter by severity |
status | query | string | no | Filter by status |
Responses
200- Paginated list
application/jsondataarrayarray of:
FraudAlertidstringcustomer_idstringcountrystringindicatorstringseveritystringstatusstringscoreintegerflagged_activitystringcase_idstringdetected_atstringcreatedAtstringupdatedAtstring
nextCursorstringtotalinteger
POST /api/purple-suite/risk-compliance/fraud_alerts
Create fraud alert
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes |
Request body
application/json — required
FraudAlert
idstringcustomer_idstringcountrystringindicatorstringseveritystringstatusstringscoreintegerflagged_activitystringcase_idstringdetected_atstringcreatedAtstringupdatedAtstring
Responses
201- Created
application/jsonFraudAlertidstringcustomer_idstringcountrystringindicatorstringseveritystringstatusstringscoreintegerflagged_activitystringcase_idstringdetected_atstringcreatedAtstringupdatedAtstring
GET /api/purple-suite/risk-compliance/fraud_alerts/{id}
Get fraud alert
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Found
application/jsonFraudAlertidstringcustomer_idstringcountrystringindicatorstringseveritystringstatusstringscoreintegerflagged_activitystringcase_idstringdetected_atstringcreatedAtstringupdatedAtstring
404- Not found
DELETE /api/purple-suite/risk-compliance/fraud_alerts/{id}
Delete fraud alert
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Deleted
application/jsonsuccessbooleanidstring
404- Not found
PATCH /api/purple-suite/risk-compliance/fraud_alerts/{id}
Update fraud alert
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json
FraudAlert
idstringcustomer_idstringcountrystringindicatorstringseveritystringstatusstringscoreintegerflagged_activitystringcase_idstringdetected_atstringcreatedAtstringupdatedAtstring
Responses
200- Updated
application/jsonFraudAlertidstringcustomer_idstringcountrystringindicatorstringseveritystringstatusstringscoreintegerflagged_activitystringcase_idstringdetected_atstringcreatedAtstringupdatedAtstring
404- Not found
POST /api/purple-suite/risk-compliance/fraud_alerts/{id}/triage
Triage a fraud alert
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json — required
statusstring requiredcase_idstring
Responses
200- Updated
application/jsonFraudAlertidstringcustomer_idstringcountrystringindicatorstringseveritystringstatusstringscoreintegerflagged_activitystringcase_idstringdetected_atstringcreatedAtstringupdatedAtstring
400- Invalid status
404- Not found
422- Alert already triaged/dismissed/escalated
GET /api/purple-suite/risk-compliance/fraud_cases
List fraud cases
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
limit | query | integer | no | Max items per page (default 50) |
cursor | query | string | no | Pass the previous response's nextCursor to fetch the next page |
$filter | query | string | no | OData filter expression. Comparison operators: eq, ne, gt, ge, lt, le. Logical: and, or, not, with parentheses for grouping. String functions: contains(field,'x'), startswith(field,'x'), endswith(field,'x'). Membership: field in ('a','b'). Case-insensitive matching via tolower(field) / toupper(field). Nested fields use a slash, e.g. pto_balance/vacation_days. String literals use single quotes; dates are ISO-8601. Examples: "status eq 'active'"; "salary gt 50000 and department eq 'Engineering'"; "contains(tolower(name),'acme')"; "closeDate gt 2026-01-01". |
$select | query | string | no | Comma-separated list of fields to return, e.g. "id,firstName,email". Nested fields via slash ("pto_balance/vacation_days"). The id field is always included. |
$orderby | query | string | no | Sort clause(s), comma-separated, each "field [asc|desc]" (asc is the default). Example: "createdAt desc, lastName asc". Null values sort last. |
$search | query | string | no | Free-text, case-insensitive substring match across the resource's searchable fields. |
$top | query | integer | no | Maximum number of items to return (page size). |
$skip | query | integer | no | Number of matching items to skip before returning results (offset paging). Combine with $top. |
$count | query | boolean | no | When true, include @odata.count (total matches after $filter/$search, before paging) in the response. |
country | query | string | no | Filter to a single country (IN | AU | US) |
customer_id | query | string | no | Filter by customer id |
status | query | string | no | Filter by status |
disposition | query | string | no | Filter by disposition |
Responses
200- Paginated list
application/jsondataarrayarray of:
FraudCaseidstringcustomer_idstringcountrystringalert_idsarrayarray of:
string
statusstringdispositionstringrisk_indicatorsarrayarray of:
string
assigned_investigatorstringcase_notesarrayarray of:
notestringrecorded_atstring
status_historyarrayarray of:
statusstringnotestringrecorded_atstring
createdAtstringupdatedAtstring
nextCursorstringtotalinteger
POST /api/purple-suite/risk-compliance/fraud_cases
Open fraud case
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes |
Request body
application/json — required
FraudCase
idstringcustomer_idstringcountrystringalert_idsarrayarray of:
string
statusstringdispositionstringrisk_indicatorsarrayarray of:
string
assigned_investigatorstringcase_notesarrayarray of:
notestringrecorded_atstring
status_historyarrayarray of:
statusstringnotestringrecorded_atstring
createdAtstringupdatedAtstring
Responses
201- Created
application/jsonFraudCaseidstringcustomer_idstringcountrystringalert_idsarrayarray of:
string
statusstringdispositionstringrisk_indicatorsarrayarray of:
string
assigned_investigatorstringcase_notesarrayarray of:
notestringrecorded_atstring
status_historyarrayarray of:
statusstringnotestringrecorded_atstring
createdAtstringupdatedAtstring
GET /api/purple-suite/risk-compliance/fraud_cases/{id}
Get fraud case
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Found
application/jsonFraudCaseidstringcustomer_idstringcountrystringalert_idsarrayarray of:
string
statusstringdispositionstringrisk_indicatorsarrayarray of:
string
assigned_investigatorstringcase_notesarrayarray of:
notestringrecorded_atstring
status_historyarrayarray of:
statusstringnotestringrecorded_atstring
createdAtstringupdatedAtstring
404- Not found
DELETE /api/purple-suite/risk-compliance/fraud_cases/{id}
Delete fraud case
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Deleted
application/jsonsuccessbooleanidstring
404- Not found
PATCH /api/purple-suite/risk-compliance/fraud_cases/{id}
Update fraud case
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json
FraudCase
idstringcustomer_idstringcountrystringalert_idsarrayarray of:
string
statusstringdispositionstringrisk_indicatorsarrayarray of:
string
assigned_investigatorstringcase_notesarrayarray of:
notestringrecorded_atstring
status_historyarrayarray of:
statusstringnotestringrecorded_atstring
createdAtstringupdatedAtstring
Responses
200- Updated
application/jsonFraudCaseidstringcustomer_idstringcountrystringalert_idsarrayarray of:
string
statusstringdispositionstringrisk_indicatorsarrayarray of:
string
assigned_investigatorstringcase_notesarrayarray of:
notestringrecorded_atstring
status_historyarrayarray of:
statusstringnotestringrecorded_atstring
createdAtstringupdatedAtstring
404- Not found
POST /api/purple-suite/risk-compliance/fraud_cases/{id}/transition
Transition a fraud case
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json — required
statusstring requireddispositionstringnotestring
Responses
200- Updated
application/jsonFraudCaseidstringcustomer_idstringcountrystringalert_idsarrayarray of:
string
statusstringdispositionstringrisk_indicatorsarrayarray of:
string
assigned_investigatorstringcase_notesarrayarray of:
notestringrecorded_atstring
status_historyarrayarray of:
statusstringnotestringrecorded_atstring
createdAtstringupdatedAtstring
400- Invalid status
404- Not found
422- Invalid transition / disposition required to close
GET /api/purple-suite/risk-compliance/watchlist
List AML watchlist entries
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
limit | query | integer | no | Max items per page (default 50) |
cursor | query | string | no | Pass the previous response's nextCursor to fetch the next page |
$filter | query | string | no | OData filter expression. Comparison operators: eq, ne, gt, ge, lt, le. Logical: and, or, not, with parentheses for grouping. String functions: contains(field,'x'), startswith(field,'x'), endswith(field,'x'). Membership: field in ('a','b'). Case-insensitive matching via tolower(field) / toupper(field). Nested fields use a slash, e.g. pto_balance/vacation_days. String literals use single quotes; dates are ISO-8601. Examples: "status eq 'active'"; "salary gt 50000 and department eq 'Engineering'"; "contains(tolower(name),'acme')"; "closeDate gt 2026-01-01". |
$select | query | string | no | Comma-separated list of fields to return, e.g. "id,firstName,email". Nested fields via slash ("pto_balance/vacation_days"). The id field is always included. |
$orderby | query | string | no | Sort clause(s), comma-separated, each "field [asc|desc]" (asc is the default). Example: "createdAt desc, lastName asc". Null values sort last. |
$search | query | string | no | Free-text, case-insensitive substring match across the resource's searchable fields. |
$top | query | integer | no | Maximum number of items to return (page size). |
$skip | query | integer | no | Number of matching items to skip before returning results (offset paging). Combine with $top. |
$count | query | boolean | no | When true, include @odata.count (total matches after $filter/$search, before paging) in the response. |
country | query | string | no | Filter to a single country (IN | AU | US) |
customer_id | query | string | no | Filter by customer id |
list_type | query | string | no | Filter by list type |
Responses
200- Paginated list
application/jsondataarrayarray of:
WatchlistEntryidstringcustomer_idstringcountrystringnamestringlist_typestringmatch_strengthintegercreatedAtstringupdatedAtstring
nextCursorstringtotalinteger
POST /api/purple-suite/risk-compliance/watchlist
Create watchlist entry
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes |
Request body
application/json — required
WatchlistEntry
idstringcustomer_idstringcountrystringnamestringlist_typestringmatch_strengthintegercreatedAtstringupdatedAtstring
Responses
201- Created
application/jsonWatchlistEntryidstringcustomer_idstringcountrystringnamestringlist_typestringmatch_strengthintegercreatedAtstringupdatedAtstring
GET /api/purple-suite/risk-compliance/watchlist/{id}
Get watchlist entry
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Found
application/jsonWatchlistEntryidstringcustomer_idstringcountrystringnamestringlist_typestringmatch_strengthintegercreatedAtstringupdatedAtstring
404- Not found
DELETE /api/purple-suite/risk-compliance/watchlist/{id}
Delete watchlist entry
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Deleted
application/jsonsuccessbooleanidstring
404- Not found
PATCH /api/purple-suite/risk-compliance/watchlist/{id}
Update watchlist entry
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json
WatchlistEntry
idstringcustomer_idstringcountrystringnamestringlist_typestringmatch_strengthintegercreatedAtstringupdatedAtstring
Responses
200- Updated
application/jsonWatchlistEntryidstringcustomer_idstringcountrystringnamestringlist_typestringmatch_strengthintegercreatedAtstringupdatedAtstring
404- Not found
GET /api/purple-suite/risk-compliance/policies
List compliance policies and SOPs
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
limit | query | integer | no | Max items per page (default 50) |
cursor | query | string | no | Pass the previous response's nextCursor to fetch the next page |
$filter | query | string | no | OData filter expression. Comparison operators: eq, ne, gt, ge, lt, le. Logical: and, or, not, with parentheses for grouping. String functions: contains(field,'x'), startswith(field,'x'), endswith(field,'x'). Membership: field in ('a','b'). Case-insensitive matching via tolower(field) / toupper(field). Nested fields use a slash, e.g. pto_balance/vacation_days. String literals use single quotes; dates are ISO-8601. Examples: "status eq 'active'"; "salary gt 50000 and department eq 'Engineering'"; "contains(tolower(name),'acme')"; "closeDate gt 2026-01-01". |
$select | query | string | no | Comma-separated list of fields to return, e.g. "id,firstName,email". Nested fields via slash ("pto_balance/vacation_days"). The id field is always included. |
$orderby | query | string | no | Sort clause(s), comma-separated, each "field [asc|desc]" (asc is the default). Example: "createdAt desc, lastName asc". Null values sort last. |
$search | query | string | no | Free-text, case-insensitive substring match across the resource's searchable fields. |
$top | query | integer | no | Maximum number of items to return (page size). |
$skip | query | integer | no | Number of matching items to skip before returning results (offset paging). Combine with $top. |
$count | query | boolean | no | When true, include @odata.count (total matches after $filter/$search, before paging) in the response. |
country | query | string | no | Filter to a single country (IN | AU | US) |
policy_type | query | string | no | Filter by policy type |
category | query | string | no | Filter by category |
Responses
200- Paginated list
application/jsondataarrayarray of:
Policyidstringcountrystringtitlestringpolicy_typestringcategorystringbodystringcustomer_scriptstring — Verbatim text the frontline staff can read to the customerregulatorstringeffective_datestringcreatedAtstringupdatedAtstring
nextCursorstringtotalinteger
POST /api/purple-suite/risk-compliance/policies
Create compliance policy
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes |
Request body
application/json — required
Policy
idstringcountrystringtitlestringpolicy_typestringcategorystringbodystringcustomer_scriptstring — Verbatim text the frontline staff can read to the customerregulatorstringeffective_datestringcreatedAtstringupdatedAtstring
Responses
201- Created
application/jsonPolicyidstringcountrystringtitlestringpolicy_typestringcategorystringbodystringcustomer_scriptstring — Verbatim text the frontline staff can read to the customerregulatorstringeffective_datestringcreatedAtstringupdatedAtstring
GET /api/purple-suite/risk-compliance/policies/{id}
Get compliance policy
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Found
application/jsonPolicyidstringcountrystringtitlestringpolicy_typestringcategorystringbodystringcustomer_scriptstring — Verbatim text the frontline staff can read to the customerregulatorstringeffective_datestringcreatedAtstringupdatedAtstring
404- Not found
DELETE /api/purple-suite/risk-compliance/policies/{id}
Delete compliance policy
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Deleted
application/jsonsuccessbooleanidstring
404- Not found
PATCH /api/purple-suite/risk-compliance/policies/{id}
Update compliance policy
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json
Policy
idstringcountrystringtitlestringpolicy_typestringcategorystringbodystringcustomer_scriptstring — Verbatim text the frontline staff can read to the customerregulatorstringeffective_datestringcreatedAtstringupdatedAtstring
Responses
200- Updated
application/jsonPolicyidstringcountrystringtitlestringpolicy_typestringcategorystringbodystringcustomer_scriptstring — Verbatim text the frontline staff can read to the customerregulatorstringeffective_datestringcreatedAtstringupdatedAtstring
404- Not found