Skip to main content

Entitlements

An Entitlement is a triggerable capability (for example: KYC Onboarding, Derivatives Request, or Proof of Source of Funds) granted to an account.

Most entitlements are triggered by the client application, but some (like Ad Hoc EDD or Request For Information) are exclusively triggered internally by DLT.

Goals
  • Preview: Allow clients to fetch all required questionnaires and documents before triggering the workflow, enabling frontends to preload necessary UI elements.
  • Control: Give clients explicit control over when workflows start and allow them to track status via webhooks.

High-Level Flow

The Entitlement workflow allows you to request specific capabilities for a user. The process is asynchronous and relies on webhooks to drive the collection of data (questionnaires and documents).

Workflow Steps

  1. Trigger Entitlement: Call POST /persons/{id}/entitlement_triggers.
  2. Receive Requirements: Listen for the webhook containing the list of questionnaire IDs that must be answered next.
  3. Fetch Details: Call GET /questionnaires/{questionnaire_id} to render the form to the user.
  4. Upload Documents (Optional): If the form requires files, upload them via POST /persons/{id}/documents and retain the returned Document.id.
  5. Submit Answers: Post the answers (referencing document IDs if necessary) to POST /persons/{id}/questionnaires/{questionnaire_id}/response.
  6. Handle Updates: The system may send subsequent webhooks requesting further information.
  7. Completion: Receive the final completion webhook (success/failure).

Listing Available Entitlements

Before triggering a workflow, you can see which entitlements are available for a specific account type.

Endpoints:

  • Retail: GET /entitlements?owner_type=person
  • Corporate: GET /entitlements?owner_type=corporate
View Response Example
{
"items": [
{
"id": "7b88b3a6-d6a6-49f4-a03f-a7ec57237ff1",
"name": "onboarding",
"description": "Onboarding entitlement is used to onboard new retail accounts",
"created_at": "2025-10-31T12:29:41.138347Z",
"updated_at": "2025-10-31T12:29:41.138347Z",
"questionnaires": [
{
"entitlement_id": "7b88b3a6-d6a6-49f4-a03f-a7ec57237ff1",
"questionnaire_id": "3cb3bdae-96eb-4097-9cc1-01c4fcf911ca",
"position": 1
}
]
}
],
"total": 1,
"page": 1,
"size": 50,
"pages": 1
}

Triggering an Entitlement

To start the workflow, perform a POST request to the specific entity.

Endpoints:

  • Retail: POST /persons/{person_id}/entitlement_triggers
  • Corporate: POST /corporates/{corporate_id}/entitlement_triggers

Request Body

FieldTypeDescription
entitlement_idUUIDUnique identifier of the entitlement (retrieved from the Listing endpoint).

Example Request

curl -X POST https://<kyc_domain>/api/v1/persons/b14254a1-cb2d-4c7c-93b2-b4ecb88a903b/entitlement_triggers \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"entitlement_id": "7b88b3a6-d6a6-49f4-a03f-a7ec57237ff1"
}'

Example Response

View Response Example
{
"id": "ff95245d-0c69-4d6a-9d79-8459865ac653",
"entitlement_id": "7b88b3a6-d6a6-49f4-a03f-a7ec5723ff1",
"status": "pending",
"owner_type": "person",
"owner_id": "b14254a1-cb2d-4c7c-93b2-b4ecb88a903b",
"created_at": "2025-11-03T11:43:45.443324Z"
}

Checking Status (Listing Triggers)

To check the history or current status of workflows, fetch the triggers.

Endpoints:

  • Retail: GET /persons/{person_id}/entitlement_triggers
  • Corporate: GET /corporates/{corporate_id}/entitlement_triggers
View Response Example
{
"items": [
{
"id": "ff95245d-0c69-4d6a-9d79-8459865ac653",
"entitlement_id": "7b88b3a6-d6a6-49f4-a03f-a7ec57237ff1",
"status": "pending",
"owner_type": "person",
"created_at": "2024-11-03T11:43:45.443324Z"
},
{
"id": "25568503-1ead-41ff-85a9-01b6f85c4ea9",
"entitlement_id": "2b34e3f6-6f13-4d34-b74a-9ea4930e7ae2",
"status": "ongoing",
"result": "success",
"owner_type": "person",
"created_at": "2024-12-03T12:23:13.233324Z"
}
],
"total": 2
}

Data Models

Entitlement

Represents a workflow definition that can activate a specific action (e.g., onboarding, proof of source of funds, derivatives).

FieldTypeDescription
idUUIDUnique identifier of the entitlement.
nameStringSystem name of the entitlement.
descriptionStringShort description of the entitlement’s purpose.
questionnairesList[EntitlementQuestionnaire]List of required questionnaires that need to be answered.
created_atDateTimeCreation timestamp.
updated_atDateTimeLast update timestamp.

Entitlement Questionnaire

FieldTypeDescription
entitlement_idUUIDUnique identifier of the parent entitlement.
questionnaire_idUUIDUnique identifier of the questionnaire.
positionIntegerSuggested order for presenting the questionnaire in the frontend.

Entitlement Trigger

Stores information about triggered entitlements (instances of a workflow) and their results.

FieldTypeDescription
idUUIDUnique identifier of the trigger.
entitlement_idUUIDID of the entitlement definition used.
statusEnumCurrent state. See Status below.
resultEnumFinal result. See Result below.
owner_idUUIDID of the entity (Person/Corporate).
owner_typeStringType of entity (person or corporate).

Status Values

  • pending
  • ongoing
  • terminated
  • canceled
  • blocked
  • failed
  • finished

Result Values

  • success
  • fail