Lucinity API (3.3)
Download OpenAPI specification:Download
Welcome to the Lucinity API!
Lucinity is an API-first SaaS solution for AML: our platform ingests your data to make integration and data publishing simple and seamless. Our modular approach separates the functionality of the user interface centered around customer use cases, but the backend APIs are unified so the system can scale with your needs.
Use this section to get familarized with the Lucinity API's syntax, payload, and data structures.
Following the steps detailed below, you'll be able to ingest data in the Lucinity platform and get started to Make Money Good.
At the core of the Lucinity data model are Actors: the legal entities and natural persons that make up your customer base.
These Actors can have Accounts, the medium or ledger where funds are stored and moved to or from. The Actor’s relationship with an Account is defined via Actor Accounts.
Actors are also the owners of financial Transactions, where funds move between Accounts of an Actor and a Counterparty.
Going deeper, you can provide Actor Associates, describing a link between your Actors. If you have additional insights into various risks associated with an Actor, you can send Risk Assessments that you've already performed outside of Lucinity. You can also segment your Actors into your custom-built Segmentation-Categories and -Groups.
If you are not using Lucinity's Transaction Monitoring, or if you want to combine it with another detection system, the Lucinity Case Manager also offers direct integration. By sending us Observation and Case data surfaced by your legacy system, you can still gain the full benefits of our Case Manager.
You can bring all this data into the Lucinity platform using a rich yet simple set of APIs. This documentation describes the structure of each data model, including which fields are required and which are optional. However, the exact set of required data can vary depending on your product package and integration needs. For guidance on what is necessary in your setup, we recommend first discussing with your internal project lead, and if needed, reaching out to the Lucinity Customer Success team.
The APIs ingest and return JSON-encoded requests and responses, and use HTTP response codes to present the result of your request, allowing you to track and respond efficiently.
As an AML solution intended for highly regulated financial institutions, Lucinity's APIs rest (no pun intended) on secure access through two authentication methods: API Keys and JWT Tokens, depending on the specific endpoint you're using.
See Authentication for how to obtain and use credentials for each method, and for guidance on keeping your API key secure.
Lucinity's products (Case Manager, Actor Intelligence, Transaction Monitoring, and more) require you to at minimum add data for Actors, Transactions and (optionally) Accounts. To utilize the Case Manager with externally sourced alerts, you'll additionally need Observations and Cases.
The six simple steps below walk you through the process of using the Lucinity APIs to publish data to the platform and get your instance of Lucinity up and running.
You can send the data in any order. However, to make it easier and more organized for data integration projects, we have structured data ingest around Actors, Accounts and Transactions.
1. Get Your Authentication Credentials Ready
Make sure you have your authentication credentials ready to authenticate with the Lucinity platform:
- For most endpoints: API Keys using the
x-api-keyheader - For specific endpoints: JWT Token credentials (Client ID and Client Secret) using the
Authorization: Bearerheader
2. Ingest Actor Data
The sidebar code snippet reflects the actor data fields required for initializing the system. See Actors for all available fields.
NOTE: There is a slight difference in the required fields between individuals and legal entities to ingest data. See the sidebar examples on how to ingest both actor types.
Transmitting Actor Data - Individual
const unirest = require("unirest");
unirest
.post("https://<your environment>/api/actors")
.headers({
"X-Api-Key": "<Secret API Key>",
});
.send({
id: "ACT985002241",
asOfDate: "2019-08-24",
status: "ACTIVE",
type: "INDIVIDUAL",
monitored: "YES",
displayName: "Samantha Jones",
name: "Samantha Jane Jones",
dateOfBirth: "1966-01-21",
gender: "FEMALE",
addresses: [
{
type: "HOME",
line1: "123 Bond Street",
line2: "Mayfair",
postcode: "W1S 1EJ",
city: "London",
country: "UK",
},
],
nationality: "UK",
dataSource: "source-name"
});
.then((response) => {
console.log(response.body);
})
.catch((err) => {
console.log(err);
});
Transmitting Actor Data - Legal Entity
const unirest = require("unirest");
unirest
.post("https://<your environment>/api/actors")
.headers({
"X-Api-Key": "<Secret API Key>",
});
.send({
id: "ACT985002242",
asOfDate: "2019-08-24",
status: "ACTIVE",
type: "LEGAL_ENTITY",
monitored: "YES",
displayName: "Vortexecurity",
name: "Vortexecurity",
legalEntity:
{
dateOfRegistration: "1991-01-09",
type: "PARTNERSHIP_LIMITED",
industry: [{
code: "561621",
type: "NAICS",
}]
},
addresses: [
{
type: "HOME",
line1: "123 Bond Street",
line2: "Mayfair",
postcode: "W1S 1EJ",
city: "London",
country: "UK",
},
],
nationality: "UK",
dataSource: "source-name"
});
.then((response) => {
console.log(response.body);
})
.catch((err) => {
console.log(err);
});
3. Ingest Account Data
The sidebar code snippet reflects the account data fields required for initializing the system. See Accounts for all available fields.
Transmitting Accounts Data
const unirest = require("unirest");
unirest
.send("https://<your environment>/api/accounts")
.headers({
"X-Api-Key": "<Secret API Key>",
})
.post({
id: "ACC99140294",
asOfDate: "2019-08-24",
accountType: "CURRENT",
currencyCode: "GBP",
openedDate: "2019-08-24",
terminationDate: null,
accountNumber: "2340-234-234234",
status: "ACTIVE",
monitored: "YES",
dataSource: "source-name",
})
.then((response) => {
console.log(response.body);
})
.catch((err) => {
console.log(err);
});
4. Ingest Actor Account Mapping
Use the provided code snippet to try it out.
Transmitting Actor-Account Mapping
const unirest = require("unirest");
unirest
.post("https://<your environment>/api/accounts/<Account ID>/actors")
.headers({
"X-Api-Key": "<Secret API Key>",
})
.send({
asOfDate: "2019-08-24",
actors: [
{
id: "ACT985002241",
role: "OWNER",
},
],
})
.then((response) => {
console.log(response.body);
})
.catch((err) => {
console.log(err);
});
5. Ingest Transaction Data
The sidebar code snippet reflects the required transaction data fields for initializing the system, see Transactions for all available fields.
Transmitting Transaction Data
const unirest = require("unirest");
unirest
.post("https://<your environment>/api/v2/transactions")
.headers({
"X-Api-Key": "<Secret API Key>",
})
.send({
id: "TXN949000250",
created_at: 1697470699,
direction: "OUTBOUND",
status: "COMPLETED",
description: "Transfer for bill xx",
channel: "ONLINE",
account_id: "ACC99140294",
amount: {
value: 100.15,
currency: "USD",
},
standardized_amount: 200.25,
account_balance: 4000.05,
account_owner_id: "ACT985002241",
method: "WIRE_TRANSFER",
purpose: "BILL_PAYMENT",
counterparty: {
object: "LEGAL_ENTITY",
id: "CPid",
name: "Vortexecurity",
account_info: {
account_number: "123-45-6789",
iban: "GB61xxxxxxxxxxxxxxxxxxxx",
country: "GBR",
},
industry: {
classification_identifier: "NAICS",
code: "561621",
},
metadata: {
identifiable_as_actor: "true",
},
},
metadata: {
international: "false",
},
})
.then((response) => {
console.log(response.body);
})
.catch((err) => {
console.log(err);
});
6. Actor Associates & Risk Assessment (Optional)
Use the provided code snippet to try it out. See Actor Associates and Risk Assessments for all available fields.
Transmitting Actor Associates
const unirest = require("unirest");
unirest
.post("https://<your environment>/api/actors/<Actor ID>/associates")
.headers({
"X-Api-Key": "<Secret API Key>",
})
.send({
asOfDate: "2019-08-24",
actorAssociates: [
{
id: "AA842099",
name: "Fred Patricks",
type: "REPRESENTATIVE",
customer: false,
dataSource: "source-name",
},
],
})
.then((response) => {
console.log(response.body);
})
.catch((err) => {
console.log(err);
});
Transmitting Risk Assesment
const unirest = require("unirest");
unirest
.post("https://<your environment>/api/actors/<Actor ID>/riskAssessments")
.headers({
"X-Api-Key": "<Secret API Key>",
})
.send([
{
asOfDate: "2019-08-24",
type: "PEP",
value: "1",
},
])
.then((response) => {
console.log(response.body);
})
.catch((err) => {
console.log(err);
});
That’s it! Expected more steps? Sorry to disappoint.
While there is a lot more you can do with the Lucinity APIs, including but not limited to Segmentation, Webhooks, and Workflows, this quick start guide should help you get started with the basics.
Congratulations, you are ready to Make Money Good with Lucinity. Have fun, and don't hesitate to reach out to us if you need assistance.
Lucinity uses two different authentication methods depending on the API endpoint you're accessing:
- Most API endpoints require API Key authentication using the
x-api-keyheader - Specific endpoints require JWT Token authentication using the
Authorization: Bearerheader
Check each endpoint's documentation to see which authentication method is required. The API documentation clearly indicates whether an endpoint uses API Key or JWT Token authentication.
API Key Authentication
API Keys provide a simple and reliable way to authenticate with the Lucinity API. Most Lucinity API endpoints use API Key authentication, including:
- Data ingestion endpoints (Actors, Accounts, Transactions, Observations)
- Case management endpoints
- Reporting and analytics endpoints
How it works:
API Keys are long-lived credentials that provide consistent access to your Lucinity environment
The client must send the key in an
x-api-keyheader when making requests to protected resourcesGenerate and manage your API keys via the Lucinity Admin Portal, which also lets you manage system access, monitored Scenarios, workflows, and other platform configuration. If you don't have portal access, contact your Customer Success Team to have a key issued.
API Key Authentication
headers = { "x-api-key": "{API_KEY}" };
API Key
Treat your secret API key as carefully, or more carefully, than you would treat your password. We recommend keeping it out of any version control system you may be using. Grant access only to those who need it or secure them through their own API credentials.
JWT Token Authentication
JWT (JSON Web Tokens) are short-lived, signed tokens that carry user information and permissions. This is the authentication method used by Lucinity's newer API endpoints — most endpoints still use API Keys. Endpoints that require JWT Tokens are specifically labelled as such.
How it works:
- JWTs are personalized tokens, coded for specific permissions, with a built-in expiration
- JWTs expire automatically after a short time, while API Keys have a longer expiration that can be extended as needed
- You'll need to request a new token for each session or when the current token expires
Getting Started:
- Obtain Credentials: Contact Lucinity to get your
Client IDandClient Secret - Request Token: Send a POST request to the authorization server to get your JWT token
- Use Token: Include the JWT token in the Authorization header for API requests
Step 1: Request JWT Token
// Request a new JWT token
const tokenResponse = await fetch("[Authorization Server URL]", {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded",
Host: "<your-environment>",
},
body: "grant_type=client_credentials&client_id=<clientId>&client_secret=<clientSecret>",
});
const { access_token } = await tokenResponse.json();
Step 2: Use JWT Token
// Use the JWT token for API requests
headers = {
Authorization: `Bearer ${access_token}`,
};
Core Data represents the data points you add to Lucinity from sources like your KYC pipeline, transactions, etc.
After ingested, it is then used by the Lucinity platform to calculate risk scores and other operations that gives the AML team intelligent insight into customer behavior.
Add Actor
Add actor to Lucinity.
Authorizations:
Request Body schema: application/jsonrequired
The Actor to be added to Lucinity.
| id required | string Primary identifier for the record, provided by you. Should be unique across records of the same type and stable across updates. |
| asOfDate required | string <date> Date the record became valid for the Actor, in ISO 8601 format ( The record with the latest |
| type required | object (ActorType) Enum: "INDIVIDUAL" "LEGAL_ENTITY" Whether this Actor is an individual person ( Determines which other fields are expected. |
| dataSource | string The name of your system where this record originated (e.g. |
| ingestDate | string <date-time> Timestamp when Lucinity ingested this record, in ISO 8601 format. Read-only. |
Array of objects (Reference) External-system references — a list of (system name, external id) pairs that let you correlate this record with other systems you operate. See the | |
Array of objects (address) A list of physical or legal addresses associated with the Actor. | |
object (CustomData) A key-value map for additional Actor attributes not already covered by the public API. Where possible, use the official fields — built-in functionality is limited for data stored in | |
| customerSince | string <date> Date the Actor first became a customer of the institution, in ISO 8601 format ( |
| dateOfBirth | string <date> Date of birth of the individual Actor, in ISO 8601 format ( Not applicable to legal entities. |
| domicile | string The legal jurisdiction considered the Actor's permanent home for legal purposes, as an ISO 3166 country code. Use alpha-3 (e.g. |
Array of objects (emailAddress) A list of email addresses associated with the Actor. | |
| gender | string (ActorGender) Enum: "FEMALE" "MALE" "OTHER" "UNSPECIFIED" Gender of an individual Actor — Not applicable to legal entities. |
Array of objects (GovernmentId) A list of government-issued identifiers for the Actor (passport, national ID, tax ID, etc.). See the | |
object (LegalEntity) Company-specific attributes (registration date, country of incorporation, legal structure, industry, website). Expected when | |
object (Metadata) Additional metadata attached to the Actor as a key/value map. Not intended for extra business data — use | |
| name | string The Actor's full name. For individuals, the complete name (e.g. "Samantha Jane Jones"); for legal entities, the registered company name. |
| nationality | string The Actor's nationality, as an ISO 3166 country code. Use alpha-3 (e.g. |
Array of objects (phone) A list of phone numbers associated with the Actor. | |
Array of objects (Link) Links to external resources related to the Actor (e.g. profile in another system, regulatory filings). Each | |
| status | string Enum: "ACTIVE" "TERMINATED" Lifecycle state of the Actor — |
| subType | Array of strings (ActorSubType) Items Enum: "CUSTOMER" "EMPLOYEE" "MERCHANT" "PSP" One or more roles this Actor plays relative to the financial institution. An Actor can hold multiple subtypes simultaneously (e.g. an employee who is also a customer).
|
| displayName | string Deprecated DEPRECATED — use |
object (Employee) Deprecated DEPRECATED. Previously: employment details (designation, department, office) for an Actor whose | |
| firstName | string Deprecated DEPRECATED — use |
| isActive | boolean Deprecated DEPRECATED — use |
| lastName | string Deprecated DEPRECATED — use |
| middleName | string Deprecated DEPRECATED — use |
| monitored | string Deprecated Enum: "NO" "YES" DEPRECATED — control monitoring scope via the Actor Exclusion endpoint. Previously: a |
Array of objects (Link) Deprecated DEPRECATED. Previously: links to other Lucinity Accounts related to this Actor. | |
| validationStatus | string (ValidationStatus) Deprecated Enum: "DUE_DILIGENCE" "MANUAL_ENTRY" "UNVALIDATED" "VALIDATED" "VENDOR_SUPPLIED_DATA" DEPRECATED. Previously: validation status for actor data. |
object (AccessClassification) Deprecated DEPRECATED. Previously: an access-classification reference controlling record visibility. | |
object (Classification) Deprecated DEPRECATED. Previously: an internal classification reference for the record. |
Responses
Request samples
- Payload
{- "id": "LUCINITY_ACTOR_ID_0002221233984",
- "dataSource": "Lucinity",
- "references": [
- {
- "id": "LUCINITY_INTERNAL_ID_123047124890",
- "systemName": "LucinityInternalService"
}
], - "metadata": {
- "someProperty": "SomeValue"
}, - "type": "INDIVIDUAL",
- "subType": [
- "EMPLOYEE"
], - "gender": "FEMALE",
- "name": "Wendy Byrde",
- "displayName": "Wendy Byrde",
- "firstName": "Wendy",
- "middleName": null,
- "lastName": "Byrde",
- "status": "ACTIVE",
- "monitored": "YES",
- "addresses": [
- {
- "type": "HOME",
- "line1": "6818 Gaines Ferry Rd",
- "line2": "",
- "postcode": "94109",
- "city": "Flowery Branch",
- "state": "GA",
- "country": "USA"
}
], - "phones": [
- {
- "type": "HOME",
- "number": "6135854487"
}
], - "nationality": "US",
- "domicile": "US",
- "taxResidency": "US",
- "asOfDate": "2023-01-01",
- "governmentIds": [
- {
- "id": "9423480129034",
- "type": "SSN",
- "issuingAuthority": "US",
- "expirationDate": null
}
], - "validationStatus": "VALIDATED",
- "customData": {
- "someProperty": "some value",
- "otherProperty": "other value"
}
}Response samples
- 200
- 400
- 422
- 500
{- "id": "LUCINITY_ACTOR_ID_0002221233984",
- "dataSource": "Lucinity",
- "references": [
- {
- "id": "LUCINITY_INTERNAL_ID_123047124890",
- "systemName": "LucinityInternalService"
}
], - "metadata": {
- "someProperty": "SomeValue"
}, - "type": "INDIVIDUAL",
- "subType": [
- "EMPLOYEE"
], - "gender": "FEMALE",
- "name": "Wendy Byrde",
- "displayName": "Wendy Byrde",
- "firstName": "Wendy",
- "middleName": null,
- "lastName": "Byrde",
- "status": "ACTIVE",
- "monitored": "YES",
- "addresses": [
- {
- "type": "HOME",
- "line1": "6818 Gaines Ferry Rd",
- "line2": "",
- "postcode": "94109",
- "city": "Flowery Branch",
- "state": "GA",
- "country": "USA"
}
], - "phones": [
- {
- "type": "HOME",
- "number": "6135854487"
}
], - "nationality": "US",
- "domicile": "US",
- "taxResidency": "US",
- "asOfDate": "2023-01-01",
- "governmentIds": [
- {
- "id": "9423480129034",
- "type": "SSN",
- "issuingAuthority": "US",
- "expirationDate": null
}
], - "validationStatus": "VALIDATED",
- "customData": {
- "someProperty": "some value",
- "otherProperty": "other value"
}
}Get Actor
Retrieves a single actor by identifier.
Authorizations:
path Parameters
| id required | string Actor ID |
Responses
Response samples
- 200
- 400
- 404
- 500
{- "id": "LUCINITY_ACTOR_ID_0002221233984",
- "dataSource": "Lucinity",
- "references": [
- {
- "id": "LUCINITY_INTERNAL_ID_123047124890",
- "systemName": "LucinityInternalService"
}
], - "metadata": {
- "someProperty": "SomeValue"
}, - "type": "INDIVIDUAL",
- "subType": [
- "EMPLOYEE"
], - "gender": "FEMALE",
- "name": "Wendy Byrde",
- "displayName": "Wendy Byrde",
- "firstName": "Wendy",
- "middleName": null,
- "lastName": "Byrde",
- "status": "ACTIVE",
- "monitored": "YES",
- "addresses": [
- {
- "type": "HOME",
- "line1": "6818 Gaines Ferry Rd",
- "line2": "",
- "postcode": "94109",
- "city": "Flowery Branch",
- "state": "GA",
- "country": "USA"
}
], - "phones": [
- {
- "type": "HOME",
- "number": "6135854487"
}
], - "nationality": "US",
- "domicile": "US",
- "taxResidency": "US",
- "asOfDate": "2023-01-01",
- "governmentIds": [
- {
- "id": "9423480129034",
- "type": "SSN",
- "issuingAuthority": "US",
- "expirationDate": null
}
], - "validationStatus": "VALIDATED",
- "customData": {
- "someProperty": "some value",
- "otherProperty": "other value"
}
}Add Actor Associates
Add associates to actors by ID.
Authorizations:
path Parameters
| id required | string Actor ID |
Request Body schema: application/jsonrequired
Associates to be tagged to an actor.
Array of objects (ActorAssociate) A list of actors and their relationship to the actor in the path parameter. | |
| asOfDate | string <date> Date this set of associates became valid, in ISO 8601 format ( Defaults to today if not provided. |
Responses
Request samples
- Payload
{- "actorAssociates": [
- {
- "id": "LUCINITY_ACTOR_ID_89012730812411",
- "references": [
- {
- "id": "LUCINITY_INTERNAL_ID_88614467199170002",
- "systemName": "LucinityInternalService"
}
], - "dataSource": "Lucinity Actor Database",
- "name": "Jonathan Hawker",
- "type": "Parent",
- "isCustomer": true
}
], - "asOfDate": "2023-04-22"
}Response samples
- 200
- 400
- 422
- 500
{- "actorAssociates": [
- {
- "id": "LUCINITY_ACTOR_ID_89012730812411",
- "references": [
- {
- "id": "LUCINITY_INTERNAL_ID_88614467199170002",
- "systemName": "LucinityInternalService"
}
], - "dataSource": "Lucinity Actor Database",
- "name": "Jonathan Hawker",
- "type": "Parent",
- "isCustomer": true
}
], - "asOfDate": "2023-04-22"
}Add Actor Exclusion
Define a monitoring exclusion on an actor, and the level of exclusion.
Authorizations:
path Parameters
| id required | string Actor ID |
Request Body schema: application/jsonrequired
Exclusion to be added for an actor.
| exclusion_type required | string Enum: "MONITORED" "NOT_MONITORED" "SUPPRESSED" The type of exclusion.
|
| stored_at | string <date-time> The datetime when the exclusion was stored defaults to current time. |
Responses
Request samples
- Payload
{- "exclusion_type": "MONITORED",
- "stored_at": "2019-08-24T14:15:22Z"
}Response samples
- 200
- 422
- 500
"ACTOR_ID_100000"Add Actor RiskAssessment.
Add risk assessment information to the actor.
Risk Assessments are data points that describe various risk vectors of the actor, and are most often updated independently of the actor's core information.
Authorizations:
path Parameters
| id required | string Actor ID |
Request Body schema: application/jsonrequired
Risk Assessment to be added for an actor.
If the payload includes multiple risk assessments of the same type, only the one with the latest asOfDate is stored.
| asOfDate required | string <date> Date the record became valid for this risk assessment, in ISO 8601 format ( The record with the latest |
| type required | string Enum: "ADVERSE_MEDIA" "INTERNAL" "INTP" "PEP" "PP" "SANCTIONS" "SAR" Used to specify Risk Assessment type. The type can be any string, depending on organizational guidelines, except for the following which are reserved for specific Risk Assessments:
|
| value required | string The value of the given risk The expected format (e.g. a numeric score, or |
| comment | string Reason for the risk, or a related comment. |
Responses
Request samples
- Payload
[- {
- "asOfDate": "2019-08-24",
- "comment": "string",
- "type": "ADVERSE_MEDIA",
- "value": "string"
}
]Response samples
- 200
- 422
- 500
[- {
- "asOfDate": "2019-08-24",
- "comment": "string",
- "type": "ADVERSE_MEDIA",
- "value": "string"
}
]Add Actor Extended Info
Add actor extended information.
Authorizations:
path Parameters
| id required | string Actor ID |
Request Body schema: application/jsonrequired
Summary information on balances, number of products the actor has with the institution and dates when products were acquired
| depositsTotalBalanceLcy | number Total balance of deposits |
| depositsFixedTermBalanceLcy | number The total position of fixed deposits |
| depositsAvailableBalanceLcy | number Total balance of deposits |
| loansBalanceLcy | number Total balance of loans |
| loansPrincipalLcy | number Loan total original value, converted to LCY |
| loansOverdraftLcy | number Overdraft total balance, converted to LCY |
| loansCreditLimitLcy | number Total credit limit for loans |
| securitiesBalanceLcy | number Total balance for securities |
| derivativesBalanceLcy | number Total balance for derivatives |
| numberOfBankAccounts | number Number of bank accounts the customer has |
| numberOfDepositAccounts | number Number of deposit accounts the customer has |
| numberOfCreditCards | number Number of credit cards the customer has |
| numberOfLoans | number Number of loans the customer has |
| numberOfSecuritiesPortfolios | number Securities number of portfolios |
| numberOfDerivativesPortfolios | number Derivatives number of portfolios |
| firstProductDate | string <date> The first known product that a customer had |
| lastProductDate | string <date> Last known product by a customer |
| asOfDate | string <date> The date when this record became valid. Defaults to today if not provided. |
Responses
Request samples
- Payload
{- "depositsTotalBalanceLcy": 100000,
- "depositsFixedTermBalanceLcy": 100000,
- "depositsAvailableBalanceLcy": 100000,
- "loansBalanceLcy": 100000,
- "loansPrincipalLcy": 100000,
- "loansOverdraftLcy": 100000,
- "loansCreditLimitLcy": 100000,
- "securitiesBalanceLcy": 100000,
- "derivativesBalanceLcy": 100000,
- "numberOfBankAccounts": 100000,
- "numberOfDepositAccounts": 100000,
- "numberOfCreditCards": 100000,
- "numberOfLoans": 100000,
- "numberOfSecuritiesPortfolios": 100000,
- "numberOfDerivativesPortfolios": 100000,
- "firstProductDate": "2019-08-24",
- "lastProductDate": "2019-08-24",
- "asOfDate": "2019-08-24"
}Response samples
- 200
- 400
- 422
- 500
{- "depositsTotalBalanceLcy": 100000,
- "depositsFixedTermBalanceLcy": 100000,
- "depositsAvailableBalanceLcy": 100000,
- "loansBalanceLcy": 100000,
- "loansPrincipalLcy": 100000,
- "loansOverdraftLcy": 100000,
- "loansCreditLimitLcy": 100000,
- "securitiesBalanceLcy": 100000,
- "derivativesBalanceLcy": 100000,
- "numberOfBankAccounts": 100000,
- "numberOfDepositAccounts": 100000,
- "numberOfCreditCards": 100000,
- "numberOfLoans": 100000,
- "numberOfSecuritiesPortfolios": 100000,
- "numberOfDerivativesPortfolios": 100000,
- "firstProductDate": "2019-08-24",
- "lastProductDate": "2019-08-24",
- "asOfDate": "2019-08-24",
- "actorId": "string"
}Get Actor Extended Info
Get actor extended information.
Authorizations:
path Parameters
| id required | string Actor ID |
Responses
Response samples
- 200
- 404
- 500
{- "depositsTotalBalanceLcy": 100000,
- "depositsFixedTermBalanceLcy": 100000,
- "depositsAvailableBalanceLcy": 100000,
- "loansBalanceLcy": 100000,
- "loansPrincipalLcy": 100000,
- "loansOverdraftLcy": 100000,
- "loansCreditLimitLcy": 100000,
- "securitiesBalanceLcy": 100000,
- "derivativesBalanceLcy": 100000,
- "numberOfBankAccounts": 100000,
- "numberOfDepositAccounts": 100000,
- "numberOfCreditCards": 100000,
- "numberOfLoans": 100000,
- "numberOfSecuritiesPortfolios": 100000,
- "numberOfDerivativesPortfolios": 100000,
- "firstProductDate": "2019-08-24",
- "lastProductDate": "2019-08-24",
- "asOfDate": "2019-08-24",
- "actorId": "string"
}Add Actor Risk Score
Add a risk score to a specific actor based on id
Authorizations:
path Parameters
| id required | string Actor ID |
Request Body schema: application/jsonrequired
The risk object to associate with the actor.
| risk_rule_id required | string Identifier for the risk rule used to generate the score. |
| as_of_date required | string <date> The date when this record became valid. |
| final_score required | number The numeric risk score to be used for this actor and risk-rule. Should be the same as the |
| calculated_score | float The underlying numeric risk score produced by the risk logic or engine, based on underlying data and parameters. |
| data_source | string An identifier that represents the system from which the record is originated. |
object (Metadata) Reference attribute | |
| override | boolean Boolean flag indicating whether the final_score was manually set by a user, overriding the calculated value. |
| override_reason | string Explanation or justification for manual override (512-character limit). |
| risk_rule_version | string The specific version of the rule that produced the score, ensuring auditability and reproducibility. |
object A named key-value mapping of sub-score components contributing to the overall score (e.g., jurisdiction risk, product risk). Enables explainability. |
Responses
Request samples
- Payload
{- "as_of_date": "2019-08-24",
- "final_score": 0.68,
- "risk_rule_id": "r001",
- "calculated_score": 0.76,
- "data_source": "Lucinity - Risk Engine",
- "metadata": {
- "someProperty": "some value"
}, - "override": true,
- "override_reason": "Manual review",
- "risk_rule_version": "v2.0.0",
- "sub_scores": {
- "jurisdiction": 0.3,
- "transactions": 0.4,
- "internal_intelligence": 0
}
}Response samples
- 400
- 500
{- "errors": [
- "string"
]
}Get Actor Risk Score
Get actors risk scores.
Authorizations:
query Parameters
| filter.actor_ids.in[] | string Example: filter.actor_ids.in[]=actor1,actor2 Comma seperated list of actor ids to filter by |
| filter.data_source | string Example: filter.data_source=Risk Engine Filter the risk scores by the data source, reserved values: 'Lucinity - On Demand Risk Calculations', 'Lucinity - Risk Engine' |
| filter.ingested_at.from | string <date-time> Example: filter.ingested_at.from=2025-10-05T12:00:00Z Filter by when the Risk Score was received or stored at, only returning Risk Scores received later than the given timestamp |
| filter.ingested_at.to | string <date-time> Example: filter.ingested_at.to=2025-10-05T12:00:00Z Filter by when the Risk Score was received or created at, only returning Risk Scores received earlier than the given timestamp |
| filter.newest_entry | boolean Example: filter.newest_entry=true Filter the risk scores by returning only the newest Risk Score entry for each Actor |
| risk_rule_id | string Example: risk_rule_id=6d9e94e2-bc8a-45b4-91cf-3b2b1f9e34b6 Filter the Risk Scores by only returning the Risk Scores that were created by the risk rule corresponding to given id |
| offset | integer <int32> Example: offset=2 The offset for pagination. |
| limit | integer <int32> Example: limit=3 Maximum number of retrived entries. Must be a positive number not greater than 1000. |
Responses
Response samples
- 200
- 400
[- {
- "actor_id": "12345678-1234-1234-1234-123456789012",
- "as_of_date": "2025-10-05",
- "calculated_score": 22,
- "data_source": "Lucinity Risk Engine",
- "final_score": 22,
- "ingested_at": "2025-10-05T12:00:00Z",
- "ingested_by": "12345678-1234-1234-1234-123456789012",
- "metadata": {
- "someProperty": "some value"
}, - "override": false,
- "override_reason": "PEP - Unusual activity with a PEP",
- "risk_band": "low_risk",
- "risk_rule_id": "12345678-1234-1234-1234-123456789012",
- "rule_name": "CDD Risk Rule",
- "sub_scores": {
- "sub_scores": {
- "risk_condition_1": 10,
- "risk_condition_2": 12
}
}
}
]Add Account
Add a single account to Lucinity. Accounts are the medium or ledger where funds are stored and moved to or from.
Authorizations:
Request Body schema: application/jsonrequired
Account JSON passed in request body.
| id required | string Primary identifier for the record, provided by you. Should be unique across records of the same type and stable across updates. |
| asOfDate required | string <date> Date the record became valid for the Account, in ISO 8601 format ( The record with the latest |
| accountType required | string (AccountType) Enum: "BOTH_HIC_AND_COD" "CASH_ON_DELIVERY" "CREDIT_CARD" "CURRENT" "HELD_IN_CUSTODY" "LOAN" "MONEY_MARKET" "PRE_PAID_CARD" "SAVINGS" "TERM_DEPOSIT" "TRADING" The high-level type of Account. Required. Can have implications on which type-specific attributes apply ( |
| dataSource | string The name of your system where this record originated (e.g. |
| ingestDate | string <date-time> Timestamp when Lucinity ingested this record, in ISO 8601 format. Read-only. |
Array of objects (Reference) External-system references — a list of (system name, external id) pairs that let you correlate this record with other systems you operate. See the | |
| accountNumber | string The identifier assigned by the financial institution to the Account. |
| bankCode | string The identifier of the bank or financial institution where the Account resides. |
| currencyCode | string The currency for the balance on this Account, as an ISO 4217 three-letter currency code (e.g. |
object (CustomData) A key-value map for additional Account attributes not already covered by the public API. Where possible, use the official fields — built-in functionality is limited for data stored in | |
| iban | string International Bank Account Number (IBAN); identifies the Account in cross-border transactions. |
object (LoanFacility) Loan-specific attributes (principal, installment, term, security status). Expected when | |
object (Metadata) Additional metadata attached to the Account as a key/value map. Not intended for extra business data — use | |
| name | string A user-friendly name for the Account, used when surfacing it in the Lucinity UI (e.g. "Personal Checking"). |
| openedDate | string <date> Date the Account was originally opened, in ISO 8601 format ( |
| productId | string The product identifier your institution uses internally for this Account. Companion to |
| productType | string The product name your institution uses internally for this Account (e.g. Unlike |
| status | string Enum: "ACTIVE" "CLOSED" "LOCKED" "NO_TRADING" "TERMINATED" Lifecycle state of the Account.
|
| subType | string Enum: "BUSINESS" "PERSONAL" Distinguishes personal from business use — |
object (TermDepositFacility) Term-deposit-specific attributes (start date, maturity, interest rate). Expected when | |
| accountAgreementId | string Deprecated DEPRECATED. Previously: agreement identifier associated with the Account. |
| accountInDefault | boolean Deprecated DEPRECATED. Previously: boolean indicating the Account is in default or overdraft. |
| accountInDefaultDays | integer Deprecated DEPRECATED. Previously: number of days the Account has been in default or overdraft. |
object (AccountBalance) Deprecated DEPRECATED. Previously: Account balance details. | |
| beneficiaryOwnerId | string Deprecated DEPRECATED. Previously: identifier of the beneficial owner of the Account. |
object (TradingAccount) Deprecated DEPRECATED. Previously: trading account details. | |
| closingBalance | number Deprecated DEPRECATED. Previously: balance when the Account was closed. |
| collateral | boolean Deprecated DEPRECATED. Previously: boolean indicating the Account is held as collateral. |
object (CreditFacility) Deprecated DEPRECATED. Previously: credit facility details. | |
| depositable | boolean Deprecated DEPRECATED. Previously: boolean indicating deposits are allowed. |
| domicile | string Deprecated DEPRECATED. Previously: 2-letter country code of the Account's jurisdiction. |
Array of objects (Interest) Deprecated DEPRECATED. Previously: interest details for the Account. | |
| internal | boolean Deprecated DEPRECATED. Previously: boolean indicating the Account is owned by the bank. |
| monitored | string Deprecated Enum: "NO" "YES" DEPRECATED. Previously: |
| primaryRepresentativeId | string Deprecated DEPRECATED. Previously: identifier of the primary representative for the Account. |
| terminated | boolean Deprecated DEPRECATED. Previously: boolean flag indicating the Account was terminated. Redundant with the |
| terminationDate | string <date> Deprecated DEPRECATED. Previously: date when the Account was terminated. |
| withdrawable | boolean Deprecated DEPRECATED. Previously: boolean indicating withdrawals are allowed. |
object (AccessClassification) Deprecated DEPRECATED. Previously: an access-classification reference controlling record visibility. | |
object (Classification) Deprecated DEPRECATED. Previously: an internal classification reference for the record. |
Responses
Request samples
- Payload
{- "id": "568975e1-d16b-4e5a-9ecd-16cb105a6976",
- "dataSource": "SWAGGER_API",
- "ingestDate": "2020-05-03T14:03:41.089Z",
- "references": [
- {
- "id": "7777771-555-4e5a-9ecd-16cb105a6976",
- "systemName": "SystemName"
}
], - "accountType": "BOTH_HIC_AND_COD",
- "asOfDate": "2019-08-24",
- "accountNumber": "string",
- "bankCode": "string",
- "currencyCode": "string",
- "customData": {
- "someProperty": "some value",
- "otherProperty": "other value"
}, - "iban": "string",
- "loan": {
- "isSettled": true,
- "loanFinalDate": "2019-08-24",
- "loanInstallment": 100000,
- "loanIssueDate": "2019-08-24",
- "loanPeriodRemaining": 0,
- "loanPrincipal": 1000000,
- "loanPrincipalLcy": 100000,
- "loanSecured": true,
- "loanType": "AUTO",
- "paymentFrequency": "MONTHLY"
}, - "metadata": {
- "someProperty": "some value"
}, - "name": "Mez's account",
- "openedDate": "2019-08-24",
- "productId": "string",
- "productType": "string",
- "status": "ACTIVE",
- "subType": "BUSINESS",
- "termDeposit": {
- "termDepositPeriod": 0,
- "termDepositType": "DATE",
- "termDepositWithdrawalDate": "2019-08-24",
- "termDepositWithdrawalNotice": true
}, - "accountAgreementId": "string",
- "accountInDefault": true,
- "accountInDefaultDays": 0,
- "balance": {
- "depositBalance": 100000,
- "depositBalanceLcy": 100000,
- "depositDisposableBalance": 100000,
- "depositDisposableBalanceLcy": 100000,
- "loanBalance": 100000,
- "loanBalanceLcy": 100000
}, - "beneficiaryOwnerId": "string",
- "brokerage": {
- "aggUnit": "string",
- "brokerId": "string",
- "brokerLocation": "string",
- "brokerName": "string",
- "is1940ActAccount": "NO",
- "isCareBroker": true,
- "isDmaBroker": true,
- "isErisa": "NO",
- "isFiduciary": true,
- "isGiveIn": true,
- "isGiveUp": true,
- "isWhiteLabel": true,
- "locateByPass": true,
- "primaryDesk": "string",
- "region": "LN, HK",
- "regulatoryExemptionType": "string",
- "settlementInstruction": "string",
- "shortName": "string",
- "tradingDesk": "string"
}, - "closingBalance": 9865,
- "collateral": true,
- "credit": {
- "creditCardNumberMasked": "string",
- "creditFinalDate": "2019-08-24",
- "creditIssueDate": "2019-08-24",
- "creditLimit": 100000,
- "creditLimitLcy": 100000,
- "creditType": "CREDIT_CARD",
- "creditUnused": 100000,
- "creditUnusedLcy": 100000
}, - "depositable": true,
- "domicile": "string",
- "interest": [
- {
- "interestCode": "string",
- "interestForm": "FIXED",
- "interestRate": 100000,
- "interestType": "DEPOSIT"
}
], - "internal": true,
- "monitored": "NO",
- "primaryRepresentativeId": "string",
- "terminated": true,
- "terminationDate": "2019-08-24",
- "withdrawable": true,
- "accessClassification": {
- "city": [
- "string"
], - "country": [
- "string"
], - "department": [
- "string"
], - "domain": [
- "string"
], - "elevatedPrivilege": [
- "string"
], - "group": [
- "string"
], - "region": [
- "string"
]
}, - "classification": {
- "business": [
- "string"
], - "city": [
- "string"
], - "country": [
- "string"
], - "department": [
- "string"
], - "domain": [
- "string"
], - "group": [
- "string"
], - "region": [
- "string"
]
}
}Response samples
- 200
- 422
- 500
{- "id": "568975e1-d16b-4e5a-9ecd-16cb105a6976",
- "dataSource": "SWAGGER_API",
- "ingestDate": "2020-05-03T14:03:41.089Z",
- "references": [
- {
- "id": "7777771-555-4e5a-9ecd-16cb105a6976",
- "systemName": "SystemName"
}
], - "accountType": "BOTH_HIC_AND_COD",
- "asOfDate": "2019-08-24",
- "accountNumber": "string",
- "bankCode": "string",
- "currencyCode": "string",
- "customData": {
- "someProperty": "some value",
- "otherProperty": "other value"
}, - "iban": "string",
- "loan": {
- "isSettled": true,
- "loanFinalDate": "2019-08-24",
- "loanInstallment": 100000,
- "loanIssueDate": "2019-08-24",
- "loanPeriodRemaining": 0,
- "loanPrincipal": 1000000,
- "loanPrincipalLcy": 100000,
- "loanSecured": true,
- "loanType": "AUTO",
- "paymentFrequency": "MONTHLY"
}, - "metadata": {
- "someProperty": "some value"
}, - "name": "Mez's account",
- "openedDate": "2019-08-24",
- "productId": "string",
- "productType": "string",
- "status": "ACTIVE",
- "subType": "BUSINESS",
- "termDeposit": {
- "termDepositPeriod": 0,
- "termDepositType": "DATE",
- "termDepositWithdrawalDate": "2019-08-24",
- "termDepositWithdrawalNotice": true
}, - "accountAgreementId": "string",
- "accountInDefault": true,
- "accountInDefaultDays": 0,
- "balance": {
- "depositBalance": 100000,
- "depositBalanceLcy": 100000,
- "depositDisposableBalance": 100000,
- "depositDisposableBalanceLcy": 100000,
- "loanBalance": 100000,
- "loanBalanceLcy": 100000
}, - "beneficiaryOwnerId": "string",
- "brokerage": {
- "aggUnit": "string",
- "brokerId": "string",
- "brokerLocation": "string",
- "brokerName": "string",
- "is1940ActAccount": "NO",
- "isCareBroker": true,
- "isDmaBroker": true,
- "isErisa": "NO",
- "isFiduciary": true,
- "isGiveIn": true,
- "isGiveUp": true,
- "isWhiteLabel": true,
- "locateByPass": true,
- "primaryDesk": "string",
- "region": "LN, HK",
- "regulatoryExemptionType": "string",
- "settlementInstruction": "string",
- "shortName": "string",
- "tradingDesk": "string"
}, - "closingBalance": 9865,
- "collateral": true,
- "credit": {
- "creditCardNumberMasked": "string",
- "creditFinalDate": "2019-08-24",
- "creditIssueDate": "2019-08-24",
- "creditLimit": 100000,
- "creditLimitLcy": 100000,
- "creditType": "CREDIT_CARD",
- "creditUnused": 100000,
- "creditUnusedLcy": 100000
}, - "depositable": true,
- "domicile": "string",
- "interest": [
- {
- "interestCode": "string",
- "interestForm": "FIXED",
- "interestRate": 100000,
- "interestType": "DEPOSIT"
}
], - "internal": true,
- "monitored": "NO",
- "primaryRepresentativeId": "string",
- "terminated": true,
- "terminationDate": "2019-08-24",
- "withdrawable": true,
- "accessClassification": {
- "city": [
- "string"
], - "country": [
- "string"
], - "department": [
- "string"
], - "domain": [
- "string"
], - "elevatedPrivilege": [
- "string"
], - "group": [
- "string"
], - "region": [
- "string"
]
}, - "classification": {
- "business": [
- "string"
], - "city": [
- "string"
], - "country": [
- "string"
], - "department": [
- "string"
], - "domain": [
- "string"
], - "group": [
- "string"
], - "region": [
- "string"
]
}
}Add Account Balance
Add balance for an account.
Authorizations:
path Parameters
| id required | string The account id. |
Request Body schema: application/jsonrequired
A balance for the account
| currency required | string/[A-Z]{3}/ ISO currency of the balance |
| current required | number The balance on the account at the end of day |
| asOfDate | string <date> The date when this record became valid |
| available | number The available balance on the account at the end of day |
| type | string (BalanceType) Value: "CLOSING" The type of balance, e.g. CLOSING indicating EOD balance |
Responses
Request samples
- Payload
{- "currency": "USD",
- "current": 5000,
- "asOfDate": "2019-08-24",
- "available": 4000,
- "type": "CLOSING"
}Response samples
- 200
- 422
- 500
{- "currency": "USD",
- "current": 5000,
- "accountId": "ACC0001",
- "asOfDate": "2019-08-24",
- "available": 4000,
- "ingestDate": "2019-08-24T14:15:22Z",
- "internalId": "a083f3a8-f055-4252-a22d-ed476ca082ed",
- "type": "CLOSING"
}Add Actor to Account
Add actor/actors to account by ID. This provides association between the two entities.
Authorizations:
path Parameters
| id required | string The account id to add the actors. |
Request Body schema: application/jsonrequired
The Actor (single or multiple) object that needs to be associated to the account
required | Array of objects List of the actors associated with account and their role |
| asOfDate | string <date> The date when this record became valid. Defaults to today if not provided. |
Responses
Request samples
- Payload
{- "actors": [
- {
- "id": "ACT00001",
- "role": "OWNER"
}
], - "asOfDate": "2024-01-01"
}Response samples
- 200
- 400
- 422
- 500
{- "actors": [
- {
- "id": "ACT00001",
- "role": "OWNER"
}
], - "asOfDate": "2024-01-01"
}Remove Actor from Account
Remove actor from account. This removes the association between the two entities.
Authorizations:
path Parameters
| account_id required | string The account id to remove from the actor. |
| actor_id required | string The actor id to remove from the account. |
Responses
Response samples
- 404
{- "error": "Account Actor relation does not exist"
}Add Transaction
Notes:
- Transaction screening is a feature that is configured by Lucinity, and may not be configured for your environment. Please contact Lucinity support for more information.
- Monitoring is not bi-directional when both the
account_owner_idand the counterparty are customers. In such cases, a separate transaction must be sent with the roles reversed (the counterparty becoming theaccount_owner_id, with the oppositedirection).
Authorizations:
query Parameters
| blocking | string If the screening process is synchronous or asynchronous,
currently |
| operations | string Comma-separated list of what kind of screening the transaction should return.
Supported values FRAUD and SANCTIONS. example: |
header Parameters
| idempotency-key | string Example: 96760494-8c70-4279-a7c3-0d11e3c9aa6c Unique value generated by the client which the resource server uses to recognize subsequent retries of the same request |
Request Body schema: application/jsonrequired
| id required | string Primary identifier for the transaction. |
| created_at required | number The timestamp of when the transaction occurred. Measured in seconds in unix epoch timestamp. |
| direction required | string Enum: "INBOUND" "OUTBOUND" The direction of a transaction is |
| status required | string Enum: "CANCELLED" "COMPLETED" "FAILED" "PENDING" Status or condition of the transaction.
Note: Only |
required | object (Amount) Amount and currency code of the transaction that occurred. |
| standardized_amount required | number Value of the transaction in the default currency configured in the Lucinity platform. Always a positive value. |
| account_id required | string The identifier of the Account the money is moving into or out of. |
required | any Enum: "EMPTY" "INDIVIDUAL" "ACCOUNT_INFO" "LEGAL_ENTITY" "NAMED_ENTITY" Counterparty represents the other party in the transaction, and can be one of the following:
|
| account_owner_id required | string The identifier of the Actor who owns the Account. This Actor will be monitored for the transaction. |
| account_balance | number The balance on the account after the transaction is settled. |
| channel | string Enum: "ATM" "BRANCH" "ONLINE" "POS" "UNKNOWN" The type of channel that was used to initiate the transaction. If this property is not provided it will default to
|
| channel_location_id | string The unique identifier for the channel location associated with the transaction. Has to match a location code ingested through /channel_locations. |
object (schemas-CustomData) A key-value map for additional Transaction attributes not already covered by the public API. Where possible, use the official fields — built-in functionality is limited for data stored in | |
| description | string A free-form description of the transaction — typically the memo or narration field from the originating system. |
object (Device) Device section contains information on the device which the transaction was performed on. | |
object (Metadata) Metadata describing the object. This field is not intended to add additional information to the object, rather add information about the object's attributes. Reserved Metadata Keywords:
| |
| method | string Enum: "CARD" "CASH" "CHECK" "DIRECT_DEBIT" "VIRTUAL" "WIRE_TRANSFER" Method of the transaction.
Either |
| purpose | string Enum: "BILL_PAYMENT" "CHARGEBACK" "CLOSING" "CORRECTION" "FEE" "FUNDING" "INTEREST_PAYMENT" "INTRA_ACTOR" "LOAN_INSTALLMENT" "LOAN_ORIGINAL_AMOUNT" "PAY_IN" "PAY_OUT" "PRINCIPAL_PAYMENT" "REFUND" "REVERSE" "SETTLEMENT" Purpose of the transaction.
|
| user_id | string User ID of the entity performing the transaction. For example, the user of a corporate card, or the user ID in an online platform that initiated the transaction. |
| user_name | string User name of the entity performing the transaction. |
Responses
Request samples
- Payload
{- "id": "1b9c926d-52d1-4c2f-bc1d-8a1d8f9d5e89",
- "created_at": 1654236000,
- "direction": "OUTBOUND",
- "status": "COMPLETED",
- "description": "Payment for goods",
- "channel": "ONLINE",
- "channel_location_id": "3121f4a3-e89b-12d3-a456-426618394724",
- "account_id": "5f1bcb7e-7e39-42e0-9d4c-d10be236cd28",
- "amount": {
- "value": 100.15,
- "currency": "USD"
}, - "standardized_amount": 200.25,
- "account_balance": 500.25,
- "account_owner_id": "1deb5316-cd35-4fe9-bce9-08a8bd3933b1",
- "method": "CARD",
- "purpose": "BILL_PAYMENT",
- "metadata": {
- "international": "true",
- "exclude_from_monitoring": "true"
}, - "custom_data": {
- "custom_field": "custom_value"
}, - "device": {
- "id": "123e4567-e89b-12d3-a456-426614174000",
- "ip_address": "2001:db8:85a3::8a2e:370:7334"
}, - "counterparty": {
- "object": "INDIVIDUAL",
- "id": "fa9e7f3c-9b62-45c2-bb64-9a8e06e366be",
- "name": "John Doe",
- "birth_date": "1985-10-15",
- "postal_addresses": [
- {
- "lines": [
- "123 Main Street"
], - "postal_code": "12345",
- "city": "Cityville",
- "state": "Stateville",
- "country": "USA",
- "location": "HOME"
}
], - "account_info": {
- "bank_name": "Bank of America",
- "bic": "BOFAUS3N",
- "bank_code": "123456",
- "account_number": "1234567890",
- "iban": "US1234567890"
}, - "industry": {
- "classification_identifier": "MCC",
- "code": "1234"
}, - "metadata": {
- "identifiable_as_actor": "false"
}
}
}Response samples
- 200
- 400
- 500
{- "transaction_id": "1b9c926d-52d1-4c2f-bc1d-8a1d8f9d5e89",
- "request_id": "ccb3f54c-4aa2-47cf-8a0b-c1b34a43a520",
- "screening_results": [
- {
- "provider_name": "SEON",
- "response": "MISS"
}, - {
- "provider_name": "NETERIUM",
- "response": "MISS"
}
]
}Get Transaction
Retrieves a single transaction by identifier.
Authorizations:
path Parameters
| id required | string The identifier for the transaction. |
Responses
Response samples
- 200
- 400
- 500
{- "id": "1b9c926d-52d1-4c2f-bc1d-8a1d8f9d5e89",
- "created_at": 1654236000,
- "direction": "OUTBOUND",
- "status": "COMPLETED",
- "description": "Payment for goods",
- "channel": "ONLINE",
- "channel_location_id": "3121f4a3-e89b-12d3-a456-426618394724",
- "account_id": "5f1bcb7e-7e39-42e0-9d4c-d10be236cd28",
- "amount": {
- "value": 100.15,
- "currency": "USD"
}, - "standardized_amount": 200.25,
- "account_balance": 500.25,
- "account_owner_id": "1deb5316-cd35-4fe9-bce9-08a8bd3933b1",
- "method": "CARD",
- "purpose": "BILL_PAYMENT",
- "metadata": {
- "international": "true",
- "exclude_from_monitoring": "true"
}, - "custom_data": {
- "custom_field": "custom_value"
}, - "device": {
- "id": "123e4567-e89b-12d3-a456-426614174000",
- "ip_address": "2001:db8:85a3::8a2e:370:7334"
}, - "counterparty": {
- "object": "INDIVIDUAL",
- "id": "fa9e7f3c-9b62-45c2-bb64-9a8e06e366be",
- "name": "John Doe",
- "birth_date": "1985-10-15",
- "postal_addresses": [
- {
- "lines": [
- "123 Main Street"
], - "postal_code": "12345",
- "city": "Cityville",
- "state": "Stateville",
- "country": "USA",
- "location": "HOME"
}
], - "account_info": {
- "bank_name": "Bank of America",
- "bic": "BOFAUS3N",
- "bank_code": "123456",
- "account_number": "1234567890",
- "iban": "US1234567890"
}, - "industry": {
- "classification_identifier": "MCC",
- "code": "1234"
}, - "metadata": {
- "identifiable_as_actor": "false"
}
}
}Create Channel Location
Allows customers to add new locations to the platform. This method is used to populate the location information that will later be referenced in transactions.
Authorizations:
Request Body schema: application/jsonrequired
| id required | string Unique identifier for the channel location. |
| type required | string Enum: "ATM" "BRANCH" "OTHER" Defines the type of the location. |
required | object |
Responses
Request samples
- Payload
{- "id": "location-123",
- "type": "ATM",
- "address": {
- "street": [
- "123 Main St",
- "Suite 200"
], - "city": "Springfield",
- "state": "IL",
- "postal_code": "62701",
- "country": "USA"
}
}Response samples
- 200
{ }Get All Channel Locations
Retrieves a list of all channel locations in the platform, with optional parameters for pagination, filtering, and sorting.
Authorizations:
query Parameters
| offset | integer Default: 0 The zero-based offset index in the result set. For example, an offset of |
| limit | integer [ 1 .. 1000 ] Default: 200 The maximum number of items to return in this query. |
| filter_type | string Enum: "ATM" "BRANCH" "OTHER" Filters the list by location type. |
| sort_by | string Sorts the results by a specified field (e.g., |
Responses
Response samples
- 200
{- "locations": [
- {
- "id": "location-123",
- "type": "ATM",
- "address": {
- "street": [
- "123 Main St",
- "Suite 200"
], - "city": "Springfield",
- "state": "IL",
- "postal_code": "62701",
- "country": "USA"
}
}, - {
- "id": "location-124",
- "type": "BRANCH",
- "address": {
- "street": [
- "321 Main St",
- "Suite 400"
], - "city": "Springfield",
- "state": "IL",
- "postal_code": "62701",
- "country": "USA"
}
}
]
}Add Observation
Add an Observation to Lucinity. Observations represent alerts, findings, or reviews on an Actor that Lucinity uses to build cases.
The following observation types can be created via this endpoint:
GenericObservation— the default for most workflows, including AML transaction monitoring, onboarding review, and other custom review needs.FraudObservation— fraud alerts from your fraud detection systems. Can be used for real-time case reviews.SanctionsObservation— sanctions or watchlist matches from your screening systems. Can be used for real-time case reviews.
Authorizations:
query Parameters
| create_case | string Deprecated DEPRECATED. Previously: would create a case automatically containing this observation, and affect the response payload accordingly. |
Request Body schema: application/jsonrequired
The observation object to be sent to Lucinity.
| transaction_ids required | Array of strings List of transaction IDs that triggered this observation. Will be displayed in the case. |
| type required | string Value: "ALERT_GENERIC" Identifies the observation type. Fixed per concrete type (e.g. |
| date required | number The timestamp of the event this observation refers to. Measured in seconds since the Unix epoch. |
required | Array of objects (ObservationActor) The Actor(s) this observation applies to. |
| id required | string Primary identifier for the record, provided by you. Should be unique across records of the same type and stable across updates. |
| description | string Longer human-readable description of the observation. |
| title | string Short human-readable title for the observation. |
| dataSource | string The name of your system where this record originated (e.g. |
object (Metadata) A key-value map of metadata about the record. Not intended for extra business data — use | |
Array of objects (Reference) External-system references — a list of (system name, external id) pairs that let you correlate this record with other systems you operate. See the | |
| batchId | string Optional batch identifier from your system, used to group observations that were detected or ingested together. |
| behaviorDescription | string Longer human-readable description of the compliance risk covered by the detector. |
| behaviorId | string Identifier of the detector that created this observation — e.g. a rule ID, scenario ID, or internal reference from your detection system. |
| behaviorName | string Human-readable name of the compliance risk covered by the detector. |
object (CustomData) A key-value map for additional observation attributes not already covered by the schema. Where possible, use the official fields — built-in functionality is limited for data stored in | |
Array of objects (ObservationFeatures) List of features (attribute–value pairs) that contributed to raising this observation. Used to explain why the observation was triggered. | |
Array of objects (RuleObject) List of rules that triggered this observation. See the | |
| version | string The version of this observation, if it has been sent multiple times — for example, with corrections or additional information. Can be a number, an arbitrary string, or an internal record identifier. |
object (AccessClassification) Deprecated DEPRECATED. Previously: an access-classification reference controlling record visibility. | |
object (Classification) Deprecated DEPRECATED. Previously: an internal classification reference for the record. |
Responses
Request samples
- Payload
{- "transaction_ids": [
- "string"
], - "description": "string",
- "title": "string",
- "type": "ALERT_GENERIC",
- "id": "568975e1-d16b-4e5a-9ecd-16cb105a6976",
- "dataSource": "SWAGGER_API",
- "metadata": {
- "someProperty": "some value"
}, - "references": [
- {
- "id": "7777771-555-4e5a-9ecd-16cb105a6976",
- "systemName": "SystemName"
}
], - "actors": [
- {
- "actorId": "LUCINITY_ACTOR_ID_89012730812411",
- "primary": true
}
], - "date": 1654236000,
- "batchId": "string",
- "behaviorDescription": "string",
- "behaviorId": "string",
- "behaviorName": "string",
- "custom_data": {
- "someProperty": "some value",
- "otherProperty": "other value"
}, - "features": [
- {
- "group": "string",
- "items": [
- {
- "name": "string",
- "value": 0
}
]
}
], - "rules": [
- {
- "id": "string",
- "conditions": [
- {
- "id": "string",
- "matched": true
}
], - "custom_data": {
- "someProperty": "some value",
- "otherProperty": "other value"
}, - "date": 0,
- "name": "string",
- "score": "string",
- "status": "string"
}
], - "version": "string",
- "accessClassification": {
- "city": [
- "string"
], - "country": [
- "string"
], - "department": [
- "string"
], - "domain": [
- "string"
], - "elevatedPrivilege": [
- "string"
], - "group": [
- "string"
], - "region": [
- "string"
]
}, - "classification": {
- "business": [
- "string"
], - "city": [
- "string"
], - "country": [
- "string"
], - "department": [
- "string"
], - "domain": [
- "string"
], - "group": [
- "string"
], - "region": [
- "string"
]
}
}Response samples
- 200
- 400
- 422
- 500
[- {
- "transaction_ids": [
- "string"
], - "description": "string",
- "title": "string",
- "type": "string",
- "id": "568975e1-d16b-4e5a-9ecd-16cb105a6976",
- "dataSource": "SWAGGER_API",
- "metadata": {
- "someProperty": "some value"
}, - "references": [
- {
- "id": "7777771-555-4e5a-9ecd-16cb105a6976",
- "systemName": "SystemName"
}
], - "actors": [
- {
- "actorId": "LUCINITY_ACTOR_ID_89012730812411",
- "primary": true
}
], - "date": 1654236000,
- "batchId": "string",
- "behaviorDescription": "string",
- "behaviorId": "string",
- "behaviorName": "string",
- "custom_data": {
- "someProperty": "some value",
- "otherProperty": "other value"
}, - "features": [
- {
- "group": "string",
- "items": [
- {
- "name": "string",
- "value": 0
}
]
}
], - "rules": [
- {
- "id": "string",
- "conditions": [
- {
- "id": "string",
- "matched": true
}
], - "custom_data": {
- "someProperty": "some value",
- "otherProperty": "other value"
}, - "date": 0,
- "name": "string",
- "score": "string",
- "status": "string"
}
], - "version": "string",
- "accessClassification": {
- "city": [
- "string"
], - "country": [
- "string"
], - "department": [
- "string"
], - "domain": [
- "string"
], - "elevatedPrivilege": [
- "string"
], - "group": [
- "string"
], - "region": [
- "string"
]
}, - "classification": {
- "business": [
- "string"
], - "city": [
- "string"
], - "country": [
- "string"
], - "department": [
- "string"
], - "domain": [
- "string"
], - "group": [
- "string"
], - "region": [
- "string"
]
}, - "ingestDate": "2019-08-24T14:15:22Z",
- "internalId": "6868d0ce-34a2-4e78-b137-31229ba3e81a",
- "businessDate": "2019-08-24T14:15:22Z",
- "caseId": "string",
- "finalized": true,
- "submitterInternalId": "string",
- "taxonomyDescription": "string"
}
]Get Observation
Retrieves a single Observation by identifier. Any observation type may be returned.
AmlV2Observation and RuleObservation are Lucinity-managed types generated internally by the platform's detection engines. They cannot be created through the POST endpoint.
Authorizations:
path Parameters
| id required | string The observation ID. |
Responses
Response samples
- 200
- 400
- 422
- 500
{- "transaction_ids": [
- "string"
], - "description": "string",
- "title": "string",
- "type": "ALERT_GENERIC",
- "id": "568975e1-d16b-4e5a-9ecd-16cb105a6976",
- "dataSource": "SWAGGER_API",
- "metadata": {
- "someProperty": "some value"
}, - "references": [
- {
- "id": "7777771-555-4e5a-9ecd-16cb105a6976",
- "systemName": "SystemName"
}
], - "actors": [
- {
- "actorId": "LUCINITY_ACTOR_ID_89012730812411",
- "primary": true
}
], - "date": 1654236000,
- "batchId": "string",
- "behaviorDescription": "string",
- "behaviorId": "string",
- "behaviorName": "string",
- "custom_data": {
- "someProperty": "some value",
- "otherProperty": "other value"
}, - "features": [
- {
- "group": "string",
- "items": [
- {
- "name": "string",
- "value": 0
}
]
}
], - "rules": [
- {
- "id": "string",
- "conditions": [
- {
- "id": "string",
- "matched": true
}
], - "custom_data": {
- "someProperty": "some value",
- "otherProperty": "other value"
}, - "date": 0,
- "name": "string",
- "score": "string",
- "status": "string"
}
], - "version": "string",
- "accessClassification": {
- "city": [
- "string"
], - "country": [
- "string"
], - "department": [
- "string"
], - "domain": [
- "string"
], - "elevatedPrivilege": [
- "string"
], - "group": [
- "string"
], - "region": [
- "string"
]
}, - "classification": {
- "business": [
- "string"
], - "city": [
- "string"
], - "country": [
- "string"
], - "department": [
- "string"
], - "domain": [
- "string"
], - "group": [
- "string"
], - "region": [
- "string"
]
}, - "ingestDate": "2019-08-24T14:15:22Z",
- "internalId": "6868d0ce-34a2-4e78-b137-31229ba3e81a",
- "businessDate": "2019-08-24T14:15:22Z",
- "caseId": "string",
- "finalized": true,
- "submitterInternalId": "string",
- "taxonomyDescription": "string"
}Add Actors to Observation
Add actors to observation.
Authorizations:
path Parameters
| id required | string Observation id |
Request Body schema: application/jsonrequired
Actors to be added for a given observation.
| actorId required | string An id for an actor that is to be reviewed as part of the observation. |
| primary | boolean Whether this Actor is the primary subject of the observation, rather than only peripherally related to it. Each observation should have at least one primary Actor. |
Responses
Request samples
- Payload
[- {
- "actorId": "LUCINITY_ACTOR_ID_89012730812411",
- "primary": true
}
]Response samples
- 200
- 400
- 500
{- "status": "success"
}Get Cases
Retrieves a list of cases.
Authorizations:
query Parameters
| limit | number Example: limit=10 Sets the max number of items returned in the result set for this query. Defaults to 200. |
| offset | number Example: offset=30 Sets the offset on the index into the list of items in the result set. Defaults to 0. |
| sort.by | string Sorts the results based on specified fields and directions. Example:
|
| filter.workflow.id.in[] | string Filters the results based on the workflow id. Examples:
|
| filter.workflow.step_id.in[] | string Filters the results based on the workflow step_id. Examples:
|
| filter.workflow.status.in[] | string Filters the results based on the workflow status. Examples:
|
| filter.workflow.state.in[] | string Filters the results based on the workflow state. Examples:
|
| filter.type.in[] | string Filters the results based on the case type. Examples:
|
| filter.assigned | boolean Filters the results based on the case assignment status. Examples:
|
| filter.tags.id.in[] | string Filters the results based on cases with any of the given flags. Examples:
|
| filter.tags.id.all[] | string Filters the results based on cases with all of the given flags. Examples:
|
| filter.created_at.from | string <date-time> Filters the results based on the creation date of the case. Examples:
|
| filter.created_at.to | string <date-time> Filters the results based on the creation date of the case. Examples:
|
| filter.updated_at.from | string <date-time> Filters the results based on the update date of the case. Examples:
|
| filter.updated_at.to | string <date-time> Filters the results based on the update date of the case. Examples:
|
Responses
Response samples
- 200
[- {
- "id": "5fa9e93b-3a93-4e6a-82cd-6d9dad7b0d74",
- "workflow": {
- "id": "1",
- "step_id": "NEW",
- "status": "OPEN",
- "state": "NEW"
}, - "created_at": "2025-01-06T13:39:659123Z",
- "updated_at": "2025-01-07T14:44:359729Z",
- "type": "ANALYSIS",
- "tags": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "label": "Suspicious"
}
]
}
]Create a new Case
Create a new Case in the Lucinity platform. The Case will be created with the provided details.
Authorizations:
Request Body schema: application/jsonrequired
| id | string <uuid> Optional unique identifier for the case. Used to support idempotent creation, allowing the same request to be safely retried without creating duplicate cases. |
| focal_actor_id | string Deprecated The actor id of the focal actor of the case. |
Array of objects (CaseActor) <= 1000 items List of actor ids associated with the case. | |
| observation_ids | Array of strings List of observation ids that are associated with the case. |
object (Metadata) Metadata describing the object. This field is not intended to add additional information to the object, rather add information about the object's attributes. Reserved Metadata Keywords:
| |
Array of objects (Communication) List of communications that are associated with the case. Each communication should include detailed information such as the type, sender, receiver, subject, and content. | |
| type | string The type of case being created. If the property is not provided it will default to
|
| workflow_id | string Specifies the workflow to which the case should be assigned. The workflow defines the associated workboard where the case will appear. If the workflow_id is not provided, the case will be placed in the default workflow. The workflow_id can be obtained in the platform settings. |
| created_at | string or null <date-time> The creation date of the case, in ISO 8601 format. Defaults to the current timestamp. |
Responses
Request samples
- Payload
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "focal_actor_id": "2928938-29892-92983-923892839",
- "actors": [
- {
- "id": "ACT00001",
- "type": "CONNECTION"
}
], - "observation_ids": [
- "929298-2929110-11-292-1212"
], - "metadata": {
- "someProperty": "some value"
}, - "communications": [
- {
- "communication_type": "email",
- "communication_id": "2928938-29892-92983-923892839",
- "subject": "Urgent: Update Required",
- "content": "Please update your account information.",
- "metadata": {
- "someProperty": "some value"
}, - "custom_data": {
- "property1": "string",
- "property2": "string"
}
}
], - "type": "ANALYSIS",
- "workflow_id": "string",
- "created_at": "2019-08-24T14:15:22Z"
}Response samples
- 200
- 422
{- "case_id": "5fa9e93b-3a93-4e6a-82cd-6d9dad7b0d74"
}Update a Case
Update an existing Case in the Lucinity platform. The Case will be updated with the provided details.
Authorizations:
Request Body schema: application/jsonrequired
| communication_ids | Array of strings List of communication ids that should be associated with the case. |
Array of objects List of communication objects to create and associate with the case |
Responses
Request samples
- Payload
{- "communication_ids": [
- "COMMS2023010300001",
- "COMMS2023010300002"
], - "communications": [
- [
- {
- "id": "comms1",
- "created_at": 1715729952,
- "sent_at": 1715729952,
- "subject": "Blabla",
- "sender_id": "[email protected]"
}
]
]
}Response samples
- 200
- 422
{- "case_id": "CASE25618010303001",
- "communicationIds": [
- "comms1",
- "comms2"
]
}Get Case
Retrieves a single case by identifier.
Authorizations:
path Parameters
| id required | string The Case Id. |
Responses
Response samples
- 200
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "created_at": "2025-01-06T13:39:659123Z",
- "updated_at": "2025-01-07T14:44:359729Z",
- "workflow": {
- "id": "1",
- "name": "CASE_REVIEW",
- "status": "OPEN",
- "state": "NEW",
- "type": "CASE_REVIEW",
- "step_id": "NEW",
- "version": 1
}, - "actors": [
- {
- "id": "ACT00001",
- "type": "CONNECTION",
- "decision": "string",
- "property1": "string",
- "property2": "string"
}
], - "observations": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "feedback": "NOT_SUSPICIOUS"
}
], - "tags": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "label": "Suspicious"
}
], - "metadata": {
- "someProperty": "some value"
}, - "resolution": "string",
- "source": "string",
- "jurisdiction": "AUS",
- "type": "ANALYSIS",
- "narrative": "The case involves a potentially suspicious financial transaction in Australia,\nexhibiting characteristics commonly associated with rapid movement of funds.",
- "property1": "string",
- "property2": "string"
}Update case
Updates the fields in the case that has the provided ID. Notes:
- Updating an array is an additive insert operation, meaning that the new values are appended to the existing array.
Authorizations:
path Parameters
| id required | string The Case ID. |
Request Body schema: application/jsonrequired
Resolution (string) or Resolution (number) or Resolution (integer) or Resolution (boolean) or Resolution (object) or Array of Resolution (arrays) (Resolution) Describes the reason behind a case closure. The content and structure of this field are flexible and can vary depending on the context. It is defined through the Custom Properties, which allows for dynamic extension and customization based on specific business needs. | |
additional property | string or number or integer or boolean or object or Array of arrays Custom properties whose keys must start with the prefix |
Responses
Request samples
- Payload
{- "resolution": "Not Suspicious",
- "c__custom_string_property": "custom_value",
- "c__custom_number_property": 12345,
- "c__custom_object_property": {
- "key": "value"
}
}Response samples
- 200
- 400
- 500
OK
Add an actor to a case
Creates a new actor entity and assigns it to the specified case.
Authorizations:
path Parameters
| id required | string The ID of the case to add the actor to. |
header Parameters
| lucinity-rfd-id | string <uuid> The rfd_id used to retrieve information about the request. Include it to complete an rfd item. |
Request Body schema: application/jsonrequired
required | Individual (object) or LegalEntity (object) (schemas-Actor) |
| type | string (CaseActorType) Enum: "CONNECTION" "FOCAL" The role that the actor has in the case. Defaults to |
object (components-schemas-CustomData) The custom data property can be used to add data in a key, value format to the object. This can e.g. be used for display purposes. Maximum length of this property is 10000 characters. |
Responses
Request samples
- Payload
{- "type": "CONNECTION",
- "custom_data": {
- "someProperty": "some value",
- "otherProperty": "other value"
}, - "actor": {
- "id": "ACT0001",
- "type": "INDIVIDUAL",
- "addresses": [
- {
- "city": "Beverly Hills",
- "country": "USA",
- "postal_code": "90210",
- "state": "CA",
- "street": [
- "123 Maple Street",
- "Apt 4B"
], - "type": "BUSINESS_ADDRESS_INDIVIDUAL"
}
], - "as_of_date": "2019-08-24",
- "custom_data": {
- "someProperty": "some value",
- "otherProperty": "other value"
}, - "customer_since": "2019-08-24",
- "data_source": "EXTERNAL_DATA_SOURCE",
- "date_of_birth": "2019-08-24",
- "domicile": "USA",
- "gender": "FEMALE",
- "government_ids": [
- {
- "expiration_date": "2019-08-24",
- "id": "123-45-6789",
- "issuing_authority": "US Government",
- "type": "SSN"
}
], - "metadata": {
- "some_property": "some_value"
}, - "name": "string",
- "nationality": "USA",
- "phones": [
- {
- "number": "123-456-7890",
- "type": "HOME",
- "custom_data": {
- "someProperty": "some value",
- "otherProperty": "other value"
}
}
], - "references": [
- {
- "id": "7777771-555-4e5a-9ecd-16cb105a6976",
- "system_name": "SystemName"
}
], - "status": "ACTIVE",
- "subtypes": [
- "CLIENT"
]
}
}Update multiple case actors
Updates multiple case actor relationships in a case. Maximum 1000 actors in each request.
Authorizations:
path Parameters
| id required | string The ID of the case the actors belong to. |
Request Body schema: application/jsonrequired
| actor_id | string The ID of the actor. |
object |
Responses
Request samples
- Payload
[- {
- "actor_id": "actor_id_123",
- "properties": {
- "c__custom_string_property": "custom_value",
- "c__custom_number_property": 12345,
- "c__custom_object_property": {
- "key": "value"
}
}
}
]Update a case actor
Updates the fields in the case actor that has the provided ID.
Authorizations:
path Parameters
| case_id required | string The ID of the case |
| actor_id required | string The ID of the actor |
Request Body schema: application/jsonrequired
Decision (string) or Decision (number) or Decision (integer) or Decision (boolean) or Decision (object) or Array of Decision (arrays) (Decision) The decision made on the case actor. The content and structure of this field are flexible and can vary depending on the context. It is defined through the Custom Properties, which allows for dynamic extension and customization based on specific business needs. | |
additional property | string or number or integer or boolean or object or Array of arrays or null (schemas-CustomProperties) Custom properties whose keys must start with the prefix |
Responses
Request samples
- Payload
{- "c__custom_string_property": "custom_value",
- "c__custom_number_property": 12345,
- "c__custom_object_property": {
- "key": "value"
}
}Add a communication to a case
Creates a new communication entity and assigns it to the case.
Authorizations:
path Parameters
| id required | string The case_id. |
header Parameters
| lucinity-rfd-id | string <uuid> The rfd_id used to retrieve information about the request. Include it to complete the rfd item. |
Request Body schema: application/jsonrequired
| id required | string <uuid> The unique identifier for the communication. |
| type required | string The type of communication (e.g., email, SMS). |
| receiver_id required | string Identifies the receiver uniquely in the system where the communication originates. For example if this is an email it could be the email address, if it is from a messaging system it could be the user handle in that system. Alternatively can be provided as Actor/Entity id, as provided in the Actor endpoint, If so then metadata should be used. metadata.receiver_identifiable_as_actor=true. |
| sender_id required | string Identifies the sender uniquely in the system where the communication originates. For example if this is an email it could be the email address. If it is from a messaging system it could be the user handle in that system. Alternatively can be provided as Actor/Entity id, as provided in the Actor endpoint. If so then metadata should be used. metadata.sender_identifiable_as_actor=true. |
| subject required | string The subject title of the message in the communication. |
| content | string The content of the communication. |
object (components-schemas-CustomData) The custom data property can be used to add data in a key, value format to the object. This can e.g. be used for display purposes. Maximum length of this property is 10000 characters. | |
object (schemas-Metadata) Metadata describing the communication. This field is not intended to add additional information to the communication, rather add information about the communication's attributes. |
Responses
Request samples
- Payload
{- "id": "6f83db65-50e0-4f7c-b42a-61115110a928",
- "type": "email",
- "content": "Please update your account information.",
- "custom_data": {
- "someProperty": "some value",
- "otherProperty": "other value"
}, - "metadata": {
- "some_property": "some_value"
}, - "subject": "Urgent: Update Required"
}Upload a file to a case
Uploads a file related to a specific case.
File size may not exceed 50MB.
Valid file formats are:
- Images (JPG, PNG, GIF)
- Docs (PDF, DOC, DOCX, EXCEL, JSON, TXT, CSV)
Authorizations:
path Parameters
| id required | string The case_id |
header Parameters
| lucinity-rfd-id | string <uuid> The rfd_id used to retrieve information about the request. Include it to complete the rfd item. |
Request Body schema: multipart/form-datarequired
| file | string <binary> |
Responses
Get Workflows
Retrieves a list of workflows.
Authorizations:
query Parameters
| limit | number Example: limit=10 Sets the max number of items returned in the result set for this query. Defaults to 200. |
| offset | number Example: offset=10 Sets the offset on the index into the list of items in the result set. Defaults to 0. |
| sort.by | string Sorts the results based on specified fields and directions. Example:
|
Responses
Response samples
- 200
[- {
- "id": "1",
- "version": 1,
- "hidden": false,
- "name": "AML Investigation",
- "steps": [
- {
- "id": "NEW",
- "label": "New Alert",
- "status": "New Alert",
- "state": "OPEN"
}
]
}
]A Webhook is an automated message that Lucinity sends to your system in real time whenever a specific event occurs — for example, when a case is created or a workflow transitions. Rather than polling the Lucinity API for updates, you register an endpoint URL once, and Lucinity delivers an HTTP POST request to that URL as events happen.
This lets your systems react to Lucinity events immediately, without the overhead of constant polling.
Note: Every webhook event Lucinity sends requires an acknowledgment from your receiving system. If Lucinity doesn't receive one, it will eventually conclude that no listener exists for that webhook and disable it. If this happens, you'll need to detect the disabled state and reactivate the webhook — design your integration with this possibility in mind.
Response samples
- 200
{- "name": "My Webhook for handling claimed cases",
- "events": [
- "case.assigned"
], - "id": "5fa9e93b-3a93-4e6a-82cd-6d9dad7b0d74",
- "status": "ACTIVE",
- "secret": "%D^u~k:pc<y9Hv",
- "created": 1692294086682,
- "tenant": "lucinity"
}Create and register a new Webhook
Authorizations:
Request Body schema: application/jsonrequired
| name required | string The name of the Webhook given by the Webhook creator |
| url required | string <uri> The target URL for the Webhooks. Typically an endpoint in the customer API that can accept the Lucinity events |
| events required | Array of strings List of events to subscribe to. If '*' all events will be delivered. If empty, the Webhook will be disabled. |
Responses
Request samples
- Payload
{- "name": "My Webhook for handling claimed cases",
- "events": [
- "case.assigned"
]
}Response samples
- 201
{- "name": "My Webhook for handling claimed cases",
- "events": [
- "case.assigned"
], - "id": "5fa9e93b-3a93-4e6a-82cd-6d9dad7b0d74",
- "status": "ACTIVE",
- "secret": "%D^u~k:pc<y9Hv",
- "created": 1692294086682,
- "tenant": "lucinity"
}Retrieve a Webhook by Id
Authorizations:
path Parameters
| id required | string Unique Webhook Id |
Responses
Response samples
- 200
{- "name": "My Webhook for handling claimed cases",
- "events": [
- "case.assigned"
], - "id": "5fa9e93b-3a93-4e6a-82cd-6d9dad7b0d74",
- "status": "ACTIVE",
- "created": 1692294086682,
- "tenant": "lucinity"
}Remove a Webhook by Id
Authorizations:
path Parameters
| id required | string <uuid> Unique Webhook Id |
Responses
Response samples
- 200
{- "name": "My Webhook for handling claimed cases",
- "events": [
- "case.assigned"
], - "id": "5fa9e93b-3a93-4e6a-82cd-6d9dad7b0d74",
- "status": "ACTIVE",
- "created": 1692294086682,
- "tenant": "lucinity"
}Update Webhook
Authorizations:
path Parameters
| id required | string <uuid> Unique Webhook Id |
Request Body schema: application/json
The status update object. If omitted it will attempt to toggle the status.
| name | string The name of the Webhook given by the Webhook creator |
| url | string <uri> The target URL for the Webhooks. Typically an endpoint in the customer API that can accept the Lucinity events |
| events | Array of strings List of events to subscribe to. If '*' all events will be delivered. If empty, the Webhook will be disabled. |
| status | string (WebhookStatus) Enum: "ACTIVE" "INACTIVE" |
Responses
Request samples
- Payload
{- "name": "My Webhook for handling claimed cases",
- "events": [
- "case.assigned"
], - "status": "ACTIVE"
}Response samples
- 200
{- "name": "My Webhook for handling claimed cases",
- "events": [
- "case.assigned"
], - "id": "5fa9e93b-3a93-4e6a-82cd-6d9dad7b0d74",
- "status": "ACTIVE",
- "secret": "%D^u~k:pc<y9Hv",
- "created": 1692294086682,
- "tenant": "lucinity"
}Case Assigned Webhook
Request Body schema: application/json
Information about an event in the systems
| id | string The id for the event created by Lucinity. |
| name | string Value: "case.assigned" The type of the event |
| createdAt | integer <int64> The Unix timestamp (in milliseconds) indicating when this event was created. |
object Detail event data for case claimed |
Responses
Request samples
- Payload
{- "id": "1",
- "name": "case.assigned",
- "createdAt": 1711360775327,
- "data": {
- "id": "CLC2020010100000001",
- "userId": "95dc44d7-a615-41f3-9bf2-2b8093696dc9",
- "assignedToUserId": "846d5c88-5296-4972-92bf-cf43730a4184",
- "metadata": {
- "exampleProperty": "example value"
}
}
}Case Closed Webhook
Request Body schema: application/json
Information about an event in the systems
| id | string The id for the event created by Lucinity. |
| name | string Value: "case.closed" The type of the event |
| createdAt | integer <int64> The Unix timestamp (in milliseconds) indicating when this event was created. |
object Detail event data for case case closed |
Responses
Request samples
- Payload
{- "id": "1",
- "name": "case.closed",
- "createdAt": 1711360775327,
- "data": {
- "id": "CLC2020010100000001",
- "userId": "95dc44d7-a615-41f3-9bf2-2b8093696dc9",
- "resolution": "Suspicious",
- "dispositionNarrative": "Summary of the Investigation",
- "comment": "This is a comment",
- "closeReason": "Manual",
- "metadata": {
- "exampleProperty": "example value"
}
}
}Case Created Webhook
Request Body schema: application/json
Information about an event in the systems
| id | string The id for the event created by Lucinity. |
| name | string Value: "case.created" The type of the event |
| createdAt | integer <int64> The Unix timestamp (in milliseconds) indicating when this event was created. |
object Detail event data for case case created |
Responses
Request samples
- Payload
{- "id": "1",
- "name": "case.created",
- "createdAt": 1711360775327,
- "data": {
- "id": "CLC2020010100000001",
- "userId": "95dc44d7-a615-41f3-9bf2-2b8093696dc9",
- "processId": "2df50b47-20cc-4b19-b9b5-68eb4bd68620",
- "metadata": {
- "exampleProperty": "example value"
}
}
}Case Workflow Action Performed Webhook
Request Body schema: application/json
Information about an event in the systems
| id | string The id for the event created by Lucinity. |
| name | string Value: "case.workflow.actioned" The type of the event |
| createdAt | integer <int64> The Unix timestamp (in milliseconds) indicating when this event was created. |
object Detailed event data for when an action on a workflow is performed in a case. |
Responses
Request samples
- Payload
{- "id": "1",
- "name": "case.workflow.actioned",
- "createdAt": 1711360775327,
- "data": {
- "id": "CLC2020010100000001",
- "userId": "95dc44d7-a615-41f3-9bf2-2b8093696dc9",
- "actionName": "SET_ON_HOLD",
- "comment": "Setting this case on hold, waiting for external data.",
- "metadata": {
- "exampleProperty": "example value"
}
}
}Case Workflow Step Transitioned Webhook
Request Body schema: application/json
Information about a workflow transition of case in the system
| id | string The id for the event created by Lucinity. |
| name | string Value: "case.workflow.transitioned" The type of the event |
| createdAt | integer <int64> The Unix timestamp (in milliseconds) indicating when this event was created. |
object Detail event data for when a workflow transition occurs in a case |
Responses
Request samples
- Payload
{- "id": "1",
- "name": "case.workflow.transitioned",
- "createdAt": 1711360775327,
- "data": {
- "id": "CLC2020010100000001",
- "workflowId": "10",
- "fromStepId": "INITIAL",
- "toStepId": "IN_PROGRESS",
- "userId": "95dc44d7-a615-41f3-9bf2-2b8093696dc9",
- "actionName": "CLAIM"
}
}Commented on a case event Webhook
Request Body schema: application/json
Information about a comment event in the systems
| id | string The id for the event created by Lucinity. |
| name | string Value: "case.commented" The type of the event |
| createdAt | integer <int64> The Unix timestamp (in milliseconds) indicating when this event was created. |
object Detailed event data for when a comment is added to a case |
Responses
Request samples
- Payload
{- "id": "1",
- "name": "case.commented",
- "createdAt": 1711360775327,
- "data": {
- "id": "CLC2020010100000001",
- "userId": "95dc44d7-a615-41f3-9bf2-2b8093696dc9",
- "comment": "This is a comment",
- "metadata": {
- "exampleProperty": "example value"
}
}
}Transaction Decision Update Event Webhook
Request Body schema: application/json
Information about an event in the systems
| id | string The id for the event created by Lucinity. |
| name | string Value: "case.transaction.decision.updated" The type of the event |
| createdAt | integer <int64> The Unix timestamp (in milliseconds) indicating when this event was created. |
object Detail event data for transaction decision update |
Responses
Request samples
- Payload
{- "id": "1",
- "name": "case.transaction.decision.updated",
- "createdAt": 1711360775327,
- "data": {
- "id": "CLC2020010100000001",
- "transactionId": "75906707-8c31-479c-b354-aa805c4cefbc",
- "userId": "95dc44d7-a615-41f3-9bf2-2b8093696dc9",
- "decision": "BLOCK"
}
}Case Observation Feedback Updated Webhook
Request Body schema: application/json
Information about an event in the system
| id | string The id for the event created by Lucinity. |
| name | string Value: "case.observations.feedback.updated" The type of the event |
| createdAt | integer <int64> The Unix timestamp (in milliseconds) indicating when this event was created. |
object Detail event data for observation added |
Responses
Request samples
- Payload
{- "id": "1",
- "name": "case.observations.feedback.updated",
- "createdAt": 1711360775327,
- "data": {
- "id": "CLC2020010100000001",
- "userId": "95dc44d7-a615-41f3-9bf2-2b8093696dc9",
- "observationId": "cc00jCLAC00001",
- "feedback": "string"
}
}Observation Actioned Event Webhook
Request Body schema: application/json
Information that a event has been actioned, typically a case observation. This event is triggered when an observation is actioned. Currently only supports "WHITELIST" action.
| id | string The id for the event created by Lucinity. |
| name | string Value: "case.observations.actioned" The type of the event |
| createdAt | integer <int64> The Unix timestamp (in milliseconds) indicating when this event was created. |
object Detail event data for observation actioned. |
Responses
Request samples
- Payload
{- "id": "1",
- "name": "case.observations.actioned",
- "createdAt": 1711360775327,
- "data": {
- "id": "CLC2020010100000001",
- "observationId": "OBS2020010100000001",
- "actionName": "WHITELIST",
- "userId": "95dc44d7-a615-41f3-9bf2-2b8093696dc9",
- "comment": "Test comment",
- "metadata": {
- "exampleProperty": "example value"
}, - "observationMetadata": {
- "exampleProperty": "example value"
}, - "observationCustomData": {
- "exampleProperty": "example value"
}
}
}The reporting APIs offer customers real time access to various reports pulled from the Lucinity platform. They are grouped into categories and listed out below.
Get Observation Feedback
Authorizations:
query Parameters
| startDate required | string <date-time> Example: startDate=2023-11-21 Is in ISO 8601 date format and must be after startDate. |
| endDate required | string <date-time> Example: endDate=2023-11-21 Is in ISO 8601 date format and must be after startDate. |
Responses
Response samples
- 200
- 400
- 422
- 500
[- {
- "actorId": "h9a96jf8f99999999",
- "behaviorId": "ARR_EFT",
- "behaviorName": "Electronic transactions designed to avoid reporting requirements",
- "caseId": "CASE202301010001",
- "createdTime": "2021-01-27T01:00:00+00:00",
- "dataSource": "Lucinity",
- "feedback": "SUSPICIOUS",
- "lineOfBusiness": "Individual",
- "modelScore": 3.5,
- "modelThreshold": 3.5,
- "observationDate": "2021-01-27T01:00:00+00:00",
- "observationId": "h9af6CLAC00002",
- "observationType": "ALERT_AML",
- "transactionIds": [
- "txn1224412"
], - "typology": "Avoiding reporting requirements"
}
]Get Suppressed Signals
Retrieve signals that were suppressed due to actor exclusion (suppression) or alert management (snooze) in a detection rule.
Authorizations:
query Parameters
| startDate required | string <date> Example: startDate=2023-11-21 Is in ISO 8601 date format and must predate or equal endDate. |
| endDate required | string <date> Example: endDate=2023-11-21 Is in ISO 8601 date format and must postdate or equal startDate. |
| limit | integer Example: limit=100 The maximum number of suppressed signals that will be returned. The default setting is 100, with a maximum limit of 1000. |
| offset | integer Example: offset=0 The offset of the suppressed signals that will be returned. The default setting is 0. |
Responses
Response samples
- 200
- 400
- 422
- 500
{- "limit": 10,
- "number_of_signals": 1,
- "offset": 0,
- "signals_suppressed": [
- {
- "actor_id": "ACT00001",
- "data_source": "RULE_ENGINE",
- "decision_reason": "ACTOR_SUPPRESSED",
- "detection_method_name": "High income with low activity",
- "review_date": "2021-01-27",
- "suppressed_signal_id": 1
}
]
}Get Audit Logs
Get audit logs within certain criteria.
Authorizations:
query Parameters
| startDate required | string <date-time> Example: startDate=2023-11-21T00:00:00 Is in ISO 8601 datetime format and must proceed endDate. |
| endDate required | string <date-time> Example: endDate=2023-11-21T23:59:59 Is in ISO 8601 datetime format and must be after startDate. |
| logType | string (AuditLogType) Enum: "ALL" "READ" "UPDATE" The audit log type. If not provided the default is |
| offset | number Number of rows to skip before returning results. Must be a positive number.
If not provided the default is |
| limit | number Maximum number of retrived entries. Must be a positive number not greater than 1000.
If not provided the default is |
| caseId | string Get audit logs for a single case |
Responses
Response samples
- 200
{- "offset": 0,
- "limit": 200,
- "number_of_values": 10,
- "values": [
- {
- "json_": {
- "id": "3c16ebce-7e7b-49ef-b815-3d4cf310aad7",
- "notes": "Level: 1 to 2",
- "action": "VIEW_CASE",
- "caseId": "CLC2023112100000000",
- "domain": "CaseManager",
- "params": [
- null
], - "userIP": "127.0.0.1",
- "userId": "1b08d5b4-defc-4385-afc3-87602adabf0c",
- "logType": "ALL",
- "newValue": null,
- "objectId": "string",
- "oldValue": null,
- "envFields": {
- "localIP": "127.0.0.1",
- "podAuditName": "podName"
}, - "timestamp": "2023-11-21T00:00:00",
- "objectType": "string",
- "systemName": "string",
- "userAction": "ESCALATE",
- "objectField": "string",
- "actionResult": "ALLOWED"
}, - "timestamp": "2023-11-21T00:00:00"
}
]
}The Segmentation API provides a flexible and efficient way to categorize and group legal entities, enabling precise targeting and analysis within your detection scenarios and investigations.
Segmentation is structured around Categories and Groups:
- A Category represents a broad classification or theme, such as “Industry Classification” or “Annual Turnover.”
- Within each Category, there are multiple Groups that serve as specific subsets. For example, the “Industry Classification” Category might include Groups like “Healthcare Providers,” “Financial Services,” “Manufacturing,” and “Retail.”
- Each Group belongs exclusively to one Category and can contain multiple legal entities (actors).
- Roles can be assigned to actors in a Group
- For the scenario engine to be able to monitor the activities of all actors in a Group, at least one actor has to have the role Owner of the group. The Owner does not have to be in the Group to be the Owner
- Note: The group owner must also be included as a member of the group in order for his activity to be monitored if you are using group monitoring.
- A legal entity (actor) can be assigned to multiple Groups across different Categories, allowing for comprehensive segmentation based on various criteria.
Example:
If you want to segment legal entities by their Industry Classification, you can create a Category called “Industry Classification” and define Groups such as:
- “Healthcare Providers,” including entities like hospitals, clinics, and pharmaceutical companies.
- “Financial Services,” covering banks, insurance companies, and investment firms.
- “Manufacturing,” for entities involved in producing goods, such as automotive or electronics manufacturers.
- “Retail,” which includes department stores, online retailers, and supermarkets.
Additionally, you could use another Category, such as Annual Turnover, to group entities by their revenue. Under this Category, you might define Groups like:
- “Up to $1 Million”
- “$1 Million to $10 Million”
- “$10 Million to $100 Million”
- “Over $100 Million”
Legal entities can be assigned to the relevant Groups based on their primary business activities and annual turnover. This segmentation allows for the development of tailored rules and detection scenarios, such as monitoring for industry-specific compliance risks or conducting focused market analyses.
By utilizing the Segmentation API, you gain the ability to create dynamic and customized classifications that support more targeted decision-making and strategic planning.
Create a Segmentation Category
Create a single Segmentation Category.
Authorizations:
Request Body schema: application/jsonrequired
The Segmentation Category to create.
| name required | string This is a unique field. The name of the Category, e.g. "Age" or "Annual Turnover". |
| description | string The description of the Category, e.g. "Segmentation by age". |
Responses
Request samples
- Payload
{- "name": "Age",
- "description": "Segmentation by age"
}Response samples
- 200
- 400
- 415
{- "id": "12345678-1234-1234-1234-123456789012"
}Get Segmentation Categories
Get all Segmentation Categories.
Authorizations:
query Parameters
| offset | integer <int32> Example: offset=2 The offset for pagination. |
| limit | integer <int32> Example: limit=3 Maximum number of retrived entries. Must be a positive number not greater than 1000. |
Responses
Response samples
- 200
{- "categories": [
- {
- "id": "12345678-1234-1234-1234-123456789012",
- "name": "Age",
- "description": "Segmentation by age",
- "created_at": 1637539200,
- "changed_at": 1637539200,
- "created_by": "John Doe",
- "changed_by": "Jane Smith",
- "type": "COMPUTED_BY_CUSTOMER"
}
], - "offset": 2,
- "limit": 3
}Get Segmentation Category
Get a single Segmentation Category by id.
Authorizations:
path Parameters
| id required | string Example: 12345678-1234-1234-1234-123456789012 The id of the Segmentation Category to fetch. |
Responses
Response samples
- 200
{- "id": "12345678-1234-1234-1234-123456789012",
- "name": "Age",
- "description": "Segmentation by age",
- "created_at": 1637539200,
- "changed_at": 1637539200,
- "created_by": "John Doe",
- "changed_by": "Jane Smith",
- "type": "COMPUTED_BY_CUSTOMER"
}Update Segmentation Category
Update a single Segmentation Category by id.
Authorizations:
path Parameters
| id required | string Example: 12345678-1234-1234-1234-123456789012 The id of the Segmentation Category to update. |
Request Body schema: application/jsonrequired
The Segmentation Category to update.
| name | string This is a unique field. The name of the Category, e.g. "Age" or "Annual Turnover". |
| description | string The description of the Category, e.g. "Segmentation by age". |
Responses
Request samples
- Payload
{- "name": "Age",
- "description": "Segmentation by age"
}Response samples
- 400
- 415
{- "errors": [
- "value"
]
}Get all Segmentation Groups under a Segmentation Category
Get all Segmentation Groups under a Segmentation Category.
Authorizations:
path Parameters
| id required | string Example: 12345678-1234-1234-1234-123456789012 The id of the Segmentation Category to fetch Groups from. |
query Parameters
| offset | integer <int32> Example: offset=2 The offset for pagination. |
| limit | integer <int32> Example: limit=3 Maximum number of retrived entries. Must be a positive number not greater than 1000. |
Responses
Response samples
- 200
{- "groups": [
- {
- "id": "12345678-1234-1234-1234-123456789012",
- "category_id": "12345678-1234-1234-1234-123456789012",
- "name": "Age Group",
- "description": "Segmentation by age Group ",
- "created_at": 1637539200,
- "changed_at": 1637539200,
- "created_by": "John Doe",
- "changed_by": "Jane Smith"
}
], - "offset": 2,
- "limit": 3
}Get all Actors that belong to a Segmentation Category
Get all Actors that belong to a Segmentation Category.
Authorizations:
path Parameters
| id required | string Example: 12345678-1234-1234-1234-123456789012 The id of the Segmentation Category to get Actors from. |
query Parameters
| offset | integer <int32> Example: offset=2 The offset for pagination. |
| limit | integer <int32> Example: limit=3 Maximum number of retrived entries. Must be a positive number not greater than 1000. |
Responses
Response samples
- 200
{- "actor_ids": [
- "string"
], - "offset": 2,
- "limit": 3
}Create a Segmentation Group
Create a Segmentation Group.
Authorizations:
Request Body schema: application/jsonrequired
The Segmentation Group to create.
| name required | string This field is unique per Category id. The name of the Segmentation Group. |
| category_id required | string The Segmentation Category id. |
| description | string The description of the Segmentation Group . |
Responses
Request samples
- Payload
{- "category_id": "12345678-1234-1234-1234-123456789012",
- "name": "Ages 0-25",
- "description": "This Group contains Actors aged 0-25."
}Response samples
- 200
- 400
- 415
{- "id": "12345678-1234-1234-1234-123456789012"
}Get a single Segmentation Group
Get a single Segmentation Group.
Authorizations:
path Parameters
| id required | string Example: 12345678-1234-1234-1234-123456789012 The id of the Segmentation Group to get. |
Responses
Response samples
- 200
{- "id": "12345678-1234-1234-1234-123456789012",
- "category_id": "12345678-1234-1234-1234-123456789012",
- "name": "Age Group",
- "description": "Segmentation by age Group ",
- "created_at": 1637539200,
- "changed_at": 1637539200,
- "created_by": "John Doe",
- "changed_by": "Jane Smith"
}Update a Segmentation Group
Update a Segmentation Group.
Authorizations:
path Parameters
| id required | string Example: 12345678-1234-1234-1234-123456789012 The id of the Segmentation Group to update. |
Request Body schema: application/jsonrequired
The Segmentation Group to update.
| name | string This field is unique per Category id. The name of the Segmentation Group. |
| description | string The description of the Segmentation Group . |
Responses
Request samples
- Payload
{- "name": "Ages 0-25",
- "description": "This Group contains Actors aged 0-25."
}Response samples
- 400
- 415
{- "errors": [
- "value"
]
}Add Actors to a Segmentation Group
Add Actors to a Segmentation Group.
Authorizations:
path Parameters
| id required | string Example: 12345678-1234-1234-1234-123456789012 The id of the Segmentation Group to add Actors to. |
Request Body schema: application/jsonrequired
The Actor ids to add to the Group. This has an upper limit of 1000 Actors.
Responses
Request samples
- Payload
[- [
- "12345678-1234-1234-1234-123456789012"
]
]Response samples
- 200
- 400
- 415
{- "actor_id": true
}Get all Actors for a Segmentation Group
Get all Actors for a Segmentation Group.
Authorizations:
path Parameters
| id required | string Example: 12345678-1234-1234-1234-123456789012 The id of the Segmentation Groups to get Actors for. |
query Parameters
| offset | integer <int32> Example: offset=2 The offset for pagination. |
| limit | integer <int32> Example: limit=3 Maximum number of retrived entries. Must be a positive number not greater than 1000. |
Responses
Response samples
- 200
{- "actor_ids": [
- "string"
], - "offset": 2,
- "limit": 3
}Remove Actors from a Segmentation Category
Remove Actors from a Segmentation Category.
Authorizations:
path Parameters
| id required | string Example: 12345678-1234-1234-1234-123456789012 The id of the Segmentation Group to remove the Actors from. |
Request Body schema: application/jsonrequired
The Actor ids to remove from the Group. Limit of 1000 Actors.
Responses
Request samples
- Payload
[- "string"
]Get Segmentation Groups responding to an Actor
Get all Segmentation Groups that an Actor belongs to.
Authorizations:
path Parameters
| id required | string Example: 12345678-1234-1234-1234-123456789012 The id of the Actor to get Segmentation Groups for. |
query Parameters
| offset | integer <int32> Example: offset=2 The offset for pagination. |
| limit | integer <int32> Example: limit=3 Maximum number of retrived entries. Must be a positive number not greater than 1000. |
Responses
Response samples
- 200
{- "groupIds": [
- "12345678-1234-1234-1234-123456789012"
], - "offset": 2,
- "limit": 3
}Set an owner for a Segmentation Group
Set an owner for a Segmentation Group.
Authorizations:
path Parameters
| groupId required | string Example: 12345678-1234-1234-1234-123456789012 The id of the Segmentation Group. |
| actorId required | string Example: 12345678-1234-1234-1234-123456789012 The id of the Actor to set as owner. |
Responses
Response samples
- 200
{- "message": "Successfully created group role"
}Get the owners for a Segmentation Group
Get the owners for a Segmentation Group.
Authorizations:
path Parameters
| groupId required | string Example: 12345678-1234-1234-1234-123456789012 The id of the Segmentation Group. |
| actorId required | string Example: 12345678-1234-1234-1234-123456789012 The id of the Actor to get as owner. |
query Parameters
| offset | integer <int32> Example: offset=2 The offset for pagination. |
| limit | integer <int32> Example: limit=3 Maximum number of retrived entries. Must be a positive number not greater than 1000. |
Responses
Response samples
- 200
{- "actorIds": [
- "2345678-1234-1234-1234-123456789012"
], - "offset": 2,
- "limit": 3
}Remove an owner from a Segmentation Group
Remove an owner from a Segmentation Group.
Authorizations:
path Parameters
| groupId required | string Example: 12345678-1234-1234-1234-123456789012 The id of the Segmentation Group. |
| actorId required | string Example: 12345678-1234-1234-1234-123456789012 The id of the Actor to remove as owner. |
Responses
Response samples
- 200
{- "message": "Successfully deleted group role"
}Get Users
Get multiple users.
Authorizations:
query Parameters
| offset | number Number of rows to skip before returning results. Must be a positive number.
If not provided the default is |
| limit | number Maximum number of retrived entries. Must be a positive number.
If not provided the default is |
Responses
Response samples
- 200
- 500
[- {
- "user_id": "33ff36c2-91ea-4dd7-b239-31bb97875cce",
- "username": "user",
- "first_name": "User",
- "last_name": "Platform",
- "enabled": true,
- "created_at": 1754046259851,
- "groups": [ ]
}
]Get User by ID
Get a single platform user by their unique identifier.
Authorizations:
path Parameters
| id required | string <uuid> The user's unique identifier. |
Responses
Response samples
- 200
- 500
{- "user_id": "33ff36c2-91ea-4dd7-b239-31bb97875cce",
- "username": "user",
- "first_name": "User",
- "last_name": "Platform",
- "enabled": true,
- "created_at": 1754046259851,
- "groups": [ ]
}Retrieves a list of custom properties
This endpoint will fetch the custom properties that have been defined. The custom properties are used to store additional information about the entity.
Currently supported entities are:
casecase.actor
Authorizations:
query Parameters
| limit | number Example: limit=5 Sets the max number of items returned in the result set for this query |
| offset | number Example: offset=35 Sets the offset on the index into the list of items in the result set |
| filter.entity | string Example: filter.entity=case The entity containing the custom property. |
| filter.name | string Example: filter.name=c__actor_decision The custom property name. |
Responses
Response samples
- 200
[- {
- "entity": "case",
- "name": "c__actor_decision",
- "schema": {
- "type": "object",
- "additionalProperties": false,
- "properties": {
- "value": {
- "type": "string"
}, - "id": {
- "type": "string"
}
}
}
}
]Get RFD by Id
Retrieves an RFD object using its unique Id.
Authorizations:
path Parameters
| id required | string <uuid> The unique identifier for the RFD. |
Responses
Response samples
- 200
{- "type": "string",
- "case_id": "c74269e5-1f97-4e20-9164-ffbe3494d8d6",
- "status": "COMPLETED",
- "request": {
- "actor_id": "ACT0001"
}, - "created_at": "2019-08-24T14:15:22Z"
}Reject an RFD request.
Cancels the RFD flow and marks the RFD request as rejected. After calling this endpoint, the SLA will be disabled and the case will eventually revert to its previous state before the RFD process was initiated. Note that if you try to reject a RFD that has already been completed you will get a 400 error.
Authorizations:
path Parameters
| id required | string <uuid> The unique identifier of the RFD. |
Request Body schema: application/jsonrequired
| reason | string Reason for rejection. |
Responses
Request samples
- Payload
{- "reason": "Actor not found."
}Create or update an RFD schema.
Defines or updates the schema used for RFD validation.
Since RFDs have a dynamic schema, this endpoint allows submitting a JSON Schema-compliant format. The schema is used by the RFD endpoints to validate incoming payloads as they pass through the system.
To update an existing schema, the entire payload must be resubmitted, including both unchanged values and any modifications.
Authorizations:
Request Body schema: application/jsonrequired
| type required | string^[a-zA-Z0-9_-]+$ A predefined identifier specifying the type of schema to be used in different flows in the RFD service.
This type should match the type in the |
required | object The schema settings used to validate the request payloads in the RFD service. Must be in JSON schema format. |
| created_at | string <date-time> The time and date when the schema was created in ISO 8601. |
Responses
Request samples
- Payload
{- "type": "ACTOR",
- "schema": {
- "type": "object",
- "properties": {
- "actor_id": {
- "type": "string"
}
}, - "required": [
- "actor_id"
]
}, - "created_at": "2019-08-24T14:15:22Z"
}Retrieve a list of RFD schemas
Fetches a list of all RFD schemas.
Authorizations:
query Parameters
| limit | number Example: limit=5 Sets the max number of items returned in the result set for this query |
| offset | number Example: offset=35 Sets the offset on the index into the list of items in the result set |
Responses
Response samples
- 200
[- {
- "type": "ACTOR",
- "schema": {
- "type": "object",
- "properties": {
- "actor_id": {
- "type": "string"
}
}, - "required": [
- "actor_id"
]
}, - "created_at": "2019-08-24T14:15:22Z"
}
]Retrieve RFD schema by type
Fetches a specific request for data schema by type.
Authorizations:
path Parameters
| type required | string |
Responses
Response samples
- 200
{- "type": "ACTOR",
- "schema": {
- "type": "object",
- "properties": {
- "actor_id": {
- "type": "string"
}
}, - "required": [
- "actor_id"
]
}, - "created_at": "2019-08-24T14:15:22Z"
}Anti-Money Laundering (AML) is the set of regulations, processes, and technology financial institutions use to detect and prevent the disguising of illegally obtained funds as legitimate income. Lucinity's platform organizes its detection capabilities around three AML disciplines: Transaction Monitoring, Fraud Detection, and Sanctions Screening — each looking for a different kind of risk signal across the same underlying data (Actors, Accounts, and Transactions).
Transaction Monitoring is the ongoing review of an Actor's transaction activity to detect patterns consistent with money laundering — for example, unusual volume, velocity, or counterparties relative to what's expected of that Actor. It is inherently retrospective: because it looks for patterns rather than judging any single transaction in isolation, Transaction Monitoring reviews activity after it has already settled, rather than blocking it in real time.
Fraud Detection identifies transactions that are themselves illegitimate — for example, an unauthorized payment or a manipulated instruction — rather than transactions that look legitimate individually but form a suspicious pattern over time. Unlike Transaction Monitoring, Fraud Detection often needs to act before a transaction settles, supporting real-time review and blocking decisions.
Sanctions Screening checks Actors, Counterparties, and other transaction participants against sanctions lists, watchlists, and other restricted-party databases (such as those maintained by OFAC) to prevent transacting with a sanctioned individual or entity. Like Fraud Detection, it frequently operates in real time, ahead of a transaction settling.
An Actor is any person or organization whose financial activity Lucinity monitors — most often a financial institution's own customer, but also other parties who need to be reviewed in their own right, such as the customers of a business customer. Actors are the central subject of AML: Transaction Monitoring, Fraud Detection, and Sanctions Screening are all ultimately evaluating the activity and identity of Actors.
A Transaction is a single movement of monetary value involving an Actor — a payment, transfer, deposit, withdrawal, or similar. Transactions are the primary evidence AML disciplines examine: their amount, timing, and counterparties are what Transaction Monitoring and Fraud Detection evaluate for risk.
Direction
Direction describes which way funds move relative to the Actor: inbound, when the Actor receives funds, or outbound, when the Actor sends them. Rather than modeling a fixed sender and receiver role like the traditional Originator/Beneficiary model used in payments and wire transfers, Lucinity always frames the transaction from the perspective of the Actor being monitored, with the Counterparty as whoever is on the other side of that movement.
A Counterparty is the other party in a Transaction — the entity funds are sent to or received from, relative to the Actor being monitored. A Counterparty doesn't need to be a Lucinity Actor; if it needs to be monitored in its own right, it should also be modeled as an Actor.
Segmentation is the practice of grouping Actors by shared characteristics — such as customer type, product line, or geography — so that detection, review, and reporting can be tailored to each group rather than applied uniformly across your entire customer base.
Know Your Customer (KYC) is the due-diligence process financial institutions perform to verify an Actor's identity and understand their expected activity before and during a business relationship. KYC establishes the baseline — who an Actor is and what behavior is normal for them — that Transaction Monitoring later compares actual activity against.
A Risk Assessment is a structured judgment about an Actor's risk level, recorded against a specific risk type — for example, an internal risk score derived from the KYC process, or a flag for a specific concern such as being a Politically Exposed Person. Risk Assessments accumulate over an Actor's lifetime and inform how closely their activity should be scrutinized.
A Politically Exposed Person (PEP) is an individual who holds, or has held, a prominent public position — or who is closely associated with someone who does. PEPs are considered higher risk because their position could be used to facilitate bribery, corruption, or other financial crime, so financial institutions apply enhanced scrutiny to them.
A Scenario (also called a Behavior) is a description of a known AML risk pattern you want to detect — for example, rapid movement of funds through multiple accounts, or an Actor transacting well outside their established norm. A Scenario on its own doesn't do anything; it needs a Detector to actually watch for it in your data.
A Detector is any mechanism that watches your data for a Scenario and raises an Observation when it finds a match. Lucinity's Scenario Builder lets you configure your own Detectors as Rules; you can also bring your own Detectors — including machine learning Models — and send their results to Lucinity as Observations.
A Rule is a Detector built from explicit, configurable conditions — for example, flagging any cash withdrawal over a given amount. Rules are the type of Detector you configure directly in Lucinity's Scenario Builder.
A Model is a Detector built using machine learning or other statistical methods, rather than explicit conditions — for example, a system trained to recognize an Actor's typical transacting pattern and flag deviations from it. External detection systems that use Models can send their results to Lucinity as Observations, the same as a Rule would.
An Observation (also called an Alert) is the output produced when a Detector finds a match for a Scenario in an Actor's activity, flagging that activity for analyst review. Observations can come from any of the three AML disciplines: Transaction Monitoring, Fraud Detection, or Sanctions Screening.
False Positive / True Positive
When an analyst reviews an Observation, they classify the outcome as a False Positive if the activity turns out not to be suspicious after all, or a True Positive if it's confirmed as genuine risk. You can use this feedback to refine your own detectors over time.
A Case is an investigation opened to review one or more Observations about an Actor. It brings together the relevant Observations, Actors, Accounts, and Transactions so an analyst can decide whether the activity is genuinely suspicious.
A Case Summary is the analyst's write-up of a Case's findings — what was reviewed, what was found, and why the Case was resolved the way it was. It's the record that documents the reasoning behind a Case's outcome.
Case Management is the overall practice of reviewing, investigating, and resolving Cases — from an Observation creating a Case, through analyst investigation and a Case Summary, to a final resolution. Workboards and Workflows are the tools Lucinity provides to organize this practice at scale.
A Workboard is a queue of Cases awaiting action, typically grouped by their current stage or by which team is responsible for them. Analysts work from Workboards to pick up and progress Cases.
A Workflow defines the stages a Case moves through from creation to resolution — for example, initial triage, investigation, and closure — and which Workboard the Case appears on at each stage.