---
title: "The letting pipeline: listings, viewings, applications and inspections"
method: GET
path: "/api/v1/letting"
tags: ["Leases"]
---

# The letting pipeline: listings, viewings, applications and inspections

`GET /api/v1/letting`

## Request

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

One call for the whole path from advert to keys. Every record carries its unit label, so a pipeline board can be drawn without resolving a single id.

## Response `200`

The letting pipeline.

- object
  - `ok` unknown, required
  - `data` object, required
    - `applications` object[], required: Who applied, with the screening result where one has been run.
      - `id` string, required: Stable record id, e.g. `lse_012`.
      - `unitId` string, required: Stable record id, e.g. `lse_012`.
      - `applicantIds` string[], required
      - `status` 'new' | 'screening' | 'viewing_booked' | 'viewed' | 'shortlisted' | 'offer_sent' | 'accepted' | 'rejected' | 'withdrawn', required
      - `source` 'portal' | 'website' | 'referral' | 'walk_in' | 'agent', required
      - `receivedAt` string, required: ISO 8601 timestamp.
      - `screening` object
        - `monthlyIncome` integer: Money, always in integer cents. €1,250.00 is 125000.
        - `incomeToRentRatio` number: Monthly income divided by the asking rent.
        - `employmentType` 'permanent' | 'temporary' | 'self_employed' | 'student' | 'retired' | 'unemployed'
        - `hasGuarantor` boolean, required
        - `documentsReceived` string[], required
        - `documentsMissing` string[], required
        - `priorLandlordReference` 'positive' | 'neutral' | 'negative' | 'pending' | 'none'
        - `score` number: 0 to 100. Computed from income, documents and references, never from anything protected.
        - `flags` string[], required
      - `viewingId` string: Stable record id, e.g. `lse_012`.
      - `rejectionReason` string
      - `notes` string
      - `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.
      - `unitLabel` string, required: The unit as a person says it, resolved so an owner’s building alias is honoured.
      - `applicantNames` string[], required: The applicants by name, in the order they are recorded on the application.
    - `viewings` object[], required
      - `id` string, required: Stable record id, e.g. `lse_012`.
      - `unitId` string, required: Stable record id, e.g. `lse_012`.
      - `applicationId` string: Stable record id, e.g. `lse_012`.
      - `scheduledFor` string, required: ISO 8601 timestamp.
      - `durationMinutes` number, required
      - `status` 'proposed' | 'confirmed' | 'completed' | 'no_show' | 'cancelled', required
      - `attendeeIds` string[], required
      - `feedback` string
      - `interestLevel` 'high' | 'medium' | 'low'
      - `unitLabel` string, required: The unit as a person says it, resolved so an owner’s building alias is honoured.
    - `listings` object[], required: What is advertised, and how each portal is carrying it.
      - `id` string, required: Stable record id, e.g. `lse_012`.
      - `unitId` string, required: Stable record id, e.g. `lse_012`.
      - `mode` 'long_term' | 'short_term', required
      - `status` 'draft' | 'live' | 'paused' | 'let' | 'archived', required
      - `headline` object, required
      - `description` object, required
      - `askingRent` integer, required: Money, always in integer cents. €1,250.00 is 125000.
      - `availableFrom` string, required: A calendar date, `YYYY-MM-DD`.
      - `minimumTermMonths` number
      - `publishedAt` string: ISO 8601 timestamp.
      - `channels` object[], required: Where the advert has been syndicated, and how that is going on each portal.
        - `channel` string, required
        - `status` 'pending' | 'live' | 'error' | 'removed', required
        - `externalId` string
        - `url` string
        - `views` number
        - `inquiries` number
      - `photoCount` number, required
      - `unitLabel` string, required: The unit as a person says it, resolved so an owner’s building alias is honoured.
    - `inspections` object[], required: Move-in, move-out and everything between, since a let starts and ends on one.
      - `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.
      - `unitLabel` string, required: The unit as a person says it, resolved so an owner’s building alias is honoured.
  - `meta` object, required
    - `requestId` string, required: Echoed in the x-request-id header. Quote it in a bug report.

---

[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)
