---
title: "One unit dossier"
method: GET
path: "/api/v1/units/{id}"
tags: ["Portfolio"]
---

# One unit dossier

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

## Request

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

Everything filed against a lot: what it was bought for where that is on file (`acquisition`: purchase date, price and costs, in cents), its building, the tenancy in force and every tenancy before it, the people on it, open issues, short-stay bookings, certificates, meters and their readings, inspections and the documents that hang off any of them.

## Path parameters

- `id` string, required

## Response `200`

The dossier.

- object
  - `ok` unknown, required
  - `data` object, required
    - `unit` object, required
      - `id` string, required: Stable record id, e.g. `lse_012`.
      - `buildingId` string, required: Stable record id, e.g. `lse_012`.
      - `label` string, required: Unique within its building: "3A", "Ground floor", "Parking 12".
      - `kind` string, required
      - `mode` string, required
      - `status` string, required
      - `furnished` boolean, required
      - `marketRent` integer: Market rent estimate. Drives vacancy-cost and yield maths.
      - `custom` object
    - `label` string, required: The unit as a person says it: "Rue des Palais 12 · 3A".
    - `building` object
      - `id` string, required: Stable record id, e.g. `lse_012`.
      - `teamId` string, required: Stable record id, e.g. `lse_012`.
      - `name` string, required: The address. Stays the address so search and paperwork still match.
      - `alias` string: What the owner calls it. Shown instead of `name` wherever one is set.
      - `coverDocumentId` string: The photo pinned as its picture. Absent, the newest photo filed against it is shown.
      - `kind` string, required
      - `jurisdictionId` string, required: Jurisdiction pack id: `be-fl`, `be-bru`, `nl`, `fr`, `generic`.
      - `custom` object
    - `buildingLabel` string, required: Resolved through buildingLabel(), so an owner alias is honoured.
    - `activeLease` object: The tenancy in force, counting one under notice. Absent when the unit is empty.
      - `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
    - `monthlyRent` integer, required: Contracted rent normalised to a month, whatever the lease frequency. 0 when nothing is let.
    - `leases` object[], required: Every tenancy this unit has ever had, newest first.
      - `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
    - `tenants` object[], required: Who signed the active lease. Guarantors are not among them.
      - `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
    - `issues` object[], required
      - `id` string, required: Stable record id, e.g. `lse_012`.
      - `reference` string, required
      - `unitId` string, required: Stable record id, e.g. `lse_012`.
      - `buildingId` string, required: Stable record id, e.g. `lse_012`.
      - `leaseId` string: Stable record id, e.g. `lse_012`.
      - `reportedById` string: Stable record id, e.g. `lse_012`.
      - `reportedVia` string, required: The channel it arrived on, or `inspection`, `preventive` or `owner`.
      - `reportedAt` string, required: ISO 8601 timestamp.
      - `title` string, required
      - `description` string, required
      - `category` string, required
      - `urgency` 'emergency' | 'urgent' | 'routine' | 'cosmetic', required
      - `status` 'reported' | 'triaging' | 'awaiting_approval' | 'quoting' | 'scheduled' | 'in_progress' | 'awaiting_invoice' | 'resolved' | 'closed' | 'rejected', required
      - `photoRefs` string[], required
      - `triage` object
        - `diagnosis` string, required
        - `confidence` number, required: 0 to 1. A low number is why a repair goes to review rather than straight to a contractor.
        - `suggestedTrade` string, required
        - `estimatedCost` integer: Money, always in integer cents. €1,250.00 is 125000.
        - `liability` 'owner' | 'tenant' | 'shared' | 'insurance' | 'undetermined', required: Who pays, which is the single most contested call in property management.
        - `liabilityRationale` string, required
        - `selfHelpSuggested` string
        - `slaResponseHours` number, required
        - `slaResolutionHours` number, required
      - `slaBreached` boolean: Set once the response or resolution clock has run out.
      - `firstResponseAt` string: ISO 8601 timestamp.
      - `workOrderIds` string[], required
      - `threadId` string: Stable record id, e.g. `lse_012`.
      - `resolvedAt` string: ISO 8601 timestamp.
      - `resolutionNote` string
      - `costTotal` integer: Money, always in integer cents. €1,250.00 is 125000.
      - `rechargedToTenant` integer: The part of the cost billed on to the tenant.
      - `provenance` object, required
        - `actor` object, required
          - `kind` 'owner' | 'ai' | 'tenant' | 'contractor' | 'system' | 'channel', required: `ai` is Dardaris acting on the owner’s behalf. Everything it touches is marked.
          - `id` string: Stable record id, e.g. `lse_012`.
          - `name` string, required
        - `at` string, required: ISO 8601 timestamp.
        - `workflowRunId` string: Set when an automated run produced this, linking the record back to the run.
        - `reasoning` string: The rationale the AI recorded at the moment it acted.
    - `bookings` object[], required: Short-stay bookings, by check-in. checkOut is exclusive.
      - `id` string, required: Stable record id, e.g. `lse_012`.
      - `reference` string, required
      - `unitId` string, required: Stable record id, e.g. `lse_012`.
      - `channel` string, required
      - `guestContactId` string, required: Stable record id, e.g. `lse_012`.
      - `status` string, required
      - `checkIn` string, required: A calendar date, `YYYY-MM-DD`.
      - `checkOut` string, required: Exclusive. A checkout and a check-in on the same date is a turnover, not a clash.
      - `nights` number, required
      - `nightlyRate` integer, required: Money, always in integer cents. €1,250.00 is 125000.
      - `accommodationTotal` integer, required: Money, always in integer cents. €1,250.00 is 125000.
      - `cleaningFee` integer, required: Money, always in integer cents. €1,250.00 is 125000.
      - `touristTax` integer, required: Money, always in integer cents. €1,250.00 is 125000.
      - `channelCommission` integer, required: Money, always in integer cents. €1,250.00 is 125000.
      - `netPayout` integer, required: What actually lands in the bank.
      - `currency` string, required
    - `certificates` object[], required: Status is recomputed from the expiry date on read, never trusted as stored.
      - `id` string, required: Stable record id, e.g. `lse_012`.
      - `type` string, required: `epc`, `electrical`, `gas`, `boiler_service`, `chimney`, `asbestos` and the rest.
      - `buildingId` string: Stable record id, e.g. `lse_012`.
      - `unitId` string: Stable record id, e.g. `lse_012`.
      - `reference` string
      - `issuedOn` string, required: A calendar date, `YYYY-MM-DD`.
      - `validUntil` string: A calendar date, `YYYY-MM-DD`.
      - `issuedBy` string
      - `documentId` string: Stable record id, e.g. `lse_012`.
      - `status` 'valid' | 'expiring' | 'expired' | 'missing' | 'not_applicable', required
      - `mandatory` boolean, required: Whether this jurisdiction legally requires it before the unit may be let.
      - `notes` string
    - `meters` object[], required
      - `id` string, required: Stable record id, e.g. `lse_012`.
      - `unitId` string: Absent on a collective meter, which serves the whole building.
      - `buildingId` string, required: Stable record id, e.g. `lse_012`.
      - `kind` 'electricity' | 'gas' | 'water' | 'heat' | 'solar' | 'cooling', required
      - `serial` string, required: The number on the device, empty when only the supply point code is known. Changes when the meter is replaced.
      - `scope` 'individual' | 'collective', required: An individual meter is billed to the tenant. A collective one is apportioned across the units.
      - `supplier` string
      - `eanCode` string: The supply point code, whatever the country calls it: an EAN in Belgium, a PDL in France, an MPAN in the United Kingdom, a DEWA premise number in Dubai. Stays with the address when the meter is replaced.
      - `unitOfMeasure` 'kWh' | 'm3' | 'GJ' | 'RTh', required: RTh is the refrigeration ton-hour district cooling is billed in.
      - `dualRate` boolean: Shows a day and a night number, each read as its own reading.
      - `injection` boolean: Also counts what solar panels send back to the grid.
    - `readings` object[], required: Readings for this unit’s meters, newest first.
      - `id` string, required: Stable record id, e.g. `lse_012`.
      - `meterId` string, required: Stable record id, e.g. `lse_012`.
      - `date` string, required: A calendar date, `YYYY-MM-DD`.
      - `value` number, required: The counter as read, in the meter’s unit of measure. Not a consumption.
      - `register` 'day' | 'night' | 'injection': Which number on the display this is. Absent on a meter that shows one.
      - `newMeter` boolean: The first reading of a replacement meter: no consumption is worked out across it.
      - `source` 'move_in' | 'move_out' | 'periodic' | 'tenant_submitted' | 'estimated' | 'supplier', required
      - `photoRef` string
      - `recordedBy` object, required
        - `kind` 'owner' | 'ai' | 'tenant' | 'contractor' | 'system' | 'channel', required: `ai` is Dardaris acting on the owner’s behalf. Everything it touches is marked.
        - `id` string: Stable record id, e.g. `lse_012`.
        - `name` string, required
    - `inspections` object[], required
      - `id` string, required: Stable record id, e.g. `lse_012`.
      - `unitId` string, required: Stable record id, e.g. `lse_012`.
      - `leaseId` string: Stable record id, e.g. `lse_012`.
      - `kind` 'move_in' | 'move_out' | 'interim' | 'annual' | 'handover', required
      - `scheduledFor` string: A calendar date, `YYYY-MM-DD`.
      - `completedOn` string: A calendar date, `YYYY-MM-DD`.
      - `status` 'scheduled' | 'in_progress' | 'completed' | 'signed' | 'disputed', required
      - `inspectorId` string: Stable record id, e.g. `lse_012`.
      - `attendees` string[], required
      - `items` object[], required
        - `id` string, required: Stable record id, e.g. `lse_012`.
        - `room` string, required
        - `element` string, required
        - `condition` 'excellent' | 'good' | 'fair' | 'poor' | 'damaged', required
        - `notes` string
        - `photoRefs` string[], required
        - `changedSinceMoveIn` boolean: Move-out only: whether this was already like this at move-in.
        - `liability` 'wear_and_tear' | 'tenant' | 'owner' | 'undetermined': The call on wear and tear against chargeable damage.
        - `estimatedCost` integer: Money, always in integer cents. €1,250.00 is 125000.
      - `meterReadingIds` string[], required
      - `documentIds` string[], required
      - `comparisonSummary` string: How this compares to the move-in inspection, written by the AI.
      - `signedBy` object[], required
        - `contactId` string, required: Stable record id, e.g. `lse_012`.
        - `signedAt` string, required: ISO 8601 timestamp.
    - `documents` object[], required: The whole filing cabinet: paper linked to the unit, to its leases, to its certificates and to its issues.
      - `id` string, required: Stable record id, e.g. `lse_012`.
      - `name` string, required
      - `kind` string, required: `lease`, `invoice`, `certificate`, `inspection_report` and the rest. This is the product’s own filing.
      - `mimeType` string, required
      - `size` number, required: Bytes.
      - `createdAt` string, required: ISO 8601 timestamp.
      - `links` object[], required: Every place the document is shown. A document can hang off any record, and off more than one; `folderId` is the folder that place files it in.
        - `kind` string, required
        - `id` string, required: Stable record id, e.g. `lse_012`.
        - `folderId` string: Stable record id, e.g. `lse_012`.
      - `expiresOn` string: Set on anything that expires, which is what feeds the compliance calendar.
      - `generated` boolean, required: True when the AI produced it rather than the owner uploading it.
      - `templateId` string: Stable record id, e.g. `lse_012`.
      - `language` 'en' | 'nl' | 'fr' | 'de': One of the four the product itself authors wording in: the clause library, the seeded messages, the words on a notice.
      - `folderId` string: No longer written. The folder is kept per place, on each of `links`.
      - `tags` string[], required
      - `status` 'withdrawn': `withdrawn` on a generated letter filed for a case that has since closed paid. Absent means the document stands.
      - `provenance` object, required
        - `actor` object, required
          - `kind` 'owner' | 'ai' | 'tenant' | 'contractor' | 'system' | 'channel', required: `ai` is Dardaris acting on the owner’s behalf. Everything it touches is marked.
          - `id` string: Stable record id, e.g. `lse_012`.
          - `name` string, required
        - `at` string, required: ISO 8601 timestamp.
        - `workflowRunId` string: Set when an automated run produced this, linking the record back to the run.
        - `reasoning` string: The rationale the AI recorded at the moment it acted.
  - `meta` object, required
    - `requestId` string, required: Echoed in the x-request-id header. Quote it in a bug report.

## Other responses

- `404`: No unit 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)
