- API Design Principles
- Resource Naming
- URL Structure
- Identifiers
- HTTP Methods and Status Codes
- Standard Operations
- Status Code Patterns
- Query Parameters
- Pagination
- Filtering
- Sorting
- Field Selection and Relations
- Response Formats
- List Responses
- Single Resource Responses
- Create/Update Responses
- Delete Responses
- Property Conventions
- Standard Fields
- Property Naming
- Data Types
- Authentication
- Error Handling
- Idempotency
Conventions
API Design Principles
The Fortress API follows consistent conventions to ensure predictability and ease of use:
- RESTful design - Standard HTTP methods (GET, POST, PUT, PATCH, DELETE)
- Resource-oriented - Clear URL structure around business entities
- Minimal nesting - Paths are nested only for truly hierarchical relationships
- Consistent naming - Predictable patterns across all endpoints
- Idempotent operations - Safe to retry requests using
idempotencyIdfor most of our endpoints
Resource Naming
URL Structure
- Plural resources: Collection endpoints use plural names (e.g.,
/properties,/units,/workOrders) - Singular identifiers: Individual resources accessed via ID (e.g.,
/properties/{propertyId},/units/{unitId}) - Nested resources: Sub-resources nested when they represent true parent-child relationships:
/applications/{applicationId}/customers- Customers belong to applications/applications/{applicationId}/pets- Pets belong to applications/workOrders/{workOrderId}/timeEntries- Time entries belong to work orders
Identifiers
- All resource IDs use UUIDv4 format
- Path parameters follow pattern:
{resourceName}Id(e.g.,{propertyId},{customerId}) - Foreign key properties suffixed with
Id(e.g.,propertyId,householdId)
HTTP Methods and Status Codes
Standard Operations
- GET - Retrieve resource(s) → Returns
200 OK - POST - Create new resource → Returns
201 Created(or200 OKfor some operations) - PUT - Update entire resource → Returns
200 OK - PATCH - Partial update or state change → Returns
200 OKor204 No Content - DELETE - Remove resource → Returns
200 OKwith message
Status Code Patterns
200 OK- Successful operation with response body201 Created- Resource created successfully (POST operations)204 No Content- Successful operation, already in desired state (idempotent state transitions)400 Bad Request- Invalid request parameters or body401 Unauthorized- Missing or invalid API key404 Not Found- Resource does not exist500 Internal Server Error- Server error (safe to retry with sameidempotencyId)
Query Parameters
All list endpoints support the following query parameters:
Pagination
page- Page number (starts at 1, defaults to 1)limit- Items per page (defaults to 100)
Example:
Filtering
filter- FQL (Fortress Query Language) expressions for filtering results
Example:
See the Filtering with FQL page for detailed filtering syntax.
Sorting
sort- Order results by field(s), prefix with-for descending
Examples:
Field Selection and Relations
fields- Select specific fields or include related entities
Examples:
Response Formats
List Responses
List endpoints return arrays directly with pagination metadata in headers:
Single Resource Responses
Individual resource endpoints return the entity object:
Create/Update Responses
Most POST operations return 201 Created with the created resource or a wrapper object:
Delete Responses
DELETE operations return 200 OK with a message:
Property Conventions
Standard Fields
All entities include these common properties:
id(UUID) - Unique identifiercreatedAt(ISO-8601 datetime) - When the record was createdupdatedAt(ISO-8601 datetime) - When the record was last modifieddeletedAt(ISO-8601 datetime, nullable) - Soft delete timestamp
Additional common fields:
readableId(string, nullable) - Human-readable identifieridempotencyId(UUID, nullable) - For idempotent operations
Property Naming
- camelCase - All property names use camelCase (e.g.,
firstName,phoneNumber) - Foreign keys - Suffixed with
Id(e.g.,propertyId,customerId,householdId) - Booleans - Prefixed with
is,has, or similar (e.g.,isActive,hasBalcony,isServiceAnimal) - Dates - Suffixed with
AtorDate:*Atfor timestamps (e.g.,createdAt,deletedAt,offboardedAt)*Datefor dates only (e.g.,moveInDate,birthDate,scheduledDate)
Data Types
- Dates and Times - ISO-8601 format strings, UTC timezone by default
- UUIDs - Standard UUIDv4 format strings
- Enums - ALL_CAPS with underscores (e.g.,
VACANT_READY,OCCUPIED_NO_NOTICE) - Phone Numbers - String format, country codes allowed (e.g.,
"+1234567890") - Amounts - Numeric with decimal precision for currency values
Authentication
All API requests require authentication via the x-api-key header:
The API key automatically maps requests to your organization, ensuring data isolation.
See the Authentication page for more details.
Error Handling
Errors follow RFC 7807 Problem Details format with standard HTTP status codes:
Operations are safe to retry on 5xx errors when using the same idempotencyId.
Idempotency
To ensure safe retries, include an idempotencyId in your request body for create operations:
The same idempotencyId will always produce the same result, preventing duplicate operations.

