CorebanqCorebanq Developer Docs
Personas

Description

Purpose and use

Personas hold reusable identity details for natural persons and organizations that appear in customer, signatory, shareholder, counterparty, or contact workflows. They keep identity facts separate from the business relationship that uses them.

Who uses this. Onboarding analysts, compliance teams, customer service, and operations staff use personas when verifying people, linking identities, and reviewing customer-related parties.

How it works. A persona stores identity, address, nationality, age, organization, and relationship details. Other modules link to that persona when they need the same person or organization in a customer, signatory, or counterparty context.

What users do. Users create or update persona data, link personas to business records, validate required identity fields, and search existing identities before creating duplicates.

Outcomes and side effects. Persona changes can affect onboarding evidence, signatory review, contact data, and compliance context. They do not by themselves approve a customer or post any ledger movement.

Related manuals: Customers, KYB, Addresses, Counterparties.

Overview

The Personas API provides functionality for managing personal and organizational identities, including:

  • Personal information management
  • Organization details
  • Address management
  • Identity linking
  • Age and nationality validation
  • Multi-entity relationships

Endpoints

Personal Identity Management

Create Persona

POST /v1/personas

Create a new personal identity record.

Request Body:

{
  "first_name": "John",
  "last_name": "Doe",
  "date_of_birth": "1990-01-01",
  "nationality": "CHE",
  "actual_street": "Main Street",
  "actual_house": "123",
  "actual_house_number": "123",
  "actual_zip_code": "8001",
  "actual_city": "Zurich",
  "actual_country": "CHE",
  "reg_street": "Main Street",
  "reg_house": "123",
  "reg_house_number": "123",
  "reg_zip_code": "8001",
  "reg_city": "Zurich",
  "reg_country": "CHE",
  "metadata": {
    "language": "de",
    "preferred_contact": "email"
  },
  "active": true
}

Success Response (201):

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "first_name": "John",
  "last_name": "Doe",
  "date_of_birth": "1990-01-01",
  "nationality": "CHE",
  "hash_id": "abc123",
  "active": true,
  "created_at": "2024-03-21T10:00:00Z",
  "created_by": "123e4567-e89b-12d3-a456-426614174000"
}

Get All Personas

GET /v1/personas

Retrieve all accessible personas.

Success Response (200):

[
  {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "first_name": "John",
    "last_name": "Doe",
    "date_of_birth": "1990-01-01",
    "nationality": "CHE",
    "hash_id": "abc123",
    "active": true,
    "created_at": "2024-03-21T10:00:00Z",
    "created_by": "123e4567-e89b-12d3-a456-426614174000"
  }
]

Get Persona by ID

GET /v1/personas/{persona_id}

Retrieve a specific persona's details.

Update Persona

PUT /v1/personas/{persona_id}

Request Body:

{
  "first_name": "Jane",
  "last_name": "Doe",
  "date_of_birth": "1990-01-01",
  "nationality": "CHE",
  "actual_street": "Main Street",
  "actual_house_number": "321",
  "actual_zip_code": "8001",
  "actual_city": "Zurich",
  "actual_country": "CHE",
  "metadata": {
    "preferred_contact": "email"
  },
  "active": false
}

Delete Persona

DELETE /v1/personas/{persona_id}

Delete a persona record.

User-Persona Operations

Get User's Persona

GET /v1/personas/user/{user_id}

Get persona associated with a user.

Get User's Persona (v2)

GET /v2/personas/user/{user_id}

Get persona associated with a user, including linked_to records.

Update User's Persona

PUT /v1/personas/user/{user_id}

Request Body:

{
  "first_name": "Jane",
  "last_name": "Doe",
  "nationality": "CHE",
  "actual_street": "Main Street",
  "actual_house_number": "321",
  "actual_zip_code": "8001",
  "actual_city": "Zurich",
  "actual_country": "CHE",
  "metadata": {
    "preferred_contact": "phone"
  },
  "active": true
}

POST /v1/persona-links

Create a link between a persona and another entity.

Request Body:

