> 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.

# Fortress API Reference

> Overview of the Fortress API conventions and common patterns

Welcome to the Fortress API reference documentation. This API provides comprehensive access to manage properties, units, tenants, and all related operations in the Fortress platform.

## Response Headers

### Pagination Information

For endpoints that return lists of resources, we include the `x-total-count` header in the response. This header contains the total number of records that match your query, which is particularly useful for pagination.

Example response headers:

```http
x-total-count: 157
```

This means there are 157 total records matching your query criteria, regardless of the page size or current page you're viewing.

### Using Total Count

The `x-total-count` header is useful for:

* Implementing pagination UI (e.g., showing "Page 1 of 10")
* Determining if there are more records to fetch
* Showing total result counts to users

## Common Query Parameters

### Pagination

* `page`: The page number to retrieve (starts at 1)
* `limit`: Number of items per page

Example:

```
GET /properties?page=2&limit=10
```

### Filtering

Use the `filter` parameter to narrow down results:

```
GET /properties?filter=status=active
```

### Sorting

Use the `sort` parameter to order results:

```
GET /properties?sort=createdAt:desc
```

### Relations

To include related data in the response, use the `fields` parameter with dot notation to specify the relations:

```
GET /households?fields=property.*,documents.*
```

The asterisk (\*) will fetch all fields from the related entity. You can also specify particular fields:

```
GET /households?fields=id,name,property.name,property.address
```

Multiple relations can be requested in the same query:

```
GET /households?fields=id,name,property.*,documents.type,tenants.name
```

## Rate limits and polling

Keep each API key under 600 requests a minute. Fortress may enforce this limit with `429 Too Many Requests`.

When you receive `429`, wait, then retry. Increase the pause between each retry (backoff).

For periodic reads, pull once a day. Pull more often only when your integration needs fresher data.

To read only new rows, filter on a date field. Request rows that changed after the last date you processed.

## Response Formats

All API responses follow a consistent JSON format:

### Example Request and Response

```bash
curl -i -X GET https://api.fortresstech.io/v1/users
HTTP/1.1 200 OK
x-total-count: 9211
Content-Type: application/json; charset=utf-8
Content-Length: 3206
Date: Mon, 09 Jun 2025 19:46:10 GMT

[
  {
    "id": "123e4567-e89b-12d3-a456-426614174000",
    "firstname": "John",
    "lastname": "Smith",
    "email": "john.smith@example.com",
    "status": "ACTIVE"
  }
]
```

### Example API Error Response

```bash
curl -i -X GET https://api.fortresstech.io/v1/users/12
HTTP/1.1 400 Bad Request
Content-Type: application/json; charset=utf-8
Content-Length: 40
Vary: Accept-Encoding
Date: Mon, 09 Jun 2025 19:46:54 GMT

{"message":"Invalid UUID parameter: 12"}
```