Log in
JSON REST API · Read and write
Skywalk

API for AppFolio® Property Manager

Build anything on your portfolio: a modern JSON REST API over AppFolio®, forty-plus endpoints, read and write, one key.

Skywalk is third-party software, and is not affiliated with AppFolio, Inc.

A property portfolio connected through the API to a dashboard, an automation and a set of records.

API at a glance

The four facts a developer checks before reading anything else.

The API at a glance: records, reads and writes, API keys and webhooks.

Forty-plus endpoints

Portfolio, People, Money, Operations. Every object addressable by ID.

Read and write

Tenant charges, bills, purchase orders and vendors go back into AppFolio®.

Scoped keys

Each key is read, or read plus write. Revoke it from the dashboard any time.

Webhooks

When a refresh finishes, Skywalk can post the data to your system or to a tool like Zapier.

From key to first call

Three steps, no SDK required. Any HTTP client, any language.

Three steps: create a key, page through records, and keep them current with webhooks.
01

Create a key, pick its scope

From your dashboard, once your AppFolio® account is connected. Read only for reporting, read plus write for anything that posts back.

curl https://api.skywalkapi.com/v1/units \
  -H "X-API-Key: eyJhbGciOiJIUzI1NiIs…"
02

Page through any object

Every list is cursor-paginated and every record carries a stable ID, so each occupancy keeps the same record through every renewal.

GET /v1/lease-history?propertyId=1180

{ "meta": { "status": "ok", "count": 100 },
  "links": { "next": "…?cursor=eyJvZmZzZXQiOjEwMH0" },
  "data": [ {
    "leaseUUID": "5f1c2e9a-…",
    "rent": "1795.00",
    "leaseEnd": "07/31/2026" } ] }
03

Keep it current, hand it on

Schedule a job so Skywalk refreshes an endpoint on the interval you choose, or ask for a refresh in a call. Add a webhook and the fresh data is posted to your system or a tool like Zapier when it lands.

curl https://api.skywalkapi.com/v1/units \
  -H "X-API-Key: eyJhbGciOiJIUzI1NiIs…" \
  -H "X-API-NOTIFY-URL: https://you.example/hooks"

POST https://you.example/hooks
{ "meta": { "path": "/v1/units", "status": "ok" },
  "data": [ … ] }

Building with Claude Code or Cursor? Give it api.skywalkapi.com/llms.txt: the endpoints, authentication and polling in one file it can read.

Your portfolio, one schema

Forty-plus endpoints, grouped into four families. Same field names everywhere, same IDs across all of them.

One schema linking properties, people, money and operations.

Portfolio

properties · units · unit-vacancies · unit-photos

People

tenants · lease-history · owners · vendors

Money

general-ledger · tenant-ledger · bills · purchase-orders

Operations

work-orders · rental-applications · showings · attachments

Example endpoints

Clear endpoints for what you need, all well documented.

Read
GET
/v1/propertiesEvery property with its units, owners and addresses.
GET
/v1/unit-vacanciesEvery vacant unit with days on market and last rent.
GET
/v1/lease-historyCurrent and past leases, with tenant and unit IDs.
GET
/v1/general-ledgerFull ledger, filterable by property, account and date.
GET
/v1/work-ordersOpen and closed work orders with vendor and status.
Write
POST
/v1/tenant-chargePost a charge to a tenant ledger.

Write, not just read

Post charges to tenant ledgers from your own code. Turn on writes when you are ready.

Charges and other updates written back to the portfolio from your own code.
POST /v1/tenant-charge

Utility sub-billing, late fees, one-off charges, straight to the tenant ledger.

{ "occupancyId": "44127",
  "amount": "48.20",
  "description": "Water · September 2026" }

Built for production

The parts you only notice when they are missing.

Secure by default

AES-256 at rest, HTTPS only, 2FA, keys you revoke in one click.

Keys with a job

One key per integration, read or read plus write. The log shows which did what.

Stable IDs

A tenant, unit or lease keeps its ID through every move, rename and renewal.

Webhooks

Fresh data posted on to your system, or to Zapier.

Fast and consistent

Cursor pagination, predictable schemas, versioned changes.

Every call logged

Reads and writes, by key, in your dashboard.

Ask instead or have us build it

Not writing code this quarter? The same live data comes two other ways.

Two other ways in: ask an AI assistant, or have Skywalk build it for you.
Not writing code?

Ask instead.

The MCP server gives Claude, ChatGPT or your own agent the same live data, with no key to manage.

See the MCP server
Short on engineers?

Have us build it.

We build on this same API, hand over the source, and stay on only if you want us to.

How consulting works

Your first call, this afternoon

Seven-day free trial. Connect your AppFolio® account, create a key, and read your portfolio in one request.

An API key and a first successful request for a property’s records.