canonical: https://jentic.com/apis/appfolio.com/appfolio

# AppFolio Stack API

The AppFolio Stack API gives property management partners read access to bills, charges, properties, tenants, units, work orders, vendors, bank accounts, and attachments inside an AppFolio account. The 15 endpoints are organised around the core property management resources so partner systems can pull canonical state into accounting tools, owner portals, or maintenance routing services. Authentication is handled by an AppFolio-issued partner credential applied at the platform layer.

## For AI agents

Read AppFolio property management data - bills, charges, tenants, units, work orders, and vendors - so an agent can sync an AppFolio account into an external system.

## Scope

Does not handle tenant portal payments, lease signing, or rent collection workflows - use for reading AppFolio bills, charges, properties, units, tenants, work orders, and vendors only.

## Capabilities

- List bills and fetch a single bill via /bills and `/bills/{billId}`
- List charges raised against tenants via /charges
- Pull the property and unit catalog from /properties and /units
- List tenants and resolve tenant ownership of units
- Read open and closed work orders with /work-orders
- List vendors used for maintenance and service work
- Inspect bank accounts associated with the AppFolio entity

## Use cases

### Property Accounting Sync

Sync AppFolio bills and charges into an external accounting tool by listing /bills with pagination, joining each with /attachments for backing documents, and writing the result into the accounting system. This is the typical pattern for property management firms whose CFO wants AppFolio's operational books mirrored in QuickBooks or Xero for consolidated financial reporting.

Example prompt: List /bills with pagination, fetch attachments for each, and write the bill record plus attachment metadata to the external accounting system

### Maintenance Work Order Routing

Route AppFolio work orders to a third-party maintenance dispatch system by walking /work-orders, joining each with /vendors and /units to enrich the dispatch payload with the property address and assigned vendor. This removes the manual copy from AppFolio's work order screen into the dispatch tool used by on-site maintenance teams.

Example prompt: List /work-orders with status=open, fetch the unit and vendor for each, and POST the enriched work order into the maintenance dispatch tool

### Tenant and Unit Reporting

Generate weekly tenant occupancy and charge reports by listing /tenants, /units, and /charges and joining them on unit ID. The agent assembles a single CSV with occupancy, current charges, and outstanding balance per unit so portfolio managers have one canonical view across the AppFolio account without browsing the UI.

Example prompt: List /units, /tenants, and /charges, join on unit ID, and write a CSV grouped by property with occupancy and outstanding balance

### Agent-Driven Property Data Lookups

Let an AI agent answer property manager questions like 'how many open work orders does 123 Main Street have?' by exposing AppFolio reads through Jentic. The agent searches for the right operation, loads the schema, and executes - without holding the AppFolio partner credential, which controls access to the entire portfolio.

Example prompt: Search Jentic for 'list appfolio work orders', load the GET /work-orders schema, and execute filtered by the property the user named

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | `/bills` | List bills |
| GET | `/bills/{billId}` | Fetch a specific bill |
| GET | `/charges` | List charges |
| GET | `/properties` | List properties |
| GET | `/units` | List units |
| GET | `/tenants` | List tenants |
| GET | `/work-orders` | List work orders |
| GET | `/vendors` | List vendors |

## Key resources

- **Bills** — List bills and fetch individual bill records
- **Charges** — List charges raised against tenants
- **Properties** — List the property catalog for the AppFolio entity
- **Units** — List units within properties and fetch a specific unit
- **Tenants** — List tenants associated with units
- **Work Orders** — List open and closed maintenance work orders
- **Vendors** — List vendors used for maintenance and service
- **Bank Accounts** — List bank accounts configured in AppFolio
- **Attachments** — Fetch documents attached to bills, work orders, and other records

## Why Jentic

- **Setup:** Wiring AppFolio by hand means learning its API-key scheme and mapping its bills, charges, properties, units, tenants, work-orders, and vendors reads yourself. Through Jentic you install once, import the AppFolio Stack API from the API Directory, store the credential once, and your agent calls it.
- **Permission scoping:** AppFolio puts the bill id in the URL path (`/bills/{billId}`) and every operation here is read-only, so a rule can pin your agent to reading a specific bill and its related records. You choose the operations it may call, so the agent only reads the portfolio data you have added and cannot write.
- **Credential handling:** Your AppFolio partner credential is stored once, encrypted, by your own Jentic One instance and injected at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'list AppFolio bills' or 'list open work orders', and Jentic returns the matching bills, work-orders, or charges operation with its input schema so the agent calls the right endpoint without studying the AppFolio resource model up front.

## Related APIs

- **Buildium API** — Buildium is another mid-market property management platform with a broader public API
- **Xero Accounting API** — Xero is the typical downstream accounting system that consumes AppFolio's bills and charges
- **LEXZUR Money API** — LEXZUR Money handles legal-firm finance ops adjacent to property management trust accounting

## FAQ

### What authentication does the AppFolio Stack API use?

An AppFolio-issued partner API credential. The OpenAPI spec does not encode the security scheme inline because authentication is gated at the platform onboarding layer. Through Jentic the credential is stored encrypted in the vault (your Jentic One instance) and never enters agent context.

### Can I list work orders for a specific property?

Yes. GET /work-orders supports filtering and pagination, and joining each result against GET /units and GET /properties resolves the work order to a specific property and unit. Combine with GET /vendors to surface the assigned vendor.

### What are the rate limits for the AppFolio Stack API?

The OpenAPI spec does not publish explicit rate limits. AppFolio applies per-partner throttling configured at onboarding - contact the AppFolio partner team for your account's limits before high-volume sync runs.

### How do I list AppFolio bills through Jentic?

Run pip install jentic, then search 'list appfolio bills'. Jentic returns GET /bills with its input schema - load the schema, populate any pagination, and execute. The agent never sees the partner credential.

### Is this a read-only API?

The exposed endpoints are GET-based across bills, charges, properties, tenants, units, work orders, vendors, bank accounts, and attachments. Use this API to read AppFolio state into external systems; writes back into AppFolio require the partner-platform integration paths outside this spec.

### Can I limit what my agent is allowed to do with the AppFolio Stack API?

Yes. Because you run Jentic One yourself, your own rules decide which operations and credential your agent may use, and every operation here is read-only, so the agent can never write back to AppFolio. You can pin it to specific reads, such as fetching a single bill by its path id (GET `/bills/{billId}`) or listing only /work-orders, /units, or /charges, and leave the rest of the catalog out of reach. The agent only reads the portfolio data you have added, and your partner credential stays with your instance rather than entering the agent's context.
