circle-so
CLI toolkit for managing Circle.so communities at scale.
Built on top of circle-so-python-sdk.
Installation
pip install circle-so
Quick Start
export CIRCLE_API_TOKEN="your_token"
# Spaces
circle-so spaces list --prefix kcna
circle-so spaces search "KCNA 048"
circle-so spaces lock --prefix kcna
circle-so spaces rename 1761784 --name "KCNA 072" --slug "kcna-072"
# Members
circle-so members import learners.csv
circle-so members audit --prefix kcna --cache
circle-so members add learners.csv --space "KCNA 048"
circle-so members fix-missing --dry-run
circle-so members move --from "KCNA 046" --to "KCNA 073" --max 100
# Moderators
circle-so moderators verify moderators.csv
circle-so moderators add moderators.csv
# Reports
circle-so report counts --prefix kcna
circle-so report inactive
circle-so report missing
circle-so report export moves
# Posts and comments
circle-so posts create --space 1761803 --title "Hello" --body "World"
circle-so posts create --space 1761803 --title "Hello" --body-file post.txt
circle-so posts update 34771554 --title "New Title"
circle-so posts comment 34771554 "Nice post!"
circle-so posts comments 34771554
circle-so posts delete-comment 110399141
# Events (must target an event-type space -- see `events list` without --space)
circle-so events list
circle-so events list --space 2793409
circle-so events create --space 2793409 --name "Expert Session" --starts-at 2026-08-13T15:00:00Z --duration-minutes 60 --url https://meet.google.com/xxx-xxxx-xxx --host "Jane Doe" --cover-image flyer.png
circle-so events update 35393641 --space 2793409 --name "New Title" --cover-image flyer.png
circle-so events delete 35393641 --space 2793409
circle-so events rsvp 35393641 learner@example.com
circle-so events attendees 35393641
circle-so events unrsvp 35393641 learner@example.com
Note:
events create --draftis confirmed to work against the live API (the event is created and fetchable by id), but draft events never show up inevents list-- Circle'slist_eventssilently drops them regardless of any status filter. Track ids yourself if you need to find a draft again. See circle-so-python-sdk's limitations doc for detail, including the endpoint coverage breakdown (every documented Admin V2 events route is implemented; recurring/paywall/attendee-invite fields work via generic passthrough with no typed validation).
# Member tags
circle-so tags list
circle-so tags create "KCNA Mentor 2026"
circle-so tags add 14357 mentor@example.com
circle-so tags members 14357
circle-so tags remove 14357 mentor@example.com
circle-so tags delete 14357
# Courses (sections, lessons, progress)
circle-so courses sections list --space 1379864
circle-so courses sections create --name "Module 1" --space 1379864
circle-so courses lessons list --section 324454
circle-so courses lessons create --name "Lesson 1" --section 324454
circle-so courses progress 1198265 learner@example.com --status completed
# Access groups (permission groups)
circle-so access-groups list
circle-so access-groups create "Program Assistants" --description "Assistant moderators"
circle-so access-groups add 1 assistant@example.com
circle-so access-groups members 1
circle-so access-groups member-groups 42
# Forms, segments, invites, leaderboard, flagged content, live rooms
circle-so misc forms-list
circle-so misc segments-list
circle-so misc segments-create --title "Active Mentors"
circle-so misc invites-list
circle-so misc leaderboard
circle-so misc flagged-list
circle-so misc flagged-report --content-id 123 --content-type post --reason spam
circle-so misc live-rooms-list
Note:
tags membersfetches Circle's unfiltered global tagged-members feed and filters client-side using each record's ownmember_tag_id-- Circle'smember_tag_idquery parameter is silently ignored server-side (confirmed via direct API test). See circle-so-python-sdk's limitations doc.
Note:
misc leaderboardrequires Gamification to be enabled for the community -- it returns anAuthenticationErrorotherwise, even with a valid admin token. Not a bug in this CLI; verified against a real community.
Note: Circle's comment API is plain-text only and strips all newlines with no replacement -- the SDK auto-flattens multi-line/markdown comment bodies into a single line so nothing gets jammed together. See circle-so-python-sdk's limitations doc for detail. There's also no comment-edit endpoint; use
delete-comment+commentto "edit."
Configuration
Set via environment variables or .env file:
CIRCLE_API_TOKEN=your_token
CIRCLE_COMMUNITY_URL=https://your-community.circle.so
CIRCLE_SO_DB=./circle-so.db
CIRCLE_SO_DATA_DIR=~/Documents/Example-Community-Data
Token Types
Different commands require different tokens:
| Commands | Token needed | Source |
|---|---|---|
spaces, members, moderators, report, posts, events, tags, courses, access-groups, misc |
Admin API token | Circle Admin > Settings > API |
chat (list, read, send, unread) |
Headless Auth token | Circle Admin > Developers > Headless Auth |
The chat commands also require your Circle email via --email or CIRCLE_USER_EMAIL:
export CIRCLE_API_TOKEN="your_headless_token"
export CIRCLE_USER_EMAIL="you@example.com"
circle-so chat list
circle-so chat unread
circle-so chat read <uuid>
circle-so chat send <uuid> "Your message"
The headless token generates a short-lived Bearer access token for your account, giving access to your DMs, notifications, and posts as yourself.
License
MIT
Metadata
Release files for circle-so-cli 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| circle_so_cli-0.4.0.tar.gz | 28.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| circle_so_cli-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 52.9 kB
Release files / circle_so_cli-0.4.0.tar.gz
| Download URL | circle_so_cli-0.4.0.tar.gz |
|---|---|
| Size | 28.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e8bec158d9b1dd304c853ff43fe5c2d44170cfa872afce2865a3bef3e18fc41f
|
|
BLAKE2b-256 checksum How to use checksums |
83f5b94f45a3fa5df046b2a506d8461640e6ceb36b5fa7521936ae8d613aecb0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / circle_so_cli-0.4.0-py3-none-any.whl
| Download URL | circle_so_cli-0.4.0-py3-none-any.whl |
|---|---|
| Size | 24.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
162c4f3aae61c179881a714724f7362cb8cdeaf3dfeb4440440ad9b0333a1764
|
|
BLAKE2b-256 checksum How to use checksums |
e16e21cd317fee9df246413100e9e2d74ad5c513b3d9d119330393775c58ab65
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|