DOCS
Sign in Get started
Getting started

Your first request

Every TryHelper action runs through a single endpoint. Send an action, the groupSlug, and any params. Authenticate with a bearer key from your dashboard.

# Run any action against a connected group
curl -X POST https://tryhelper.co/v1/execute \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "action": "posts:create",
    "groupSlug": "your-community",
    "params": { "title": "Weekly Update", "content": "Great work!" }
  }'
const res = await fetch("https://tryhelper.co/v1/execute", {
  method: "POST",
  headers: {
    Authorization: "Bearer " + process.env.TRYHELPER_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    action: "posts:create",
    groupSlug: "your-community",
    params: { title: "Weekly Update" },
  }),
});
const data = await res.json();
import requests

res = requests.post(
    "https://tryhelper.co/v1/execute",
    headers={"Authorization": f"Bearer {TRYHELPER_KEY}"},
    json={
        "action": "posts:create",
        "groupSlug": "your-community",
        "params": {"title": "Weekly Update"},
    },
)
print(res.json())

Base URL · https://tryhelper.co

Two layers of auth

TryHelper separates your account auth from Skool's session. You authenticate to TryHelper with a bearer key or OAuth; TryHelper holds the Skool session for each connected group and refreshes it for you.

API key (server-to-server)

Pass Authorization: Bearer sk_live_… on every request. Create and revoke keys from the dashboard.

OAuth + MCP (for Claude)

Add the MCP URL to Claude and authorize once with your TryHelper account. Tokens are code-only with PKCE S256 — your Skool password is never exposed. Endpoints: /authorize, /oauth/token, /oauth/register.

One login, reused for days

Connecting logs into Skool once and stores the session cookies (encrypted). Each call carries a groupSlug, so one admin login can operate every community you manage.

1

Connect — POST /v1/groups/connect with the group slug + your Skool admin login. We capture cookies and discard the password unless you enable auto-refresh.

2

Operate — Call any action with that slug — posts, members, classroom, calendar, files. Results come back as a JSON envelope.

3

Refresh — On expiry we re-login automatically (if enabled), or you reconnect in one click. 2FA-protected Skool accounts aren't supported.

Tool reference

35 actions, plus skool_list_groups to list the communities connected to your account. The REST action and the MCP tool name (skool_*) are two faces of the same call.

Posts

Create, read, edit, and moderate posts and comments.

posts:listList posts in a connected Skool group.
posts:getGet a single post (and its comment tree) by its post name/slug.
posts:createCreate a post.
posts:editEdit an existing post by its id.
posts:deleteDelete a post (or a comment — comments are posts) by its id.
posts:upvoteLike (upvote) a post by its id.
posts:unvoteRemove your like (unvote) from a post by its id.
posts:pinPin a post to the top of the group feed (owner/admin only).
posts:unpinUnpin a post from the group feed (owner/admin only).
posts:commentComment on a post, or reply to a comment.

Members

Manage membership, requests, payments, and exports.

members:listList members of a group.
members:approveApprove a pending membership request by its membershipId (member.id from a pending list).
members:removeRemove a member from the group by membershipId (member.id from skool_members_list).
members:banBan a member from the group by membershipId (member.id from skool_members_list).
members:coursesGet a member's classroom course access and progress by membershipId (member.id from skool_members_list) — which courses they can access and whether each is completed.
members:paymentsGet a member's payment/invoice history by membershipId (member.id from skool_members_list).
members:exportExport the group's members as a CSV (email, join date, tier, application answers).

Classroom

Build courses, folders, and lessons.

classroom:listList classroom courses (and their structure) in a group.
classroom:createCourseCreate a classroom course.
classroom:updateCourseUpdate an existing course's settings by its unitId (the course id): title, description, and/or cover image.
classroom:createUnitCreate a folder or page inside a course.
classroom:deleteUnitDelete a classroom unit (course/folder/page) by its id.
classroom:setBodySet a classroom lesson/page's title, body, and optional video by its unitId (the page/module id).

Calendar

List, create, edit, and delete events.

calendar:listList calendar events in a group (returns each event's id, for editing/deleting).
calendar:createCreate a calendar event.
calendar:editEdit a calendar event.
calendar:deleteDelete a calendar event by its eventId.

Messages

Find members and send direct messages.

messages:channelsList your direct-message (chat) channels — each with the other participant and the channel id needed to send.
messages:searchUsersSearch users you can start a DM with, by name.
messages:sendSend a direct message to an existing chat channel.
messages:dmMemberDirect-message a member of a group in one step: opens (or reuses) the DM channel with that member and sends the message.

Video & files

Upload lesson video and embeddable files.

videos:createUploadStart a lesson video upload.
videos:getGet a lesson video's processing status/metadata by videoId.
files:uploadUpload an image/file to the group and get back a public URL to embed (e.g.

Group

Read group metadata, labels, and stats.

group:getGet metadata about one of your connected Skool groups (name, members, post categories/labels, plan, etc.).

REST endpoints

POST /v1/execute Run any action against a connected group
POST /v1/groups/connect Connect a Skool group (captures a session)
POST /v1/api-keys Mint a scoped API key
ALL /mcp MCP server endpoint (Claude & MCP clients)
GET /health Liveness check

Never a hard fail

Actions return 200 with a JSON body — check success first. On failure you get an error message and an errorCode you can branch on.

CodeMeaningRetry
RATE_LIMITToo many calls in the windowYes · back off 60–120s
FORBIDDENAccount isn't an admin of this group, or the group isn't yoursNo
session expiredSkool cookies expired for the groupReconnect or auto-refresh
invalid tokenMissing or invalid API key (401)No
validationMissing or invalid parameters (400)No

Stay under the ceiling

Limits apply per account + group, with stricter ceilings on heavy actions (bans, removals, exports). Both the MCP and REST paths share the same limiter.

reads
higher ceiling — listing, reading posts & members
writes
tighter ceiling — creating, editing, moderating

Exceed a window and you'll get RATE_LIMIT — back off 60–120 seconds and retry. For bulk jobs, queue writes and spread them across minutes.

Get started freeBack to home