AI Agents CLI
If your agent has a shell, it can post
Goose, OpenCode, Cline, Amp and plain shell scripts all run commands. One curl call to the BuzzTake API posts, replies or reads, and the JSON answer says what happened.
- Base URL
https://api.buzztake.com- Auth
Authorization: Bearer btk1_...- One route
POST /v1/accounts/{id}/actions- Safe retries
Idempotency-Key
What an agent with a shell can do in your social accounts
BuzzTake has no CLI to install. The REST API is the command line: POST /v1/accounts/{id}/actions with a type runs any action, and wait returns the finished action in the same answer, for up to 120 seconds.
The answer is JSON. status is succeeded, failed or needs_input, result holds the link or the posts read, and error.code names what went wrong. With curl --fail-with-body, an HTTP error also ends with a non-zero exit code.
An Idempotency-Key header makes a retry safe: the same key on the same account answers with the first action instead of posting twice, and says so in Idempotent-Replayed: true.
It works on Mastodon, X, LinkedIn, Bluesky and Telegram, and on every other platform BuzzTake connects. Each action is one tool, named as in the actions reference.
Jobs for an agent with a shell
Say it in plain words. These are prompts that work, and the calls they make.
Post from a deploy script
The last step of a deploy posts the version note and fails the job if the post failed.
curl -fsS --fail-with-body https://api.buzztake.com/v1/accounts/$ACCOUNT_ID/actions \ -H "Authorization: Bearer $BUZZTAKE_API_KEY" -H "Idempotency-Key: deploy-$GIT_SHA" \ -d '{"type": "post", "text": "Version 2.4 is live.", "wait": 60}' | jq -e '.status == "succeeded"'1 × post10 credits ($0.10)Read the notifications into a file
A cron line keeps a day's notifications as JSON lines for the agent to read later.
curl -fsS https://api.buzztake.com/v1/accounts/$ACCOUNT_ID/actions -H "Authorization: Bearer $BUZZTAKE_API_KEY" \ -d '{"type": "read_notifications", "limit": 50, "wait": 60}' | jq -c '.result' >> notifications.jsonl1 × read_notifications4 credits ($0.04)The same post from many accounts
The workspace route runs one action on 1 to 100 accounts, all or nothing.
curl -fsS https://api.buzztake.com/v1/workspaces/$WORKSPACE_ID/actions -H "Authorization: Bearer $BUZZTAKE_API_KEY" \ -d '{"type": "post", "account_ids": ["0199...", "0199...", "0199...", "0199..."], "text": "We are live.", "wait": 60}'4 × post40 credits ($0.40)Check the balance before a batch
GET /v1/creditsreturns the balance and the low-balance mark, free, so a script can stop before a batch it cannot pay for.curl -fsS https://api.buzztake.com/v1/credits -H "Authorization: Bearer $BUZZTAKE_API_KEY" | jq .balanceNo charge
Set up an agent with a shell
Make a key, find the account ids, run an action. Every call below works the same from a script or from an agent's shell.
Make a key
Under Developers in the app, make a key with only the permissions the script needs, and keep it in an environment variable, out of version control.
Shell export BUZZTAKE_API_KEY="btk1_..." export WORKSPACE_ID="0199..."Find the account ids
List the accounts of the workspace. Each has an
id, aplatformand astatus.GET /v1/workspaces/{id}/accounts curl https://api.buzztake.com/v1/workspaces/$WORKSPACE_ID/accounts \ -H "Authorization: Bearer $BUZZTAKE_API_KEY"Run an action
Send the
typeand its parameters, andwaitfor the result.POST /v1/accounts/{id}/actions curl https://api.buzztake.com/v1/accounts/$ACCOUNT_ID/actions \ -H "Authorization: Bearer $BUZZTAKE_API_KEY" \ -H "Content-Type: application/json" \ -d '{"type": "post", "text": "Version 2.4 is out.", "wait": 60}'Tell your agent
Put a short rule in the agent's instructions file, such as
AGENTS.md.AGENTS.md To act in a social account, run: curl -fsS --fail-with-body https://api.buzztake.com/v1/accounts/<id>/actions -H "Authorization: Bearer $BUZZTAKE_API_KEY" -d '{"type": "<action>", ..., "wait": 60}' Show me the text before any post, reply or message.
Ways to connect an agent with a shell
The routes that reach BuzzTake from an agent with a shell, and how well each one fits.
- REST APIBest fit
One call, one JSON answer, one exit code. There is no session to keep and no protocol to speak.
- Remote MCP, OAuth sign-inWorks
Most agents with a shell also take MCP servers: Goose in
~/.config/goose/config.yamlunderextensionswithtype: streamable_http, OpenCode inopencode.jsonundermcpwithtype: remote, Cline incline_mcp_settings.jsonwithtype: streamableHttp, Amp underamp.mcpServers, and Devin Desktop inmcp_config.json.- Local stdio bridgeWorks
For a client that starts only local servers,
npx -y mcp-remote https://mcp.buzztake.com/mcpforwards stdio to the remote server.
What it costs
BuzzTake charges in prepaid credits for the actions it runs. One credit is one US cent.
| Job | Credits | USD |
|---|---|---|
| Post from a deploy script | 10 | $0.10 |
| Read the notifications into a file | 4 | $0.04 |
| The same post from many accounts | 40 | $0.40 |
| Check the balance before a batch | 0 | $0.00 |
A post, a quote or a message is 10 credits, a reply 8, a like or a follow 3, and a read or a search 4. A planned post costs nothing until it goes out. Reads are charged when they succeed, and a write that fails before the page changes is refunded.
Your agent's model use is billed by its own vendor, not by BuzzTake. Every price is on the pricing page, and the rules are in Credits.
Approvals and safety
A person can approve before anything goes out, and every action is recorded.
A script has no one to ask, so give its key only what the job needs. A key with inbox_read reads; a key with content_write and no content_publish plans drafts that a reviewer approves in BuzzTake.
Agents that run commands ask before a shell command by default, until you allow it. Keep curl calls that post on ask.
- Ask for drafts when a person must check first.
create_contentputs the post on the calendar,submit_for_reviewsends it to a reviewer, and it goes out only after the approval. - Give the agent an API key without the
content_publishpermission. It can then plan drafts and send them for review, and it cannot post by itself. - BuzzTake records every action: who asked, through which key, on which account, what the page returned and what it cost.
- A sign-in step that BuzzTake cannot finish, such as a 2FA code, becomes a challenge. The agent asks you for the code, or gives you a link to a live browser where you answer it.
- Only an owner or an administrator can allow an OAuth client. Disconnect it under Developers in the app, and its token stops working.
More in Approvals and Reports and audit.
Limits
- Aider has no MCP, and with
--yes-alwaysit declines the shell commands it suggests. In Aider, run the curl yourself with/run. waitis 0 to 120 seconds. A longer action answers 202 with its id;GET /v1/actions/{id}?wait=30follows it.- An action the balance cannot pay is refused with 402 at once, and nothing is queued.
- An action tool waits up to 120 seconds for its result. A longer action comes back with its id, and
get_actionfollows it to the end. - The MCP server runs up to 8 requests at a time for one key or sign-in. Above that it answers 429 with
Retry-After, and the client tries again. - One organization connects up to 200 accounts.
- The platforms set their own pace. When one asks an account to slow down, the action ends with
rate_limited, and a write that failed before the page changed is refunded.
Troubleshooting
Every error code and its fix is in Errors and challenges.
- curl exits with 22
- The API answered with an error status. With
--fail-with-bodythe problem JSON is printed: itscodenames the cause. - The answer is 202 with
status: running - The action took longer than
wait. PollGET /v1/actions/{id}?wait=30until it leavesrunning. - A retry posted twice
- Send the same
Idempotency-Keyon every try of one post. A new key is a new action. - The client says the server refused the token (401)
- The sign-in expired or was revoked, or the API key is wrong. Sign in again from the client, or make a new key under Developers.
- An action stops at
needs_input - The platform asked for a code. Give the code to the agent so it calls
answer_challenge, or open the challenge'ssign_in_urland answer in the live browser. - The answer is
insufficient_credits - The balance is lower than the price, and nothing was queued. A post needs 10 credits. Top up, then ask again.
- The answer is
unsupported - The platform has no such action. The error lists the actions it has, and the generic
browseraction can do the rest step by step. - An account shows
signed_out - Its session ended and no stored password could sign it in again. Ask the agent for a sign-in link with
get_sign_in_linkand open it, or reconnect the account in the app.
AI Agents CLI questions
- Is there a BuzzTake CLI to install?
- No. The REST API is small enough to call with curl: one route runs every action, and the answer is JSON with a status and an error code.
- Which agents can use this route?
- Any agent that runs shell commands, such as Goose, OpenCode, Cline, Amp, Claude Code, Codex or Cursor, and any script or CI job.
- How do I avoid double posts on a retry?
- Send an Idempotency-Key header. The same key on the same account answers with the first action instead of running a second one.
- What does a post from a script cost?
- 10 credits, the same as from any agent. Reads are 4 credits, and the balance and account routes are free.
Related agents
All AI agents, the MCP server docs, the quickstart, and the platforms: Mastodon X LinkedIn Bluesky Telegram
Give an agent with a shell your social accounts.
Add an account with a password, cookies or a sign-in link, then connect the MCP server and ask.