Skills Development Configure AppFolio API Authentication

Configure AppFolio API Authentication

v20260423
appfolio-install-auth
This guide details how to configure and authenticate access to the AppFolio Stack API. It utilizes OAuth 2.0 and Basic Authentication credentials (Client ID/Secret) provided through the partner program. It is essential for developers building property management integrations, allowing secure, programmatic access to core data like properties, units, tenants, and leases.
Get Skill
362 downloads
Overview

AppFolio Install & Auth

Overview

Configure AppFolio Stack API authentication. AppFolio uses HTTP Basic Auth with a client ID and client secret, provided through their Stack partner program. No public npm SDK exists — use direct REST API calls.

Prerequisites

  • AppFolio Stack partner account (appfolio.com/stack)
  • Client ID and Client Secret from AppFolio
  • Node.js 18+ or Python 3.10+

Instructions

Step 1: Obtain API Credentials

# AppFolio Stack API credentials come from the partner program
# 1. Apply at appfolio.com/stack/become-a-partner
# 2. Complete integration review
# 3. Receive client_id and client_secret

cat > .env << 'ENVFILE'
APPFOLIO_CLIENT_ID=your-client-id
APPFOLIO_CLIENT_SECRET=your-client-secret
APPFOLIO_BASE_URL=https://your-company.appfolio.com/api/v1
ENVFILE

chmod 600 .env
echo ".env" >> .gitignore

Step 2: Create API Client

// src/appfolio-client.ts
import axios, { AxiosInstance } from 'axios';

class AppFolioClient {
  private api: AxiosInstance;

  constructor() {
    this.api = axios.create({
      baseURL: process.env.APPFOLIO_BASE_URL,
      auth: {
        username: process.env.APPFOLIO_CLIENT_ID!,
        password: process.env.APPFOLIO_CLIENT_SECRET!,
      },
      headers: { 'Content-Type': 'application/json' },
      timeout: 30000,
    });
  }

  async verifyConnection(): Promise<boolean> {
    try {
      const response = await this.api.get('/properties');
      console.log(`Connected! Found ${response.data.length} properties`);
      return true;
    } catch (error: any) {
      console.error(`Connection failed: ${error.response?.status} ${error.message}`);
      return false;
    }
  }

  get http(): AxiosInstance { return this.api; }
}

export { AppFolioClient };

Step 3: Verify Connection

# Quick curl test
curl -u "${APPFOLIO_CLIENT_ID}:${APPFOLIO_CLIENT_SECRET}" \
  "${APPFOLIO_BASE_URL}/properties" | jq '.[0]'

API Endpoints

Resource Endpoint Methods
Properties /api/v1/properties GET
Units /api/v1/units GET
Tenants /api/v1/tenants GET
Leases /api/v1/leases GET, POST
Bills /api/v1/bills GET, POST
Vendors /api/v1/vendors GET
Owners /api/v1/owners GET
Reports /api/v1/reports GET

Output

  • API credentials configured in .env
  • TypeScript REST client with Basic Auth
  • Verified connectivity to AppFolio API

Error Handling

Error Cause Solution
401 Unauthorized Invalid credentials Verify client_id/secret from AppFolio
403 Forbidden Not a Stack partner Complete partner application
404 Not Found Wrong base URL Use your-company.appfolio.com format
Timeout Network issue Check firewall allows HTTPS to appfolio.com

Resources

Next Steps

Proceed to appfolio-hello-world for your first property query.

Info
Category Development
Name appfolio-install-auth
Version v20260423
Size 3.72KB
Updated At 2026-04-28
Language