---
title: "Report a maintenance issue"
method: POST
path: "/api/v1/maintenance"
tags: ["Maintenance"]
---

# Report a maintenance issue

`POST /api/v1/maintenance`

## Request

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

Files an issue against a unit, the way the Report issue sheet does, with an audit entry naming who filed it. It is recorded and nothing else: no contractor is contacted and nothing is sent to anyone.

## Request body

- object
  - `unitId` string, required: The unit the problem is in.
  - `title` string, required
  - `description` string
  - `category` 'heating' | 'hot_water' | 'plumbing_leak' | 'drainage' | 'electrical' | 'appliance' | 'damp_mould' | 'pest' | 'window_door' | 'lock_key' | 'roof' | 'structural' | 'common_areas' | 'garden' | 'noise' | 'security' | 'safety_alarm' | 'other'
  - `urgency` 'emergency' | 'urgent' | 'routine' | 'cosmetic'

## Response `200`

Filed.

- object
  - `ok` unknown, required
  - `data` object, required
    - `issue` 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.
  - `meta` object, required
    - `requestId` string, required: Echoed in the x-request-id header. Quote it in a bug report.

## Other responses

- `400`: A field is missing or out of range.
- `404`: That unit is not in this portfolio.

---

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