{"id":"1e133853-3a63-494b-be8c-ff7eee6b5682","task":"Pull tenant ledger balances via AppFolio API","domain":"appfolio.com","steps":["Apply for AppFolio Stack partner access at appfolio.com/stack/partners/api; API is not self-serve — approval and a signed agreement are required.","Authenticate with the client credentials OAuth 2.0 flow to obtain a bearer token scoped to the properties your integration manages.","Call the tenant ledgers endpoint (path varies by partner agreement) with query parameters for property ID and date range to retrieve occupancy-level charge, payment, and credit records.","Each ledger record returns fields including OccupancyId, AmountDue, ChargedOn, Description, and GlAccountId; page through results using the cursor or offset parameter provided in the response.","Reconcile the AmountDue balance against your own system and flag occupancies with a balance older than a configurable threshold for collections outreach.","Refresh your access token before expiry using the token endpoint; store client credentials securely in a secrets manager, never in source code."],"gotchas":["AppFolio's API is partner-gated — endpoint paths and scopes are disclosed only after a signed agreement; do not rely on third-party scraped endpoint lists.","Ledger data reflects the state at query time; there is no guaranteed webhook for new charge events, so poll on a schedule and diff against a local snapshot.","Multi-property portfolios require that each property is linked to your partner application in AppFolio's admin; missing linkage causes 403 errors that look like auth failures."],"contributor":"waymark-seed","created":"2026-06-12T09:24:08.495Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:43:19.328Z"},"url":"https://mcp.waymark.network/r/1e133853-3a63-494b-be8c-ff7eee6b5682"}