> ## Documentation Index
> Fetch the complete documentation index at: https://docs-v2.sortx.co.uk/llms.txt
> Use this file to discover all available pages before exploring further.

# Complete

> Record the handover as complete, keeping what was left outstanding; a completed move-out may return the property to the market when no other tenancy there is active or being drafted (a status already under offer, for sale, sold or withdrawn is left as it is)



## OpenAPI

````yaml /openapi.json post /handovers/tenancies/{tenancyId}/{direction}/complete
openapi: 3.1.0
info:
  title: SortX API
  version: 1.0.0
  description: >-
    Reactive repairs, planned maintenance, compliance and the repairs desk for
    UK letting agents and property managers.
servers:
  - url: https://api.sortx.co.uk
    description: Production
security: []
tags:
  - name: tenants
  - name: entitlements
  - name: events
  - name: workspace-settings
  - name: operational-catalogues
  - name: money
  - name: contacts
  - name: properties
  - name: address-lookup
  - name: tenancies
  - name: contractor-invoices
  - name: keys
  - name: inspections
  - name: handovers
  - name: planned-maintenance
  - name: contractors
  - name: documents
  - name: compliance
  - name: activity
  - name: tasks
  - name: today
  - name: reports
  - name: workspace-search
  - name: calendar
  - name: telephony
  - name: maintenance-pro
  - name: front-desk
  - name: maintenance-pro-public
  - name: maintenance-pro-contractor
paths:
  /handovers/tenancies/{tenancyId}/{direction}/complete:
    post:
      tags:
        - handovers
      summary: Complete
      description: >-
        Record the handover as complete, keeping what was left outstanding; a
        completed move-out may return the property to the market when no other
        tenancy there is active or being drafted (a status already under offer,
        for sale, sold or withdrawn is left as it is)
      operationId: handovers.complete
      parameters:
        - name: tenancyId
          in: path
          schema:
            type: string
          required: true
        - name: direction
          in: path
          schema:
            type: string
            enum:
              - move_in
              - move_out
          required: true
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                requestId:
                  type: string
                expectedRevision:
                  anyOf:
                    - type: number
                    - type: string
                      enum:
                        - Infinity
                        - '-Infinity'
                        - NaN
                handedOverOn:
                  type: string
                note:
                  anyOf:
                    - anyOf:
                        - type: string
                        - type: 'null'
                    - type: 'null'
                releaseProperty:
                  anyOf:
                    - type: boolean
                    - type: 'null'
              required:
                - requestId
                - expectedRevision
                - handedOverOn
              additionalProperties: false
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TenancyHandoversRow'
        '400':
          description: >-
            TenantCreateRejected | ConfigMissing | IntegrationRejected |
            AuthRejected | RegistrationRejected | UnknownIntegration |
            WebhookUnroutable | RateUnavailable
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/TenantCreateRejectedEncoded'
                  - $ref: '#/components/schemas/ConfigMissingEncoded'
                  - $ref: '#/components/schemas/IntegrationRejectedEncoded'
                  - $ref: '#/components/schemas/AuthRejectedEncoded'
                  - $ref: '#/components/schemas/RegistrationRejectedEncoded'
                  - $ref: '#/components/schemas/UnknownIntegrationEncoded'
                  - $ref: '#/components/schemas/WebhookUnroutableEncoded'
                  - $ref: '#/components/schemas/RateUnavailableEncoded'
                  - $ref: '#/components/schemas/HandoverInputInvalid'
        '401':
          description: Unauthenticated | WebhookRejected | ApiKeyRejected
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/UnauthenticatedEncoded'
                  - $ref: '#/components/schemas/WebhookRejectedEncoded'
                  - $ref: '#/components/schemas/ApiKeyRejectedEncoded'
        '402':
          description: TenantSuspended
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TenantSuspendedEncoded'
        '403':
          description: >-
            EntitlementMissing | NotAMember | ScopeUnknown | ScopeMissing |
            TenantMismatch | WorkspaceOwnerRequired | WorkspaceRoleRequired
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/EntitlementMissingEncoded'
                  - $ref: '#/components/schemas/NotAMemberEncoded'
                  - $ref: '#/components/schemas/ScopeUnknownEncoded'
                  - $ref: '#/components/schemas/ScopeMissingEncoded'
                  - $ref: '#/components/schemas/TenantMismatchEncoded'
                  - $ref: '#/components/schemas/WorkspaceOwnerRequiredEncoded'
                  - $ref: '#/components/schemas/WorkspaceRoleRequiredEncoded'
        '404':
          description: TenantNotFound | ModuleRequestNotFound
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/TenantNotFoundEncoded'
                  - $ref: '#/components/schemas/ModuleRequestNotFoundEncoded'
                  - $ref: '#/components/schemas/HandoverNotFound'
        '409':
          description: WebhookDuplicate | RegistrationConflict | MoneyBusy
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/WebhookDuplicateEncoded'
                  - $ref: '#/components/schemas/RegistrationConflictEncoded'
                  - $ref: '#/components/schemas/HandoverStale'
                  - $ref: '#/components/schemas/HandoverRequestConflict'
                  - $ref: '#/components/schemas/HandoverTransitionInvalid'
                  - $ref: '#/components/schemas/MoneyBusyEncoded'
        '429':
          description: RateLimited
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitedEncoded'
        '503':
          description: IntegrationUnavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IntegrationUnavailableEncoded'
      security:
        - apiKey: []
