Statement Layouts
Customizing owner statement layouts, sections, columns, and visibility
Statement Layouts
Overview
Statement layouts are templates that control how owner statements appear. They define:
- Which sections appear on the statement
- What data columns display in each section
- Who can see each section (owner vs manager)
- How totals are calculated and presented
Create different layouts for different needs - detailed statements for some properties, summary views for others.
Key Concepts
Layout Structure
A layout consists of three main parts:
| Part | Description |
|---|---|
netRevenueSections | Revenue, fees, and income breakdown |
otherSections | Additional custom sections |
systemSections | Auto-generated sections (read-only) |
Summary Types
| Type | Description |
|---|---|
default | Standard statement format |
invoice | Invoice-style presentation |
Sections
Each section has:
- Name: Section header displayed on statement
- Columns: Data points shown in the section
- Visibility: Who can see this section
- Locked: Whether the section can be modified
Column Types
Columns define what data appears in each section:
| Type | Description | Value Format |
|---|---|---|
field | Specific data field | Field name string |
accounts | Sum of account balances | Array of account IDs |
subTotal | Running subtotal | Calculation reference |
formula.percentage | Percentage calculation | Formula expression |
formula.currency | Currency calculation | Formula expression |
Visibility Settings
Control who sees each section and column:
| Setting | Description |
|---|---|
all | Visible to everyone |
manager | Only property manager sees this |
owner | Only property owner sees this |
none | Hidden from everyone |
Use cases:
- Hide internal notes from owners with
manager - Show owner-specific messages with
owner - Disable sections temporarily with
none
Linked Accounts
The linkedAccounts array shows all accounts referenced in the layout. This determines which account data is pulled into statements using this layout.
Active Listings
Assign layouts to specific listings via activeListingIds. When generating a statement for a listing, the system uses its assigned layout (or the default layout if none assigned).
Default Layout
One layout can be marked as isDefault: true. This layout is used for listings that don't have a specific layout assigned.
Locking Behavior
Layouts become locked when any owner statement uses them:
| Condition | Effect |
|---|---|
| Layout has attached statements | Cannot modify sections or columns |
| Layout has attached statements | Cannot delete the layout |
The issues array indicates lock status:
{
"issues": [
{
"code": "locked",
"severity": "warning",
"context": {
"attachedStatementCount": 5
}
}
]
}To modify a locked layout: Create a new layout with your changes and assign it to listings going forward.
Common Scenarios
Creating a Basic Layout
POST /statement-layouts
{
"name": "Standard Owner Statement",
"summaryType": "default",
"isDefault": true,
"netRevenueSections": [
{
"name": "Rental Revenue",
"visible": "all",
"columns": [
{
"name": "Rental Income",
"type": "accounts",
"value": ["account-rent", "account-cleaning-income"]
}
]
},
{
"name": "Management Fees",
"visible": "all",
"columns": [
{
"name": "Management Fee (20%)",
"type": "accounts",
"value": ["account-mgmt-fee"]
}
]
}
],
"otherSections": [
{
"name": "Property Expenses",
"visible": "all",
"columns": [
{
"name": "Repairs",
"type": "accounts",
"value": ["account-repairs"]
},
{
"name": "Utilities",
"type": "accounts",
"value": ["account-utilities"]
}
]
}
]
}Creating a Detailed Layout with Manager-Only Section
POST /statement-layouts
{
"name": "Detailed Statement with Internal Notes",
"summaryType": "default",
"netRevenueSections": [
{
"name": "Revenue Breakdown",
"visible": "all",
"columns": [
{
"name": "Accommodation",
"type": "accounts",
"value": ["account-rent"]
},
{
"name": "Cleaning Fees",
"type": "accounts",
"value": ["account-cleaning"]
},
{
"name": "Other Fees",
"type": "accounts",
"value": ["account-other-fees"]
}
]
},
{
"name": "Internal Commission Tracking",
"visible": "manager",
"columns": [
{
"name": "Gross Commission",
"type": "accounts",
"value": ["account-commission-gross"]
},
{
"name": "Agent Split",
"type": "accounts",
"value": ["account-agent-split"]
}
]
}
],
"otherSections": []
}Assigning Layout to Listings
PUT /statement-layouts/layout-123
{
"activeListingIds": ["listing-abc", "listing-def", "listing-ghi"]
}Updating a Layout
PUT /statement-layouts/layout-123
{
"name": "Updated Layout Name",
"summaryType": "invoice"
}API Endpoints
| Method | Endpoint | Description |
|---|---|---|
GET | /statement-layouts | List all layouts |
GET | /statement-layouts/{id} | Get layout details |
POST | /statement-layouts | Create a layout |
PUT | /statement-layouts/{id} | Update a layout |
DELETE | /statement-layouts/{id} | Delete a layout |
Response Structure
{
"id": "layout-123",
"name": "Standard Owner Statement",
"summaryType": "default",
"isDefault": true,
"createdAt": "2024-01-15T10:30:00Z",
"netRevenueSections": [
{
"id": "section-1",
"name": "Rental Revenue",
"visible": "all",
"locked": false,
"columns": [
{
"id": "col-1",
"name": "Rental Income",
"type": "accounts",
"value": ["account-rent"],
"visible": "all",
"locked": false
}
]
}
],
"otherSections": [],
"systemSections": [
{
"id": "system-summary",
"name": "Summary",
"visible": "all",
"locked": true,
"columns": [
{
"id": "sys-col-1",
"name": "Net Income",
"type": "field",
"value": "netIncome",
"visible": "all",
"locked": true
}
]
}
],
"activeListings": [
{"id": "listing-abc", "name": "Beach House"},
{"id": "listing-def", "name": "Mountain Cabin"}
],
"linkedAccounts": [
{"id": "account-rent", "name": "Rental Income", "uniqueRef": null, "status": "active"},
{"id": "account-mgmt-fee", "name": "Management Fee", "uniqueRef": null, "status": "active"}
],
"issues": []
}Locking Rules
Statement layouts are subject to locking:
| Condition | Blocked Operations |
|---|---|
| Has attached statements | Cannot modify sections or columns |
| Has attached statements | Cannot delete |
| Is default layout | Cannot delete (must set another as default first) |
Related Topics
- Owner Statements - Generating statements with layouts
- Accounts - Accounts referenced in columns
- Listings - Assigning layouts to properties
- Locking - Modification restrictions
