CorebanqCorebanq Developer Docs
Personas

Description

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