Immutable rows — dependant fields are never updated in place. Every change produces a new row (status = ACTIVE); the old row becomes status = DISCARDED. Follow previous_version_id links to walk version history.

Overview

A dependant represents a family member linked to a primary user (spouse, child, parent, sibling, etc.). The SELF dependant is a special row that mirrors the user’s own identity — it is managed automatically by the server and cannot be created or deleted via this API.

Immutability Model

When you PATCH /users/{user_id}/dependants/{id}, the server:
  1. Sets the old row status → DISCARDED
  2. Inserts a new row with a fresh UUID and previous_version_id = old_id
  3. Returns the new (current) row
The new row’s previous_version_id points back to the discarded row, so version history is walked newest-to-oldest.

Auth Guards by Endpoint


SELF Dependant

Every user has exactly one active relationship = SELF dependant. It is created automatically on POST /users/{user_id}/complete_onboarding (which takes a required salutation field) and re-versioned when PATCH /users/{user_id} changes first_name, last_name, dob, or gender. Attempting to create, update, or delete SELF via the dependants API returns 400 DE_603.

Exact-Duplicate Skip on Create

POST /users/{user_id}/dependants and POST /users/{user_id}/dependants/bulk both check, before inserting, whether an active row already exists with every field of the payload identical (relationship, salutation, first_name, last_name, date_of_birth, gender).
  • Exact match found → no row is inserted. The response (still 201) carries the existing row.
  • Any field differs (including date_of_birth) → a new row is inserted.
This makes draft re-submissions and network retries idempotent without requiring the client to handle a 4xx. Two SPOUSE entries with different DOBs are treated as two distinct dependants and both inserted.

Relationship Values


Salutation Values

salutation is required on create and present on every response; it is optional on update (send it only to change it):

Endpoints

POST /users/{user_id}/dependants

Add a new dependant. relationship = SELF not allowed.

POST /users/{user_id}/dependants/bulk

Atomically insert up to 50 dependants in one request. relationship = SELF not allowed.

GET /users/{user_id}/dependants

Paginated list. Defaults to status = ACTIVE. JWT users see only their own.

GET /users/{user_id}/dependants/{id}

Fetch a single dependant by UUID.

PATCH /users/{user_id}/dependants/{id}

Update fields. Produces a new immutable row; old row is discarded.

DELETE /users/{user_id}/dependants/{id}

Discard a dependant (status → DISCARDED). SELF not allowed.

Request / Response Examples


Error Codes