Skip to content
cccskills
FreePublished on GitHub

appfolio-common-errors

Diagnose common AppFolio Stack API integration failures, including authentication, portfolio URL, validation, rate-limit, and server errors. Get redacted troubleshooting guidance and bounded recovery steps that help avoid duplicate writes or exposing tenant and lease data.

OriginalShow the original description

Diagnose and fix common AppFolio API integration errors. Trigger: "appfolio error".

Run score Not tested

See how to install

Good for

  • Diagnosing a tenant lookup that returns 404
  • Handling API authentication or rate-limit errors
  • Investigating lease conflicts and validation failures
  • Recovering safely from partial batch writes

Files included (1)

  • SKILL.md7.1 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

AppFolio Common Errors

Overview

AppFolio's Stack API powers property management integrations for tenant screening, work orders, lease management, and accounting. Each portfolio operates under its own subdomain ({company}.appfolio.com), meaning a single integration may need to handle multiple base URLs. Errors commonly stem from authentication misconfiguration, incorrect base URLs per portfolio, and business logic violations like duplicate tenant records or conflicting lease dates. Tenant lookup failures (404) are the most frequent issue, typically caused by targeting the wrong portfolio subdomain. This reference covers HTTP-level failures, property-management-specific validation errors, and recovery patterns for the most frequently encountered issues.

Prerequisites

  • A redacted incident record containing the portfolio identifier, endpoint, status code, request correlation ID, and time window; never copy tenant or lease payloads into a shared ticket.
  • Access to the correct sandbox or production portfolio endpoint and a credential owner who can rotate or validate credentials without exposing them in logs or command arguments.
  • A bounded retry policy, an idempotency mechanism for writes, and a known operator escalation path for uncertain tenant, lease, or work-order state.

Instructions

  1. Classify the response by authentication, rate-limit, validation, or server failure and preserve only the redacted diagnostic fields.
  2. Verify the portfolio base URL before changing credentials or retrying a 404; a valid tenant ID in another portfolio is not evidence of absence.
  3. For 409 or partial write failures, query the canonical record and use the operation’s idempotency key or operator review before issuing another write.
  4. Honor Retry-After for 429 and stop after the configured retry budget; pause the batch on 5xx or unknown write outcomes.

Error Reference

CodeMessageCauseFix
401UnauthorizedInvalid or rotated client_id/secret pairRegenerate credentials in AppFolio Stack partner portal
403ForbiddenAccount not approved as Stack partnerComplete partner application at appfolio.com/stack
404Tenant not foundWrong portfolio base URL or deleted tenantVerify base URL is {company}.appfolio.com/api/v1
409Lease conflictOverlapping lease dates for same unitCheck existing leases on unit before creating new one
422Validation failedMissing required fields on work order or tenantInclude all required fields: unit_id, description, priority
429Too Many RequestsExceeded 120 requests/minute limitImplement exponential backoff starting at 1s delay
500Internal Server ErrorAppFolio platform issueRetry after 30s; check status.appfolio.com
503Service UnavailableMaintenance window (typically weekends)Retry with backoff; subscribe to maintenance calendar

Error Handler

interface AppFolioError {
  code: number;
  message: string;
  category: "auth" | "rate_limit" | "validation" | "server";
}

function classifyAppFolioError(status: number, body: string): AppFolioError {
  if (status === 401 || status === 403) {
    return { code: status, message: body, category: "auth" };
  }
  if (status === 429) {
    return { code: 429, message: "Rate limit exceeded", category: "rate_limit" };
  }
  if (status === 404 || status === 409 || status === 422) {
    return { code: status, message: body, category: "validation" };
  }
  return { code: status, message: body, category: "server" };
}

Debugging Guide

Authentication Errors

AppFolio uses HTTP Basic Auth with client_id:client_secret. Verify credentials are not URL-encoded. Each portfolio has its own base URL -- confirm you are targeting the correct {company}.appfolio.com subdomain. Credentials rotate on partner approval changes.

Rate Limit Errors

The Stack API enforces 120 requests/minute per API key. Batch tenant lookups instead of individual calls. Use Retry-After header value when present. Bulk endpoints (e.g., /properties?page=1&per_page=100) reduce call count significantly. Rate limits are per-key, not per-portfolio, so multi-portfolio integrations share the same budget.

Validation Errors

Work order creation requires unit_id, description, and priority. Tenant creation requires first_name, last_name, and email. Lease creation fails with 409 if dates overlap an existing active lease on the same unit -- query current leases first. Move-in and move-out dates must be valid ISO 8601 format. Unit IDs are portfolio-specific and cannot be reused across subdomains.

