Skip to the content.

TL;DR. Skool has no official API documentation because it has no official API. The complete unofficial documentation is this repo + the Apify-hosted Skool All-in-One API actor. Below: structure, where each topic lives, how to read the actor’s structured responses.

Quick navigation

You want to… Read
Make your first API call in 60 seconds Getting Started
Understand the auth flow (cookies, WAF token) Authentication
See every action and its params Actions reference
Understand structured errors Error handling
Read/write posts and comments Posts & Comments
Manage members (approve, reject, ban, list) Members
Publish courses, folders, pages Classroom
Upload cover images Files
Configure groups + Auto DM Groups
Integrate from AI agents (Claude / GPT / MCP) AI Agents integration

How the actor’s API works

Every Skool operation is a single HTTP POST to one URL:

POST https://api.apify.com/v2/acts/cristiantala~skool-all-in-one-api/run-sync-get-dataset-items?token={APIFY_TOKEN}&build=latest&timeout=90

Body always:

{
  "action": "<namespace>:<operation>",
  "cookies": "<long cookie string from auth:login>",
  "groupSlug": "<your-community-slug>",
  "params": { /* action-specific */ }
}

Response is always one of two shapes:

{ "success": true, "data": { ... } }

or

{ "success": false, "errorCode": "...", "errorCategory": "...", "hint": "...", "retryable": true }

The actor never throws. Every error is a structured payload your code (or AI agent) can branch on.

Action namespaces

Namespace Operations Purpose
auth login Get cookies (every other call needs them)
system health, debug Health checks
posts list, filter, get, create, update, delete, pin, unpin, vote, createComment, getComments Posts + comments
members list, pending, approve, reject, ban, batchApprove Member admin
classroom listCourses, getTree, createCourse, createFolder, createPage, setBody, updateCourse, deleteUnit Courses + folders + pages
files uploadImage Cover image uploads
groups get, setAutoDM Group metadata + Auto DM

Full param tables for each: actions.md.

Response shape — read your way through it

{
  "success": true,
  "data": {
    "posts": [
      {
        "id": "abc123...",
        "title": "...",
        "content": "...",
        "createdAt": "2026-05-19T13:45:00Z",
        "author": {"id": "...", "firstName": "...", "lastName": "..."},
        "commentsCount": 5,
        "labelId": "..."
      }
    ],
    "pagination": {"page": 1, "hasMore": true}
  }
}

For comments specifically, see Posts & Comments — the data model unifies posts and comments as one tree.

Error code catalog (most common)

errorCode Meaning What to do
WAF_EXPIRED Cookies expired (~3.5 days) Re-run auth:login, store new cookies, retry
MISSING_CATEGORY posts:create needs a labelId Call groups:get to list label_options, pass labelId
TITLE_TOO_LONG Course/folder/page title >50 chars Trim title (UTF-16, emojis count as 2)
RATE_LIMIT Skool’s 25/min cap hit Wait 60s, retry. Actor queues automatically.
MEMBER_NOT_FOUND Used id instead of memberId Re-fetch with members:pending, use memberId field
UNDER_MAINTENANCE Apify-side flag (rare, not a real maintenance) Open the actor in Apify console once to reset

Full catalog: error-handling.md.

Idempotency table

Action Safe to retry?
auth:login Yes (returns new cookies each time)
posts:create No — creates a new post
posts:update Yes
posts:delete Yes
posts:createComment No
members:approve Yes
members:batchApprove Yes
classroom:setBody Yes
classroom:updateCourse Yes (read-then-write)
files:uploadImage No — uploads a new copy each call
groups:setAutoDM Yes

If your script can retry on transient errors, lock around the non-idempotent ones with a “have I done this already?” check.

Constraints

Where docs live


Use it in production today

→ Open the Skool All-in-One API actor on Apify

Pay-per-event pricing (~$1.50/mo typical). Read AND write. Structured response contract designed for AI agents.

No Skool community yet? Launch one in 10 minutes — 14-day free trial.