{
  "persona_id": "550e8400-e29b-41d4-a716-446655440000",
  "rec_id": "123e4567-e89b-12d3-a456-426614174000",
  "rec_type_name": "organizations",
  "metadata": {
    "role": "director",
    "start_date": "2024-01-01"
  },
  "active": true
}

GET /v1/persona-links/{id}

Retrieve a specific link.

PUT /v1/persona-links/{id}

Request Body:

{
  "metadata": {
    "role": "advisor",
    "start_date": "2024-04-01"
  },
  "active": false
}

DELETE /v1/persona-links/{id}

Delete a link.

GET /v1/persona-links

List all persona links.

Personal Identity Management (v2)

Get All Personas (v2)

GET /v2/personas

Retrieve personas with get_all behavior (search, sort, pagination, stack). Each returned persona item includes the same structure as /v2/personas/{persona_id}:

  • persona fields
  • linked_to array with related records

Get Persona by ID (v2)

GET /v2/personas/{persona_id}

Retrieve one persona with linked_to records.

Validation Rules

Personal Information

  1. Name Requirements:

    • First name required
    • Last name required
    • Maximum length: 100 characters
  2. Date of Birth:

    • Required field
    • Must be in the past
    • Must be within last 150 years
    • Must be at least 18 years old
    • Valid calendar date

Error Codes

CodeDescription
personas.first_name_requiredFirst name is required
personas.last_name_requiredLast name is required
personas.first_name_too_longFirst name exceeds 100 characters
personas.last_name_too_longLast name exceeds 100 characters
personas.date_of_birth_requiredDate of birth is required
personas.date_of_birth_futureDate of birth cannot be in the future
personas.date_of_birth_invalidInvalid date of birth
personas.age_under_18Must be at least 18 years old
personas.day_invalid_for_monthDay invalid for month
personas.day_invalidDay invalid
personas.month_invalidMonth invalid
personas.year_invalidYear invalid
personas.date_of_death_invalidInvalid date of death
personas.failed_to_serializeFailed to parse request body
personas.invalid_persona_idInvalid persona ID
personas.persona_not_foundPersona not found
personas.failed_to_validateFailed to validate input

Query Parameters

List Personas

ParameterTypeDescription
activebooleanFilter by active status
nationalitystringFilter by ISO 3166-1 alpha-3 country code
limitintegerMaximum number of records (default: 20, max: 100)
offsetintegerNumber of records to skip for pagination

List Personas (v2)

ParameterTypeDescription
limitintegerMaximum number of records
offsetintegerNumber of records to skip
sortstringComma-separated sort fields, use - prefix for DESC
stackstringStack/group by a field
search.id.equuidFilter by persona ID
search.created_at.eqstringFilter by created_at
search.created_by.equuidFilter by created_by
search.modified_at.eqstringFilter by modified_at
search.modified_by.equuidFilter by modified_by
search.active.eqbooleanFilter by active flag
search.metadata.likestringSearch in metadata text
search.first_name.likestringFilter by first name
search.last_name.likestringFilter by last name
search.date_of_birth.eqdateFilter by date of birth
search.date_of_death.eqdateFilter by date of death
search.nationality.eqstringFilter by nationality
search.hash_id.likestringFilter by hash ID
search.linked_to.record_iduuidFilter personas linked to a specific record ID
search.linked_to.record_typestringFilter personas linked to a specific record type
ParameterTypeDescription
rec_type_namestringFilter by linked entity type
activebooleanFilter by active status
limitintegerMaximum number of records (default: 20, max: 100)
offsetintegerNumber of records to skip for pagination

Response Status Codes

StatusDescription
200Success - Request completed successfully
201Created - New resource created successfully
400Bad Request - Invalid input data
401Unauthorized - Missing or invalid authentication
403Forbidden - Insufficient permissions
404Not Found - Resource not found
422Unprocessable Entity - Validation error
500Internal Server Error - Server error

Versioning

The API is versioned through the URL path. Supported versions are v1 and v2.

Example: /v1/personas

On this page