Error Handling

ScenarioPatternRecovery
Tenant lookup returns 404Search by email before creatingUse /tenants?email= endpoint
Work order 422Missing priority fieldDefault to normal if unspecified
Lease date conflictOverlapping active leaseEnd existing lease before creating new
Bulk import partial failureSome records rejectedParse error array, retry failed records only
Auth token expired mid-batch401 on subsequent callsRe-authenticate and resume from last offset

Quick Diagnostic

# Verify API connectivity without placing Basic Auth credentials in argv.
NETRC_FILE="$(mktemp)"
trap 'rm -f "$NETRC_FILE"' EXIT
chmod 600 "$NETRC_FILE"
APPFOLIO_HOST="${APPFOLIO_BASE_URL#https://}"
printf 'machine %s login %s password %s\n' "$APPFOLIO_HOST" \
  "$APPFOLIO_CLIENT_ID" "$APPFOLIO_CLIENT_SECRET" > "$NETRC_FILE"
curl -s -o /dev/null -w "%{http_code}" --netrc-file "$NETRC_FILE" \
  "${APPFOLIO_BASE_URL}/api/v1/properties"

Output

  • A redacted classification of the failure and the verified portfolio context
  • A bounded recovery decision: correct configuration, delay/retry, reconcile, rotate through the credential owner, or escalate an unknown write result
  • An incident receipt that identifies the affected batch without retaining tenant, lease, or credential data

Examples

When a work-order import receives 429, stop dispatching new records, retain the batch cursor and idempotency keys, and wait for the server-provided retry window before resuming at the same record. For a 409 lease conflict, query the unit’s current lease through the correct portfolio and route the result to an authorized operator rather than ending or replacing a lease automatically. If the follow-up read is unavailable or the outcome of a prior write is unknown, quarantine that record and continue only with unrelated safe work.

Resources

Next Steps

See appfolio-debug-bundle.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Add a synthetic-data CI gate for customer-owned Abridge integration code. Test consent handling, note-review handoffs, redaction, and rollback behavior with mocked vendor boundaries, without connecting CI to a live Abridge or EHR tenant.

  • Adding regression checks to an Abridge integration repository
  • Testing consent and note-release handling
  • Checking logs for sensitive data exposure
jeremylongshore/tons-of-skills-marketplace2.9KUpdated Oct 23, 2026

Triage Abridge recording, note review, Epic handoff, and access problems using observed symptoms and approved guidance. Identify the affected workflow stage, organize a minimal timeline, and prepare a redacted escalation record for the responsible team.

  • Separate recording problems from upload failures
  • Investigate note creation delays and editor issues
  • Identify the responsible team for Epic handoff failures
jeremylongshore/tons-of-skills-marketplace2.9KUpdated Oct 23, 2026

Map and review an Abridge clinical documentation workflow from consent and recording through draft review, evidence checks, edits, and final disposition. Keep clinician approval explicit, identify failure exits, and separate verified facts from tenant-specific details and pending approvals.

  • Map a clinical note workflow for a care setting
  • Check where consent and patient identity are verified
  • Review draft notes against linked evidence before sign-off
jeremylongshore/tons-of-skills-marketplace2.9KUpdated Oct 23, 2026

Audit how clinician-reviewed Abridge note sections map into Epic templates and downstream workflows. Use approved test records to document destinations, exceptions, evidence, rollback steps, and a go or no-go decision for a specific environment.

  • Checking Abridge note section mappings to Epic templates
  • Auditing a department’s approved documentation handoff
  • Preparing test evidence and a go or no-go decision
jeremylongshore/tons-of-skills-marketplace2.9KUpdated Oct 23, 2026

Review Abridge adoption and workflow value using local usage records, clinician feedback, and verified contract costs. Build an evidence based decision table covering adoption, quality, support burden, and options to expand, hold, or improve the rollout.

  • Reviewing adoption after an Abridge rollout
  • Preparing evidence for a renewal decision
  • Comparing workflow outcomes across care settings
jeremylongshore/tons-of-skills-marketplace2.9KUpdated Oct 23, 2026

Prepare a bounded support bundle for an Abridge issue using allowlisted operational details such as versions, coarse timestamps, and correlation references. Exclude recordings, transcripts, patient identifiers, credentials, and unrestricted logs, then document redactions and review details.

  • Preparing reviewed evidence for an Abridge support case
  • Documenting redactions and excluded data
  • Collecting approved operational details for an incident
jeremylongshore/tons-of-skills-marketplace2.9KUpdated Oct 23, 2026

See all skills by jeremylongshore

Report a problem with this skill