---
title: "One contact dossier"
method: GET
path: "/api/v1/contacts/{id}"
tags: ["People"]
---

# One contact dossier

`GET /api/v1/contacts/{id}`

## Request

- Base URL: `http://localhost:5180`
- URL: `http://localhost:5180/api/v1/contacts/{id}`
- Auth: API key in cookie `better-auth.session_token`

The person and everything hanging off them: the leases they are named on with the unit each is in, the conversations they take part in, and the invoices raised against those leases. It is the whole of a tenant relationship in one round trip.

## Path parameters

- `id` string, required

## Response `200`

The dossier.

- object
  - `ok` unknown, required
  - `data` object, required
    - `contact` object, required
      - `id` string, required: Stable record id, e.g. `lse_012`.
      - `kind` string, required
      - `firstName` string, required
      - `lastName` string, required
      - `companyName` string
      - `email` string
      - `phone` string
      - `language` string, required
    - `name` string, required: The company name where there is one, otherwise first and last.
    - `leases` object[], required
      - `id` string, required: Stable record id, e.g. `lse_012`.
      - `reference` string, required
      - `parties` object[], required: Everyone the tenancy names. Absent is refused: every read resolves a tenant through it.
        - `contactId` string, required: Stable record id, e.g. `lse_012`.
        - `role` 'tenant' | 'co_tenant' | 'guarantor' | 'occupant', required
        - `jointlyLiable` boolean, required
        - `sharePct` number: A decimal ratio. 0.21 is 21%.
      - `custom` object
      - `unitId` string, required: Stable record id, e.g. `lse_012`.
      - `extraUnits` object[]: Further units let under this lease, a parking space or a cellar. `rent` is each one’s own part of the lease’s rent; absent comes with the main unit.
        - `unitId` string, required: Stable record id, e.g. `lse_012`.
        - `rent` integer: Money, always in integer cents. €1,250.00 is 125000.
      - `type` string, required
      - `status` 'draft' | 'pending_signature' | 'active' | 'notice_given' | 'ended' | 'terminated_early' | 'cancelled', required
      - `startDate` string, required: A calendar date, `YYYY-MM-DD`.
      - `endDate` string, nullable, required: A calendar date, `YYYY-MM-DD`.
      - `signedOn` string: The day the lease was signed, when it was signed outside the product.
      - `signedByOwnerAt` string: When the owner signed it in the product, which is the last signature a lease signed here takes.
      - `rent` integer, required: Money, always in integer cents. €1,250.00 is 125000.
      - `rentFrequency` string, required
      - `rentDueDay` number, required: Day of the month rent falls due.
      - `chargesProvision` integer, required: Monthly provision for service charges, settled annually.
      - `currency` string, required
      - `unitLabel` string, required: Resolved through buildingLabel(), so an owner alias is honoured.
    - `threads` object[], required: Every conversation this person is a participant in.
      - `id` string, required: Stable record id, e.g. `lse_012`.
      - `subject` string, required
      - `channel` 'email' | 'sms' | 'whatsapp' | 'phone' | 'portal' | 'post', required
      - `participantIds` string[], required
      - `unitId` string: Stable record id, e.g. `lse_012`.
      - `buildingId` string: Set where the conversation is about a whole building rather than a lot in it.
      - `leaseId` string: Stable record id, e.g. `lse_012`.
      - `bookingId` string: Stable record id, e.g. `lse_012`.
      - `issueId` string: Stable record id, e.g. `lse_012`.
      - `lastMessageAt` string, required: ISO 8601 timestamp.
      - `messageIds` string[], required
      - `status` 'open' | 'waiting_on_tenant' | 'waiting_on_us' | 'snoozed' | 'closed', required
      - `dueBy` string: When a reply is owed on our side.
      - `snoozedUntil` string: ISO 8601 timestamp.
      - `unread` boolean, required
      - `pinned` boolean, required
      - `labels` string[], required
      - `aiSummary` string: A rolling summary, so a long thread is readable at a glance.
      - `sentiment` 'positive' | 'neutral' | 'frustrated' | 'angry'
      - `escalationRisk` 'none' | 'low' | 'medium' | 'high': How likely this is to turn into a dispute if it is left alone.
    - `invoices` object[], required: Every invoice raised against their leases, newest due date first.
      - `id` string, required: Stable record id, e.g. `lse_012`.
      - `number` string, required
      - `leaseId` string: Stable record id, e.g. `lse_012`.
      - `contactId` string, required: Stable record id, e.g. `lse_012`.
      - `teamId` string, required: Stable record id, e.g. `lse_012`.
      - `kind` string, required
      - `status` string, required
      - `issueDate` string, required: A calendar date, `YYYY-MM-DD`.
      - `dueDate` string, required: A calendar date, `YYYY-MM-DD`.
      - `subtotal` integer, required: Money, always in integer cents. €1,250.00 is 125000.
      - `vatTotal` integer, required: Money, always in integer cents. €1,250.00 is 125000.
      - `total` integer, required: Money, always in integer cents. €1,250.00 is 125000.
      - `paidAmount` integer, required: Money, always in integer cents. €1,250.00 is 125000.
      - `structuredRef` string: Belgian-style structured reference, the key to automatic reconciliation.
      - `currency` string, required
  - `meta` object, required
    - `requestId` string, required: Echoed in the x-request-id header. Quote it in a bug report.

## Other responses

- `400`: The id was missing or empty.
- `404`: No contact with that id belongs to you.

---

[API](https://skmtc.dev/dardaris/apis/dardaris-api.md) · [All operations](https://skmtc.dev/dardaris/apis/dardaris-api/llms.txt) · [OpenAPI document](https://skmtc.dev/dardaris/apis/dardaris-api/revisions/4aff33835c73?raw)
