> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developer.fortresstech.io/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developer.fortresstech.io/_mcp/server.

# Properties Overview

> Overview of the Properties API endpoints and functionality

The Properties API provides endpoints for managing rental properties and their comprehensive information within the property management system.

## Key Concepts

### Property Status

Properties expose a lifecycle `status`:

* `ACTIVE`
* `INACTIVE`
* `PENDING`

Fortress aggregates occupancy only for `ACTIVE` properties.

### Property Information

Properties are the core entity containing:

* **Basic Details**: Name, short name, property class, and contact information
* **Physical Address**: Complete physical location details
* **Mailing Address**: Separate mailing address if different
* **Contact Information**: Phone, fax, and email details
* **Geographic Data**: Latitude, longitude, and timezone information

### Property Management

* **Organization Association**: Each property belongs to an organization
* **Timezone Management**: Support for different time zones
* **Communication Hub**: Central contact point for the property

### Property Relationships

Properties serve as the central hub for numerous related entities:

* **Units**: Individual rental units within the property
* **Buildings**: Physical structures on the property
* **Floor Plans**: Available unit layouts and specifications
* **Households**: Current and past residents
* **Applications**: Rental applications for the property
* **Prospects**: Potential tenants interested in the property
* **Leases**: Active and historical lease agreements
* **Work Orders**: Maintenance and service requests
* **Amenities**: Property and unit amenities
* **Financial Records**: Deposits, transactions, and GL entries
* **Reports**: Property-specific reporting and analytics

### Property Configuration

Each property has a single configuration record holding the detail that does not fit the core property
record: marketing copy (full description, office hours, pet policy, parking details, amenities), contact
routing (email, voice phone, SMS phone), resident-facing links, leasing and application settings (late fee
method, allowed lease terms, income requirement, quote expiration), master metered utilities, security
deposit interest, service vendors, and site details such as build and renovation dates, access codes and
on-site amenities.

A property's configuration id is the same as its property id, so the record can be read either as a
subresource of the property or directly by id.

> **Note**
>
> Three fields flatten a one-to-many relationship into a delimited string:
>
> * `amenities` — comma-and-space separated: `"ClubHouse, FitnessCenter, Pool"`
> * `officeHours` — semicolon separated, each entry `"<Day> <open>-<close>"`: `"Monday 9:00 AM-6:00 PM; Tuesday 9:00 AM-6:00 PM"`
> * `allowedLeaseTermMonths` — comma separated, distinct values: `"6,12,18"`
>
> All three are **unordered sets**. The underlying CDC engine cannot order values inside an
> aggregate, so sort client-side if order matters — every `officeHours` entry carries its day name
> for exactly that purpose.
>
> `lateFeeMethod` and `securityDepositSimpleInterestRate` are kept as a dated history on the property, so both
> report the value in effect today.

> **Note**
>
> Boolean fields are serialised as the strings `"true"` and `"false"` rather than JSON booleans. This is
> a property of the export pipeline and applies to every boolean across the API — for example
> `units.isADA` and `amenities.includedInMarketRent` — not just this resource. Parse accordingly.

`applicationPortalUrl` is only populated while the resident portal is active for the property; `availabilityUrl`
is always available. `quoteExpiration` is a duration (`SAME_DAY`, `HOURS_24`, `HOURS_48`, `HOURS_72`), not a
calendar date. `siteBuiltDate` and `lastRenovationDate` are free-text rather than strict dates, so they may
hold a year or a partial date.

### Leslie Integration Configuration

Available by Request

Each property can have a Leslie vendor integration configuration, which controls whether the integration is enabled for that property and Leslie's own identifier for the property (`externalPropertyId`). A derived `isConfigured` field is `true` when the configuration is both enabled (`isEnabled`) and has an `externalPropertyId` set.

> **Note**
>
> This endpoint is part of our evolving API ecosystem.
> To explore availability for your integration, please contact our team.

## Available Endpoints

| Endpoint                                                                                                           | Summary                           | Method |
| ------------------------------------------------------------------------------------------------------------------ | --------------------------------- | :----: |
| [`/properties`](/api-reference/properties/list-properties)                                                         | List Properties                   |   GET  |
| [`/properties/{propertyId}`](/api-reference/properties/read-property)                                              | Read Property                     |   GET  |
| [`/properties/{propertyId}/configuration`](/api-reference/properties/read-property-configuration)                  | Read Property Configuration       |   GET  |
| [`/propertyConfigurations/{propertyConfigurationId}`](/api-reference/properties/read-property-configuration-by-id) | Read Property Configuration by Id |   GET  |
| [`/properties/{propertyId}/leslieConfiguration`](/api-reference/properties/read-property-leslie-configuration)     | Read Leslie Configuration         |   GET  |
| [`/propertyGroups`](/api-reference/properties/list-property-groups)                                                | List Property Groups              |   GET  |
| [`/propertyGroups`](/api-reference/properties/create-property-group)                                               | Create Property Group             |  POST  |
| [`/propertyGroups/{propertyGroupId}`](/api-reference/properties/read-property-group)                               | Read Property Group               |   GET  |
| [`/propertyGroups/{propertyGroupId}`](/api-reference/properties/update-property-group)                             | Update Property Group             |   PUT  |
| [`/propertyGroups/{propertyGroupId}`](/api-reference/properties/delete-property-group)                             | Delete Property Group             | DELETE |