Raw schema
{
"type": "object",
"properties": {
"client_refs": {
"additionalProperties": {
"type": "string"
},
"type": "object",
"description": "Your own reference ids (e.g. unit_id, job_id). Echoed back, never used."
},
"state": {
"description": "US state, 2-letter code (e.g. 'CA'); a state name also works.",
"type": "string"
},
"city": {
"maxLength": 80,
"type": "string",
"description": "City, for a city overlay where covered (e.g. 'Chicago'). Optional."
},
"deposit_usd": {
"anyOf": [
{
"type": "number"
},
{
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
"type": "string"
}
],
"description": "Security deposit held, dollars."
},
"monthly_rent_usd": {
"description": "Monthly rent, for the deposit cap check.",
"anyOf": [
{
"maximum": 10000000,
"minimum": 0,
"type": "number"
},
{
"pattern": "^\\$?[0-9][0-9,]*(\\.[0-9]+)?$",
"type": "string"
}
]
},
"building_units": {
"maximum": 100000,
"minimum": 1,
"type": "integer",
"description": "Units in the building. Some interest rules depend on it (NY 6+, IL 25+)."
},
"move_in_on": {
"format": "date",
"type": "string",
"description": "Tenancy start (YYYY-MM-DD). Used for interest and, when an item's age is unknown, for depreciation."
},
"tenancy_ended_on": {
"format": "date",
"type": "string",
"description": "When the tenancy actually ended (YYYY-MM-DD): the lease's end, or an earlier termination or accepted surrender. Deadlines that run from the end of the tenancy use it. For a tenant who left before the lease was due to end, send the scheduled end as lease_end_on (older callers sent it here, which still works: the deadline is then counted from it, with the move-out date as an earlier alternative where the facts point to one)."
},
"lease_end_on": {
"format": "date",
"type": "string",
"description": "Day the lease was scheduled to end (YYYY-MM-DD), when it differs from when the tenancy actually ended (a broken lease). Lost rent and lease-break charges run to it; deadlines do not (they follow tenancy_ended_on, else the move-out, with the scheduled end as a later alternative)."
},
"vacated_on": {
"description": "Day the tenant moved out and returned possession (YYYY-MM-DD).",
"format": "date",
"type": "string"
},
"forwarding_address_received_on": {
"format": "date",
"type": "string",
"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)."
},
"tenant_gave_forwarding_address": {
"type": "boolean",
"description": "False when the tenant never gave a forwarding address in writing (not just 'not yet known'). Illinois, Pennsylvania, Ohio, Delaware, South Carolina and New Hampshire then relieve the landlord of the penalty. Implied true by forwarding_address_received_on."
},
"demand_received_on": {
"format": "date",
"type": "string",
"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."
},
"new_tenant_moved_in_on": {
"format": "date",
"type": "string",
"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; rent claimed for days from it on is not recoverable (re-rent mitigation)."
},
"new_tenant_rent_usd": {
"description": "Monthly rent the new tenant pays (with new_tenant_moved_in_on): the rent received for overlapping days is credited against rent claimed for them.",
"anyOf": [
{
"maximum": 10000000,
"minimum": 0,
"type": "number"
},
{
"pattern": "^\\$?[0-9][0-9,]*(\\.[0-9]+)?$",
"type": "string"
}
]
},
"statement_sent_on": {
"format": "date",
"type": "string",
"description": "Day you sent (or delivered) the itemized statement (YYYY-MM-DD). With it the statement is judged on time or late; documentation.itemized_statement alone cannot tell."
},
"claim_notice_sent_on": {
"format": "date",
"type": "string",
"description": "Day you sent the written notice of intent to impose a claim on the deposit (YYYY-MM-DD). Florida (due within 30 days of termination) and the District of Columbia (within 45 days): the balance is due 30 days after it; a late notice does not count."
},
"lease_return_days": {
"maximum": 365,
"minimum": 0,
"type": "integer",
"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)."
},
"tenant_gave_proper_notice": {
"type": "boolean",
"description": "A termination notice that meets the statute was given (Alaska: 14 days instead of 30 when nothing is deducted for damage)."
},
"interest_paid_through": {
"format": "date",
"type": "string",
"description": "Interest already paid or credited to the tenant up to this day (annual-payment rules: San Francisco, Los Angeles, Berkeley, Connecticut, Massachusetts, ...): interest is counted from it."
},
"nonstandard_provision_signed": {
"type": "boolean",
"description": "Wisconsin: the tenant signed a separate NONSTANDARD RENTAL PROVISIONS document covering the charge (ATCP 134.06(3)(b)); false makes such charges 'no'."
},
"pet_deposit_usd": {
"description": "The part of deposit_usd that is a pet deposit (outside the cap in Missouri, Alabama, North Dakota and Saint Paul; allowed on top of it up to one month in Hawaii and Alaska, half a month in Kansas, a quarter in Nebraska).",
"anyOf": [
{
"maximum": 10000000,
"minimum": 0,
"type": "number"
},
{
"pattern": "^\\$?[0-9][0-9,]*(\\.[0-9]+)?$",
"type": "string"
}
]
},
"tenant_age_62_plus": {
"type": "boolean",
"description": "The tenant is 62 or older (Connecticut: a one-month cap)."
},
"tenant_age_60_plus": {
"type": "boolean",
"description": "A person 60 or older occupies the unit (New Hampshire 540-A:5, I: the owner-occupied exemption does not reach the unit). tenant_age_62_plus true implies it."
},
"small_landlord": {
"type": "boolean",
"description": "California AB 12 small landlord (a natural person or an LLC of natural persons owning at most two properties with at most four units; not for a service member): a two-month cap."
},
"owner_occupied": {
"type": "boolean",
"description": "The landlord lives in the building (ME, NH, NJ and Chicago exempt small owner-occupied buildings; with building_units)."
},
"landlord_units_owned": {
"minimum": 0,
"type": "integer",
"description": "Rental units the landlord owns in all (Arkansas 5 or fewer, Georgia 10 or fewer, with third_party_managed, may be exempt)."
},
"third_party_managed": {
"type": "boolean",
"description": "A third party manages the unit or collects rent for a fee."
},
"prepaid_rent_usd": {
"description": "Rent paid in advance beyond the first month, held besides deposit_usd. Counts toward the cap in AK, AZ, CA, CT, MD, MI and NY; earns interest in CT, MA (last month's rent), MD and Chicago; in Minneapolis it lowers the deposit cap to half a month.",
"anyOf": [
{
"maximum": 10000000,
"minimum": 0,
"type": "number"
},
{
"pattern": "^\\$?[0-9][0-9,]*(\\.[0-9]+)?$",
"type": "string"
}
]
},
"tenancy_type": {
"enum": [
"written_lease",
"at_will"
],
"type": "string",
"description": "written_lease or at_will (Maine 6033(2): a written agreement's period, at most 30 days, or 21 days for a tenancy at will; Massachusetts 15B(4): at will, 30 days after the move-out, a written lease, 30 days after its end). Left out with a move-out before tenancy_ended_on: the earlier (at-will) date leads and the other is listed."
},
"tenant_abandoned": {
"type": "boolean",
"description": "The tenant abandoned the unit or was evicted (Maryland 8-203(h): the clock runs from the tenant's written demand; Washington 59.18.280: from when the landlord learns of it; Louisiana 9:3251(C): the one-month rule does not apply). Left out: inferred from tenant_gave_proper_notice: false; with a move-out before tenancy_ended_on the earlier abandonment clock leads and the other date is listed."
},
"contractor_needed": {
"type": "boolean",
"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)."
},
"deposit_collected_on": {
"format": "date",
"type": "string",
"description": "Day the deposit was collected (YYYY-MM-DD); defaults to move_in_on. California (AB 12, from 2024-07-01) and Colorado caps depend on it."
},
"lease_signed_or_renewed_on": {
"format": "date",
"type": "string",
"description": "Day the current lease was signed or last renewed (YYYY-MM-DD). Georgia (2024-07-01) and Maryland (2024-10-01) caps apply to leases from then; defaults to move_in_on, with a warning that a later renewal may bring the new cap."
},
"lease_term_months": {
"maximum": 600,
"minimum": 0,
"type": "integer",
"description": "Term of the lease in months (0 for month-to-month). Delaware's cap applies to leases of a year or more, New Mexico's to shorter ones."
},
"furnished": {
"type": "boolean",
"description": "The unit is rented furnished (California before AB 12: 3 months; Kansas: 1.5 months; Delaware: no cap)."
},
"rent_ordinance_covered": {
"type": "boolean",
"description": "The unit is covered by the city's rent ordinance (Los Angeles RSO, Berkeley Rent Ordinance). Their deposit interest is owed only then; unknown: the amount is shown beside the refund, not in it."
},
"interest_rate_percent": {
"description": "Annual rate the deposit account paid, where the law sets interest at the bank's rate (New Jersey, North Dakota, New Hampshire, New York, Pennsylvania, Portland), or caps it (Massachusetts: 5% or the bank's lesser rate). Without it bank-rate interest is unknown. Illinois 765 ILCS 715 uses IDFPR's published rate instead.",
"anyOf": [
{
"maximum": 25,
"minimum": 0,
"type": "number"
},
{
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
"type": "string"
}
]
},
"deductions": {
"description": "What you intend to deduct (or, for a tenant, what the landlord listed). An explicit empty list means nothing is deducted (it decides the shorter no-deduction periods, e.g. Montana 10 days, Alaska 14); leave it out when that is not known yet.",
"items": {
"$ref": "#/$defs/Deduction"
},
"maxItems": 50,
"type": "array"
},
"returned": {
"$ref": "#/$defs/Returned",
"description": "What the landlord has returned so far and when. With it, timeliness says whether the refund and the itemized statement were on time and how many days late.",
"type": "object"
},
"documentation": {
"$ref": "#/$defs/Documentation",
"description": "What documentation you have; leave a field out when unknown.",
"type": "object"
},
"as_of": {
"description": "Today's date (YYYY-MM-DD) for the deadline status. Defaults to today (UTC); send it for repeatable results.",
"format": "date",
"type": "string"
},
"audit": {
"default": false,
"description": "Also return the run record and input/result hashes (an audit trail). Default false.",
"type": "boolean"
}
},
"required": [
"state",
"deposit_usd",
"vacated_on"
],
"$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, moving_and_storage, reletting_costs (advertising or a broker to re-rent after an early move-out), trash_and_abandoned_items (removing trash or belongings left behind), other_damage, other. Carpet cleaning is cleaning (with cleaning_kind), not carpet.",
"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",
"moving_and_storage",
"reletting_costs",
"trash_and_abandoned_items",
"other_damage",
"other"
],
"type": "string"
},
"description": {
"maxLength": 200,
"type": "string",
"description": "Your own short note (e.g. 'bedroom carpet, pet stains'). Never stored, hashed or returned; the statement uses the category."
},
"amount_usd": {
"anyOf": [
{
"maximum": 10000000,
"minimum": 0,
"type": "number"
},
{
"pattern": "^\\$?[0-9][0-9,]*(\\.[0-9]+)?$",
"type": "string"
}
],
"description": "Amount you intend to deduct, in dollars (rounded to cents)."
},
"item_installed_on": {
"format": "date",
"type": "string",
"description": "When the item (carpet, paint, appliance...) was installed or last replaced (YYYY-MM-DD). Give this or item_age_years, not both."
},
"item_age_years": {
"description": "Age of the item in years at move-out (e.g. 4.5).",
"anyOf": [
{
"maximum": 100,
"minimum": 0,
"type": "number"
},
{
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
"type": "string"
}
]
},
"useful_life_years": {
"description": "Override the useful life used for depreciation (years).",
"anyOf": [
{
"exclusiveMinimum": 0,
"maximum": 100,
"type": "number"
},
{
"pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
"type": "string"
}
]
},
"caused_by_tenant": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": true,
"description": "False when the condition is normal wear and tear (never deductible); null when it is disputed or unknown (a tenant checking a landlord's list): the line is then 'depends', with the amount the rule would allow if it is damage."
},
"has_receipt": {
"type": "boolean",
"description": "You have a receipt, invoice or estimate for this line."
},
"has_photos": {
"type": "boolean",
"description": "You have photos of this damage."
},
"utility_kind": {
"enum": [
"water",
"sewer",
"electric",
"gas",
"heat",
"trash",
"internet",
"other"
],
"type": "string",
"description": "unpaid_utilities only: which utility. Some states allow only some (Massachusetts: water); without it such a line is 'depends'."
},
"late_payments": {
"maximum": 600,
"minimum": 1,
"type": "integer",
"description": "late_fees only: how many late payments (or months, where the cap is per month) the fee covers. A statutory cap is per late payment; without this, more than one cap is 'depends'."
},
"work_kind": {
"enum": [
"repair",
"replace",
"cleaning"
],
"type": "string",
"description": "repair (restores the item: never depreciated), replace (a new item: prorated by the old one's remaining life where the rule does), or cleaning (e.g. carpet cleaning: judged as a cleaning line)."
},
"rent_through": {
"format": "date",
"type": "string",
"description": "unpaid_rent only: the last day the rent charged covers. With new_tenant_moved_in_on it decides how much of the rent overlaps the new tenancy (not recoverable: the landlord cannot collect rent twice for the same days)."
},
"cleaning_kind": {
"enum": [
"beyond_wear",
"routine",
"unknown"
],
"type": "string",
"description": "cleaning only: beyond_wear (the unit was left dirtier than normal use; cleaning to restore its move-in condition), routine (ordinary cleaning after normal use, which most states treat as normal wear) or unknown. Where the statute does not name cleaning, an unknown kind is 'depends'."
}
},
"required": [
"category",
"amount_usd"
],
"type": "object"
},
"Documentation": {
"additionalProperties": false,
"properties": {
"itemized_statement": {
"type": "boolean",
"description": "You will send (or sent) an itemized statement."
},
"receipts": {
"type": "boolean",
"description": "You have receipts or invoices for the repairs and cleaning."
},
"photos_move_in": {
"type": "boolean",
"description": "Dated move-in photos."
},
"photos_move_out": {
"type": "boolean",
"description": "Dated move-out photos."
},
"photos_after_repair": {
"type": "boolean",
"description": "Photos after repairs."
},
"cleaning_notice": {
"type": "boolean",
"description": "You gave the tenant written notice of the cleaning needed and time to do it before charging for cleaning (Montana 70-25-201(3): 24 hours)."
},
"move_in_condition_statement": {
"type": "boolean",
"description": "You gave the tenant a written move-in condition statement or checklist (Montana 70-25-206, Washington 59.18.260; listed as a duty in Georgia 44-7-33(a), Kentucky 383.580(2), Michigan 554.608 and Virginia 55.1-1214)."
},
"move_out_list": {
"type": "boolean",
"description": "You inspected the unit and made the move-out damage list in time (Georgia 44-7-33(b): within 3 business days)."
}
},
"type": "object"
},
"Returned": {
"additionalProperties": false,
"description": "What the landlord has returned so far: lets the result say whether the refund and the\nitemized statement came on time (``timeliness``).",
"properties": {
"what": {
"description": "nothing: nothing returned yet; full_refund: the whole deposit; partial_refund: part of it, with no itemized statement; itemized_statement: an itemized statement of deductions (with any refund the same day).",
"enum": [
"nothing",
"full_refund",
"partial_refund",
"itemized_statement"
],
"type": "string"
},
"on": {
"format": "date",
"type": "string",
"description": "Day it was sent or delivered (YYYY-MM-DD); required unless what is nothing. Statutes count the day the landlord mails or delivers it; a postmark is the best evidence."
},
"amount_usd": {
"description": "Amount refunded, dollars (partial_refund or itemized_statement).",
"anyOf": [
{
"maximum": 10000000,
"minimum": 0,
"type": "number"
},
{
"pattern": "^\\$?[0-9][0-9,]*(\\.[0-9]+)?$",
"type": "string"
}
]
},
"method": {
"enum": [
"check",
"electronic",
"other"
],
"type": "string",
"description": "How the money went back: check, electronic (direct deposit or electronic transfer) or other. Some statutes key on it (Michigan 554.609(3): an electronic balance may follow the notice by 10 days; California 1950.5 as amended by AB 414: electronic return when the deposit or rent was paid electronically)."
}
},
"required": [
"what"
],
"type": "object"
}
},
"examples": [
{
"state": "CA",
"deposit_usd": "2000",
"monthly_rent_usd": "2000",
"move_in_on": "2023-06-01",
"vacated_on": "2026-09-30",
"deductions": [
{
"category": "cleaning",
"amount_usd": "150"
},
{
"category": "carpet",
"amount_usd": "1200",
"item_age_years": 5
}
],
"as_of": "2026-10-09"
}
]
}