Skillshub appfolio-rate-limits

install
source · Clone the upstream repo
git clone https://github.com/ComeOnOliver/skillshub
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/jeremylongshore/claude-code-plugins-plus-skills/appfolio-rate-limits" ~/.claude/skills/comeonoliver-skillshub-appfolio-rate-limits && rm -rf "$T"
manifest: skills/jeremylongshore/claude-code-plugins-plus-skills/appfolio-rate-limits/SKILL.md
source content

appfolio rate limits | sed 's/\b(.)/\u\1/g'

Overview

AppFolio API enforces rate limits per partner. Implement throttling to stay within limits.

Rate Limit Handler

import Bottleneck from "bottleneck";

const limiter = new Bottleneck({
  maxConcurrent: 5,
  minTime: 200,  // 5 requests/second max
});

async function throttledRequest(client: any, path: string) {
  return limiter.schedule(() => client.http.get(path));
}

// 429 retry
async function withRetry(fn: () => Promise<any>, maxRetries = 3) {
  for (let i = 1; i <= maxRetries; i++) {
    try { return await fn(); }
    catch (err: any) {
      if (err.response?.status !== 429 || i === maxRetries) throw err;
      const delay = Math.min(1000 * Math.pow(2, i), 30000);
      await new Promise(r => setTimeout(r, delay));
    }
  }
}

Resources