Schedule posts, manage approvals, and upload media with the ContentStudio CLI. Run commands in bash and CI pipelines, or let Claude Code, Cursor, or Codex handle them.
npm install -g contentstudio-cliWorks with your ContentStudio API key · npm or pnpm · every command speaks JSON
contentstudio auth:login --api-key cs_••••••••# saves your key locally and verifies itcontentstudio --json accounts:list --platform linkedin{ "ok": true, "data": [ … ] }contentstudio --json posts:create -c "Excited to share our Q2 roadmap" -i <linkedin_id> -t scheduled -s "2026-05-01 09:00:00"{ "ok": true, "data": { … } }The CLI comes with a skill file that teaches your AI agent every ContentStudio command. Paste the setup into your agent, or run it yourself.
Install the CLI and the skill, then log in with your API key.
Set up ContentStudio so I can manage social posts from here. 1. Install the CLI: npm install -g contentstudio-cli 2. Add the skill: npx skills add contentstudioio/contentstudio-agent 3. Ask me for my API key, then run: contentstudio auth:login --api-key <key> 4. Confirm it works: contentstudio workspaces:list
The Agent runs each step in the integrated terminal and, by default, asks before running commands.
Set up ContentStudio so I can manage social posts from here. 1. Install the CLI: npm install -g contentstudio-cli 2. Add the skill for Cursor: npx skills add contentstudioio/contentstudio-agent 3. Ask me for my API key, then run: contentstudio auth:login --api-key <key> 4. Confirm it works: contentstudio workspaces:list
Install the CLI and the skill, then log in with your API key.
Set up ContentStudio so I can manage social posts from here. 1. Install the CLI: npm install -g contentstudio-cli 2. Add the skill for Codex: npx skills add contentstudioio/contentstudio-agent 3. Ask me for my API key, then run: contentstudio auth:login --api-key <key> 4. Confirm it works: contentstudio workspaces:list
OpenClaw installs the ContentStudio skill from ClawHub. Then add the CLI and log in.
openclaw skills install @contentstudio-official/contentstudionpm install -g contentstudio-clicontentstudio auth:login --api-key cs_...Install, log in once, and set your active workspace. You can also authenticate with CONTENTSTUDIO_API_KEY.
npm install -g contentstudio-clicontentstudio auth:login --api-key cs_...contentstudio workspaces:use <workspace_id>Once the skill is in, your agent picks the right commands on its own.
Explore six commands you can use for everyday social media tasks. Select one to see how it works.
# Scheduled post to a Facebook page with one imagecontentstudio --json posts:create -c "Our latest blog post is live!" -i <account_id> -t scheduled -s "2026-05-01 10:00:00" -m https://example.com/hero.jpg{ "ok": true, "data": { … } }# Repeat -i for each accountcontentstudio --json posts:create -c "Cross-platform announcement" -i <facebook_id> -i <linkedin_id> -i <twitter_id> -t scheduled -s "2026-05-01 09:00:00"{ "ok": true, "data": { … } }# Upload a local filecontentstudio --json media:upload --file ./hero.jpg# the response includes an _id you can pass as --media-idcontentstudio --json posts:create -c "Post with library asset" -i <account_id> -t draft --media-id <media_library_id>{ "ok": true, "data": { … } }# Prints the full request body and exits without touching the APIcontentstudio --json posts:create --dry-run -c "Test" -i <account_id> -t scheduled -s "2026-05-01 10:00"contentstudio --json posts:approve <post_id> --comment "LGTM, ship it"{ "ok": true, "data": { … } }# Preview without actingcontentstudio --json posts:approve <post_id> --dry-run# Switch workspace for one command. Your saved default stays the same.contentstudio --json --workspace <other_workspace_id> accounts:list{ "ok": true, "data": [ … ] }Commands are grouped by what they manage. Add --json to get structured output that your scripts and AI agents can read.
| Group | Command | What it does |
|---|---|---|
| auth | auth:login --api-key cs_… | Save and verify your key |
auth:status | Show stored config | |
auth:whoami | Check the key against the API | |
auth:logout | Forget credentials | |
| workspaces | workspaces:list | All workspaces on your account |
workspaces:use <id> | Set the active one | |
workspaces:current | Show the active one | |
| discovery | accounts:list | Connected social accounts |
campaigns:list | Campaigns and folders | |
categories:list | Content categories | |
labels:list | Labels | |
team:list | Team members | |
| posts | posts:list | Filter by status or date |
posts:create | Flags or a JSON body | |
posts:delete <id> | Add --delete-from-social to remove it live | |
posts:approve <id> | Approve with an optional comment | |
posts:reject <id> | Send it back with a reason | |
| comments | comments:list <post_id> | Comments and notes on a post |
comments:add … --note | Internal note, not public | |
comments:add … --mention <id> | Tag a teammate | |
| media | media:list | Filter by type, sort, search |
media:upload --file <path> | Upload a local file | |
media:upload --url <url> | Import from a link |
Global flags: --json --workspace <id> --base-url <url> --version --help. Run contentstudio <command> --help for every option.
Use these scripts as a starting point for common social media workflows. Find the recipe you need, update the account details and content, and run it with the ContentStudio CLI.
Schedule a daily post for the next 7 days.
#!/bin/bashACCOUNT="<facebook_page_id>"CONTENT=( "Monday motivation 💪" "Tuesday tips: keep it simple" "Wednesday wisdom from the team" "Throwback Thursday" "Friday vibes 🎉" "Weekend prep — try this" "Sunday reflections")for i in "${!CONTENT[@]}"; do DATE=$(date -d "+$((i+1)) day 09:00" '+%F %T') contentstudio --json posts:create \ -c "${CONTENT[$i]}" \ -i "$ACCOUNT" \ -t scheduled \ -s "$DATE"doneCross-platform campaign: the same post on multiple platforms.
#!/bin/bashTIME="2026-05-01 10:00:00"FB=$(contentstudio --json accounts:list --platform facebook | jq -r '.data[0]._id')LI=$(contentstudio --json accounts:list --platform linkedin | jq -r '.data[0]._id')TW=$(contentstudio --json accounts:list --platform twitter | jq -r '.data[0]._id')contentstudio --json posts:create \ -c "Big launch today 🚀" \ -i "$FB" -i "$LI" -i "$TW" \ -t scheduled \ -s "$TIME" \ -m https://example.com/launch.jpgUpload a folder of images, one post per image.
#!/bin/bashACCOUNT="<instagram_id>"for img in ./photos/*.jpg; do RESP=$(contentstudio --json media:upload --file "$img") MEDIA_ID=$(echo "$RESP" | jq -r '.data._id') TIME=$(date -d "+1 hour" '+%F %T') contentstudio --json posts:create \ -c "$(basename "$img" .jpg)" \ -i "$ACCOUNT" \ -t scheduled \ -s "$TIME" \ --media-id "$MEDIA_ID" \ --post-type feeddoneBulk-delete drafts older than 30 days.
#!/bin/bashCUTOFF=$(date -d '-30 days' '+%Y-%m-%d')contentstudio --json posts:list --status draft --date-to "$CUTOFF" --per-page 100 \ | jq -r '.data[]._id' \ | while read id; do contentstudio --json posts:delete "$id" doneAuto-approve posts from a trusted creator.
#!/bin/bashTRUSTED_USER_ID="<user_id>"contentstudio --json posts:list --status pending_approval --per-page 50 \ | jq -r --arg u "$TRUSTED_USER_ID" '.data[] | select(.created_by == $u) | ._id' \ | while read id; do contentstudio --json posts:approve "$id" --comment "auto-approved (trusted creator)" doneCreate simple posts with command flags. For platform-specific settings, such as TikTok privacy or YouTube categories, pass a JSON file using --body post.json.
| Platform | Post types | How to set it |
|---|---|---|
| Feed, Reel, Story, Reel + Story | --post-type reel+story | |
| Feed, Reel, Story | --post-type feed | reel | story | |
| Feed with image | Flags | |
| X (Twitter) | Feed with image | Flags |
| YouTube | Videos and Shorts | youtube_options: title, privacy, category, tags, license, made for kids |
| TikTok | Video | tiktok_options: privacy, duet, stitch, comments, disclosure flags |
| Image pins | pinterest_options: title, destination link | |
| Google Business Profile | Events | gmb_options: topic type, dates, title, CTA |
Facebook, Instagram, X, LinkedIn, YouTube, TikTok, Pinterest, Google Business Profile, Threads, and Tumblr. You get a one-time link to open in your browser.
contentstudio --json accounts:connect facebookNo browser needed. Connect with your handle and an app password from bsky.app → Settings → App Passwords.
contentstudio --json accounts:add-bluesky --handle you.bsky.social --app-password xxxx-xxxx-xxxx-xxxxUse an app password, never your main password.
Add a group by name, with an optional cover image.
contentstudio --json accounts:add-facebook-group --name "My Community Group"Each option connects to your ContentStudio account. Choose the one that fits how you want to work.
| CLI (terminal) | MCP server | REST API | |
|---|---|---|---|
| What it's for | Scripts, CI, and coding agents | AI assistants you talk to | Building ContentStudio into your product |
| Sign-in | API key | Your ContentStudio account | API key |
| Strong at | Local uploads, bulk jobs, dry runs | Analytics, inbox, conversation | Custom apps and pipelines |
| Used by | Bash scripts, CI/CD, Claude Code, Cursor, Codex | ChatGPT, Claude, Cursor, Grok, any MCP client | Your own backend |
One account, one set of tools. Pick the agent you already work in, or browse all of them below.
Building something custom? Browse every ContentStudio integration.
Book a 30 min call
Have questions? Schedule a quick call and we will guide you through everything.
Book a free call