components:
  schemas:
    TenancyHandoversRow:
      type: object
      properties:
        tenancyId:
          type: string
        tenancyStatus:
          type: string
          enum:
            - active
            - notice_given
            - ended
        startsOn:
          anyOf:
            - type: string
            - type: 'null'
        endsOn:
          anyOf:
            - type: string
            - type: 'null'
        noticeGivenOn:
          anyOf:
            - type: string
            - type: 'null'
        unitId:
          type: string
        propertyId:
          anyOf:
            - type: string
            - type: 'null'
        occupants:
          type: array
          items:
            type: object
            properties:
              contactId:
                type: string
              role:
                type: string
              isLead:
                type: boolean
            required:
              - contactId
              - role
              - isLead
            additionalProperties: false
        moveIn:
          anyOf:
            - $ref: '#/components/schemas/HandoverRow'
            - type: 'null'
        moveOut:
          anyOf:
            - $ref: '#/components/schemas/HandoverRow'
            - type: 'null'
        checkIn:
          anyOf:
            - type: object
              properties:
                id:
                  type: string
                reference:
                  type: string
                status:
                  type: string
                  enum:
                    - due
                    - booked
                    - completed
                    - cancelled
                outcome:
                  anyOf:
                    - type: string
                      enum:
                        - satisfactory
                        - minor_actions
                        - unsatisfactory
                    - type: 'null'
                dueOn:
                  anyOf:
                    - type: string
                    - type: 'null'
                bookedFor:
                  anyOf:
                    - type: string
                    - type: 'null'
                completedAt:
                  anyOf:
                    - type: string
                    - type: 'null'
                findingCount:
                  anyOf:
                    - type: number
                    - type: string
                      enum:
                        - Infinity
                        - '-Infinity'
                        - NaN
                followUpCount:
                  anyOf:
                    - type: number
                    - type: string
                      enum:
                        - Infinity
                        - '-Infinity'
                        - NaN
              required:
                - id
                - reference
                - status
                - outcome
                - dueOn
                - bookedFor
                - completedAt
                - findingCount
                - followUpCount
              additionalProperties: false
            - type: 'null'
        checkOut:
          anyOf:
            - type: object
              properties:
                id:
                  type: string
                reference:
                  type: string
                status:
                  type: string
                  enum:
                    - due
                    - booked
                    - completed
                    - cancelled
                outcome:
                  anyOf:
                    - type: string
                      enum:
                        - satisfactory
                        - minor_actions
                        - unsatisfactory
                    - type: 'null'
                dueOn:
                  anyOf:
                    - type: string
                    - type: 'null'
                bookedFor:
                  anyOf:
                    - type: string
                    - type: 'null'
                completedAt:
                  anyOf:
                    - type: string
                    - type: 'null'
                findingCount:
                  anyOf:
                    - type: number
                    - type: string
                      enum:
                        - Infinity
                        - '-Infinity'
                        - NaN
                followUpCount:
                  anyOf:
                    - type: number
                    - type: string
                      enum:
                        - Infinity
                        - '-Infinity'
                        - NaN
              required:
                - id
                - reference
                - status
                - outcome
                - dueOn
                - bookedFor
                - completedAt
                - findingCount
                - followUpCount
              additionalProperties: false
            - type: 'null'
        inspectionsReadable:
          type: boolean
        followUps:
          anyOf:
            - type: array
              items:
                type: object
                properties:
                  findingId:
                    type: string
                  area:
                    type: string
                  item:
                    anyOf:
                      - type: string
                      - type: 'null'
                  repair:
                    anyOf:
                      - type: object
                        properties:
                          id:
                            type: string
                          reference:
                            anyOf:
                              - type: string
                              - type: 'null'
                          status:
                            anyOf:
                              - type: string
                              - type: 'null'
                        required:
                          - id
                          - reference
                          - status
                        additionalProperties: false
                      - type: 'null'
                  task:
                    anyOf:
                      - type: object
                        properties:
                          id:
                            type: string
                          title:
                            type: string
                          status:
                            type: string
                          dueOn:
                            anyOf:
                              - type: string
                              - type: 'null'
                        required:
                          - id
                          - title
                          - status
                          - dueOn
                        additionalProperties: false
                      - type: 'null'
                required:
                  - findingId
                  - area
                  - item
                  - repair
                  - task
                additionalProperties: false
            - type: 'null'
        keys:
          anyOf:
            - type: object
              properties:
                held:
                  type: array
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                      reference:
                        type: string
                      label:
                        type: string
                      unitId:
                        anyOf:
                          - type: string
                          - type: 'null'
                      status:
                        type: string
                        enum:
                          - in_office
                          - checked_out
                          - lost
                      sequence:
                        anyOf:
                          - type: number
                          - type: string
                            enum:
                              - Infinity
                              - '-Infinity'
                              - NaN
                      holderType:
                        type: string
                      holderContactId:
                        anyOf:
                          - type: string
                          - type: 'null'
                      holderName:
                        type: string
                      tenancyId:
                        anyOf:
                          - type: string
                          - type: 'null'
                    required:
                      - id
                      - reference
                      - label
                      - unitId
                      - status
                      - sequence
                      - holderType
                      - holderContactId
                      - holderName
                      - tenancyId
                    additionalProperties: false
                ambiguous:
                  type: array
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                      reference:
                        type: string
                      label:
                        type: string
                      unitId:
                        anyOf:
                          - type: string
                          - type: 'null'
                      status:
                        type: string
                        enum:
                          - in_office
                          - checked_out
                          - lost
                      sequence:
                        anyOf:
                          - type: number
                          - type: string
                            enum:
                              - Infinity
                              - '-Infinity'
                              - NaN
                      holderType:
                        type: string
                      holderContactId:
                        anyOf:
                          - type: string
                          - type: 'null'
                      holderName:
                        type: string
                      tenancyId:
                        anyOf:
                          - type: string
                          - type: 'null'
                    required:
                      - id
                      - reference
                      - label
                      - unitId
                      - status
                      - sequence
                      - holderType
                      - holderContactId
                      - holderName
                      - tenancyId
                    additionalProperties: false
                available:
                  type: array
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                      reference:
                        type: string
                      label:
                        type: string
                      unitId:
                        anyOf:
                          - type: string
                          - type: 'null'
                      status:
                        type: string
                        enum:
                          - in_office
                          - checked_out
                          - lost
                      sequence:
                        anyOf:
                          - type: number
                          - type: string
                            enum:
                              - Infinity
                              - '-Infinity'
                              - NaN
                      holderType:
                        type: string
                      holderContactId:
                        anyOf:
                          - type: string
                          - type: 'null'
                      holderName:
                        type: string
                      tenancyId:
                        anyOf:
                          - type: string
                          - type: 'null'
                    required:
                      - id
                      - reference
                      - label
                      - unitId
                      - status
                      - sequence
                      - holderType
                      - holderContactId
                      - holderName
                      - tenancyId
                    additionalProperties: false
                otherActiveTenancyIds:
                  type: array
                  items:
                    type: string
              required:
                - held
                - ambiguous
                - available
                - otherActiveTenancyIds
              additionalProperties: false
            - type: 'null'
        outstanding:
          type: array
          items:
            type: object
            properties:
              code:
                type: string
                enum:
                  - check_in_missing
                  - check_in_open
                  - check_out_missing
                  - check_out_open
                  - follow_ups_open
                  - keys_not_handed_over
                  - keys_held
                  - keys_unattributed
                  - meter_readings_missing
                  - forwarding_missing
                  - notice_evidence_missing
                  - handover_open
              direction:
                type: string
                enum:
                  - move_in
                  - move_out
              message:
                type: string
              count:
                anyOf:
                  - anyOf:
                      - type: number
                      - type: string
                        enum:
                          - Infinity
                          - '-Infinity'
                          - NaN
                  - type: 'null'
            required:
              - code
              - direction
              - message
              - count
            additionalProperties: false
      required:
        - tenancyId
        - tenancyStatus
        - startsOn
        - endsOn
        - noticeGivenOn
        - unitId
        - propertyId
        - occupants
        - moveIn
        - moveOut
        - checkIn
        - checkOut
        - inspectionsReadable
        - followUps
        - keys
        - outstanding
      additionalProperties: false
    TenantCreateRejectedEncoded:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - TenantCreateRejected
        reason:
          type: string
        field:
          anyOf:
            - type: string
            - type: 'null'
      required:
        - _tag
        - reason
      additionalProperties: false
    ConfigMissingEncoded:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - ConfigMissing
        key:
          type: string
      required:
        - _tag
        - key
      additionalProperties: false
    IntegrationRejectedEncoded:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - IntegrationRejected
        integration:
          type: string
        reason:
          type: string
      required:
        - _tag
        - integration
        - reason
      additionalProperties: false
    AuthRejectedEncoded:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - AuthRejected
        code:
          type: string
        message:
          type: string
      required:
        - _tag
        - code
        - message
      additionalProperties: false
    RegistrationRejectedEncoded:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - RegistrationRejected
        message:
          type: string
        field:
          anyOf:
            - type: string
            - type: 'null'
      required:
        - _tag
        - message
      additionalProperties: false
    UnknownIntegrationEncoded:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - UnknownIntegration
        integration:
          type: string
      required:
        - _tag
        - integration
      additionalProperties: false
    WebhookUnroutableEncoded:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - WebhookUnroutable
        integration:
          type: string
        reason:
          type: string
      required:
        - _tag
        - integration
        - reason
      additionalProperties: false
    RateUnavailableEncoded:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - RateUnavailable
        base:
          type: string
        quote:
          type: string
        'on':
          type: string
      required:
        - _tag
        - base
        - quote
        - 'on'
      additionalProperties: false
    HandoverInputInvalid:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - HandoverInputInvalid
        field:
          type: string
        message:
          type: string
      required:
        - _tag
        - field
        - message
      additionalProperties: false
    UnauthenticatedEncoded:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - Unauthenticated
      required:
        - _tag
      additionalProperties: false
    WebhookRejectedEncoded:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - WebhookRejected
        integration:
          type: string
        reason:
          type: string
      required:
        - _tag
        - integration
        - reason
      additionalProperties: false
    ApiKeyRejectedEncoded:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - ApiKeyRejected
      required:
        - _tag
      additionalProperties: false
    TenantSuspendedEncoded:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - TenantSuspended
        tenantId:
          type: string
        reason:
          type: string
      required:
        - _tag
        - tenantId
        - reason
      additionalProperties: false
    EntitlementMissingEncoded:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - EntitlementMissing
        tenantId:
          type: string
        moduleId:
          type: string
      required:
        - _tag
        - tenantId
        - moduleId
      additionalProperties: false
    NotAMemberEncoded:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - NotAMember
        userId:
          type: string
        slug:
          type: string
      required:
        - _tag
        - userId
        - slug
      additionalProperties: false
    ScopeUnknownEncoded:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - ScopeUnknown
        scope:
          type: string
      required:
        - _tag
        - scope
      additionalProperties: false
    ScopeMissingEncoded:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - ScopeMissing
        scope:
          type: string
      required:
        - _tag
        - scope
      additionalProperties: false
    TenantMismatchEncoded:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - TenantMismatch
        header:
          type: string
        organizationId:
          type: string
      required:
        - _tag
        - header
        - organizationId
      additionalProperties: false
    WorkspaceOwnerRequiredEncoded:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - WorkspaceOwnerRequired
      required:
        - _tag
      additionalProperties: false
    WorkspaceRoleRequiredEncoded:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - WorkspaceRoleRequired
        role:
          anyOf:
            - type: string
            - type: 'null'
        required:
          type: array
          items:
            type: string
        message:
          type: string
      required:
        - _tag
        - role
        - required
        - message
      additionalProperties: false
    TenantNotFoundEncoded:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - TenantNotFound
        slug:
          type: string
      required:
        - _tag
        - slug
      additionalProperties: false
    ModuleRequestNotFoundEncoded:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - ModuleRequestNotFound
        id:
          type: string
      required:
        - _tag
        - id
      additionalProperties: false
    HandoverNotFound:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - HandoverNotFound
        tenancyId:
          type: string
      required:
        - _tag
        - tenancyId
      additionalProperties: false
    WebhookDuplicateEncoded:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - WebhookDuplicate
        integration:
          type: string
        externalId:
          type: string
      required:
        - _tag
        - integration
        - externalId
      additionalProperties: false
    RegistrationConflictEncoded:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - RegistrationConflict
        message:
          type: string
        field:
          anyOf:
            - type: string
            - type: 'null'
      required:
        - _tag
        - message
      additionalProperties: false
    HandoverStale:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - HandoverStale
        revision:
          anyOf:
            - type: number
            - type: string
              enum:
                - Infinity
                - '-Infinity'
                - NaN
        expectedRevision:
          anyOf:
            - type: number
            - type: string
              enum:
                - Infinity
                - '-Infinity'
                - NaN
        message:
          type: string
      required:
        - _tag
        - revision
        - expectedRevision
        - message
      additionalProperties: false
    HandoverRequestConflict:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - HandoverRequestConflict
        message:
          type: string
      required:
        - _tag
        - message
      additionalProperties: false
    HandoverTransitionInvalid:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - HandoverTransitionInvalid
        code:
          type: string
        message:
          type: string
      required:
        - _tag
        - code
        - message
      additionalProperties: false
    MoneyBusyEncoded:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - MoneyBusy
        message:
          type: string
      required:
        - _tag
        - message
      additionalProperties: false
    RateLimitedEncoded:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - RateLimited
        key:
          type: string
        retryAfterSeconds:
          anyOf:
            - type: number
            - type: string
              enum:
                - Infinity
                - '-Infinity'
                - NaN
        message:
          type: string
      required:
        - _tag
        - key
        - retryAfterSeconds
        - message
      additionalProperties: false
    IntegrationUnavailableEncoded:
      type: object
      properties:
        _tag:
          type: string
          enum:
            - IntegrationUnavailable
        integration:
          type: string
        detail:
          anyOf:
            - type: string
            - type: 'null'
      required:
        - _tag
        - integration
      additionalProperties: false
    HandoverRow:
      type: object
      properties:
        id:
          type: string
        direction:
          type: string
          enum:
            - move_in
            - move_out
        status:
          type: string
          enum:
            - open
            - completed
        revision:
          anyOf:
            - type: number
            - type: string
              enum:
                - Infinity
                - '-Infinity'
                - NaN
        handedOverOn:
          anyOf:
            - type: string
            - type: 'null'
        notice:
          anyOf:
            - type: object
              properties:
                receivedOn:
                  type: string
                method:
                  type: string
                  enum:
                    - in_person
                    - email
                    - letter
                    - text
                    - phone
                    - other
                documentId:
                  anyOf:
                    - type: string
                    - type: 'null'
                notes:
                  anyOf:
                    - type: string
                    - type: 'null'
              required:
                - receivedOn
                - method
                - documentId
                - notes
              additionalProperties: false
            - type: 'null'
        completedAt:
          anyOf:
            - type: string
            - type: 'null'
        completedByUserId:
          anyOf:
            - type: string
            - type: 'null'
        completionNote:
          anyOf:
            - type: string
            - type: 'null'
        outstandingAtCompletion:
          anyOf:
            - type: array
              items:
                type: string
            - type: 'null'
        propertyReleasedAt:
          anyOf:
            - type: string
            - type: 'null'
        propertyStatusKept:
          anyOf:
            - type: string
            - type: 'null'
        readings:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              utility:
                type: string
                enum:
                  - electricity
                  - gas
                  - water
                  - heat
                  - oil
                  - other
              meterReference:
                anyOf:
                  - type: string
                  - type: 'null'
              reading:
                type: string
              readOn:
                type: string
              photoDocumentId:
                anyOf:
                  - type: string
                  - type: 'null'
              supersedesId:
                anyOf:
                  - type: string
                  - type: 'null'
              correctionReason:
                anyOf:
                  - type: string
                  - type: 'null'
              supersededById:
                anyOf:
                  - type: string
                  - type: 'null'
              recordedByUserId:
                anyOf:
                  - type: string
                  - type: 'null'
              recordedAt:
                type: string
            required:
              - id
              - utility
              - meterReference
              - reading
              - readOn
              - photoDocumentId
              - supersedesId
              - correctionReason
              - supersededById
              - recordedByUserId
              - recordedAt
            additionalProperties: false
        forwarding:
          anyOf:
            - type: array
              items:
                type: object
                properties:
                  id:
                    type: string
                  contactId:
                    type: string
                  address:
                    anyOf:
                      - type: string
                      - type: 'null'
                  email:
                    anyOf:
                      - type: string
                      - type: 'null'
                  phone:
                    anyOf:
                      - type: string
                      - type: 'null'
                  notes:
                    anyOf:
                      - type: string
                      - type: 'null'
                  supersedesId:
                    anyOf:
                      - type: string
                      - type: 'null'
                  supersededById:
                    anyOf:
                      - type: string
                      - type: 'null'
                  recordedByUserId:
                    anyOf:
                      - type: string
                      - type: 'null'
                  recordedAt:
                    type: string
                  redactedAt:
                    anyOf:
                      - type: string
                      - type: 'null'
                  redactedReason:
                    anyOf:
                      - type: string
                      - type: 'null'
                required:
                  - id
                  - contactId
                  - address
                  - email
                  - phone
                  - notes
                  - supersedesId
                  - supersededById
                  - recordedByUserId
                  - recordedAt
                  - redactedAt
                  - redactedReason
                additionalProperties: false
            - type: 'null'
        evidence:
          anyOf:
            - type: array
              items:
                type: object
                properties:
                  id:
                    type: string
                  documentId:
                    type: string
                  role:
                    type: string
                    enum:
                      - inventory
                      - report
                      - notice
                      - photo
                      - other
                  note:
                    anyOf:
                      - type: string
                      - type: 'null'
                  name:
                    anyOf:
                      - type: string
                      - type: 'null'
                  kind:
                    anyOf:
                      - type: string
                      - type: 'null'
                  archivedAt:
                    anyOf:
                      - type: string
                      - type: 'null'
                  purged:
                    type: boolean
                  linkedByUserId:
                    anyOf:
                      - type: string
                      - type: 'null'
                  linkedAt:
                    type: string
                required:
                  - id
                  - documentId
                  - role
                  - note
                  - name
                  - kind
                  - archivedAt
                  - purged
                  - linkedByUserId
                  - linkedAt
                additionalProperties: false
            - type: 'null'
        history:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              action:
                type: string
              detail:
                type: object
              actorUserId:
                anyOf:
                  - type: string
                  - type: 'null'
              createdAt:
                type: string
            required:
              - id
              - action
              - detail
              - actorUserId
              - createdAt
            additionalProperties: false
        createdAt:
          type: string
        updatedAt:
          type: string
      required:
        - id
        - direction
        - status
        - revision
        - handedOverOn
        - notice
        - completedAt
        - completedByUserId
        - completionNote
        - outstandingAtCompletion
        - propertyReleasedAt
        - propertyStatusKept
        - readings
        - forwarding
        - evidence
        - history
        - createdAt
        - updatedAt
      additionalProperties: false
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        A workspace API key (Settings → API keys), scoped to `<group>:read` /
        `<group>:write`.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.