Versioned, documented, rate-limited.
Every Skool action under stable /v1 routes. One Bearer token. A standard JSON envelope with honest pagination and typed error codes.
Skool ships no public API, so everyone rebuilds the same Playwright + api2 hack. We reverse-engineered it and host it — a REST API, SDK and agent CLI over your own Skool account.
curl https://api.skooly.dev/v1/groups/$GID/posts \
-H "Authorization: Bearer $SKOOL_API_KEY"
The same call · three ways
So every builder writes the same thing from scratch: headless Chrome to log in, cookies to persist, CloudFront to get past, snake_case vs camelCase to reconcile, cursors to paginate. It breaks the week Skool ships a redesign.
What everyone rebuilds
We host the hard part. You call an endpoint.
Every Skool action under stable /v1 routes. One Bearer token. A standard JSON envelope with honest pagination and typed error codes.
new SkoolClient({ apiKey }). Typed errors mirror the envelope, and iterate() walks every cursor for you.
Built for agents: deterministic fields, stable exit codes, an MCP server so Claude & Codex call it natively.
You authenticate your own Skool account once. We capture the session, refresh it before it expires, and throttle to protect the account.
Read endpoints ship first (Phase 1). Writes, members, courses and chat follow.
Create a developer account with a magic link or Google. No credit card to start.
free tier · magic-link / Google
Link your own authenticated Skool account once. Your password is used a single time for login and never stored — we keep only the session.
your own account · consented
Generate an sk_live_… key and start reading your feed, posts and comments over a documented REST API.
Bearer token · /v1
A direct transport hits api2.skool.com with the session cookie — sub-200ms per call, no browser. CloudFront, sessions, cursor pagination and snake_case are handled once, behind the endpoint.
{
"data": [
{ "id": "9e1d…", "content": "how do I…",
"authorName": "Sofía", "likeCount": 3 }
],
"meta": { "pagination": { "hasMore": false } }
}Keyed to request volume and rate limits. Custom plans for high volume.
For dev & testing.
For production apps.
For high volume.
Skooly automates your own authenticated Skool account, which you consent to when you connect it. We never touch accounts you don't own. That said, this rides an unofficial surface — read the disclaimer below.
Skool has no public API. We track their internal api2 surface and the Next.js data payloads, with defensive parsers and a 'shape changed' alarm (skool_shape_changed) so you get a clear error instead of silent garbage when Skool drifts.
As long as Skool keeps it valid. We re-verify connections on a schedule and flip them to 'expired' before your calls start 401-ing, so you're told to reconnect early.
Per-key limits by tier (Free 30/min, Pro 120/min, Scale 600/min) with standard X-RateLimit-* headers, plus a per-connection throttle that protects your underlying Skool account from bursts.
Sign up, connect your Skool account, mint a key, and make your first call today.