Purple Retail Banking API Documentation
Machine-readable OpenAPI 3.0 specification: https://marketplace.moveworks.com/api/purple-suite/retail-banking/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=retail-banking, or combined with other apps comma-separated (e.g. ?apps=retail-banking,itsm).
Overview
Endpoints
GET /api/purple-suite/retail-banking/customers
List banking customers
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) |
segment | query | string | no | Filter by customer segment |
kyc_status | query | string | no | Filter by KYC status |
risk_rating | query | string | no | Filter by risk rating |
relationship_manager | query | string | no | Filter by relationship manager email |
Responses
200- Paginated list
application/jsondataarrayarray of:
CustomeridstringcountrystringfirstNamestringlastNamestringemailstringphonestringaddressstringcitystringsegmentstringkyc_statusstringrisk_ratingstringrelationship_managerstringhome_branch_idstringtax_idobjecttypestringmaskedstring
credit_scoreobjectsystemstringvalueinteger
onboarded_atstringcreatedAtstringupdatedAtstring
nextCursorstring — Cursor for the next page, or null on the last pagetotalinteger — Total documents matching the filter
POST /api/purple-suite/retail-banking/customers
Onboard customer
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes |
Request body
application/json — required
Customer
idstringcountrystringfirstNamestringlastNamestringemailstringphonestringaddressstringcitystringsegmentstringkyc_statusstringrisk_ratingstringrelationship_managerstringhome_branch_idstringtax_idobjecttypestringmaskedstring
credit_scoreobjectsystemstringvalueinteger
onboarded_atstringcreatedAtstringupdatedAtstring
Responses
201- Created
application/jsonCustomeridstringcountrystringfirstNamestringlastNamestringemailstringphonestringaddressstringcitystringsegmentstringkyc_statusstringrisk_ratingstringrelationship_managerstringhome_branch_idstringtax_idobjecttypestringmaskedstring
credit_scoreobjectsystemstringvalueinteger
onboarded_atstringcreatedAtstringupdatedAtstring
GET /api/purple-suite/retail-banking/customers/{id}
Get banking customer
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Found
application/jsonCustomeridstringcountrystringfirstNamestringlastNamestringemailstringphonestringaddressstringcitystringsegmentstringkyc_statusstringrisk_ratingstringrelationship_managerstringhome_branch_idstringtax_idobjecttypestringmaskedstring
credit_scoreobjectsystemstringvalueinteger
onboarded_atstringcreatedAtstringupdatedAtstring
404- Not found
DELETE /api/purple-suite/retail-banking/customers/{id}
Delete banking customer
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/retail-banking/customers/{id}
Update banking customer
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json
Customer
idstringcountrystringfirstNamestringlastNamestringemailstringphonestringaddressstringcitystringsegmentstringkyc_statusstringrisk_ratingstringrelationship_managerstringhome_branch_idstringtax_idobjecttypestringmaskedstring
credit_scoreobjectsystemstringvalueinteger
onboarded_atstringcreatedAtstringupdatedAtstring
Responses
200- Updated
application/jsonCustomeridstringcountrystringfirstNamestringlastNamestringemailstringphonestringaddressstringcitystringsegmentstringkyc_statusstringrisk_ratingstringrelationship_managerstringhome_branch_idstringtax_idobjecttypestringmaskedstring
credit_scoreobjectsystemstringvalueinteger
onboarded_atstringcreatedAtstringupdatedAtstring
404- Not found
GET /api/purple-suite/retail-banking/customers/{id}/portfolio
Get customer 360 portfolio
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Aggregated customer portfolio
application/jsoncustomerobjectCustomeridstringcountrystringfirstNamestringlastNamestringemailstringphonestringaddressstringcitystringsegmentstringkyc_statusstringrisk_ratingstringrelationship_managerstringhome_branch_idstringtax_idobjecttypestringmaskedstring
credit_scoreobjectsystemstringvalueinteger
onboarded_atstringcreatedAtstringupdatedAtstring
accountsarrayarray of:
Accountidstringcustomer_idstringcountrystringtypestringcurrencystringbalanceobjectamountnumbercurrencystringamount_formattedstring
statusstringfreeze_reasonstringbranch_idstringroutingobjectlabelstringcodestringaccountNumberstring
status_historyarrayarray of:
statusstringreasonstringrecorded_atstring
opened_atstringcreatedAtstringupdatedAtstring
cardsarrayarray of:
Cardidstringcustomer_idstringaccount_idstringcountrystringnetworkstringtypestringstatusstringlast_fourstringblock_reasonstringcreatedAtstringupdatedAtstring
loansarrayarray of:
Loanidstringcustomer_idstringproduct_idstringcountrystringtypestringprincipalobjectamountnumbercurrencystringamount_formattedstring
outstandingobjectamountnumbercurrencystringamount_formattedstring
interest_ratenumberterm_monthsintegerstatusstringdpdinteger — Days past duedelinquency_bucketstringnext_due_datestringrepayment_schedulearrayarray of:
installment_nointegerdue_datestringamountobjectamountnumbercurrencystringamount_formattedstring
statusstringpaid_atstring
createdAtstringupdatedAtstring
opportunitiesarrayarray of:
Opportunityidstringcustomer_idstringcountrystringnamestringproduct_categorystringstagestringrecommendation_reasonstringvalueobjectamountnumbercurrencystringamount_formattedstring
createdAtstringupdatedAtstring
recent_interactionsarrayarray of:
Interactionidstringcustomer_idstringcountrystringtypestringsubjectstringsummarystringrmstringoccurred_atstringcreatedAtstringupdatedAtstring
open_complaintsarrayarray of:
Complaintidstringcustomer_idstringaccount_idstringcountrystringcategorystringchannelstringtitlestringstatusstringsla_policy_idstringsla_duestringknown_issue_idstringresolution_notesstringstatus_historyarrayarray of:
statusstringreasonstringrecorded_atstring
createdAtstringupdatedAtstring
404- Customer not found
GET /api/purple-suite/retail-banking/bank_accounts
List bank accounts
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 |
type | query | string | no | Filter by account type |
status | query | string | no | Filter by status |
Responses
200- Paginated list
application/jsondataarrayarray of:
Accountidstringcustomer_idstringcountrystringtypestringcurrencystringbalanceobjectamountnumbercurrencystringamount_formattedstring
statusstringfreeze_reasonstringbranch_idstringroutingobjectlabelstringcodestringaccountNumberstring
status_historyarrayarray of:
statusstringreasonstringrecorded_atstring
opened_atstringcreatedAtstringupdatedAtstring
nextCursorstring — Cursor for the next page, or null on the last pagetotalinteger — Total documents matching the filter
POST /api/purple-suite/retail-banking/bank_accounts
Open bank account
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes |
Request body
application/json — required
Account
idstringcustomer_idstringcountrystringtypestringcurrencystringbalanceobjectamountnumbercurrencystringamount_formattedstring
statusstringfreeze_reasonstringbranch_idstringroutingobjectlabelstringcodestringaccountNumberstring
status_historyarrayarray of:
statusstringreasonstringrecorded_atstring
opened_atstringcreatedAtstringupdatedAtstring
Responses
201- Created
application/jsonAccountidstringcustomer_idstringcountrystringtypestringcurrencystringbalanceobjectamountnumbercurrencystringamount_formattedstring
statusstringfreeze_reasonstringbranch_idstringroutingobjectlabelstringcodestringaccountNumberstring
status_historyarrayarray of:
statusstringreasonstringrecorded_atstring
opened_atstringcreatedAtstringupdatedAtstring
GET /api/purple-suite/retail-banking/bank_accounts/{id}
Get bank account
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Found
application/jsonAccountidstringcustomer_idstringcountrystringtypestringcurrencystringbalanceobjectamountnumbercurrencystringamount_formattedstring
statusstringfreeze_reasonstringbranch_idstringroutingobjectlabelstringcodestringaccountNumberstring
status_historyarrayarray of:
statusstringreasonstringrecorded_atstring
opened_atstringcreatedAtstringupdatedAtstring
404- Not found
DELETE /api/purple-suite/retail-banking/bank_accounts/{id}
Delete bank account
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/retail-banking/bank_accounts/{id}
Update bank account
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json
Account
idstringcustomer_idstringcountrystringtypestringcurrencystringbalanceobjectamountnumbercurrencystringamount_formattedstring
statusstringfreeze_reasonstringbranch_idstringroutingobjectlabelstringcodestringaccountNumberstring
status_historyarrayarray of:
statusstringreasonstringrecorded_atstring
opened_atstringcreatedAtstringupdatedAtstring
Responses
200- Updated
application/jsonAccountidstringcustomer_idstringcountrystringtypestringcurrencystringbalanceobjectamountnumbercurrencystringamount_formattedstring
statusstringfreeze_reasonstringbranch_idstringroutingobjectlabelstringcodestringaccountNumberstring
status_historyarrayarray of:
statusstringreasonstringrecorded_atstring
opened_atstringcreatedAtstringupdatedAtstring
404- Not found
POST /api/purple-suite/retail-banking/bank_accounts/{id}/freeze
Freeze a bank account
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json
reasonstring
Responses
200- Frozen
application/jsonAccountidstringcustomer_idstringcountrystringtypestringcurrencystringbalanceobjectamountnumbercurrencystringamount_formattedstring
statusstringfreeze_reasonstringbranch_idstringroutingobjectlabelstringcodestringaccountNumberstring
status_historyarrayarray of:
statusstringreasonstringrecorded_atstring
opened_atstringcreatedAtstringupdatedAtstring
404- Not found
422- Invalid state transition
POST /api/purple-suite/retail-banking/bank_accounts/{id}/unfreeze
Unfreeze a bank account
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json
reasonstring
Responses
200- Unfrozen
application/jsonAccountidstringcustomer_idstringcountrystringtypestringcurrencystringbalanceobjectamountnumbercurrencystringamount_formattedstring
statusstringfreeze_reasonstringbranch_idstringroutingobjectlabelstringcodestringaccountNumberstring
status_historyarrayarray of:
statusstringreasonstringrecorded_atstring
opened_atstringcreatedAtstringupdatedAtstring
404- Not found
422- Invalid state transition
GET /api/purple-suite/retail-banking/transactions
List account transactions
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) |
account_id | query | string | no | Filter by account id |
direction | query | string | no | Filter by direction |
channel | query | string | no | Filter by channel |
status | query | string | no | Filter by status |
Responses
200- Paginated list
application/jsondataarrayarray of:
Transactionidstringaccount_idstringcustomer_idstringcountrystringamountobjectamountnumbercurrencystringamount_formattedstring
directionstringchannelstringcounterpartystringstatusstringis_flaggedbooleanposted_atstringcreatedAtstringupdatedAtstring
nextCursorstring — Cursor for the next page, or null on the last pagetotalinteger — Total documents matching the filter
POST /api/purple-suite/retail-banking/transactions
Create transaction
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes |
Request body
application/json — required
Transaction
idstringaccount_idstringcustomer_idstringcountrystringamountobjectamountnumbercurrencystringamount_formattedstring
directionstringchannelstringcounterpartystringstatusstringis_flaggedbooleanposted_atstringcreatedAtstringupdatedAtstring
Responses
201- Created
application/jsonTransactionidstringaccount_idstringcustomer_idstringcountrystringamountobjectamountnumbercurrencystringamount_formattedstring
directionstringchannelstringcounterpartystringstatusstringis_flaggedbooleanposted_atstringcreatedAtstringupdatedAtstring
GET /api/purple-suite/retail-banking/transactions/{id}
Get transaction
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Found
application/jsonTransactionidstringaccount_idstringcustomer_idstringcountrystringamountobjectamountnumbercurrencystringamount_formattedstring
directionstringchannelstringcounterpartystringstatusstringis_flaggedbooleanposted_atstringcreatedAtstringupdatedAtstring
404- Not found
DELETE /api/purple-suite/retail-banking/transactions/{id}
Delete transaction
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/retail-banking/transactions/{id}
Update transaction
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json
Transaction
idstringaccount_idstringcustomer_idstringcountrystringamountobjectamountnumbercurrencystringamount_formattedstring
directionstringchannelstringcounterpartystringstatusstringis_flaggedbooleanposted_atstringcreatedAtstringupdatedAtstring
Responses
200- Updated
application/jsonTransactionidstringaccount_idstringcustomer_idstringcountrystringamountobjectamountnumbercurrencystringamount_formattedstring
directionstringchannelstringcounterpartystringstatusstringis_flaggedbooleanposted_atstringcreatedAtstringupdatedAtstring
404- Not found
GET /api/purple-suite/retail-banking/cards
List cards
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 |
account_id | query | string | no | Filter by account id |
status | query | string | no | Filter by status |
Responses
200- Paginated list
application/jsondataarrayarray of:
Cardidstringcustomer_idstringaccount_idstringcountrystringnetworkstringtypestringstatusstringlast_fourstringblock_reasonstringcreatedAtstringupdatedAtstring
nextCursorstring — Cursor for the next page, or null on the last pagetotalinteger — Total documents matching the filter
POST /api/purple-suite/retail-banking/cards
Issue card
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes |
Request body
application/json — required
Card
idstringcustomer_idstringaccount_idstringcountrystringnetworkstringtypestringstatusstringlast_fourstringblock_reasonstringcreatedAtstringupdatedAtstring
Responses
201- Created
application/jsonCardidstringcustomer_idstringaccount_idstringcountrystringnetworkstringtypestringstatusstringlast_fourstringblock_reasonstringcreatedAtstringupdatedAtstring
GET /api/purple-suite/retail-banking/cards/{id}
Get card
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Found
application/jsonCardidstringcustomer_idstringaccount_idstringcountrystringnetworkstringtypestringstatusstringlast_fourstringblock_reasonstringcreatedAtstringupdatedAtstring
404- Not found
DELETE /api/purple-suite/retail-banking/cards/{id}
Delete card
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/retail-banking/cards/{id}
Update card
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json
Card
idstringcustomer_idstringaccount_idstringcountrystringnetworkstringtypestringstatusstringlast_fourstringblock_reasonstringcreatedAtstringupdatedAtstring
Responses
200- Updated
application/jsonCardidstringcustomer_idstringaccount_idstringcountrystringnetworkstringtypestringstatusstringlast_fourstringblock_reasonstringcreatedAtstringupdatedAtstring
404- Not found
POST /api/purple-suite/retail-banking/cards/{id}/block
Block a card
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json
reasonstring
Responses
200- Blocked
application/jsonCardidstringcustomer_idstringaccount_idstringcountrystringnetworkstringtypestringstatusstringlast_fourstringblock_reasonstringcreatedAtstringupdatedAtstring
404- Not found
422- Invalid state transition
POST /api/purple-suite/retail-banking/cards/{id}/unblock
Unblock a card
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Unblocked
application/jsonCardidstringcustomer_idstringaccount_idstringcountrystringnetworkstringtypestringstatusstringlast_fourstringblock_reasonstringcreatedAtstringupdatedAtstring
404- Not found
422- Invalid state transition
GET /api/purple-suite/retail-banking/products
List banking products
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) |
category | query | string | no | Filter by category |
active | query | string | no | Filter by active flag |
Responses
200- Paginated list
application/jsondataarrayarray of:
Productidstringcountrystringnamestringcategorystringinterest_ratenumbermin_amountobjectamountnumbercurrencystringamount_formattedstring
eligibility_summarystringactivebooleancreatedAtstringupdatedAtstring
nextCursorstring — Cursor for the next page, or null on the last pagetotalinteger — Total documents matching the filter
POST /api/purple-suite/retail-banking/products
Create banking product
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes |
Request body
application/json — required
Product
idstringcountrystringnamestringcategorystringinterest_ratenumbermin_amountobjectamountnumbercurrencystringamount_formattedstring
eligibility_summarystringactivebooleancreatedAtstringupdatedAtstring
Responses
201- Created
application/jsonProductidstringcountrystringnamestringcategorystringinterest_ratenumbermin_amountobjectamountnumbercurrencystringamount_formattedstring
eligibility_summarystringactivebooleancreatedAtstringupdatedAtstring
GET /api/purple-suite/retail-banking/products/{id}
Get banking product
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Found
application/jsonProductidstringcountrystringnamestringcategorystringinterest_ratenumbermin_amountobjectamountnumbercurrencystringamount_formattedstring
eligibility_summarystringactivebooleancreatedAtstringupdatedAtstring
404- Not found
DELETE /api/purple-suite/retail-banking/products/{id}
Delete banking product
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/retail-banking/products/{id}
Update banking product
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json
Product
idstringcountrystringnamestringcategorystringinterest_ratenumbermin_amountobjectamountnumbercurrencystringamount_formattedstring
eligibility_summarystringactivebooleancreatedAtstringupdatedAtstring
Responses
200- Updated
application/jsonProductidstringcountrystringnamestringcategorystringinterest_ratenumbermin_amountobjectamountnumbercurrencystringamount_formattedstring
eligibility_summarystringactivebooleancreatedAtstringupdatedAtstring
404- Not found
GET /api/purple-suite/retail-banking/loans
List loans
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 |
delinquency_bucket | query | string | no | Filter by delinquency bucket |
Responses
200- Paginated list
application/jsondataarrayarray of:
Loanidstringcustomer_idstringproduct_idstringcountrystringtypestringprincipalobjectamountnumbercurrencystringamount_formattedstring
outstandingobjectamountnumbercurrencystringamount_formattedstring
interest_ratenumberterm_monthsintegerstatusstringdpdinteger — Days past duedelinquency_bucketstringnext_due_datestringrepayment_schedulearrayarray of:
installment_nointegerdue_datestringamountobjectamountnumbercurrencystringamount_formattedstring
statusstringpaid_atstring
createdAtstringupdatedAtstring
nextCursorstring — Cursor for the next page, or null on the last pagetotalinteger — Total documents matching the filter
POST /api/purple-suite/retail-banking/loans
Create loan
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes |
Request body
application/json — required
Loan
idstringcustomer_idstringproduct_idstringcountrystringtypestringprincipalobjectamountnumbercurrencystringamount_formattedstring
outstandingobjectamountnumbercurrencystringamount_formattedstring
interest_ratenumberterm_monthsintegerstatusstringdpdinteger — Days past duedelinquency_bucketstringnext_due_datestringrepayment_schedulearrayarray of:
installment_nointegerdue_datestringamountobjectamountnumbercurrencystringamount_formattedstring
statusstringpaid_atstring
createdAtstringupdatedAtstring
Responses
201- Created
application/jsonLoanidstringcustomer_idstringproduct_idstringcountrystringtypestringprincipalobjectamountnumbercurrencystringamount_formattedstring
outstandingobjectamountnumbercurrencystringamount_formattedstring
interest_ratenumberterm_monthsintegerstatusstringdpdinteger — Days past duedelinquency_bucketstringnext_due_datestringrepayment_schedulearrayarray of:
installment_nointegerdue_datestringamountobjectamountnumbercurrencystringamount_formattedstring
statusstringpaid_atstring
createdAtstringupdatedAtstring
GET /api/purple-suite/retail-banking/loans/{id}
Get loan
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Found
application/jsonLoanidstringcustomer_idstringproduct_idstringcountrystringtypestringprincipalobjectamountnumbercurrencystringamount_formattedstring
outstandingobjectamountnumbercurrencystringamount_formattedstring
interest_ratenumberterm_monthsintegerstatusstringdpdinteger — Days past duedelinquency_bucketstringnext_due_datestringrepayment_schedulearrayarray of:
installment_nointegerdue_datestringamountobjectamountnumbercurrencystringamount_formattedstring
statusstringpaid_atstring
createdAtstringupdatedAtstring
404- Not found
DELETE /api/purple-suite/retail-banking/loans/{id}
Delete loan
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/retail-banking/loans/{id}
Update loan
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json
Loan
idstringcustomer_idstringproduct_idstringcountrystringtypestringprincipalobjectamountnumbercurrencystringamount_formattedstring
outstandingobjectamountnumbercurrencystringamount_formattedstring
interest_ratenumberterm_monthsintegerstatusstringdpdinteger — Days past duedelinquency_bucketstringnext_due_datestringrepayment_schedulearrayarray of:
installment_nointegerdue_datestringamountobjectamountnumbercurrencystringamount_formattedstring
statusstringpaid_atstring
createdAtstringupdatedAtstring
Responses
200- Updated
application/jsonLoanidstringcustomer_idstringproduct_idstringcountrystringtypestringprincipalobjectamountnumbercurrencystringamount_formattedstring
outstandingobjectamountnumbercurrencystringamount_formattedstring
interest_ratenumberterm_monthsintegerstatusstringdpdinteger — Days past duedelinquency_bucketstringnext_due_datestringrepayment_schedulearrayarray of:
installment_nointegerdue_datestringamountobjectamountnumbercurrencystringamount_formattedstring
statusstringpaid_atstring
createdAtstringupdatedAtstring
404- Not found
GET /api/purple-suite/retail-banking/loan_applications
List loan applications
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 |
stage | query | string | no | Filter by stage |
Responses
200- Paginated list
application/jsondataarrayarray of:
LoanApplicationidstringcustomer_idstringproduct_idstringcountrystringtypestringrequested_amountobjectamountnumbercurrencystringamount_formattedstring
purposestringstagestringrequired_documentsarrayarray of:
doc_typestringstatusstring
eligibility_scoreintegerdecision_reasonstringassigned_rmstringstage_historyarrayarray of:
stagestringreasonstringrecorded_atstring
createdAtstringupdatedAtstring
nextCursorstring — Cursor for the next page, or null on the last pagetotalinteger — Total documents matching the filter
POST /api/purple-suite/retail-banking/loan_applications
Submit loan application
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes |
Request body
application/json — required
LoanApplication
idstringcustomer_idstringproduct_idstringcountrystringtypestringrequested_amountobjectamountnumbercurrencystringamount_formattedstring
purposestringstagestringrequired_documentsarrayarray of:
doc_typestringstatusstring
eligibility_scoreintegerdecision_reasonstringassigned_rmstringstage_historyarrayarray of:
stagestringreasonstringrecorded_atstring
createdAtstringupdatedAtstring
Responses
201- Created
application/jsonLoanApplicationidstringcustomer_idstringproduct_idstringcountrystringtypestringrequested_amountobjectamountnumbercurrencystringamount_formattedstring
purposestringstagestringrequired_documentsarrayarray of:
doc_typestringstatusstring
eligibility_scoreintegerdecision_reasonstringassigned_rmstringstage_historyarrayarray of:
stagestringreasonstringrecorded_atstring
createdAtstringupdatedAtstring
GET /api/purple-suite/retail-banking/loan_applications/{id}
Get loan application
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Found
application/jsonLoanApplicationidstringcustomer_idstringproduct_idstringcountrystringtypestringrequested_amountobjectamountnumbercurrencystringamount_formattedstring
purposestringstagestringrequired_documentsarrayarray of:
doc_typestringstatusstring
eligibility_scoreintegerdecision_reasonstringassigned_rmstringstage_historyarrayarray of:
stagestringreasonstringrecorded_atstring
createdAtstringupdatedAtstring
404- Not found
DELETE /api/purple-suite/retail-banking/loan_applications/{id}
Delete loan application
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/retail-banking/loan_applications/{id}
Update loan application
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json
LoanApplication
idstringcustomer_idstringproduct_idstringcountrystringtypestringrequested_amountobjectamountnumbercurrencystringamount_formattedstring
purposestringstagestringrequired_documentsarrayarray of:
doc_typestringstatusstring
eligibility_scoreintegerdecision_reasonstringassigned_rmstringstage_historyarrayarray of:
stagestringreasonstringrecorded_atstring
createdAtstringupdatedAtstring
Responses
200- Updated
application/jsonLoanApplicationidstringcustomer_idstringproduct_idstringcountrystringtypestringrequested_amountobjectamountnumbercurrencystringamount_formattedstring
purposestringstagestringrequired_documentsarrayarray of:
doc_typestringstatusstring
eligibility_scoreintegerdecision_reasonstringassigned_rmstringstage_historyarrayarray of:
stagestringreasonstringrecorded_atstring
createdAtstringupdatedAtstring
404- Not found
POST /api/purple-suite/retail-banking/loan_applications/{id}/documents
Set loan application document status
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json — required
doc_typestring requiredstatusstring required
Responses
200- Updated
application/jsonLoanApplicationidstringcustomer_idstringproduct_idstringcountrystringtypestringrequested_amountobjectamountnumbercurrencystringamount_formattedstring
purposestringstagestringrequired_documentsarrayarray of:
doc_typestringstatusstring
eligibility_scoreintegerdecision_reasonstringassigned_rmstringstage_historyarrayarray of:
stagestringreasonstringrecorded_atstring
createdAtstringupdatedAtstring
400- Invalid body
404- Not found
POST /api/purple-suite/retail-banking/loan_applications/{id}/transition
Advance a loan application
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json — required
stagestring requiredreasonstring
Responses
200- Updated
application/jsonLoanApplicationidstringcustomer_idstringproduct_idstringcountrystringtypestringrequested_amountobjectamountnumbercurrencystringamount_formattedstring
purposestringstagestringrequired_documentsarrayarray of:
doc_typestringstatusstring
eligibility_scoreintegerdecision_reasonstringassigned_rmstringstage_historyarrayarray of:
stagestringreasonstringrecorded_atstring
createdAtstringupdatedAtstring
400- Invalid stage
404- Not found
422- Invalid state transition
GET /api/purple-suite/retail-banking/interactions
List customer interactions
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 |
type | query | string | no | Filter by type |
Responses
200- Paginated list
application/jsondataarrayarray of:
Interactionidstringcustomer_idstringcountrystringtypestringsubjectstringsummarystringrmstringoccurred_atstringcreatedAtstringupdatedAtstring
nextCursorstring — Cursor for the next page, or null on the last pagetotalinteger — Total documents matching the filter
POST /api/purple-suite/retail-banking/interactions
Log customer interaction
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes |
Request body
application/json — required
Interaction
idstringcustomer_idstringcountrystringtypestringsubjectstringsummarystringrmstringoccurred_atstringcreatedAtstringupdatedAtstring
Responses
201- Created
application/jsonInteractionidstringcustomer_idstringcountrystringtypestringsubjectstringsummarystringrmstringoccurred_atstringcreatedAtstringupdatedAtstring
GET /api/purple-suite/retail-banking/interactions/{id}
Get customer interaction
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Found
application/jsonInteractionidstringcustomer_idstringcountrystringtypestringsubjectstringsummarystringrmstringoccurred_atstringcreatedAtstringupdatedAtstring
404- Not found
DELETE /api/purple-suite/retail-banking/interactions/{id}
Delete customer interaction
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/retail-banking/interactions/{id}
Update customer interaction
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json
Interaction
idstringcustomer_idstringcountrystringtypestringsubjectstringsummarystringrmstringoccurred_atstringcreatedAtstringupdatedAtstring
Responses
200- Updated
application/jsonInteractionidstringcustomer_idstringcountrystringtypestringsubjectstringsummarystringrmstringoccurred_atstringcreatedAtstringupdatedAtstring
404- Not found
GET /api/purple-suite/retail-banking/bank_opportunities
List banking opportunities
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 |
product_category | query | string | no | Filter by product category |
stage | query | string | no | Filter by stage |
Responses
200- Paginated list
application/jsondataarrayarray of:
Opportunityidstringcustomer_idstringcountrystringnamestringproduct_categorystringstagestringrecommendation_reasonstringvalueobjectamountnumbercurrencystringamount_formattedstring
createdAtstringupdatedAtstring
nextCursorstring — Cursor for the next page, or null on the last pagetotalinteger — Total documents matching the filter
POST /api/purple-suite/retail-banking/bank_opportunities
Create banking opportunity
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes |
Request body
application/json — required
Opportunity
idstringcustomer_idstringcountrystringnamestringproduct_categorystringstagestringrecommendation_reasonstringvalueobjectamountnumbercurrencystringamount_formattedstring
createdAtstringupdatedAtstring
Responses
201- Created
application/jsonOpportunityidstringcustomer_idstringcountrystringnamestringproduct_categorystringstagestringrecommendation_reasonstringvalueobjectamountnumbercurrencystringamount_formattedstring
createdAtstringupdatedAtstring
GET /api/purple-suite/retail-banking/bank_opportunities/{id}
Get banking opportunity
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Found
application/jsonOpportunityidstringcustomer_idstringcountrystringnamestringproduct_categorystringstagestringrecommendation_reasonstringvalueobjectamountnumbercurrencystringamount_formattedstring
createdAtstringupdatedAtstring
404- Not found
DELETE /api/purple-suite/retail-banking/bank_opportunities/{id}
Delete banking opportunity
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/retail-banking/bank_opportunities/{id}
Update banking opportunity
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json
Opportunity
idstringcustomer_idstringcountrystringnamestringproduct_categorystringstagestringrecommendation_reasonstringvalueobjectamountnumbercurrencystringamount_formattedstring
createdAtstringupdatedAtstring
Responses
200- Updated
application/jsonOpportunityidstringcustomer_idstringcountrystringnamestringproduct_categorystringstagestringrecommendation_reasonstringvalueobjectamountnumbercurrencystringamount_formattedstring
createdAtstringupdatedAtstring
404- Not found
GET /api/purple-suite/retail-banking/complaints
List customer complaints
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 |
category | query | string | no | Filter by category |
status | query | string | no | Filter by status |
Responses
200- Paginated list
application/jsondataarrayarray of:
Complaintidstringcustomer_idstringaccount_idstringcountrystringcategorystringchannelstringtitlestringstatusstringsla_policy_idstringsla_duestringknown_issue_idstringresolution_notesstringstatus_historyarrayarray of:
statusstringreasonstringrecorded_atstring
createdAtstringupdatedAtstring
nextCursorstring — Cursor for the next page, or null on the last pagetotalinteger — Total documents matching the filter
POST /api/purple-suite/retail-banking/complaints
Log customer complaint
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes |
Request body
application/json — required
Complaint
idstringcustomer_idstringaccount_idstringcountrystringcategorystringchannelstringtitlestringstatusstringsla_policy_idstringsla_duestringknown_issue_idstringresolution_notesstringstatus_historyarrayarray of:
statusstringreasonstringrecorded_atstring
createdAtstringupdatedAtstring
Responses
201- Created
application/jsonComplaintidstringcustomer_idstringaccount_idstringcountrystringcategorystringchannelstringtitlestringstatusstringsla_policy_idstringsla_duestringknown_issue_idstringresolution_notesstringstatus_historyarrayarray of:
statusstringreasonstringrecorded_atstring
createdAtstringupdatedAtstring
GET /api/purple-suite/retail-banking/complaints/{id}
Get customer complaint
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Found
application/jsonComplaintidstringcustomer_idstringaccount_idstringcountrystringcategorystringchannelstringtitlestringstatusstringsla_policy_idstringsla_duestringknown_issue_idstringresolution_notesstringstatus_historyarrayarray of:
statusstringreasonstringrecorded_atstring
createdAtstringupdatedAtstring
404- Not found
DELETE /api/purple-suite/retail-banking/complaints/{id}
Delete customer complaint
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/retail-banking/complaints/{id}
Update customer complaint
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json
Complaint
idstringcustomer_idstringaccount_idstringcountrystringcategorystringchannelstringtitlestringstatusstringsla_policy_idstringsla_duestringknown_issue_idstringresolution_notesstringstatus_historyarrayarray of:
statusstringreasonstringrecorded_atstring
createdAtstringupdatedAtstring
Responses
200- Updated
application/jsonComplaintidstringcustomer_idstringaccount_idstringcountrystringcategorystringchannelstringtitlestringstatusstringsla_policy_idstringsla_duestringknown_issue_idstringresolution_notesstringstatus_historyarrayarray of:
statusstringreasonstringrecorded_atstring
createdAtstringupdatedAtstring
404- Not found
POST /api/purple-suite/retail-banking/complaints/{id}/transition
Transition a complaint
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json — required
statusstring requiredresolution_notesstring
Responses
200- Updated
application/jsonComplaintidstringcustomer_idstringaccount_idstringcountrystringcategorystringchannelstringtitlestringstatusstringsla_policy_idstringsla_duestringknown_issue_idstringresolution_notesstringstatus_historyarrayarray of:
statusstringreasonstringrecorded_atstring
createdAtstringupdatedAtstring
400- Invalid status
404- Not found
422- Invalid state transition
GET /api/purple-suite/retail-banking/known_issues
List banking known issues
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) |
status | query | string | no | Filter by status |
affected_service | query | string | no | Filter by affected service |
Responses
200- Paginated list
application/jsondataarrayarray of:
KnownIssueidstringcountrystringtitlestringaffected_servicestringstatusstringworkaroundstringstarted_atstringcreatedAtstringupdatedAtstring
nextCursorstring — Cursor for the next page, or null on the last pagetotalinteger — Total documents matching the filter
POST /api/purple-suite/retail-banking/known_issues
Create banking known issue
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes |
Request body
application/json — required
KnownIssue
idstringcountrystringtitlestringaffected_servicestringstatusstringworkaroundstringstarted_atstringcreatedAtstringupdatedAtstring
Responses
201- Created
application/jsonKnownIssueidstringcountrystringtitlestringaffected_servicestringstatusstringworkaroundstringstarted_atstringcreatedAtstringupdatedAtstring
GET /api/purple-suite/retail-banking/known_issues/{id}
Get banking known issue
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Found
application/jsonKnownIssueidstringcountrystringtitlestringaffected_servicestringstatusstringworkaroundstringstarted_atstringcreatedAtstringupdatedAtstring
404- Not found
DELETE /api/purple-suite/retail-banking/known_issues/{id}
Delete banking known issue
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/retail-banking/known_issues/{id}
Update banking known issue
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json
KnownIssue
idstringcountrystringtitlestringaffected_servicestringstatusstringworkaroundstringstarted_atstringcreatedAtstringupdatedAtstring
Responses
200- Updated
application/jsonKnownIssueidstringcountrystringtitlestringaffected_servicestringstatusstringworkaroundstringstarted_atstringcreatedAtstringupdatedAtstring
404- Not found
GET /api/purple-suite/retail-banking/bank_sla_policies
List banking SLA policies
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) |
category | query | string | no | Filter by category |
Responses
200- Paginated list
application/jsondataarrayarray of:
SlaPolicyidstringcountrystringnamestringcategorystringresponse_hoursnumberresolution_hoursnumberregulatory_clockbooleancreatedAtstringupdatedAtstring
nextCursorstring — Cursor for the next page, or null on the last pagetotalinteger — Total documents matching the filter
POST /api/purple-suite/retail-banking/bank_sla_policies
Create banking SLA policy
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes |
Request body
application/json — required
SlaPolicy
idstringcountrystringnamestringcategorystringresponse_hoursnumberresolution_hoursnumberregulatory_clockbooleancreatedAtstringupdatedAtstring
Responses
201- Created
application/jsonSlaPolicyidstringcountrystringnamestringcategorystringresponse_hoursnumberresolution_hoursnumberregulatory_clockbooleancreatedAtstringupdatedAtstring
GET /api/purple-suite/retail-banking/bank_sla_policies/{id}
Get banking SLA policy
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Responses
200- Found
application/jsonSlaPolicyidstringcountrystringnamestringcategorystringresponse_hoursnumberresolution_hoursnumberregulatory_clockbooleancreatedAtstringupdatedAtstring
404- Not found
DELETE /api/purple-suite/retail-banking/bank_sla_policies/{id}
Delete banking SLA 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/retail-banking/bank_sla_policies/{id}
Update banking SLA policy
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Instance-ID | header | string | yes | |
id | path | string | yes |
Request body
application/json
SlaPolicy
idstringcountrystringnamestringcategorystringresponse_hoursnumberresolution_hoursnumberregulatory_clockbooleancreatedAtstringupdatedAtstring
Responses
200- Updated
application/jsonSlaPolicyidstringcountrystringnamestringcategorystringresponse_hoursnumberresolution_hoursnumberregulatory_clockbooleancreatedAtstringupdatedAtstring
404- Not found