---
title: "Calculate deposit settlement"
method: PUT
path: "/leases/{lease_id}/termination/settlement"
tags: ["Lease Termination"]
---

# Calculate deposit settlement

`PUT /leases/{lease_id}/termination/settlement`

## Request

- Base URL: `https://api.faireplace.com/api`
- URL: `https://api.faireplace.com/api/leases/{lease_id}/termination/settlement`
- Auth: HTTP bearer

Applies retentions on the security deposit and calculates the amount to return.
Uses existing `SecurityDepositService::validate_return()` which enforces:
- Max 20% of deposit for co-ownership charges (Art. 22)
- Late penalty: 10% monthly rent per month of delay

Checks `deposit_settled` in the checklist.

**Permissions required:** `leases:write`

## Path parameters

- `lease_id` string, uuid, required

## Request body

- object
  - `retained_for_charges` number, nullable: Co-ownership charge retention (max 20% of deposit, Art. 22)
  - `retained_for_damages` number, nullable: Retention for damages (justified by exit inspection)
  - `retained_for_unpaid_rent` number, nullable: Retention for unpaid rent
  - `copro_accounts_approval_date` string, date, nullable: Syndic account approval date
  - `notes` string, nullable

## Response `200`

Settlement calculated

- LeaseTermination
  - `id` string, uuid
  - `lease_id` string, uuid
  - `notice_id` string, uuid, nullable
  - `status` 'INITIATED' | 'EXIT_PENDING' | 'SETTLEMENT_PENDING' | 'COMPLETED'
  - `effective_date` string, date
  - `actual_exit_date` string, date, nullable
  - `exit_condition_report_id` string, uuid, nullable
  - `charge_review_id` string, uuid, nullable
  - `checklist` ChecklistItem[]
    - `key` string: Item identifier (e.g., `keys_returned`, `deposit_settled`)
    - `label` string: Human-readable label
    - `required_for_completion` boolean: If true, must be checked before completing termination
    - `completed` boolean
    - `completed_at` string, date-time, nullable
    - `completed_by` string, uuid, nullable
  - `completion_percentage` integer
  - `can_complete` boolean: True if all required checklist items are completed
  - `created_at` string, date-time
  - `updated_at` string, date-time

## Other responses

- `400`: Bad request
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not found
- `429`: Rate limit exceeded. Every endpoint sits behind a plan-aware limiter, and the public tools carry an additional per-endpoint one. `error.details.retry_after_seconds` says how long to wait; the `Retry-After`, `X-RateLimit-Limit` and `X-RateLimit-Remaining` headers carry the same information.
- `500`: Internal Server Error

---

[API](https://skmtc.dev/faireplace/apis/faireplace-property-management-api.md) · [All operations](https://skmtc.dev/faireplace/apis/faireplace-property-management-api/llms.txt) · [OpenAPI document](https://skmtc.dev/faireplace/apis/faireplace-property-management-api/revisions/69de39762919?raw)
