Skillshub appfolio-webhooks-events
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-webhooks-events" ~/.claude/skills/comeonoliver-skillshub-appfolio-webhooks-events && rm -rf "$T"
manifest:
skills/jeremylongshore/claude-code-plugins-plus-skills/appfolio-webhooks-events/SKILL.mdsource content
appfolio webhooks events | sed 's/\b(.)/\u\1/g'
Overview
AppFolio Stack supports webhooks for lease, payment, and maintenance events.
Webhook Handler
import express from "express"; import crypto from "crypto"; const router = express.Router(); router.post("/webhooks/appfolio", express.raw({ type: "application/json" }), (req, res) => { const signature = req.headers["x-appfolio-signature"] as string; const expected = crypto.createHmac("sha256", process.env.APPFOLIO_WEBHOOK_SECRET!) .update(req.body).digest("hex"); if (!crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected))) { return res.status(401).json({ error: "Invalid signature" }); } const event = JSON.parse(req.body.toString()); console.log(\`Event: \${event.type} — \${JSON.stringify(event.data)}\`); res.status(200).json({ received: true }); });
Event Types
| Event | Trigger | Use Case |
|---|---|---|
| New lease signed | Update CRM |
| Lease ended | Trigger renewal workflow |
| Rent paid | Update accounting |
| Work order filed | Dispatch vendor |