Deposit settlement
Settle a US rental security deposit under the state's rule (and a covered city's): the return deadline, each deduction assessed (allowed category, depreciation, documentation), interest owed, the refund, penalty exposure and a draft itemized statement, every number cited.
Operations
- REST
https://tektolo.com/v1/- MCP
https://tektolo.com/mcp(streamable HTTP, no auth)
settlekind: deterministic, limits: 30/min · 20/day, price per call: Free tier, then $0.02
Settle a security deposit after move-out. Security deposit settlement for a US rental under the state's statute (and a covered city's ordinance): the date to return the deposit and itemized statement, each intended deduction assessed (allowed or not, prorated by useful life, documentation needed), interest owed, refund due, penalty exposure, a draft itemized statement and a citation for every rule. Covers all 50 states and DC, with city overlays for Chicago, San Francisco, Berkeley, Los Angeles, Seattle, Portland, Minneapolis and Saint Paul.
Use it when: A landlord or property manager is closing a move-out and asks when the deposit must be returned, what they may deduct (carpet, paint, cleaning, unpaid rent), how much interest is owed, what to put in the itemized statement, or what happens if they are late.
Not for: Not legal advice and not a tenant demand letter. It does not price repairs (use property_turnover_quick_estimate for that), hold or account for deposits, or cover pet deposits, last-month's rent handling or non-US rentals. Where the statute sets no deadline (Kentucky, Tennessee) it says so; never present a guessed date as the rule.
- Send as_of (today's date) for a repeatable answer; it defaults to today in UTC.
- Give item_installed_on or item_age_years for carpet, paint, blinds and appliances; without them the tenancy length is assumed.
- Mark normal wear with caused_by_tenant false; it is never deductible.
- Relay deadline.return_by and its status, totals.refund_due_usd, penalty_exposure and the citations; say it is not legal advice.
- Offer statement.text as the draft itemized statement; it has no names or addresses.
- Relay warnings, assumptions and unknowns (for example the Texas forwarding address).
- Send the start-event dates a state needs when known (forwarding_address_received_on, demand_received_on, new_tenant_moved_in_on, claim_notice_sent_on in Florida); without them the clock is not_started.
- deadline.status none_in_statute means no statutory deadline; deadline.extended_to is the statute's weekend roll-forward, but advise acting by return_by.
- REST
POST /v1/ deposit-settlement/ settle - MCP tool
deposit_settlement_ settle - Limits
- 30/min · 20/day
- Price per call
- Free tier, then $0.02
Example request (curl)
curl -sS 'https://tektolo.com/v1/deposit-settlement/settle' \
-H 'content-type: application/json' \
-d '{
"state": "CA",
"city": "Fresno",
"deposit_usd": "2000",
"monthly_rent_usd": "2000",
"move_in_on": "2023-06-01",
"vacated_on": "2026-09-30",
"deductions": [
{
"category": "cleaning",
"amount_usd": "150",
"has_receipt": true
},
{
"category": "carpet",
"amount_usd": "1200",
"item_age_years": 5,
"has_receipt": true
},
{
"category": "paint",
"amount_usd": "600",
"item_installed_on": "2025-03-01",
"has_receipt": true
},
{
"category": "blinds_window_coverings",
"amount_usd": "80",
"caused_by_tenant": false
}
],
"documentation": {
"itemized_statement": true,
"receipts": true,
"photos_move_out": true,
"photos_after_repair": false
},
"as_of": "2026-10-09"
}'Example response
Long lists are cut to their first items here.
{
"run": {
"id": "run_7dfdeea985e0400fba126a07c66d3469",
"capability": "deposit-settlement",
"operation": "settle",
"contract_version": "0.1.0",
"engine_version": "0.1.0",
"ruleset_version": "sd-2026.10.1",
"ruleset_hash": "sha256:3777ac89e2a1b9400e9abf225feca8733c14c19cdecf5740e24a00faf4631cd8",
"received_at": "2026-10-09T19:11:25.535322Z",
"duration_ms": 0
},
"client_refs": {},
"input_hash": "sha256:884ca33f95961e3176f29b28fca4ec55fccf47a2250b71681179961e4f2df4da",
"result_hash": "sha256:168e088207e56812eee43838b57096186e7169920f107e0d4efef994473cc298",
"result": {
"summary": "California: return the deposit and itemized statement by 2026-10-21 (21 calendar days after the day the tenant vacated, 2026-09-30; 12 days left). Allowed deductions $949.98 of $2,030.00 claimed; interest $0.00; refund due $1,050.02. If the...",
"disclaimer": "Computes the published rule and cites it; it is not legal advice. You sign the statement: check the statute, your lease and any local ordinance before you rely on it.",
"jurisdiction": {
"state": "CA",
"state_name": "California",
"city": "Fresno",
"city_overlay": null,
"covered": true,
"verified": true
},
"as_of": "2026-10-09",
"deadline": {
"return_by": "2026-10-21",
"itemization_by": "2026-10-21",
"extended_to": null,
"start_event": "the day the tenant vacated",
"start_date": "2026-09-30",
"days": 21,
"months": null,
"counting": "calendar",
"status": "upcoming",
"days_remaining": 12,
"note": "21 calendar days after the tenant vacates (not the lease end). From 2026-01-01 (AB 414) the remainder must be returned electronically if the landlord received the security or rent electronically, unless otherwise agreed in writing; with sev..."
},
"deductions": [
{
"category": "cleaning",
"amount_claimed_usd": "150.00",
"allowed": "yes",
"basis": "allowed_category",
"depreciation": null,
"amount_allowed_usd": "150.00",
"documentation_needed": [
"receipt, invoice or estimate",
"dated photos (move-out, after-repair)"
],
"notes": [
"Only cleaning needed to return the unit to its move-in condition, not routine cleaning after normal use."
]
},
{
"category": "carpet",
"amount_claimed_usd": "1200.00",
"allowed": "yes",
"basis": "allowed_category",
"depreciation": {
"applied": true,
"method": "straight_line",
"useful_life_years": "10",
"age_years": "5.00",
"remaining_fraction": "0.5000",
"source": "carpet:CA",
"schedule_source": null
},
"amount_allowed_usd": "600.00",
"documentation_needed": [
"receipt, invoice or estimate",
"dated photos (move-out, after-repair)"
],
"notes": [
"Prorated: 5.00 of 10 years of useful life used, 50.00% remaining of $1,200.00."
]
},
"... 2 more"
],
"totals": {
"deposit_usd": "2000.00",
"claimed_usd": "2030.00",
"allowed_usd": "949.98",
"interest_usd": "0.00",
"refund_due_usd": "1050.02",
"tenant_owes_usd": "0.00"
},
"interest": {
"required": false,
"condition": null,
"rate_percent": null,
"basis": null,
"base_usd": null,
"method": null,
"period_days": null,
"parts": [],
"amount_usd": null,
"citation": null,
"formula": null,
"note": "No statewide interest; some cities require it (city overlay)."
},
"documentation": [
{
"duty": "itemized_statement",
"required": true,
"met": "yes",
"citation": "Cal. Civ. Code 1950.5",
"threshold": null,
"note": null
},
{
"duty": "receipts",
"required": true,
"met": "yes",
"citation": "Cal. Civ. Code 1950.5",
"threshold": "repairs and cleaning over $125.00",
"note": "Copies of bills, invoices or receipts (or time and hourly rate for own work) must accompany the statement when repair and cleaning deductions exceed $125 in total, or whenever the tenant asks within 14 days of the statement; a good-faith es..."
},
"... 1 more"
],
"penalty_exposure": {
"applies_if": "the deposit is kept in bad faith",
"kind": "multiple",
"multiple": "2",
"fixed_usd": null,
"minimum_usd": null,
"per_violation": false,
"in_addition_to_refund": false,
"basis": "deposit",
"discretionary": true,
"plus_attorney_fees": false,
"estimated_max_usd": "4000.00",
"forfeits_right_to_withhold": false,
"citation": "Cal. Civ. Code 1950.5",
"note": "Bad-faith claim or retention may bring statutory damages of up to twice the security, in addition to actual damages (1950.5(m)). Separately, bad-faith failure to comply with (h) means the landlord may claim no amount of the security (1950.5...",
"additional": []
},
"deposit_cap": {
"months_rent": "1",
"cap_usd": "2000.00",
"exceeded": false,
"citation": "Cal. Civ. Code 1950.5",
"variants": null,
"note": "One month's rent for security collected from 2024-07-01 (AB 12); two months for a natural-person or all-natural-person LLC landlord owning at most two properties with at most four units, unless the tenant is a service member."
},
"statement": {
"lines": [
{
"label": "Security deposit held",
"amount_usd": "2000.00",
"note": null
},
{
"label": "Deduction: Cleaning",
"amount_usd": "150.00",
"note": null
},
"... 5 more"
],
"refund_due_usd": "1050.02",
"due_by": "2026-10-21",
"text": "DRAFT ITEMIZED STATEMENT OF SECURITY DEPOSIT\nRule: Cal. Civ. Code 1950.5 (California)\nMove-out date: September 30, 2026\n\nSecurity deposit held $2,000.00\nDeduction: Cleaning -$150.00\nD..."
},
"citations": [
{
"rule": "deadline",
"section": "Cal. Civ. Code 1950.5(h)(1)",
"quote": "No later than 21 calendar days after the tenant has vacated the premises, ... the landlord shall furnish the tenant, a copy of an itemized statement indicating the basis for, and the amount of, any security received and the disposition of t...",
"verbatim": true,
"url": "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=CIV§ionNum=1950.5",
"source_title": "California Civil Code 1950.5",
"accessed": "2026-10-09"
},
{
"rule": "penalty",
"section": "Cal. Civ. Code 1950.5",
"quote": "Bad-faith claim or retention may bring statutory damages of up to twice the security, in addition to actual damages (1950.5(m)). Separately, bad-faith failure to comply with (h) means the landlord may claim no amount of the security (1950.5...",
"verbatim": false,
"url": "https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=CIV§ionNum=1950.5",
"source_title": "California Civil Code 1950.5",
"accessed": "2026-10-09"
},
"... 7 more"
],
"warnings": [
{
"code": "city_not_covered",
"text": "No city overlay for Fresno; the California rule is used. Local ordinances can add interest or shorter deadlines; check them."
},
{
"code": "missing_photos",
"text": "Required documentation missing: photos (Cal. Civ. Code 1950.5). Without it the deductions may be lost."
},
"... 3 more"
],
"assumptions": [
{
"code": "depreciation_guidance",
"text": "Depreciation applied as guidance, not a statutory formula: The Civil Code states no formula. The official DRE guide (2026 edition) describes prorating replacement cost by remaining useful life (8-year-old carpet, 10-year life, $1,000 replac..."
}
],
"unknowns": [],
"provenance": {
"ruleset_id": "deposit-settlement",
"ruleset_version": "sd-2026.10.1",
"ruleset_hash": "sha256:3777ac89e2a1b9400e9abf225feca8733c14c19cdecf5740e24a00faf4631cd8",
"rule_ids": [
"CA",
"useful_life:carpet",
"... 1 more"
],
"sources": [
"ca.civ-1950.5",
"ca.ab12-2023",
"... 11 more"
]
}
}
}Schemas
Input
{
"$defs": {
"Deduction": {
"additionalProperties": false,
"properties": {
"category": {
"description": "One of: unpaid_rent, unpaid_utilities, cleaning, carpet, flooring, paint, blinds_window_coverings, appliance, fixture_or_hardware, wall_or_door_repair, key_or_lock, late_fees, lease_break_fee, other_damage, other.",
"enum": [
"unpaid_rent",
"unpaid_utilities",
"cleaning",
"carpet",
"flooring",
"paint",
"blinds_window_coverings",
"appliance",
"fixture_or_hardware",
"wall_or_door_repair",
"key_or_lock",
"late_fees",
"lease_break_fee",
"other_damage",
"other"
],
"title": "Category",
"type": "string"
},
"description": {
"anyOf": [
{
"maxLength": 200,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Your own short note (e.g. 'bedroom carpet, pet stains'). Never stored, hashed or returned; the statement uses the category.",
"title": "Description"
},
"amount_usd": {
"anyOf": [
{
"maximum": 10000000.0,
"minimum": 0.0,
"type": "number"
},
{
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
"type": "string"
}
],
"description": "Amount you intend to deduct, in dollars (rounded to cents).",
"title": "Amount Usd"
},
"item_installed_on": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "When the item (carpet, paint, appliance...) was installed or last replaced (YYYY-MM-DD). Give this or item_age_years, not both.",
"title": "Item Installed On"
},
"item_age_years": {
"anyOf": [
{
"maximum": 100.0,
"minimum": 0.0,
"type": "number"
},
{
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Age of the item in years at move-out (e.g. 4.5).",
"title": "Item Age Years"
},
"useful_life_years": {
"anyOf": [
{
"exclusiveMinimum": 0.0,
"maximum": 100.0,
"type": "number"
},
{
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Override the useful life used for depreciation (years).",
"title": "Useful Life Years"
},
"caused_by_tenant": {
"default": true,
"description": "False when the condition is normal wear and tear (never deductible).",
"title": "Caused By Tenant",
"type": "boolean"
},
"has_receipt": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "You have a receipt, invoice or estimate for this line.",
"title": "Has Receipt"
},
"has_photos": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "You have photos of this damage.",
"title": "Has Photos"
}
},
"required": [
"category",
"amount_usd"
],
"title": "Deduction",
"type": "object"
},
"Documentation": {
"additionalProperties": false,
"properties": {
"itemized_statement": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "You will send (or sent) an itemized statement.",
"title": "Itemized Statement"
},
"receipts": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "You have receipts or invoices for the repairs and cleaning.",
"title": "Receipts"
},
"photos_move_in": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Dated move-in photos.",
"title": "Photos Move In"
},
"photos_move_out": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Dated move-out photos.",
"title": "Photos Move Out"
},
"photos_after_repair": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Photos after repairs.",
"title": "Photos After Repair"
}
},
"title": "Documentation",
"type": "object"
}
},
"additionalProperties": false,
"properties": {
"client_refs": {
"anyOf": [
{
"additionalProperties": {
"type": "string"
},
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Your own reference ids (e.g. unit_id, job_id). Echoed back, never used.",
"title": "Client Refs"
},
"state": {
"description": "US state, 2-letter code (e.g. 'CA'); a state name also works.",
"examples": [
"CA"
],
"maxLength": 20,
"minLength": 2,
"title": "State",
"type": "string"
},
"city": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "City, for a city overlay where covered (e.g. 'Chicago'). Optional.",
"title": "City"
},
"deposit_usd": {
"anyOf": [
{
"maximum": 10000000.0,
"minimum": 0.0,
"type": "number"
},
{
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
"type": "string"
}
],
"description": "Security deposit held, dollars.",
"title": "Deposit Usd"
},
"monthly_rent_usd": {
"anyOf": [
{
"maximum": 10000000.0,
"minimum": 0.0,
"type": "number"
},
{
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Monthly rent, for the deposit cap check.",
"title": "Monthly Rent Usd"
},
"building_units": {
"anyOf": [
{
"maximum": 100000,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Units in the building. Some interest rules depend on it (NY 6+, IL 25+).",
"title": "Building Units"
},
"move_in_on": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Tenancy start (YYYY-MM-DD). Used for interest and, when an item's age is unknown, for depreciation.",
"title": "Move In On"
},
"tenancy_ended_on": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Lease end or termination date (YYYY-MM-DD), if different.",
"title": "Tenancy Ended On"
},
"vacated_on": {
"description": "Day the tenant moved out and returned possession (YYYY-MM-DD).",
"format": "date",
"title": "Vacated On",
"type": "string"
},
"forwarding_address_received_on": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Day you received the tenant's written forwarding address (YYYY-MM-DD). Several states start or hold the clock on it (Texas, Connecticut, Iowa, Minnesota).",
"title": "Forwarding Address Received On"
},
"demand_received_on": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Day you received the tenant's written demand for the deposit (YYYY-MM-DD). Arizona, Kansas, Oklahoma, South Carolina and Mississippi start the clock on it.",
"title": "Demand Received On"
},
"new_tenant_moved_in_on": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Day a new tenant moved in, if the unit was re-rented (YYYY-MM-DD). West Virginia and Wisconsin can end the period earlier.",
"title": "New Tenant Moved In On"
},
"claim_notice_sent_on": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Day you sent the written notice of intent to impose a claim on the deposit (YYYY-MM-DD). Florida: the balance is due 30 days after it.",
"title": "Claim Notice Sent On"
},
"lease_return_days": {
"anyOf": [
{
"maximum": 365,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Return period the lease sets, in days, where the statute lets a lease set one (Colorado up to 60, Idaho up to 30, Maine shorter).",
"title": "Lease Return Days"
},
"tenant_gave_proper_notice": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "A termination notice that meets the statute was given (Alaska: 14 days instead of 30 when nothing is deducted for damage).",
"title": "Tenant Gave Proper Notice"
},
"contractor_needed": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Damage exceeds the deposit and needs a third-party contractor, and you said so in writing in time (Virginia, West Virginia: 15 more days).",
"title": "Contractor Needed"
},
"deductions": {
"description": "What you intend to deduct; may be empty.",
"items": {
"$ref": "#/$defs/Deduction"
},
"maxItems": 50,
"title": "Deductions",
"type": "array"
},
"documentation": {
"$ref": "#/$defs/Documentation",
"description": "What documentation you have; leave a field out when unknown."
},
"as_of": {
"description": "Today's date (YYYY-MM-DD) for the deadline status. Defaults to today (UTC); send it for repeatable results.",
"format": "date",
"title": "As Of",
"type": "string"
}
},
"required": [
"state",
"deposit_usd",
"vacated_on"
],
"title": "SettleRequest",
"type": "object"
}Output
{
"$defs": {
"Citation": {
"properties": {
"rule": {
"description": "What the citation supports: deadline, interest, penalty, ...",
"title": "Rule",
"type": "string"
},
"section": {
"title": "Section",
"type": "string"
},
"quote": {
"description": "Short quote of the rule (or our summary when verbatim is false).",
"title": "Quote",
"type": "string"
},
"verbatim": {
"default": true,
"title": "Verbatim",
"type": "boolean"
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Url"
},
"source_title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Source Title"
},
"accessed": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Accessed"
}
},
"required": [
"rule",
"section",
"quote"
],
"title": "Citation",
"type": "object"
},
"Deadline": {
"properties": {
"return_by": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Last day to return the deposit.",
"title": "Return By"
},
"itemization_by": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Last day for the itemized statement (often the same day; earlier in Chicago, later in Louisiana).",
"title": "Itemization By"
},
"extended_to": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Where the state's code rolls a last day on a weekend or holiday to the next business day: that later date. Act by return_by; this is the legal outer limit.",
"title": "Extended To"
},
"start_event": {
"description": "What starts the clock, in words.",
"title": "Start Event",
"type": "string"
},
"start_date": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Start Date"
},
"days": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Period in days (None: months or none).",
"title": "Days"
},
"months": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Period in calendar months, if any.",
"title": "Months"
},
"counting": {
"enum": [
"calendar",
"business"
],
"title": "Counting",
"type": "string"
},
"status": {
"description": "upcoming, due_today, overdue; not_started when the start event is not given yet; none_in_statute when the statute sets no deadline (Kentucky, Tennessee).",
"enum": [
"upcoming",
"due_today",
"overdue",
"not_started",
"none_in_statute"
],
"title": "Status",
"type": "string"
},
"days_remaining": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Days from as_of to return_by (negative when overdue).",
"title": "Days Remaining"
},
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Note"
}
},
"required": [
"start_event",
"counting",
"status"
],
"title": "Deadline",
"type": "object"
},
"DeductionResult": {
"properties": {
"category": {
"enum": [
"unpaid_rent",
"unpaid_utilities",
"cleaning",
"carpet",
"flooring",
"paint",
"blinds_window_coverings",
"appliance",
"fixture_or_hardware",
"wall_or_door_repair",
"key_or_lock",
"late_fees",
"lease_break_fee",
"other_damage",
"other"
],
"title": "Category",
"type": "string"
},
"amount_claimed_usd": {
"title": "Amount Claimed Usd",
"type": "string"
},
"allowed": {
"enum": [
"yes",
"no",
"depends"
],
"title": "Allowed",
"type": "string"
},
"basis": {
"enum": [
"allowed_category",
"normal_wear",
"not_allowed",
"unclassified"
],
"title": "Basis",
"type": "string"
},
"depreciation": {
"anyOf": [
{
"$ref": "#/$defs/Depreciation"
},
{
"type": "null"
}
],
"default": null
},
"amount_allowed_usd": {
"description": "What the rule lets you keep for this line ('depends' lines: not counted in totals until you confirm).",
"title": "Amount Allowed Usd",
"type": "string"
},
"documentation_needed": {
"items": {
"type": "string"
},
"title": "Documentation Needed",
"type": "array"
},
"notes": {
"items": {
"type": "string"
},
"title": "Notes",
"type": "array"
}
},
"required": [
"category",
"amount_claimed_usd",
"allowed",
"basis",
"amount_allowed_usd"
],
"title": "DeductionResult",
"type": "object"
},
"DepositCapCheck": {
"properties": {
"months_rent": {
"anyOf": [
{
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "None: no statutory cap.",
"title": "Months Rent"
},
"cap_usd": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Cap Usd"
},
"exceeded": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Exceeded"
},
"citation": {
"title": "Citation",
"type": "string"
},
"variants": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Other caps by tenancy type or term; checked against the main.",
"title": "Variants"
},
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Note"
}
},
"required": [
"citation"
],
"title": "DepositCapCheck",
"type": "object"
},
"Depreciation": {
"properties": {
"applied": {
"title": "Applied",
"type": "boolean"
},
"method": {
"anyOf": [
{
"enum": [
"straight_line",
"step_table"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "straight_line: max(0, 1 - age / useful life); step_table: the band of a published schedule for the item's age (California paint).",
"title": "Method"
},
"useful_life_years": {
"anyOf": [
{
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Useful Life Years"
},
"age_years": {
"anyOf": [
{
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Age at move-out: full calendar years plus remaining days / 365, 2 decimals.",
"title": "Age Years"
},
"remaining_fraction": {
"anyOf": [
{
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Share of the cost the tenant can be charged, 4 decimals.",
"title": "Remaining Fraction"
},
"source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "useful_life row id (row:jurisdiction for a variant) or 'request'.",
"title": "Source"
},
"schedule_source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Source id of the step table, when one was used.",
"title": "Schedule Source"
}
},
"required": [
"applied"
],
"title": "Depreciation",
"type": "object"
},
"DocumentationDuty": {
"properties": {
"duty": {
"enum": [
"itemized_statement",
"receipts",
"photos"
],
"title": "Duty",
"type": "string"
},
"required": {
"title": "Required",
"type": "boolean"
},
"met": {
"enum": [
"yes",
"no",
"unknown"
],
"title": "Met",
"type": "string"
},
"citation": {
"title": "Citation",
"type": "string"
},
"threshold": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Threshold"
},
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Note"
}
},
"required": [
"duty",
"required",
"met",
"citation"
],
"title": "DocumentationDuty",
"type": "object"
},
"Interest": {
"properties": {
"required": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "None: depends on facts you did not give.",
"title": "Required"
},
"condition": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Condition"
},
"rate_percent": {
"anyOf": [
{
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Percent per year (the move-out rate when rates change).",
"title": "Rate Percent"
},
"basis": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "What the rate applies to: deposit, or the excess (Ohio).",
"title": "Basis"
},
"base_usd": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The amount the rate applies to.",
"title": "Base Usd"
},
"method": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "simple, per_window, anniversary_years or monthly.",
"title": "Method"
},
"period_days": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Period Days"
},
"parts": {
"description": "Per-period amounts when the rate changed.",
"items": {
"$ref": "#/$defs/InterestPart"
},
"title": "Parts",
"type": "array"
},
"amount_usd": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Amount Usd"
},
"citation": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Citation"
},
"formula": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The source's formula, in words.",
"title": "Formula"
},
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Note"
}
},
"required": [
"required"
],
"title": "Interest",
"type": "object"
},
"InterestPart": {
"description": "One period of an interest computation at one rate (a year, a rate window).",
"properties": {
"period_from": {
"format": "date",
"title": "Period From",
"type": "string"
},
"period_to": {
"format": "date",
"title": "Period To",
"type": "string"
},
"rate_percent": {
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
"title": "Rate Percent",
"type": "string"
},
"amount_usd": {
"title": "Amount Usd",
"type": "string"
}
},
"required": [
"period_from",
"period_to",
"rate_percent",
"amount_usd"
],
"title": "InterestPart",
"type": "object"
},
"JurisdictionRef": {
"properties": {
"state": {
"title": "State",
"type": "string"
},
"state_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "State Name"
},
"city": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The city you sent, as given.",
"title": "City"
},
"city_overlay": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The covered city whose rules were layered on, if any.",
"title": "City Overlay"
},
"covered": {
"title": "Covered",
"type": "boolean"
},
"verified": {
"description": "True when the main rule text was read verbatim at the official source.",
"title": "Verified",
"type": "boolean"
}
},
"required": [
"state",
"covered",
"verified"
],
"title": "JurisdictionRef",
"type": "object"
},
"Note": {
"properties": {
"code": {
"title": "Code",
"type": "string"
},
"text": {
"title": "Text",
"type": "string"
}
},
"required": [
"code",
"text"
],
"title": "Note",
"type": "object"
},
"PenaltyExposure": {
"properties": {
"applies_if": {
"title": "Applies If",
"type": "string"
},
"kind": {
"title": "Kind",
"type": "string"
},
"multiple": {
"anyOf": [
{
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Multiple"
},
"fixed_usd": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Fixed Usd"
},
"minimum_usd": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Floor of the multiple.",
"title": "Minimum Usd"
},
"per_violation": {
"default": false,
"description": "fixed_usd is per violation.",
"title": "Per Violation",
"type": "boolean"
},
"in_addition_to_refund": {
"default": false,
"description": "The damages come on top of returning the amount withheld (Ohio, West Virginia), not instead of it.",
"title": "In Addition To Refund",
"type": "boolean"
},
"basis": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Basis"
},
"discretionary": {
"title": "Discretionary",
"type": "boolean"
},
"plus_attorney_fees": {
"title": "Plus Attorney Fees",
"type": "boolean"
},
"estimated_max_usd": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "fixed + multiple x basis amount (with any floor or cap); exposure, not a verdict. None when the basis is unknown (monthly rent not given).",
"title": "Estimated Max Usd"
},
"forfeits_right_to_withhold": {
"title": "Forfeits Right To Withhold",
"type": "boolean"
},
"citation": {
"title": "Citation",
"type": "string"
},
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Note"
},
"additional": {
"description": "City penalties in addition to the state's (not included in its estimate).",
"items": {
"$ref": "#/$defs/PenaltyExposure"
},
"title": "Additional",
"type": "array"
}
},
"required": [
"applies_if",
"kind",
"discretionary",
"plus_attorney_fees",
"forfeits_right_to_withhold",
"citation"
],
"title": "PenaltyExposure",
"type": "object"
},
"Provenance": {
"properties": {
"ruleset_id": {
"title": "Ruleset Id",
"type": "string"
},
"ruleset_version": {
"title": "Ruleset Version",
"type": "string"
},
"ruleset_hash": {
"title": "Ruleset Hash",
"type": "string"
},
"rule_ids": {
"items": {
"type": "string"
},
"title": "Rule Ids",
"type": "array"
},
"sources": {
"items": {
"type": "string"
},
"title": "Sources",
"type": "array"
}
},
"required": [
"ruleset_id",
"ruleset_version",
"ruleset_hash"
],
"title": "Provenance",
"type": "object"
},
"Statement": {
"properties": {
"lines": {
"items": {
"$ref": "#/$defs/StatementLine"
},
"title": "Lines",
"type": "array"
},
"refund_due_usd": {
"title": "Refund Due Usd",
"type": "string"
},
"due_by": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Due By"
},
"text": {
"description": "Draft itemized statement, plain text, no names or addresses.",
"title": "Text",
"type": "string"
}
},
"required": [
"lines",
"refund_due_usd",
"text"
],
"title": "Statement",
"type": "object"
},
"StatementLine": {
"properties": {
"label": {
"title": "Label",
"type": "string"
},
"amount_usd": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Amount Usd"
},
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Note"
}
},
"required": [
"label"
],
"title": "StatementLine",
"type": "object"
},
"Totals": {
"properties": {
"deposit_usd": {
"title": "Deposit Usd",
"type": "string"
},
"claimed_usd": {
"title": "Claimed Usd",
"type": "string"
},
"allowed_usd": {
"description": "Sum of lines with allowed = yes.",
"title": "Allowed Usd",
"type": "string"
},
"interest_usd": {
"description": "Interest credited (0 when none or unknown).",
"title": "Interest Usd",
"type": "string"
},
"refund_due_usd": {
"description": "deposit + interest - allowed, never below 0.",
"title": "Refund Due Usd",
"type": "string"
},
"tenant_owes_usd": {
"description": "Allowed deductions above deposit + interest (collect separately).",
"title": "Tenant Owes Usd",
"type": "string"
}
},
"required": [
"deposit_usd",
"claimed_usd",
"allowed_usd",
"interest_usd",
"refund_due_usd",
"tenant_owes_usd"
],
"title": "Totals",
"type": "object"
}
},
"properties": {
"summary": {
"title": "Summary",
"type": "string"
},
"disclaimer": {
"title": "Disclaimer",
"type": "string"
},
"jurisdiction": {
"$ref": "#/$defs/JurisdictionRef"
},
"as_of": {
"format": "date",
"title": "As Of",
"type": "string"
},
"deadline": {
"anyOf": [
{
"$ref": "#/$defs/Deadline"
},
{
"type": "null"
}
],
"default": null
},
"deductions": {
"items": {
"$ref": "#/$defs/DeductionResult"
},
"title": "Deductions",
"type": "array"
},
"totals": {
"$ref": "#/$defs/Totals"
},
"interest": {
"$ref": "#/$defs/Interest"
},
"documentation": {
"items": {
"$ref": "#/$defs/DocumentationDuty"
},
"title": "Documentation",
"type": "array"
},
"penalty_exposure": {
"anyOf": [
{
"$ref": "#/$defs/PenaltyExposure"
},
{
"type": "null"
}
],
"default": null
},
"deposit_cap": {
"anyOf": [
{
"$ref": "#/$defs/DepositCapCheck"
},
{
"type": "null"
}
],
"default": null
},
"statement": {
"anyOf": [
{
"$ref": "#/$defs/Statement"
},
{
"type": "null"
}
],
"default": null
},
"citations": {
"items": {
"$ref": "#/$defs/Citation"
},
"title": "Citations",
"type": "array"
},
"warnings": {
"items": {
"$ref": "#/$defs/Note"
},
"title": "Warnings",
"type": "array"
},
"assumptions": {
"items": {
"$ref": "#/$defs/Note"
},
"title": "Assumptions",
"type": "array"
},
"unknowns": {
"items": {
"$ref": "#/$defs/Note"
},
"title": "Unknowns",
"type": "array"
},
"provenance": {
"$ref": "#/$defs/Provenance"
}
},
"required": [
"summary",
"disclaimer",
"jurisdiction",
"as_of",
"totals",
"interest",
"provenance"
],
"title": "SettleResult",
"type": "object"
}ruleskind: deterministic, limits: 30/min · not counted, price per call: Free
Security deposit rules for a state (and city). The security deposit rules for one US state, with a covered city's overlay: return deadline and what starts it, itemization and documentation duties, allowed deductions and depreciation, interest, penalty, deposit cap and recent changes, with citations.
Use it when: Someone asks what a state's (or a covered city's) security deposit rules are without a specific move-out to settle, or which states are covered.
Not for: To settle a specific deposit (use deposit_settlement_settle, which applies the rules to the dates and deductions). Other landlord-tenant topics (evictions, rent control, notice periods) are not covered.
- REST
POST /v1/ deposit-settlement/ rules - MCP tool
deposit_settlement_ rules - Limits
- 30/min · not counted
- Price per call
- Free
Example request (curl)
curl -sS 'https://tektolo.com/v1/deposit-settlement/rules' \
-H 'content-type: application/json' \
-d '{
"state": "IL",
"city": "Chicago"
}'Example response
Long lists are cut to their first items here.
{
"run": {
"id": "run_f3ec827d805e474c90955b67e1465d66",
"capability": "deposit-settlement",
"operation": "rules",
"contract_version": "0.1.0",
"engine_version": "0.1.0",
"ruleset_version": "sd-2026.10.1",
"ruleset_hash": "sha256:3777ac89e2a1b9400e9abf225feca8733c14c19cdecf5740e24a00faf4631cd8",
"received_at": "2026-10-09T19:11:25.551825Z",
"duration_ms": 0
},
"client_refs": {},
"input_hash": "sha256:85ba44086ff9d1189f896f55bd0db85b63cca62a4cd4662347a8feed53ec2e23",
"result_hash": "sha256:da2a72dc56ed40655e487a451ed53eb765e8b44d7d1ed49ef7ab87e36b90a098",
"result": {
"summary": "Illinois (Chicago): return the deposit within 45 calendar days of the day the tenant vacated. Interest: conditional. Penalty if the rule is not followed (no bad faith needed): 2x the deposit. (765 ILCS 710 (Security Deposit Return Act); 765...",
"disclaimer": "Computes the published rule and cites it; it is not legal advice. You sign the statement: check the statute, your lease and any local ordinance before you rely on it.",
"jurisdiction": {
"state": "IL",
"state_name": "Illinois",
"city": "Chicago",
"city_overlay": "Chicago",
"covered": true,
"verified": true
},
"rules": {
"statute": "765 ILCS 710 (Security Deposit Return Act); 765 ILCS 715 (Security Deposit Interest Act)",
"return_rule": {
"days": 30,
"months": null,
"counting": "calendar",
"holidays": "federal",
"start": "later_of_vacate_and_termination",
"start_note": "Itemized statement with paid receipts within 30 days of vacating or the end of the right of possession, whichever is later; delivered personally, by postmarked mail, or to a verified email. If no statement and receipts, the full deposit is ...",
"alternatives": [
{
"condition": "no_deductions",
"requires": [],
"days": 45,
"months": null,
"start": "vacate",
"counting": null,
"combine": "replace",
"effective_before": null,
"effective_on_or_after": null,
"note": "No itemized statement furnished: return the deposit in full within 45 days of the date the lessee vacated."
}
],
"gate": null,
"gate_restarts": true,
"rollover": false,
"rollover_source": null
},
"itemization": {
"required": true,
"with_refund": true,
"days": null,
"months": null,
"start": null,
"effective_on": null,
"receipts": {
"required": true,
"threshold_usd": null,
"note": "Paid receipts or copies attached for each repair or replacement; if estimates are given, receipts within 30 days after the statement; own labor at reasonable cost; verified statement if receipts unobtainable through no fault of the lessor."
},
"photos": {
"required": false,
"note": null,
"effective_on": null,
"kinds": [
"move_out",
"after_repair"
]
},
"note": null
},
"deductions": {
"normal_wear_excluded": true,
"allowed": [
"unpaid_rent",
"damage_beyond_wear",
"... 1 more"
],
"allowed_detail": [
"unpaid_rent",
"damage_beyond_wear",
"... 1 more"
],
"depreciation": "none",
"depreciation_only": [],
"depreciation_note": "No proration formula. A written lease may specify reasonable costs for cleaning, repair or replacement of components (beyond normal wear); the statement must cite the amount and attach that lease portion.",
"note": null
},
"interest": {
"required": "conditional",
"condition": "25 or more units in one building or contiguous complex, deposit held six months or more; not public housing.",
"min_units": 25,
"min_tenancy_days": null,
"min_tenancy_months": 6,
"min_tenancy_strict": false,
"min_deposit_usd": null,
"rate": "bank_rate",
"rate_value": null,
"rate_year": null,
"rate_schedule": [],
"method": "simple",
"formula": null,
"base": "deposit",
"payable": "annually",
"note": "Rate is what the largest Illinois commercial bank paid on minimum-deposit passbook savings on December 31 before the lease began. Paid within 30 days after each 12-month period if $5 or more (cash or rent credit), all unpaid interest at ter..."
},
"penalty": {
"kind": "multiple",
"multiple": "2",
"fixed_usd": null,
"minimum_usd": null,
"max_months_rent": null,
"per_violation": false,
"multiple_is_additional": false,
"basis": "deposit",
"condition": "bad_faith",
"discretionary": false,
"plus_attorney_fees": true,
"forfeits_right_to_withhold_if_late": false,
"note": "On a court finding that the lessor refused to supply the statement or supplied it in bad faith and failed to return the amount due in time: twice the security deposit due plus court costs and reasonable attorney's fees (710/1(c))."
},
"deposit_cap_months_rent": null,
"deposit_cap": {
"months_rent": null,
"minimum_usd": null,
"variants": null,
"note": "No statewide cap.",
"source": "il.ilcs-765-710"
},
"recent_changes": [
{
"effective_on": "2024-01-01",
"text": "P.A. 103-224: Return Act now covers all residential lessors (5-or-more-unit limit removed); email delivery to a verified address.",
"source": "il.pa-103-0224"
}
],
"applicability": "Before 2024-01-01 the Security Deposit Return Act covered only lessors of buildings with 5 or more units; P.A. 103-224 removed the limit.",
"notes": [
"Interest Act still applies only to 25+ unit properties; the Return Act no longer has a unit threshold since 2024-01-01.",
"Chicago's RLTO overlays different rules (city overlay)."
]
},
"city_overlay": {
"id": "chicago",
"name": "Chicago",
"state": "IL",
"return_rule": {
"days": 45,
"months": null,
"counting": "calendar",
"holidays": "federal",
"start": "vacate",
"start_note": "Refund (deposit + interest - unpaid rent - damages) within 45 days of vacating. In the event of fire, within 7 days of the tenant's notice of termination (5-12-110(g)).",
"alternatives": [],
"gate": null,
"gate_restarts": true,
"rollover": false,
"rollover_source": null
},
"interest": {
"required": "conditional",
"condition": "Deposit (or prepaid rent) held more than six months, in a unit covered by the RLTO (not owner-occupied buildings of six or fewer units, among other exclusions).",
"min_units": null,
"min_tenancy_days": null,
"min_tenancy_months": 6,
"min_tenancy_strict": true,
"min_deposit_usd": null,
"rate": "fixed_percent",
"rate_value": "0.01",
"rate_year": null,
"rate_schedule": [
{
"from_": "2026-01-01",
"to": "2026-12-31",
"rate_value": "0.01",
"source": "chicago.deposit-interest-2026",
"note": null
}
],
"method": "simple",
"formula": null,
"base": "deposit",
"payable": "annually",
"note": "Rate set each year by the City Comptroller (announced the first business day of the year); 0.01% for 1 Jan - 31 Dec 2026. Paid each year by cash or rent credit."
},
"penalty": {
"kind": "multiple",
"multiple": "2",
"fixed_usd": null,
"minimum_usd": null,
"max_months_rent": null,
"per_violation": false,
"multiple_is_additional": false,
"basis": "deposit",
"condition": "any_violation",
"discretionary": false,
"plus_attorney_fees": true,
"forfeits_right_to_withhold_if_late": false,
"note": "If the landlord fails to comply with the specified deposit requirements the tenant is awarded two times the security deposit plus interest (subject to curing a deficient interest payment). Prevailing plaintiff recovers court costs and reaso..."
},
"itemization": {
"required": true,
"with_refund": false,
"days": 30,
"months": null,
"start": "vacate",
"effective_on": null,
"receipts": {
"required": true,
"threshold_usd": null,
"note": "Itemized statement of damages within 30 days of vacating, with estimated or actual cost, attaching copies of the paid receipts for the repair or replacement."
},
"photos": null,
"note": null
},
"deductions": null,
"deposit_cap": null,
"additional_penalty": null,
"depreciation_schedule": null,
"applicability": "RLTO does not cover units in owner-occupied buildings with six or fewer units, most hotel/rooming units, dorms, owner-occupied co-ops and condos, employee housing (5-12-010, 5-12-020 per the City summary).",
"notes": [
"The 2026 rider states the rate is the average of Chase savings, money market and 6-month CD rates (all 0.01%)."
]
},
"citations": [
{
"rule": "deadline",
"section": "765 ILCS 710/1(a)",
"quote": "... may not withhold any part of that deposit as reimbursement for property damage unless the lessor has, within 30 days of the date that the lessee vacated the leased premises or within 30 days of the date the lessee's right of possession ...",
"verbatim": true,
"url": "https://www.ilga.gov/legislation/ilcs/ilcs3.asp?ActID=2202&ChapterID=62",
"source_title": "Security Deposit Return Act, 765 ILCS 710",
"accessed": "2026-10-09"
},
{
"rule": "penalty",
"section": "Chicago Mun. Code 5-12-080 (City of Chicago RLTO Summary)",
"quote": "If the landlord fails to comply with the specified deposit requirements the tenant is awarded two times the security deposit plus interest (subject to curing a deficient interest payment). Prevailing plaintiff recovers court costs and reaso...",
"verbatim": false,
"url": "https://www.chicago.gov/content/dam/city/depts/doh/RLTO/RLTO%20Summary_2023_EN_FINAL.pdf",
"source_title": "City of Chicago, Residential Landlord and Tenant Ordinance Summary (2023, English)",
"accessed": "2026-10-09"
},
"... 4 more"
],
"covered_states": [
"AK",
"AL",
"... 49 more"
],
"covered_cities": [
"Chicago, IL"
],
"warnings": [],
"research_notes": [
"Chicago: The ordinance text itself (amlegal.com) blocked fetching (403); quotes come from the City's official RLTO Summary and the 2026 interest-rate lease rider."
],
"provenance": {
"ruleset_id": "deposit-settlement",
"ruleset_version": "sd-2026.10.1",
"ruleset_hash": "sha256:3777ac89e2a1b9400e9abf225feca8733c14c19cdecf5740e24a00faf4631cd8",
"rule_ids": [
"IL",
"chicago"
],
"sources": [
"il.ilcs-765-710",
"il.ilcs-765-715",
"... 3 more"
]
}
}
}Schemas
Input
{
"additionalProperties": false,
"properties": {
"state": {
"description": "US state, 2-letter code or name (e.g. 'TX').",
"maxLength": 20,
"minLength": 2,
"title": "State",
"type": "string"
},
"city": {
"anyOf": [
{
"maxLength": 80,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional city for its overlay (e.g. 'Chicago').",
"title": "City"
}
},
"required": [
"state"
],
"title": "RulesRequest",
"type": "object"
}Output
{
"$defs": {
"Alternative": {
"additionalProperties": false,
"description": "A different deadline when a condition holds (e.g. 14 days when nothing is deducted).\n\n``condition`` is the statute's case in words. The engine evaluates it when ``requires``\nlists mapped conditions, when the condition itself is one (``no_deductions``), or when an\neffective-date window is the whole condition; any other alternative keeps the base rule and\nadds an assumption naming it. ``combine`` says how a matching alternative applies:\n``replace`` the base period (the first match wins), or take the ``later_date`` /\n``earlier_date`` of the base deadline and this one (Connecticut: 21 days after the end of\nthe tenancy or 15 days after the forwarding address, whichever is later).",
"properties": {
"condition": {
"title": "Condition",
"type": "string"
},
"requires": {
"default": [],
"items": {
"enum": [
"no_deductions",
"with_deductions",
"damage_deductions",
"no_damage_deductions",
"lease_specifies_longer",
"lease_specifies_shorter",
"tenant_gave_notice",
"contractor_needed"
],
"type": "string"
},
"title": "Requires",
"type": "array"
},
"days": {
"anyOf": [
{
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Days"
},
"months": {
"anyOf": [
{
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Months"
},
"start": {
"anyOf": [
{
"enum": [
"vacate",
"termination",
"later_of_vacate_and_termination",
"forwarding_address",
"demand",
"later_of_termination_and_address",
"latest_of_termination_possession_and_address",
"earlier_of_termination_and_surrender",
"surrender_or_termination_first",
"new_tenant_occupancy",
"termination_possession_and_demand",
"claim_notice"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Start"
},
"counting": {
"anyOf": [
{
"enum": [
"calendar",
"business"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Counting"
},
"combine": {
"default": "replace",
"enum": [
"replace",
"later_date",
"earlier_date"
],
"title": "Combine",
"type": "string"
},
"effective_before": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Effective Before"
},
"effective_on_or_after": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Effective On Or After"
},
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Note"
}
},
"required": [
"condition"
],
"title": "Alternative",
"type": "object"
},
"Change": {
"additionalProperties": false,
"properties": {
"effective_on": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Effective On"
},
"text": {
"title": "Text",
"type": "string"
},
"source": {
"title": "Source",
"type": "string"
}
},
"required": [
"text",
"source"
],
"title": "Change",
"type": "object"
},
"Citation": {
"properties": {
"rule": {
"description": "What the citation supports: deadline, interest, penalty, ...",
"title": "Rule",
"type": "string"
},
"section": {
"title": "Section",
"type": "string"
},
"quote": {
"description": "Short quote of the rule (or our summary when verbatim is false).",
"title": "Quote",
"type": "string"
},
"verbatim": {
"default": true,
"title": "Verbatim",
"type": "boolean"
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Url"
},
"source_title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Source Title"
},
"accessed": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Accessed"
}
},
"required": [
"rule",
"section",
"quote"
],
"title": "Citation",
"type": "object"
},
"CityRules": {
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"name": {
"title": "Name",
"type": "string"
},
"state": {
"title": "State",
"type": "string"
},
"return_rule": {
"anyOf": [
{
"$ref": "#/$defs/ReturnRule"
},
{
"type": "null"
}
],
"default": null
},
"interest": {
"anyOf": [
{
"$ref": "#/$defs/InterestRule"
},
{
"type": "null"
}
],
"default": null
},
"penalty": {
"anyOf": [
{
"$ref": "#/$defs/PenaltyRule"
},
{
"type": "null"
}
],
"default": null
},
"itemization": {
"anyOf": [
{
"$ref": "#/$defs/Itemization"
},
{
"type": "null"
}
],
"default": null
},
"deductions": {
"anyOf": [
{
"$ref": "#/$defs/DeductionRules"
},
{
"type": "null"
}
],
"default": null
},
"deposit_cap": {
"anyOf": [
{
"$ref": "#/$defs/DepositCap"
},
{
"type": "null"
}
],
"default": null
},
"additional_penalty": {
"anyOf": [
{
"$ref": "#/$defs/PenaltyRule"
},
{
"type": "null"
}
],
"default": null
},
"depreciation_schedule": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Depreciation Schedule"
},
"applicability": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Applicability"
},
"notes": {
"items": {
"type": "string"
},
"title": "Notes",
"type": "array"
}
},
"required": [
"id",
"name",
"state"
],
"title": "CityRules",
"type": "object"
},
"DeductionRules": {
"additionalProperties": false,
"properties": {
"normal_wear_excluded": {
"default": true,
"title": "Normal Wear Excluded",
"type": "boolean"
},
"allowed": {
"default": [],
"items": {
"enum": [
"unpaid_rent",
"unpaid_utilities",
"late_fees",
"lease_break_fee",
"cleaning_to_move_in_condition",
"damage_beyond_wear",
"future_defaults_under_lease",
"other_lease_obligations",
"moving_and_storage",
"real_estate_tax_increase"
],
"type": "string"
},
"title": "Allowed",
"type": "array"
},
"allowed_detail": {
"default": [],
"items": {
"type": "string"
},
"title": "Allowed Detail",
"type": "array"
},
"depreciation": {
"default": "none",
"enum": [
"required",
"guidance",
"none"
],
"title": "Depreciation",
"type": "string"
},
"depreciation_only": {
"default": [],
"items": {
"enum": [
"unpaid_rent",
"unpaid_utilities",
"cleaning",
"carpet",
"flooring",
"paint",
"blinds_window_coverings",
"appliance",
"fixture_or_hardware",
"wall_or_door_repair",
"key_or_lock",
"late_fees",
"lease_break_fee",
"other_damage",
"other"
],
"type": "string"
},
"title": "Depreciation Only",
"type": "array"
},
"depreciation_note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Depreciation Note"
},
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Note"
}
},
"title": "DeductionRules",
"type": "object"
},
"DepositCap": {
"additionalProperties": false,
"properties": {
"months_rent": {
"anyOf": [
{
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Months Rent"
},
"minimum_usd": {
"anyOf": [
{
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Minimum Usd"
},
"variants": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Variants"
},
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Note"
},
"source": {
"title": "Source",
"type": "string"
}
},
"required": [
"source"
],
"title": "DepositCap",
"type": "object"
},
"InterestRule": {
"additionalProperties": false,
"properties": {
"required": {
"anyOf": [
{
"type": "boolean"
},
{
"const": "conditional",
"type": "string"
}
],
"title": "Required"
},
"condition": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Condition"
},
"min_units": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Min Units"
},
"min_tenancy_days": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Min Tenancy Days"
},
"min_tenancy_months": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Min Tenancy Months"
},
"min_tenancy_strict": {
"default": false,
"title": "Min Tenancy Strict",
"type": "boolean"
},
"min_deposit_usd": {
"anyOf": [
{
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Min Deposit Usd"
},
"rate": {
"anyOf": [
{
"enum": [
"fixed_percent",
"statutory_index",
"bank_rate"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rate"
},
"rate_value": {
"anyOf": [
{
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rate Value"
},
"rate_year": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Rate Year"
},
"rate_schedule": {
"default": [],
"items": {
"$ref": "#/$defs/RateWindow"
},
"title": "Rate Schedule",
"type": "array"
},
"method": {
"default": "simple",
"enum": [
"simple",
"per_window",
"anniversary_years",
"monthly"
],
"title": "Method",
"type": "string"
},
"formula": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Formula"
},
"base": {
"default": "deposit",
"enum": [
"deposit",
"excess_over_max_50_or_month"
],
"title": "Base",
"type": "string"
},
"payable": {
"anyOf": [
{
"enum": [
"annually",
"at_end"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Payable"
},
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Note"
}
},
"required": [
"required"
],
"title": "InterestRule",
"type": "object"
},
"Itemization": {
"additionalProperties": false,
"properties": {
"required": {
"default": true,
"title": "Required",
"type": "boolean"
},
"with_refund": {
"default": true,
"title": "With Refund",
"type": "boolean"
},
"days": {
"anyOf": [
{
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Days"
},
"months": {
"anyOf": [
{
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Months"
},
"start": {
"anyOf": [
{
"enum": [
"vacate",
"termination",
"later_of_vacate_and_termination",
"forwarding_address",
"demand",
"later_of_termination_and_address",
"latest_of_termination_possession_and_address",
"earlier_of_termination_and_surrender",
"surrender_or_termination_first",
"new_tenant_occupancy",
"termination_possession_and_demand",
"claim_notice"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Start"
},
"effective_on": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Effective On"
},
"receipts": {
"anyOf": [
{
"$ref": "#/$defs/Receipts"
},
{
"type": "null"
}
],
"default": null
},
"photos": {
"anyOf": [
{
"$ref": "#/$defs/Photos"
},
{
"type": "null"
}
],
"default": null
},
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Note"
}
},
"title": "Itemization",
"type": "object"
},
"JurisdictionRef": {
"properties": {
"state": {
"title": "State",
"type": "string"
},
"state_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "State Name"
},
"city": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The city you sent, as given.",
"title": "City"
},
"city_overlay": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The covered city whose rules were layered on, if any.",
"title": "City Overlay"
},
"covered": {
"title": "Covered",
"type": "boolean"
},
"verified": {
"description": "True when the main rule text was read verbatim at the official source.",
"title": "Verified",
"type": "boolean"
}
},
"required": [
"state",
"covered",
"verified"
],
"title": "JurisdictionRef",
"type": "object"
},
"Note": {
"properties": {
"code": {
"title": "Code",
"type": "string"
},
"text": {
"title": "Text",
"type": "string"
}
},
"required": [
"code",
"text"
],
"title": "Note",
"type": "object"
},
"PenaltyRule": {
"additionalProperties": false,
"properties": {
"kind": {
"enum": [
"multiple",
"fixed",
"actual_only",
"forfeiture_only"
],
"title": "Kind",
"type": "string"
},
"multiple": {
"anyOf": [
{
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Multiple"
},
"fixed_usd": {
"anyOf": [
{
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Fixed Usd"
},
"minimum_usd": {
"anyOf": [
{
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Minimum Usd"
},
"max_months_rent": {
"anyOf": [
{
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Max Months Rent"
},
"per_violation": {
"default": false,
"title": "Per Violation",
"type": "boolean"
},
"multiple_is_additional": {
"default": false,
"title": "Multiple Is Additional",
"type": "boolean"
},
"basis": {
"anyOf": [
{
"enum": [
"deposit",
"amount_withheld",
"monthly_rent"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Basis"
},
"condition": {
"enum": [
"bad_faith",
"willful",
"any_late",
"late",
"any_violation",
"without_reasonable_basis",
"court_discretion"
],
"title": "Condition",
"type": "string"
},
"discretionary": {
"default": false,
"title": "Discretionary",
"type": "boolean"
},
"plus_attorney_fees": {
"default": false,
"title": "Plus Attorney Fees",
"type": "boolean"
},
"forfeits_right_to_withhold_if_late": {
"default": false,
"title": "Forfeits Right To Withhold If Late",
"type": "boolean"
},
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Note"
}
},
"required": [
"kind",
"condition"
],
"title": "PenaltyRule",
"type": "object"
},
"Photos": {
"additionalProperties": false,
"properties": {
"required": {
"title": "Required",
"type": "boolean"
},
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Note"
},
"effective_on": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Effective On"
},
"kinds": {
"default": [
"move_out",
"after_repair"
],
"items": {
"enum": [
"move_in",
"move_out",
"after_repair"
],
"type": "string"
},
"title": "Kinds",
"type": "array"
}
},
"required": [
"required"
],
"title": "Photos",
"type": "object"
},
"Provenance": {
"properties": {
"ruleset_id": {
"title": "Ruleset Id",
"type": "string"
},
"ruleset_version": {
"title": "Ruleset Version",
"type": "string"
},
"ruleset_hash": {
"title": "Ruleset Hash",
"type": "string"
},
"rule_ids": {
"items": {
"type": "string"
},
"title": "Rule Ids",
"type": "array"
},
"sources": {
"items": {
"type": "string"
},
"title": "Sources",
"type": "array"
}
},
"required": [
"ruleset_id",
"ruleset_version",
"ruleset_hash"
],
"title": "Provenance",
"type": "object"
},
"RateWindow": {
"additionalProperties": false,
"description": "A published rate for a period (San Francisco's March-February year, a Berkeley move-out\nmonth, a Connecticut calendar year).",
"properties": {
"from": {
"format": "date",
"title": "From",
"type": "string"
},
"to": {
"format": "date",
"title": "To",
"type": "string"
},
"rate_value": {
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
"title": "Rate Value",
"type": "string"
},
"source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Source"
},
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Note"
}
},
"required": [
"from",
"to",
"rate_value"
],
"title": "RateWindow",
"type": "object"
},
"Receipts": {
"additionalProperties": false,
"properties": {
"required": {
"title": "Required",
"type": "boolean"
},
"threshold_usd": {
"anyOf": [
{
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Threshold Usd"
},
"note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Note"
}
},
"required": [
"required"
],
"title": "Receipts",
"type": "object"
},
"ReturnRule": {
"additionalProperties": false,
"properties": {
"days": {
"anyOf": [
{
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Days"
},
"months": {
"anyOf": [
{
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Months"
},
"counting": {
"default": "calendar",
"enum": [
"calendar",
"business"
],
"title": "Counting",
"type": "string"
},
"holidays": {
"default": "federal",
"enum": [
"federal",
"AZ",
"CA",
"NY",
"TX"
],
"title": "Holidays",
"type": "string"
},
"start": {
"default": "vacate",
"enum": [
"vacate",
"termination",
"later_of_vacate_and_termination",
"forwarding_address",
"demand",
"later_of_termination_and_address",
"latest_of_termination_possession_and_address",
"earlier_of_termination_and_surrender",
"surrender_or_termination_first",
"new_tenant_occupancy",
"termination_possession_and_demand",
"claim_notice"
],
"title": "Start",
"type": "string"
},
"start_note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Start Note"
},
"alternatives": {
"default": [],
"items": {
"$ref": "#/$defs/Alternative"
},
"title": "Alternatives",
"type": "array"
},
"gate": {
"anyOf": [
{
"const": "forwarding_address",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Gate"
},
"gate_restarts": {
"default": true,
"title": "Gate Restarts",
"type": "boolean"
},
"rollover": {
"default": false,
"title": "Rollover",
"type": "boolean"
},
"rollover_source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rollover Source"
}
},
"title": "ReturnRule",
"type": "object"
},
"StateRules": {
"properties": {
"statute": {
"title": "Statute",
"type": "string"
},
"return_rule": {
"$ref": "#/$defs/ReturnRule"
},
"itemization": {
"$ref": "#/$defs/Itemization"
},
"deductions": {
"$ref": "#/$defs/DeductionRules"
},
"interest": {
"$ref": "#/$defs/InterestRule"
},
"penalty": {
"$ref": "#/$defs/PenaltyRule"
},
"deposit_cap_months_rent": {
"anyOf": [
{
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Deposit Cap Months Rent"
},
"deposit_cap": {
"anyOf": [
{
"$ref": "#/$defs/DepositCap"
},
{
"type": "null"
}
],
"default": null
},
"recent_changes": {
"items": {
"$ref": "#/$defs/Change"
},
"title": "Recent Changes",
"type": "array"
},
"applicability": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Applicability"
},
"notes": {
"items": {
"type": "string"
},
"title": "Notes",
"type": "array"
}
},
"required": [
"statute",
"return_rule",
"itemization",
"deductions",
"interest",
"penalty"
],
"title": "StateRules",
"type": "object"
}
},
"properties": {
"summary": {
"title": "Summary",
"type": "string"
},
"disclaimer": {
"title": "Disclaimer",
"type": "string"
},
"jurisdiction": {
"$ref": "#/$defs/JurisdictionRef"
},
"rules": {
"anyOf": [
{
"$ref": "#/$defs/StateRules"
},
{
"type": "null"
}
],
"default": null
},
"city_overlay": {
"anyOf": [
{
"$ref": "#/$defs/CityRules"
},
{
"type": "null"
}
],
"default": null
},
"citations": {
"items": {
"$ref": "#/$defs/Citation"
},
"title": "Citations",
"type": "array"
},
"covered_states": {
"items": {
"type": "string"
},
"title": "Covered States",
"type": "array"
},
"covered_cities": {
"description": "City overlays in this state ('Name, ST').",
"items": {
"type": "string"
},
"title": "Covered Cities",
"type": "array"
},
"warnings": {
"items": {
"$ref": "#/$defs/Note"
},
"title": "Warnings",
"type": "array"
},
"research_notes": {
"description": "Research notes on the rows used: where the text was read, fetch failures, renumbering, history not checked. For checking the sourcing; not warnings.",
"items": {
"type": "string"
},
"title": "Research Notes",
"type": "array"
},
"provenance": {
"$ref": "#/$defs/Provenance"
}
},
"required": [
"summary",
"disclaimer",
"jurisdiction",
"provenance"
],
"title": "RulesResult",
"type": "object"
}Pricing and limits
- Web tools: free to try.
- AI assistants and API: 20 calls a day free per client, counted together, then $0.02 a call (the paid lane is in testing; the free tier applies meanwhile).
- Volume and integrations: contact us.
Limits are per client. MCP allows 240 calls a minute (hosted assistants share addresses). The daily free tier counts REST and MCP calls together and resets at midnight UTC; over it, REST answers 429 free_tier_exhausted and MCP a tool error, both naming the reset time and the paid route. Responses under it carry X-TK-Free-Remaining.
Accuracy and rules
- Coverage: US (effective 2026-10-09 to now)
- Determinism: strict
- Contract version: 0.1.0 (experimental)
- How it works: pipeline, counts, confidence mix and every source.
- Ruleset: sd-2026.10.1, hash
sha256:3777ac89e2a1b9400e9abf225feca8733c14c19cdecf5740e24a00faf4631cd8. Every result is stamped with these, so a result can be reproduced exactly.
Sources cited by the ruleset (185)
- Code of Alabama 35-9A-201 Security deposits; prepaid rent (FindLaw (mirror))
- Alaska Statutes 34.03.070 Security deposits and prepaid rent (FindLaw (mirror))
- Arizona Revised Statutes 33-1321 Security deposits (Arizona State Legislature)
- Arkansas Code 18-16-303 Applicability (small-landlord exemption) (FindLaw (mirror))
- Arkansas Code 18-16-304 Limitation on amount (FindLaw (mirror))
- Arkansas Code 18-16-305 Return of deposit (FindLaw (mirror))
- Arkansas Code 18-16-306 Noncompliance by landlord (FindLaw (mirror))
- Arkansas: Security Deposit Return Deadlines & Deductions (ezel.ai)
- California Civil Code 1950.5 (California Legislative Information (official))
- AB 12 (2023) Security deposits (California Legislature)
- AB 2801 (2024) Tenancy: security deposits (photographs) (California Legislature)
- AB 414 (2025) Residential tenancies: return of security (LegiScan)
- California Tenants: A Guide to Residential Tenants' and Landlords' Rights and Responsibilities (2026 edition) (California Department of Real Estate)
- HB25-1249 Tenant Security Deposit Protections (enrolled act) (Colorado General Assembly)
- HB25-1249 bill page and summary (Colorado General Assembly)
- Colorado Revised Statutes 38-12-103 Return of security deposit (pre-2026 text) (FindLaw (mirror))
- Connecticut General Statutes 47a-21 Security deposits (Connecticut General Assembly)
- CT Deposit Index and Interest Rates (Connecticut Department of Banking)
- Interest Calculator - Landlord Tenant Security Deposits (xls) (Connecticut Department of Banking)
- Delaware Code Title 25 5514 Security deposit (Delaware General Assembly)
- D.C. Law 16-276, Interest on Rental Security Deposits Amendment Act of 2006 (Council of the District of Columbia)
- D.C. Code 42-3502.17 Security deposit (Council of the District of Columbia)
- D.C. Law 26-156, Fair Housing Practices Amendment Act of 2026 (Council of the District of Columbia)
- 14 DCMR 309 Repayment of security deposits to tenants (DC Office of Documents (DCRegs))
- District of Columbia: Security Deposit Return Deadlines & Deductions (ezel.ai)
- Florida Statutes 83.49 Deposit money or advance rent (Florida Legislature)
- Florida Statutes 83.491 Fee in lieu of security deposit (Florida Legislature)
- Florida Statutes 83.505 Electronic delivery of notices (Florida Legislature)
- Laws of Florida ch. 2025-16 (CS/CS/CS/HB 615) (Florida Department of State)
- Laws of Florida ch. 2024-199 (CS/HB 1305) (Florida Department of State)
- Laws of Florida ch. 2023-181 (CS/HB 133) (Florida Department of State)
- O.C.G.A. 44-7-34 Return of security deposit (FindLaw (mirror))
- O.C.G.A. 44-7-33 Move-in and move-out damage lists (FindLaw (mirror))
- O.C.G.A. 44-7-35 Landlord's liability (FindLaw (mirror))
- O.C.G.A. 44-7-36 Exemption for small owners (FindLaw (mirror))
- HB 404 (2023-2024) Safe at Home Act, House Judiciary substitute (Georgia General Assembly)
- Hawaii Revised Statutes 521-44 Security deposits (FindLaw (mirror))
- Idaho Code 6-321 Security deposits (Idaho Legislature)
- Idaho Code 6-320 Action for damages by tenant (Idaho Legislature)
- Idaho Code 6-324 Attorney fees (Idaho Legislature)
- Security Deposit Return Act, 765 ILCS 710 (Illinois General Assembly)
- Security Deposit Interest Act, 765 ILCS 715 (Illinois General Assembly)
- Illinois Public Act 103-0224 (Illinois General Assembly)
- Indiana Code 32-31-3-12 (FindLaw (mirror))
- Indiana Code 32-31-3-13 (FindLaw (mirror))
- Indiana Code 32-31-3-14 (FindLaw (mirror))
- Indiana Code 32-31-3-15 (FindLaw (mirror))
- Indiana Code 32-31-3-16 (FindLaw (mirror))
- Iowa Code 562A.12 Rental deposits (Iowa Code 2026) (Iowa Legislature)
- Kansas Statutes 58-2550 Security deposits (Kansas Office of Revisor of Statutes)
- KRS 383.580 Security deposits (Kentucky General Assembly (Legislative Research Commission))
- KRS 383.500 Local adoption of the URLTA (Kentucky General Assembly (Legislative Research Commission))
- Kentucky: Security Deposit Return Deadlines & Deductions (Ezel AI)
- La. R.S. 9:3251 Lessee's deposit (Louisiana State Legislature)
- La. R.S. 9:3252 Failure of lessor to comply (Louisiana State Legislature)
- La. R.S. 9:3253 Costs and attorney's fees (Louisiana State Legislature)
- Act 63 of 2026 (HB 292), amending R.S. 9:3251 (Louisiana State Legislature)
- Louisiana: Security Deposit Return Deadlines & Deductions (Ezel AI)
- 14 M.R.S. 6031 Definitions (Maine Legislature, Office of the Revisor of Statutes)
- 14 M.R.S. 6032 Maximum security deposit (Maine Legislature, Office of the Revisor of Statutes)
- 14 M.R.S. 6033 Return of the security deposit (Maine Legislature, Office of the Revisor of Statutes)
- 14 M.R.S. 6034 Wrongful retention; damages (Maine Legislature, Office of the Revisor of Statutes)
- 14 M.R.S. 6037 Exemptions (Maine Legislature, Office of the Revisor of Statutes)
- Md. Code, Real Property 8-203 Security deposits (Maryland General Assembly)
- 2024 Md. Laws ch. 124 (HB 693), Renters' Rights and Stabilization Act of 2024 (Maryland General Assembly)
- Renters' Rights & Stabilization Act handout for renters (Maryland Department of Housing and Community Development)
- Rental Security Deposit Calculator (Maryland Department of Housing and Community Development)
- Maryland: Security Deposit Return Deadlines & Deductions (Ezel AI)
- M.G.L. c. 186, s. 15B (The 194th General Court of the Commonwealth of Massachusetts)
- Massachusetts: Security Deposit Return Deadlines & Deductions (Ezel AI)
- MCL 554.602 Security deposit; amount (Michigan Legislature)
- MCL 554.607 Permissible uses (Michigan Legislature)
- MCL 554.608 Inventory checklists (Michigan Legislature)
- MCL 554.609 Itemized list of damages (Michigan Legislature)
- MCL 554.610 Effect of noncompliance with notice of damages requirement (Michigan Legislature)
- MCL 554.611 Notice of forwarding address (Michigan Legislature)
- MCL 554.613 Action for damages; retention of security deposit (Michigan Legislature)
- Michigan: Security Deposit Return Deadlines & Deductions (Ezel AI)
- Minn. Stat. 504B.178 Security deposits (Minnesota Office of the Revisor of Statutes)
- Minn. Stat. 504B.182 Initial and final inspection required (Minnesota Office of the Revisor of Statutes)
- 2023 Minn. Laws ch. 52 (session law) (Minnesota Office of the Revisor of Statutes)
- Minnesota: Security Deposit Return Deadlines & Deductions (Ezel AI)
- Miss. Code Ann. 89-8-21 (FindLaw (Thomson Reuters))
- Mississippi: Security Deposit Return Deadlines & Deductions (Ezel AI)
- RSMo 535.300 Security deposits (Missouri Revisor of Statutes)
- Mont. Code Ann. 70-25-201 Security deposit -- deductions authorized (Montana Legislature)
- Mont. Code Ann. 70-25-202 List of damages and refund (Montana Legislature)
- Mont. Code Ann. 70-25-204 Wrongful withholding of security deposit -- action (Montana Legislature)
- Montana: Security Deposit Return Deadlines & Deductions (Ezel AI)
- Neb. Rev. Stat. 76-1416 Security deposits; prepaid rent (Nebraska Legislature)
- Nebraska: Security Deposit Return Deadlines & Deductions (Ezel AI)
- NRS Chapter 118A (118A.242 Security deposit) (Nevada Legislature)
- Nevada: Security Deposit Return Deadlines & Deductions (Ezel AI)
- N.H. RSA 540-A:5 Definitions (New Hampshire General Court)
- N.H. RSA 540-A:6 Procedure (New Hampshire General Court)
- N.H. RSA 540-A:7 Return of Security Deposit (New Hampshire General Court)
- N.H. RSA 540-A:8 Remedies (New Hampshire General Court)
- N.J.S.A. 46:8-19 Security deposits; investment, interest, notice (FindLaw (Thomson Reuters))
- N.J.S.A. 46:8-21.1 Return of deposit; itemization; double damages (FindLaw (Thomson Reuters))
- N.J.S.A. 46:8-21.2 Maximum security deposit (FindLaw (Thomson Reuters))
- N.J.S.A. 46:8-26 Applicability; owner-occupied exemption (FindLaw (Thomson Reuters))
- New Jersey: Security Deposit Return Deadlines & Deductions (Ezel AI)
- NMSA 1978 47-8-18 Deposits (FindLaw (Thomson Reuters))
- New Mexico: Security Deposit Return Deadlines & Deductions (Ezel AI)
- N.Y. Gen. Oblig. Law 7-108 (New York State Senate (official))
- N.Y. Gen. Oblig. Law 7-103 (public.law (reprint of nysenate.gov))
- New York: Security Deposit Return Deadlines & Deductions (Ezel AI)
- N.C. Gen. Stat. 42-50 Deposits from the tenant (North Carolina General Assembly)
- N.C. Gen. Stat. 42-51 Permitted uses of the deposit (North Carolina General Assembly)
- N.C. Gen. Stat. 42-52 Landlord's obligations (North Carolina General Assembly)
- N.C. Gen. Stat. 42-55 Remedies (North Carolina General Assembly)
- North Carolina: Security Deposit Return Deadlines & Deductions (Ezel AI)
- N.D. Cent. Code ch. 47-16 (Leases), sec. 47-16-07.1 Real property and dwelling security deposits (North Dakota Legislative Branch)
- Ohio Rev. Code 5321.16 Procedures for security deposits (Ohio Legislative Service Commission)
- Okla. Stat. tit. 41, 115 Damage or security deposits (Title 41 complete text, RTF) (Oklahoma Legislature)
- ORS 90.300 Security deposits; prepaid rent (ORS chapter 90, 2025 edition) (Oregon Legislature (Legislative Counsel))
- ORS 90.255 Attorney fees (Oregon Legislature (Legislative Counsel))
- Landlord and Tenant Act of 1951 (Act 20), Article V incl. secs. 511.1-512 (68 P.S. 250.511a-250.512) (Pennsylvania General Assembly)
- R.I. Gen. Laws 34-18-19 Security deposits (Rhode Island General Assembly)
- S.C. Code tit. 27 ch. 40 (Residential Landlord and Tenant Act), sec. 27-40-410 (South Carolina Legislature)
- SDCL 43-32-24 Return of security deposit after termination of tenancy (South Dakota Legislative Research Council)
- SDCL 43-32-6.1 Maximum security deposit for residential premises (South Dakota Legislative Research Council)
- SD Session Laws 2026, chapter 179 (Senate Bill 4): revise procedures for returning and withholding security deposits (South Dakota Legislative Research Council)
- Tenn. Code Ann. 66-28-301 Security deposits (FindLaw mirror) (FindLaw (Thomson Reuters))
- Tenn. Code Ann. 66-28-102 Applicability (FindLaw mirror) (FindLaw (Thomson Reuters))
- Tennessee: Security Deposit Return Deadlines & Deductions (ezel.ai)
- Tex. Prop. Code ch. 92, subchapter C Security Deposits (92.101-92.113) (Texas Legislative Council)
- Utah Code 57-17-3 Deductions from deposit -- Written itemization -- Time for return (effective 5/7/2025) (Utah Legislature)
- Utah Code 57-17-5 Failure to return deposit -- Recovery of deposit, penalty, costs, and attorney fees (Utah Legislature)
- Utah H.B. 480 (2025) Landlord Communication Amendments, enrolled copy (Utah Legislature)
- 9 V.S.A. 4461 Security deposits (Vermont General Assembly)
- Va. Code 55.1-1226 Security deposits (Virginia Division of Legislative Automated Systems)
- Virginia HB 1542 (2023) Virginia Residential Landlord and Tenant Act; security deposits (FastDemocracy (bill tracker))
- RCW 59.18.280 Moneys paid as deposit or security for performance by tenant -- Statement and notice of basis for retention -- Remedies (Washington State Legislature)
- W. Va. Code 37-6A-1 Definitions (notice period) (West Virginia Legislature)
- W. Va. Code 37-6A-2 Security deposits (West Virginia Legislature)
- W. Va. Code 37-6A-5 Landlord's noncompliance (West Virginia Legislature)
- Wis. Stat. 704.28 Withholding from and return of security deposits (Wisconsin Legislature)
- Wis. Admin. Code ATCP 134.06 Security deposits (Wisconsin Legislature (Legislative Reference Bureau))
- Wis. Stat. 100.20(5) Unfair methods of competition and trade practices -- double damages (Wisconsin Legislature)
- Wyo. Stat. 1-21-1208 Deductions from deposit; written itemization; time limits (Title 1 PDF) (Wyoming Legislature)
- City of Chicago, Residential Landlord and Tenant Ordinance Summary (2023, English) (City of Chicago, Department of Housing)
- RLTO Rate of Interest on Security Deposits, lease rider 2026 (City of Chicago, Department of Housing (City Comptroller rate))
- Security Deposits (Rent Board Topic 101) (San Francisco Rent Board)
- New Interest Rate for Security Deposits Effective 3/1/26 (San Francisco Rent Board)
- Security Deposit Interest & Calculator (City of Berkeley Rent Stabilization Board)
- 2026 AGA Published and the 2025 Security Deposit Interest Payment Due Soon (City of Berkeley Rent Stabilization Board)
- Rent Stabilization Bulletin 44, Interest Payment on Security Deposit (01/13/2026) (Los Angeles Housing Department)
- Security Deposits (Rent Control information by subject, 08-2024) (City of Santa Monica Rent Control Board)
- Move-In Charges (common code questions) (Seattle Department of Construction and Inspections)
- Portland City Code 30.01.087 Security Deposits; Pre-paid Rent (City of Portland)
- Security Deposits (Rental Services Office) (Portland Housing Bureau)
- Rental Housing Security Deposits Permanent Administrative Rule (effective July 29, 2022) (Portland Housing Bureau)
- HOU-3.07 Rental Housing Security Deposits Permanent Rule (as amended March 29, 2021) (City of Portland (eFiles))
- Fixture, Appliance, Equipment, and Personal Property Depreciation Schedule, Form 30.01.087.C.1 (Valid through December 2020) (Portland Housing Bureau (eFiles))
- Security Deposits brochure (published August 2022) (Portland Housing Bureau)
- Rental Security Deposits (City of Minneapolis)
- S.A.F.E. Housing Tenant Protections, Security Deposit Limitations (March 2021) (City of Saint Paul)
- Wis. Stat. 66.0104 Prohibiting certain local regulation of residential rental practices (Wisconsin State Legislature)
- N.Y. General Obligations Law 7-108 Security deposits (New York State Senate)
- Mass. Gen. Laws c. 186, s. 15B Security deposits (Massachusetts Legislature)
- Sample Life Expectancy Chart and Tenant Damage vs Normal Wear and Tear (HUD Special Claims guidance, reproduced as Minnesota Housing 1.13) (Minnesota Housing (state HFA) reproducing HUD Multifamily Special Claims guidance)
- California Tenants: A Guide to Residential Tenants' and Landlords' Rights and Responsibilities (2024 Edition) (California Department of Real Estate (copy hosted by UC Berkeley Student Legal Services))
- InterNACHI's Standard Estimated Life Expectancy Chart for Homes (International Association of Certified Home Inspectors)
- Publication 527, Residential Rental Property (Internal Revenue Service)
- Cal. Civ. Code 10 (computation of time) (Public.Law (mirror of leginfo.legislature.ca.gov; official site returned 403))
- Cal. Civ. Code 11 (act due on a holiday) (Public.Law (mirror))
- Cal. Code Civ. Proc. 12a (last day a holiday; Saturdays are holidays) (Public.Law (mirror))
- N.Y. General Construction Law 25-a (New York State Senate)
- N.Y. General Construction Law 20 (day, computation) (Public.Law (mirror))
- Tex. Gov't Code 311.014 Computation of time (Public.Law (mirror; statutes.capitol.texas.gov is script-rendered))
- Tex. Prop. Code 1.002 Code Construction Act (Public.Law (mirror))
- Arizona Revised Statutes 33-1321 Security deposits (Arizona State Legislature)
- Interest Calculator - Landlord Tenant Security Deposits (xls) (Connecticut Department of Banking)
- Rental Security Deposits, Key Issues and Guidance (rev. 05/26) (Connecticut Department of Banking)
- Security Deposit Compliance (LotKeeper features) (LotKeeper)
- What's New in AppFolio, Winter 2025 (AppFolio)
- Product showcase, key feature releases from Q2 2022 (AppFolio)
- Buildium Academy, Move-ins and Move-outs for Rentals (Buildium)
- Deposit Returns product update; Return a Security Deposit (support) (TurboTenant)
- End a Lease (DoorLoop support) (DoorLoop)
- How do I return a deposit? (TenantCloud support) (TenantCloud)
- Security Deposit Refund Letter & Receipt Templates (RentRedi)
- Avail features (Avail (Realtor.com))
- Daily Treasury Par Yield Curve Rates (1-year), first business day of 2024, 2025 and 2026 (U.S. Department of the Treasury)
Limitations
- Computes and cites the published rule; it is not legal advice. Check the statute, your lease and local ordinances before you sign the statement.
- Covers the 50 states and DC and eight city overlays; other local ordinances are not applied (the result warns).
- Several state rows were read on a mirror (FindLaw, public.law) rather than the official code site, and some quotes are summaries; each citation says which.
- Useful lives come from HUD's chart and industry tables (carpet 8 years, 10 in California and Colorado; paint 3, 2 in California with the DRE guide's step table; blinds 3; appliances 10). Send your own with useful_life_years.
- Penalty amounts are statutory exposure, not a prediction of what a court would award.
- Some rule text is summarised rather than quoted; each citation says which.
Results are estimate ranges for planning, not quotes or professional advice. Read the full disclaimer.
Privacy
- Estimates: We keep an anonymized record of estimates (ZIP3, unit size, findings and totals; never your notes, address, IP or contact details) to improve accuracy.
- Retention: 0 days.
- Used to train models: no
- Personal data: Inputs are a state, a city, amounts, dates and deduction categories; no tenant name, address or unit number is asked for. Deduction descriptions are never stored, logged, hashed or returned. Requests are not stored and no per-settlement record is kept. Each call leaves only the standard usage log line (capability, status, duration, hashes, a daily-rotating anonymous fingerprint).
Have a task you wish a reliable tool handled? Tell us on the Contact page.