Buffer MCP Server & CLI

An open source Buffer MCP and shared CLI with 41 tools, private profiles and explicit mutation approval.

Navid Moazzezby Navid Moazzez·Updated 3. Okt. 2026·98 min read·
Rate this tool
key_takeaways.mdTL;DR

Key takeaways

One shared implementation provides local MCP, a CLI and a versioned desktop bundle.
All 17 native and generic mutation tools require exact confirmation.
Read-only hides mutations and refuses direct calls to them.
Named private profiles isolate credentials and organization defaults without changing provider permissions.
Current native schemas, field selection and bounded cursor reads keep inputs and results explicit.
Official MCP and CLI already exist, and their current capabilities are compared honestly.

This free Buffer MCP server and CLI gives your AI real access to current GraphQL posts, channels, content items, templates and analytics. Inspect the exact target and native input, preview locally, then create or change only the operation you explicitly approve.

It's one install with 2 ways in. Claude, Codex, Cursor or any other MCP app calls its 41 tools for you, and the same tools work as a CLI that agents like Claude Code, Codex and OpenCode run, or that you type yourself.

Here's what the Buffer MCP server and CLI is, how to set it up in each app, and every tool it has.

What is the Buffer MCP server & CLI?

The Buffer MCP server & CLI is a free, open source program that lets AI agents inspect publishing data and execute approved post, content and template mutations for you, in 2 ways. The MCP server is what an AI app like Claude, Codex or Cursor connects to, through MCP (Model Context Protocol), the open standard AI apps use to call outside tools.

You ask in plain language. Your AI picks the right tool, and the server makes the call directly to the fixed Buffer GraphQL endpoint.

The CLI is the same program as commands. buffer-cli get-account runs the same code your AI runs when you ask to inspect your accessible Buffer account, whether an agent like Claude Code runs it or you do.

What can you ask it?

Once it's set up, you ask the way you'd ask an assistant. These are real prompts it handles:

Try asking
Read the accessible account organizations and connected channels.
Inspect scheduled posts for this exact organization with minimal fields.
Preview this draft locally without publishing.
Create only the selected approved draft.
Inspect the returned post ID and provider status.
Read content items and their existing channel drafts.
Read permitted aggregate metrics for the exact date window.

Buffer already offers an official MCP and CLI. This owned package adds a shared enforced local confirmation/read-only policy, private named profiles, operation previews/schema discovery and bounded native cursor reads. Official field selection, dry-run, schema exploration and generic API access already exist; comparisons are based on current documentation and pinned source, without a global superiority claim.

How to install the Buffer MCP server

Use the existing install box for local stdio MCP, the shared CLI or the versioned desktop bundle. Full client and OS setup follows below; Codex is the current priority.

Before you start0/3

Set up Buffer access

Private API key and account access

  1. Sign in to the intended account's API settings. Create the API key needed for this task and review that client's current quota.
  2. Save it privately as BUFFER_API_KEY, or in a regular token-only file outside every repository and configure its absolute BUFFER_TOKEN_FILE path. BUFFER_API_TOKEN remains a compatibility alias; API_KEY takes precedence when both are supplied.
  3. Run buffer-cli doctor. Then deliberately run doctor --network: it requests only account { id } and prints diagnostic success, never the account ID or provider content.
  4. Read get-account with minimal fields, then inspect account.organizations and choose the exact organization/channel for the task. Use get_operation_schema to discover actual selectable paths.
  5. Review the native input, platform metadata and publishing mode. Preview locally, then confirm only the precise operation the human requested. Successful creation is not proof that a social network published the post.

API keys authenticate through Authorization: Bearer at the fixed https://api.buffer.com endpoint. Personal API keys act across every organization accessible to that account; an organization input/default does not restrict the key. Provider roles, publishing policies and connected-channel grants still apply. Named local profiles route credentials and defaults; they cannot narrow provider authorization.

OAuth access tokens already granted to an app can use the same private credential path. The wrapper does not register apps, open consent, implement PKCE exchange, save refresh tokens or renew expiry. Follow OAuth for current PKCE and organization-specific app grants. PAT and OAuth permissions differ. Analytics uses PAT insightsRead access; current OAuth grants cannot request that analytics scope.

Current OAuth scopes in the provider's authentication guide:

ScopePurpose
posts:readRead posts and queues
posts:writeCreate and manage posts
ideas:readRead ideas
ideas:writeCreate and manage ideas
account:readRead account information
account:writeManage permitted account settings
offline_accessRequest a refresh token from the issuer; this wrapper does not refresh it

Request only the grant needed for the intended workflow. A refresh token is not a Bearer API credential. PAT insightsRead analytics is separate from the current OAuth scope list.

Use a private 0700 directory and 0600 regular token-only file on macOS/Linux. Windows users must restrict the file's ACL to their own user; POSIX checks do not establish Windows ACL protection. Files cannot be symlinks or exceed 64 KiB. File credentials override environment keys and are cached until restart. No automatic .env loader, browser credential harvesting or global official CLI configuration is used.

Plans, quotas and query limits

This AGPL wrapper is free. Buffer plans, posting limits, social-network permissions and API quotas are separate. Current API limits document these per-client rolling windows:

Free
API keys / app clients
1 / 1
15 minutes
100
24 hours
250
30 days
3000
Essentials
API keys / app clients
3 / 3
15 minutes
100
24 hours
250
30 days
7500
Team
API keys / app clients
5 / 5
15 minutes
100
24 hours
500
30 days
15000

Official MCP connections share a rate-limit bucket with personal keys; connecting another assistant does not create extra quota. RateLimit and Retry-After headers are returned with successful data; inspect your API settings' live usage. Quotas and query-complexity rules can change; the provider's returned policy takes precedence. The local 200 ms pacing is per profile/process, not a provider quota reservation. Labels sharing a key and several processes still share upstream limits.

Every ordinary command sends one request. query_pages is capped at five pages and 100 records requested per page locally; the provider can reject a smaller or differently constrained query. No request retries automatically, including reads, HTTP 200 GraphQL errors, HTTP 429 or timeouts. Wait for the provider's indicated reset, inspect account state, and make a deliberate retry. A transport timeout can leave a mutation completed remotely.

Local request JSON cap is 1 MiB, document cap 64 KiB/10000 parsed tokens, response cap 5 MiB and default timeout 30 seconds. These limits do not raise upstream query-depth, complexity, array, scheduling or social-network limits. Media URLs must be reachable by Buffer and meet platform constraints; local filesystem paths are not uploaded by this wrapper.

Revocation and rotation

Revoke/rotate the intended key in Buffer API settings or revoke the OAuth app grant through provider controls, update private local configuration and restart. Package uninstall does not revoke the key, disconnect a channel, delete hosted data or unschedule posts. Never send keys, private account exports, signed media links or raw error responses to public issues.

Check that it works

Start with local configuration, then deliberately request a minimal account identity read. Network doctor prints success status without the account ID or content.

buffer-cli --version
buffer-cli doctor
buffer-cli doctor --network
buffer-cli list-accounts --agent
buffer-cli get-account --fields id --agent
buffer-cli --version
buffer-cli doctor
buffer-cli doctor --network
buffer-cli list-accounts --agent
buffer-cli get-account --fields id --agent
buffer-cli get-operation-schema --operation posts --agent

Bare CLI, tools, schemas/help, local account labels and previews need no provider grant. doctor checks configuration presence; only doctor --network validates the minimal account request. A successful read establishes that request and token, not every post/platform or role. Full MCP discovery exposes 41 tools; read-only exposes 24. Invalid input/refused actions exit 2; missing credentials exit 10. Do not publish a real post just to test installation.

Use the Buffer CLI

The CLI is the same 41 tools as commands. AI agents that run commands, like Claude Code, Codex and OpenCode, use it on their own, and you can type the same commands in a terminal or a script.

Every tool name becomes a command with dashes, so get_post runs as buffer-cli get-post.

buffer-cli
buffer-cli create-post --help
buffer-cli schema create-post
buffer-cli get-account --fields id --agent
buffer-cli get-post --id SELECTED_POST --fields id --fields status --agent

The bare buffer-cli lists every command, and buffer-cli <command> --help shows what a command takes. All 17 native/generic mutation tools require --confirm for the exact requested operation. --agent/--yes never supply it. Local preview performs no provider validation or request.

These flags work on every command:

FlagWhat it does
--jsonStructured JSON
--compactOne-line JSON
--agentCompact JSON without prompts/color; no mutation approval
--select a,b.cTrim local result after receipt
--fields FIELDRepeat for explicit upstream paths
--confirmApprove the exact requested mutation
--account NAMESelect one private profile
--payload / --payload-fileOne native input object instead of input flags

A script can branch on the exit code:

Exit codeWhat it means
0Success
2Invalid input or refused mutation
3Not found
4Authentication/permission failure
5GraphQL/typed/provider/transport failure
7Rate limit/quota
10Missing or invalid private configuration

MCP server or CLI: which one?

Both surfaces call the same tools. Codex can connect to the local MCP server or run the CLI directly. Neither requires Claude Code.

MCP provides structured tool discovery; the CLI supports scripts, compact JSON, field selection and command/schema discovery. Official hosted MCP connection and local CLI authentication have different setup requirements.

Codex-specific token measurements are pending. Record the actual client/model versions, discovery configuration, input/output usage, caching, latency and equivalent successful outcomes. Standing definitions and full task cost are separate measurements; CLI commands, selected help, results and reasoning still consume tokens.

No efficiency percentage or Claude-derived figure is presented as a Codex result. Other-client benchmarks can be added separately.

Publishing, content and analytics workflows

Deliberate posting and scheduling

Read the account, exact organization and connected channel. Inspect createPost input and supported metadata for that service. Current modes are addToQueue, customScheduled, shareNext and shareNow; schedulingType is automatic or notification. shareNow can reach people immediately. A draft requires saveToDraft=true; needsApproval follows the channel's provider-side policy and conflicts with explicitly disabling saveToDraft. Due dates and publication restrictions remain provider validated.

buffer-cli get-channel --id SELECTED_CHANNEL --fields id --fields name --agent
buffer-cli preview-operation --operation createPost --arguments '{"channelId":"SELECTED_CHANNEL","mode":"addToQueue","schedulingType":"automatic","saveToDraft":true,"text":"Reviewed draft"}' --agent
buffer-cli create-post --payload-file /absolute/private/approved-post.json --account work --confirm --agent
buffer-cli get-post --id RETURNED_POST_ID --fields id --fields status --agent

Preview is schema/document validation only: it does not check account access, media reachability, platform text limits or Buffer scheduling policy. An approved file must contain the native input exactly reviewed. One approved draft does not authorize scheduling, promotion, retries or all posts in an organization. Keep the returned ID and inspect existing state before any deliberate repeat.

Platform metadata and media

The current native schema includes service-specific metadata, media assets and threaded inputs. Read the nested tables and provider's posting guide. Platform capabilities differ: automatic versus notification delivery, text/media formats, approvals, first comments and thread rules are not interchangeable. The wrapper does not rewrite platform metadata or guess limits. Named schemas catch structure/enums; provider semantic validation is authoritative.

Supply supported externally reachable asset URLs. A local path is not uploaded. URLs supplied to Buffer are processed by the provider; request confirmation includes only the selected assets and target. Private/signed URLs can expose credentials and expire before publication; output redaction is not a guarantee that a submitted URL is safe to share.

Content items, ideas and templates

Content items coordinate organization content and channel drafts. Inspect the selected item's existing drafts/posts before create/update/add/remove or promoteContentItemDraftToPosts. Promotion creates posts under the documented scheduling rules and requires its own confirmation. Ideas and post templates have distinct schemas and permissions; templates can be private/internal and inherit provider actor visibility. Never assume these commands grant team access or publish automatically.

Analytics

aggregatedPostMetrics uses an explicit organization and startDateTime/endDateTime, optionally channelIds. An empty channelIds list means no channels, unlike omitted/null. Current date windows are capped at 365 days; metrics refresh daily and require the provider's PAT insightsRead permission. Current OAuth app grants cannot request that scope. Zero/absent metrics are not proof that no posts performed. Inspect provider availability and dates; do not fabricate missing results.

Bounded pagination, retries and input files

Ordinary paginated tools request one page with native first/after/input arguments and return edges/node/pageInfo. The default page size is 25 where declared; local first cap is 100. Cursors are opaque and must be passed unchanged.

buffer-cli query-pages --operation posts --arguments '{"organizationId":"SELECTED_ORG","fields":["items.id","items.status"],"first":25}' --max-pages 3 --agent

query_pages accepts only current named paginated reads, one to five pages. It adds hasNextPage and endCursor fields, returns page responses and resumeCursor, and stops at the requested cap. Missing or repeated cursors abort remaining requests; this is an error, not a complete-library claim. Provider errors also abort remaining pages and no retries run. For very large results, each page still faces the response cap and provider complexity limits. A later continuation sees current account state, not a snapshot guarantee.

payload_file must be regular non-symlink JSON up to 1 MiB. Native input fields, payload and payload_file are mutually exclusive; account, fields, pagination and confirm are outside native payload. No media bytes, output-file downloads or unlimited polling are implemented. Store account responses privately through your own reviewed shell output process; the package does not hide private post/customer content automatically.

Transport failure does not establish that a mutation failed remotely. Preserve its inputs/returned IDs and inspect the provider before making a deliberate repeat. Rate limits can be GraphQL errors inside HTTP 200 as well as transport responses. Quota is shared by the actual upstream client, not reserved by a local label or preview.

Every Buffer tool

Actual discovery returns 41 shared tools: 24 reads and 17 confirmed mutations. Thirty-five native operations use the current official published schemas, with six local/generic/pagination helpers. Seven newer current-reference roots are experimental and remain generic requests, subject to provider availability.

Account

get_account
What it does
Get your account information.
Kind
Read
add_post_to_content_item
What it does
Add a post that already exists to a content item.
Kind
Confirmed mutation
get_aggregated_post_metrics
What it does
Aggregate post performance for an organization across a date range, optionally filtered by channel or tag.
Kind
Read
get_configuration
What it does
Global, per-organization configuration: the connected channels the actor can view (with per-feature authorization) plus the service-level capability catalog (services).
Kind
Read
get_instagram_audio
What it does
Refresh metadata and preview availability for one Instagram audio asset.
Kind
Read
move_post_in_queue
What it does
Move a queued post to the top or bottom of its channel's queue.
Kind
Confirmed mutation
promote_content_item_draft_to_posts
What it does
Promote a channel-less draft into channel-specific posts.
Kind
Confirmed mutation
remove_post_from_content_item
What it does
Remove a post from a content item.
Kind
Confirmed mutation
get_search_instagram_audio
What it does
Search Instagram audio for one channel.
Kind
Read
get_tag
What it does
Fetch a single tag by id.
Kind
Read
get_tags_v2
What it does
Fetch a page of the organization's tags, sorted by name in ascending order.
Kind
Read
get_trending_instagram_audio
What it does
Return Meta trending Instagram audio for one channel.
Kind
Read
update_content_item
What it does
Update a content item's title or target date.
Kind
Confirmed mutation
update_content_item_draft
What it does
Replace a channel-less draft's content in full, and optionally set the content item's target date in the same write.
Kind
Confirmed mutation
update_post_template
What it does
Update a post template owned by the caller (or an internal template in the caller's organization, if the caller is an org admin/owner)..
Kind
Confirmed mutation

Channels

get_channel
What it does
Get a channel by ID.
Kind
Read
get_channels
What it does
List channels for an organization.
Kind
Read

Contentitems

get_content_item
What it does
Fetch a single content item by id.
Kind
Read
get_content_items
What it does
Fetch an organization's content items in the requested order, newest first by default.
Kind
Read

Contentitems

create_content_item
What it does
Create a content item together with all of its channel-specific post variants in a single operation.
Kind
Confirmed mutation
delete_content_item
What it does
Delete a content item: the item itself and any posts created from it.
Kind
Confirmed mutation

Contentitemdrafts

create_content_item_draft
What it does
Create a content item holding a channel-less draft, before any channels are selected.
Kind
Confirmed mutation

Ideas

create_idea
What it does
Create a new idea with the given content and metadata.
Kind
Confirmed mutation
get_ideas
What it does
Fetch a paginated list of ideas with optional filtering.
Kind
Read

Posts

create_post
What it does
Create a new post.
Kind
Confirmed mutation
delete_post
What it does
Delete a post by id..
Kind
Confirmed mutation
edit_post
What it does
Edit post for channel.
Kind
Confirmed mutation
get_post
What it does
Get a post by ID.
Kind
Read
get_posts
What it does
List posts for an organization.
Kind
Read

Posttemplates

create_post_template
What it does
Create a post template visible only to the caller (private) or to the caller's organization (internal)..
Kind
Confirmed mutation
delete_post_template
What it does
Delete a post template owned by the caller (or an internal template in the caller's organization, if the caller is an org admin/owner)..
Kind
Confirmed mutation

Dailypostinglimits

get_daily_posting_limits
What it does
Returns daily posting limit status for the given channels on the specified date..
Kind
Read

Ideagroups

get_idea_groups
What it does
List idea groups (folders) for an organization.
Kind
Read

Posttemplates

get_post_template
What it does
Fetch a single post template by ID.
Kind
Read
get_post_templates
What it does
Fetch the templates visible to the current actor for the template library: public templates, plus internal templates from the supplied organizationId, plus private templates owned by the actor's account.
Kind
Read

Local

list_accounts
What it does
Local names, default marker and whether authentication is configured.
Kind
Read
preview_operation
What it does
Validate a current named input and upstream field selection, then return document and variables without credentials or a request.
Kind
Read
get_operation_schema
What it does
Local current operation input schema, every selectable upstream field path and bounded default selections.
Kind
Read

Graphql

graphql_query
What it does
One parsed GraphQL query; mutations and subscriptions are refused.
Kind
Read
graphql_mutation
What it does
One parsed GraphQL mutation with one direct root field and explicit confirmation.
Kind
Confirmed mutation

Pagination

query_pages
What it does
Read one to five pages of a schema-generated query.
Kind
Read

Is the Buffer MCP server safe?

All 17 exposed mutation tools require --confirm/confirm=true for the exact human-requested action. Named create/edit/delete/queue/content/promotion/template operations and generic GraphQL mutation pass through one WriteGuard before file reading or network work.

BUFFER_READ_ONLY=1 hides mutations from discovery and refuses direct hidden calls. BUFFER_ALLOW_DESTRUCTIVE=0 separately refuses mutations even with confirmation. --agent/--yes are output/noninteractive controls, not permission to publish. Local preview is available in read-only mode because it validates and returns data without transmitting a mutation.

Generic query parses exactly one GraphQL query and refuses mutation/subscription/multiple-operation documents. Generic mutation parses exactly one mutation with one direct root field; multi-action/root-fragment mutation documents refuse. It inserts __typename and the MutationError message catch-all. Aliases are preserved. Buffer validates native generic variables and provider permissions; local schema validation of unknown experimental operations is not claimed.

Audit writes are opt-in metadata containing time, surface, tool, risk, static description and guard outcome, without keys, post text, native variables or provider content. Keep the log private. Guard acceptance is permission to attempt one operation, not proof it succeeded remotely. Provider permissions/client consent remain independent.

Client approvals and the local guard are separate. Confirmation applies to one exact requested mutation. There is no automatic replay, rollback, OAuth renewal, local media upload or unbounded library fetch.

Make it read-only

Set BUFFER_READ_ONLY=1 and restart/reconnect: 24 reads remain, and direct native/generic mutations refuse. BUFFER_ALLOW_DESTRUCTIVE=0 also refuses confirmed mutations. Profile defaults do not scope a provider PAT.

Keep a log of every write

Set BUFFER_AUDIT_LOG to a file path. The server writes one line per attempted write, allowed or blocked.

Watch out: HTTP 200 can contain GraphQL or typed mutation errors. A timeout can leave the operation completed remotely; inspect the returned/original post state before deliberately repeating.

Your data

Credentials stay in private environment/client settings or token-only files. The server caches file credentials until restart and sends Bearer only to https://api.buffer.com, with redirects refused. It neither reads official global/repository Buffer configuration nor collects browser cookies. No telemetry relay, browser sign-in, local content database or public HTTP server is added.

API responses can contain post text, media, customer/account identifiers, organization/channel metadata and performance data. Outputs remain sensitive even when credential-like fields, the configured token and recognized signed credential URLs are redacted. Redaction is not anonymization; arbitrary secrets in free-form content can still appear. Local preview includes the supplied post/input content and should also stay private.

Buffer receives the requested native GraphQL operation/variables; social delivery and asset processing follow provider terms. Model/client hosting sees whatever tool output you let it receive. --fields limits requested data; --select trims after receipt. Neither control changes provider consent or guarantees a safe URL.

Opt-in audit logs contain guard metadata only. Do not put credentials, signed links, raw headers, account dumps or .env files into commits, artifacts or public issues. Private legacy history stays outside the new public repository. Public npm and desktop bundles must be scanned before release.

Several private accounts

BUFFER_ACCOUNTS is a private JSON array of unique labels with api_key (or api_token), token_file and optional organization_id. The array replaces single-account settings completely; no entry inherits a global token or organization. BUFFER_DEFAULT_ACCOUNT selects the default, otherwise the first label is used. Unknown labels/defaults refuse.

[{"name":"work","token_file":"/absolute/private/buffer-work.txt","organization_id":"YOUR_WORK_ORG"},{"name":"personal","token_file":"/absolute/private/buffer-personal.txt","organization_id":"YOUR_PERSONAL_ORG"}]

A selected profile fills a missing organizationId only for named native inputs that declare it. An explicit request organizationId takes precedence; generic GraphQL variables are preserved exactly. Preview requires explicit input and reads no credential/profile defaults. list_accounts returns labels/default/authentication presence only, never tokens, file paths or organization IDs.

A profile label is credential routing, not a security boundary for an account-wide PAT. Use separately scoped provider grants/accounts where appropriate. Several labels using the same grant still share permissions and rate quota. Token files override inline profile keys and are cached until restart.

Buffer MCP server settings

Private shell/user-client configuration only; no automatic .env loading, official config harvesting, OAuth exchange or refresh.

BUFFER_API_KEY
Default
Credentials
What it does
Private account-wide PAT or authorized OAuth access token
BUFFER_API_TOKEN
Default
Credentials
What it does
Legacy alias; API_KEY wins if both exist
BUFFER_TOKEN_FILE
Default
Credentials
What it does
Regular owner-only token-only file, max 64 KiB; overrides environment key
BUFFER_ACCOUNTS
Default
Credentials
What it does
Private named profile array; no global credential/default inheritance
BUFFER_DEFAULT_ACCOUNT
Default
Credentials
What it does
Exact configured label; default first entry
BUFFER_ORGANIZATION_ID
Default
Credentials
What it does
Optional input default for single account; does not restrict permissions
BUFFER_READ_ONLY
Default
Safety
What it does
1/true hides and refuses mutations; default false
BUFFER_ALLOW_DESTRUCTIVE
Default
Safety
What it does
0/false refuses even confirmed mutations; default true
BUFFER_AUDIT_LOG
Default
Safety
What it does
Private append-only guard decisions, no input content
BUFFER_REQUEST_TIMEOUT_MS
Default
Tuning
What it does
Default 30000, range 100–300000
BUFFER_MIN_REQUEST_INTERVAL_MS
Default
Tuning
What it does
Default 200, range 0–10000; process/profile pacing only

Troubleshooting

Run the doctor first. It names the step that failed and the fix.

What you seeWhat to do
Exit 10Check private credential/file permissions, exact account label and GUI environment.
401/403Check actual provider grant, organization/channel roles and account-wide PAT permissions.
Mutation refusedConfirm the exact user-requested action and inspect local policy.
Native input invalidRead full nested schema and choose one input route.
Unknown fieldsUse get_operation_schema and relative items/pageInfo paths.
HTTP 200 failureRead safe error code; typed mutation errors are not success.
429 or rate limitInspect shared provider bucket/reset; no automatic retry.
Unknown outcomeInspect the original/returned post state before repeating.
Missing analyticsPAT insightsRead, supported data, daily refresh and date range.
Cursor missing/repeatedStop and inspect state; never claim the whole library is fetched.
OAuth expiryRenew through your issuer; this wrapper does not refresh.
Desktop rejectedCheck host/runtime, private setup and extension policy.

If the server doesn't show up in your app at all, run the command your app runs, in a terminal, and read the error.

Every argument and nested native input

The following sections come from actual stdio discovery. Native input schemas and field-selection trees are reused from the reviewed published official CLI, with strict nested property checks. Required native fields are validated after payload/profile-default routing; they need not appear as top-level required flags because payload is an alternative.

get_account
Native operation
account
Policy
Read
add_post_to_content_item
Native operation
addPostToContentItem
Policy
Confirm exact mutation
get_aggregated_post_metrics
Native operation
aggregatedPostMetrics
Policy
Read
get_channel
Native operation
channel
Policy
Read
get_channels
Native operation
channels
Policy
Read
get_configuration
Native operation
configuration
Policy
Read
get_content_item
Native operation
contentItem
Policy
Read
get_content_items
Native operation
contentItems
Policy
Read
create_content_item
Native operation
createContentItem
Policy
Confirm exact mutation
create_content_item_draft
Native operation
createContentItemDraft
Policy
Confirm exact mutation
create_idea
Native operation
createIdea
Policy
Confirm exact mutation
create_post
Native operation
createPost
Policy
Confirm exact mutation
create_post_template
Native operation
createPostTemplate
Policy
Confirm exact mutation
get_daily_posting_limits
Native operation
dailyPostingLimits
Policy
Read
delete_content_item
Native operation
deleteContentItem
Policy
Confirm exact mutation
delete_post
Native operation
deletePost
Policy
Confirm exact mutation
delete_post_template
Native operation
deletePostTemplate
Policy
Confirm exact mutation
edit_post
Native operation
editPost
Policy
Confirm exact mutation
get_idea_groups
Native operation
ideaGroups
Policy
Read
get_ideas
Native operation
ideas
Policy
Read
get_instagram_audio
Native operation
instagramAudio
Policy
Read
move_post_in_queue
Native operation
movePostInQueue
Policy
Confirm exact mutation
get_post
Native operation
post
Policy
Read
get_posts
Native operation
posts
Policy
Read
get_post_template
Native operation
postTemplate
Policy
Read
get_post_templates
Native operation
postTemplates
Policy
Read
promote_content_item_draft_to_posts
Native operation
promoteContentItemDraftToPosts
Policy
Confirm exact mutation
remove_post_from_content_item
Native operation
removePostFromContentItem
Policy
Confirm exact mutation
get_search_instagram_audio
Native operation
searchInstagramAudio
Policy
Read
get_tag
Native operation
tag
Policy
Read
get_tags_v2
Native operation
tagsV2
Policy
Read
get_trending_instagram_audio
Native operation
trendingInstagramAudio
Policy
Read
update_content_item
Native operation
updateContentItem
Policy
Confirm exact mutation
update_content_item_draft
Native operation
updateContentItemDraft
Policy
Confirm exact mutation
update_post_template
Native operation
updatePostTemplate
Policy
Confirm exact mutation
list_accounts
Native operation
Local/helper or parsed GraphQL
Policy
Read
graphql_query
Native operation
Local/helper or parsed GraphQL
Policy
Read
graphql_mutation
Native operation
Local/helper or parsed GraphQL
Policy
Confirm exact mutation
preview_operation
Native operation
Local/helper or parsed GraphQL
Policy
Read
query_pages
Native operation
Local/helper or parsed GraphQL
Policy
Read
get_operation_schema
Native operation
Local/helper or parsed GraphQL
Policy
Read

get_account

buffer-cli get-account

payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.

Native input requirements: No required native input fields. Use individual fields or complete payload/payload_file.

Default upstream fields: id, email, organizations.id, organizations.channelCount, timezone. Inspect get_operation_schema for every selectable path.

add_post_to_content_item

buffer-cli add-post-to-content-item

id
Required
No; body and guard rules apply
Type
string
Details
The content item to add the post to.
postId
Required
No; body and guard rules apply
Type
string
Details
The post to add. The post must already exist. The post and the content item must belong to the same organization.
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.
confirm
Required
No; body and guard rules apply
Type
boolean
Details
Must be true for this exact user-requested Buffer mutation.

Native input requirements: id, postId. Use individual fields or complete payload/payload_file.

Default upstream fields: __typename, contentItem.id, contentItem.accountId, contentItem.allowedActions, contentItem.author.id, contentItem.author.avatar, contentItem.author.email, contentItem.author.isDeleted, contentItem.author.name, contentItem.author.urn, contentItem.body.__typename, contentItem.body.id, contentItem.body.aiAssisted, contentItem.body.assets.__typename, contentItem.body.assets.id, contentItem.body.assets.mimeType, contentItem.body.assets.source, contentItem.body.assets.thumbnail, contentItem.body.assets.type, contentItem.body.text, contentItem.organizationId, contentItem.tags.id, contentItem.tags.color, contentItem.tags.colorName, contentItem.tags.isLocked, contentItem.tags.name, contentItem.targetDate, contentItem.title, contentItem.createdAt, post.id, post.allowedActions, post.assets.__typename, post.assets.id, post.assets.mimeType, post.assets.source, post.assets.thumbnail, post.assets.type, post.author.id, post.author.avatar, post.author.email, post.author.isDeleted, post.author.name, post.author.urn, post.channel.id, post.channel.allowedActions, post.channel.avatar, post.channel.descriptor, post.channel.displayName, post.channel.externalLink, post.channel.hasActiveMemberDevice, post.channel.isDisconnected, post.channel.isLocked, post.channel.isNew, post.channel.isQueuePaused, post.channel.metadata.__typename, post.channel.metadata.defaultToReminders, post.channel.metadata.maxCharacters, post.channel.metadata.serverUrl, post.channel.metadata.subscriptionType, post.channel.metadata.shouldShowLinkedinAnalyticsRefreshBanner, post.channel.metadata.businessPortfolioId, post.channel.metadata.lastSubscribedAt, post.channel.metadata.phoneNumberId, post.channel.metadata.wabaId, post.channel.name, post.channel.organizationId, post.channel.products, post.channel.scopes, post.channel.service, post.channel.serviceId, post.channel.showTrendingTopicSuggestions, post.channel.timezone, post.channel.type, post.channel.createdAt, post.channel.updatedAt, post.channelId, post.channelService, post.contentItemId, post.dueAt, post.error.message, post.error.rawError, post.error.supportUrl, post.externalLink, post.ideaId, post.isCustomScheduled, post.metadata.__typename, post.metadata.firstComment, post.metadata.isAiGenerated, post.metadata.link, post.metadata.shouldShareToFeed, post.metadata.type, post.metadata.title, post.metadata.threadCount, post.metadata.url, post.metadata.details.__typename, post.metadata.details.button, post.metadata.details.link, post.metadata.details.code, post.metadata.details.endDate, post.metadata.details.startDate, post.metadata.details.terms, post.metadata.details.title, post.metadata.details.endTime, post.metadata.details.isFullDayEvent, post.metadata.details.startTime, post.metadata.embeddable, post.metadata.license, post.metadata.madeForKids, post.metadata.notifySubscribers, post.metadata.privacy, post.metadata.spoilerText, post.metadata.locationId, post.metadata.locationName, post.metadata.topic, post.metrics.description, post.metrics.name, post.metrics.type, post.metrics.unit, post.metrics.value, post.metricsUpdatedAt, post.notes.id, post.notes.allowedActions, post.notes.text, post.notes.type, post.notes.createdAt, post.notes.updatedAt, post.notificationStatus, post.schedulingType, post.sentAt, post.sharedNow, post.shareMode, post.status, post.tags.id, post.tags.color, post.tags.colorName, post.tags.isLocked, post.tags.name, post.text, post.via, post.createdAt, post.updatedAt, message. Inspect get_operation_schema for every selectable path.

get_aggregated_post_metrics

buffer-cli get-aggregated-post-metrics

channelIds
Required
No; body and guard rules apply
Type
array
Details
Optional list of channel IDs to filter by. When omitted (null), the aggregate spans every channel in the organization the actor has insights access to. When set to an empty array, no channels match and the result is empty. Items: string.
endDateTime
Required
No; body and guard rules apply
Type
string
Details
End of the aggregation window. Consumers typically pass UTC midnight of the last calendar day in the window (the backend treats the range as inclusive of that day), for example 2026-01-31T00:00:00Z. Date range is capped to 365 days.
organizationId
Required
No; body and guard rules apply
Type
string
Details
The organization ID
startDateTime
Required
No; body and guard rules apply
Type
string
Details
Start of the aggregation window. Consumers typically pass UTC midnight of the first calendar day in the window, for example 2026-01-01T00:00:00Z.
tags
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.

Native input requirements: endDateTime, organizationId, startDateTime. Use individual fields or complete payload/payload_file.

Default upstream fields: metrics.type, metrics.name, metrics.value, metrics.unit, metricsUpdatedAt. Inspect get_operation_schema for every selectable path.

get_channel

buffer-cli get-channel

id
Required
No; body and guard rules apply
Type
string
Details
The ID of the channel to be retrieved
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.

Native input requirements: id. Use individual fields or complete payload/payload_file.

Default upstream fields: id, displayName, service, timezone, serviceId. Inspect get_operation_schema for every selectable path.

get_channels

buffer-cli get-channels

filter
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
organizationId
Required
No; body and guard rules apply
Type
string
Details
The Organization id to fetch channels for
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.

Native input requirements: organizationId. Use individual fields or complete payload/payload_file.

Default upstream fields: id, name, service. Inspect get_operation_schema for every selectable path.

get_configuration

buffer-cli get-configuration

organizationId
Required
No; body and guard rules apply
Type
string
Details
The organization to return configuration for.
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.

Native input requirements: organizationId. Use individual fields or complete payload/payload_file.

Default upstream fields: channels.authorizationStatus.feature, channels.authorizationStatus.reason, channels.authorizationStatus.status, channels.channelId, channels.channelType, channels.content.configurationContentTypes, channels.content.rules.__typename, channels.content.rules.property, channels.content.rules.max, channels.content.rules.min, channels.content.rules.maxLength, channels.content.rules.conflictsWith, channels.content.rules.requires, channels.content.rules.maxMegabytes, channels.content.rules.maxDurationSeconds, channels.content.rules.allowedFormats, channels.content.supportedProperties, channels.engagement.engagementType, channels.engagement.metadata.__typename, channels.engagement.metadata.hasUserRating, channels.engagement.metadata.permanentNote, channels.engagement.supportedAiFeatures, channels.service, services.channelType, services.content.configurationContentTypes, services.content.rules.__typename, services.content.rules.property, services.content.rules.max, services.content.rules.min, services.content.rules.maxLength, services.content.rules.conflictsWith, services.content.rules.requires, services.content.rules.maxMegabytes, services.content.rules.maxDurationSeconds, services.content.rules.allowedFormats, services.content.supportedProperties, services.engagement.engagementType, services.engagement.metadata.__typename, services.engagement.metadata.hasUserRating, services.engagement.metadata.permanentNote, services.engagement.supportedAiFeatures, services.service. Inspect get_operation_schema for every selectable path.

get_content_item

buffer-cli get-content-item

id
Required
No; body and guard rules apply
Type
string
Details
The unique identifier of the content item to fetch.
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.

Native input requirements: id. Use individual fields or complete payload/payload_file.

Default upstream fields: id, accountId, allowedActions, author.id, author.avatar, author.email, author.isDeleted, author.name, author.urn, body.__typename, body.id, body.aiAssisted, body.assets.__typename, body.assets.id, body.assets.mimeType, body.assets.source, body.assets.thumbnail, body.assets.type, body.text, body.posts.id, body.posts.allowedActions, body.posts.assets.__typename, body.posts.assets.id, body.posts.assets.mimeType, body.posts.assets.source, body.posts.assets.thumbnail, body.posts.assets.type, body.posts.channelId, body.posts.channelService, body.posts.contentItemId, body.posts.dueAt, body.posts.externalLink, body.posts.ideaId, body.posts.isCustomScheduled, body.posts.metadata.__typename, body.posts.metadata.firstComment, body.posts.metadata.isAiGenerated, body.posts.metadata.link, body.posts.metadata.shouldShareToFeed, body.posts.metadata.type, body.posts.metadata.title, body.posts.metadata.threadCount, body.posts.metadata.url, body.posts.metadata.details.__typename, body.posts.metadata.details.button, body.posts.metadata.details.link, body.posts.metadata.details.code, body.posts.metadata.details.endDate, body.posts.metadata.details.startDate, body.posts.metadata.details.terms, body.posts.metadata.details.title, body.posts.metadata.details.endTime, body.posts.metadata.details.isFullDayEvent, body.posts.metadata.details.startTime, body.posts.metadata.embeddable, body.posts.metadata.license, body.posts.metadata.madeForKids, body.posts.metadata.notifySubscribers, body.posts.metadata.privacy, body.posts.metadata.spoilerText, body.posts.metadata.locationId, body.posts.metadata.locationName, body.posts.metadata.topic, body.posts.metricsUpdatedAt, body.posts.notificationStatus, body.posts.schedulingType, body.posts.sentAt, body.posts.sharedNow, body.posts.shareMode, body.posts.status, body.posts.text, body.posts.via, body.posts.createdAt, body.posts.updatedAt, organizationId, tags.id, tags.color, tags.colorName, tags.isLocked, tags.name, targetDate, title, createdAt. Inspect get_operation_schema for every selectable path.

get_content_items

buffer-cli get-content-items

filter
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
organizationId
Required
No; body and guard rules apply
Type
string
Details
Organization to list content items for. The caller must be a member of this organization.
sort
Required
No; body and guard rules apply
Type
array
Details
Sorting to apply, each entry breaking ties in the one before it. Defaults to newest first. A pagination cursor is only valid for the sort that produced it, so reset after to null whenever the sort changes. Items: object.
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.
first
Required
No; body and guard rules apply
Type
integer
Details
Local page-size cap 100, default 25; provider may impose additional query limits. minimum: 1. maximum: 100.
after
Required
No; body and guard rules apply
Type
string
Details
Opaque cursor from pageInfo.endCursor. One page per ordinary call. maxLength: 8192.

Native input requirements: organizationId. Use individual fields or complete payload/payload_file.

Default upstream fields: items.id, items.accountId, items.allowedActions, items.author.id, items.author.avatar, items.author.email, items.author.isDeleted, items.author.name, items.author.urn, items.body.__typename, items.body.id, items.body.aiAssisted, items.body.assets.__typename, items.body.assets.id, items.body.assets.mimeType, items.body.assets.source, items.body.assets.thumbnail, items.body.assets.type, items.body.text, items.organizationId, items.tags.id, items.tags.color, items.tags.colorName, items.tags.isLocked, items.tags.name, items.targetDate, items.title, items.createdAt, pageInfo.endCursor, pageInfo.hasNextPage, pageInfo.hasPreviousPage, pageInfo.startCursor. Inspect get_operation_schema for every selectable path.

create_content_item

buffer-cli create-content-item

organizationId
Required
No; body and guard rules apply
Type
string
Details
Organization that owns the content item and all variants created in it.
posts
Required
No; body and guard rules apply
Type
array
Details
The channel-specific post variants to create, one per channel. Provide at least one variant, and at most one variant per channel. Items: object.
tagIds
Required
No; body and guard rules apply
Type
array
Details
Tags to apply to this content item. Omit to create it with no tags. Items: string.
targetDate
Required
No; body and guard rules apply
Type
string
Details
Optional date indicating when this piece of content should go out. This is a planning aid only and does not schedule any posts.
title
Required
No; body and guard rules apply
Type
string
Details
Optional title describing what this piece of content is about.
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.
confirm
Required
No; body and guard rules apply
Type
boolean
Details
Must be true for this exact user-requested Buffer mutation.

Native input requirements: organizationId, posts. Use individual fields or complete payload/payload_file.

Default upstream fields: __typename, content.id, content.accountId, content.allowedActions, content.author.id, content.author.avatar, content.author.email, content.author.isDeleted, content.author.name, content.author.urn, content.body.__typename, content.body.id, content.body.aiAssisted, content.body.assets.__typename, content.body.assets.id, content.body.assets.mimeType, content.body.assets.source, content.body.assets.thumbnail, content.body.assets.type, content.body.text, content.organizationId, content.tags.id, content.tags.color, content.tags.colorName, content.tags.isLocked, content.tags.name, content.targetDate, content.title, content.createdAt, errors.__typename, errors.message, errors.channelId, message. Inspect get_operation_schema for every selectable path.

create_content_item_draft

buffer-cli create-content-item-draft

correlationId
Required
No; body and guard rules apply
Type
string
Details
Client-generated UUID that makes draft creation idempotent. A retry with the same UUID in the same organization returns the first content item in its current state.
draft
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
organizationId
Required
No; body and guard rules apply
Type
string
Details
Organization that will own the content item.
tagIds
Required
No; body and guard rules apply
Type
array
Details
Tags to apply to this content item. Omit to create it with no tags. Items: string.
targetDate
Required
No; body and guard rules apply
Type
string
Details
Optional date indicating when this piece of content should go out. This is a planning aid only and does not schedule any posts.
title
Required
No; body and guard rules apply
Type
string
Details
Optional title describing what this piece of content is about.
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.
confirm
Required
No; body and guard rules apply
Type
boolean
Details
Must be true for this exact user-requested Buffer mutation.

Native input requirements: draft, organizationId. Use individual fields or complete payload/payload_file.

Default upstream fields: __typename, contentItem.id, contentItem.accountId, contentItem.allowedActions, contentItem.author.id, contentItem.author.avatar, contentItem.author.email, contentItem.author.isDeleted, contentItem.author.name, contentItem.author.urn, contentItem.body.__typename, contentItem.body.id, contentItem.body.aiAssisted, contentItem.body.assets.__typename, contentItem.body.assets.id, contentItem.body.assets.mimeType, contentItem.body.assets.source, contentItem.body.assets.thumbnail, contentItem.body.assets.type, contentItem.body.text, contentItem.organizationId, contentItem.tags.id, contentItem.tags.color, contentItem.tags.colorName, contentItem.tags.isLocked, contentItem.tags.name, contentItem.targetDate, contentItem.title, contentItem.createdAt, errors.message, message. Inspect get_operation_schema for every selectable path.

create_idea

buffer-cli create-idea

content
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
cta
Required
No; body and guard rules apply
Type
string
Details
Call-to-action identifier for analytics tracking
group
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
organizationId
Required
No; body and guard rules apply
Type
string
Details
Organization ID that will own the idea
templateId
Required
No; body and guard rules apply
Type
string
Details
Template ID used to create the idea
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.
confirm
Required
No; body and guard rules apply
Type
boolean
Details
Must be true for this exact user-requested Buffer mutation.

Native input requirements: content, organizationId. Use individual fields or complete payload/payload_file.

Default upstream fields: __typename, id, content.aiAssisted, content.date, content.media.id, content.media.alt, content.media.size, content.media.thumbnailUrl, content.media.type, content.media.url, content.services, content.tags.id, content.tags.color, content.tags.colorName, content.tags.name, content.text, content.title, groupId, organizationId, position, createdAt, updatedAt, idea.id, idea.content.aiAssisted, idea.content.date, idea.content.services, idea.content.text, idea.content.title, idea.groupId, idea.organizationId, idea.position, idea.createdAt, idea.updatedAt, refreshIdeas, message. Inspect get_operation_schema for every selectable path.

create_post

buffer-cli create-post

aiAssisted
Required
No; body and guard rules apply
Type
boolean
Details
If this post was created with the help of AI
assets
Required
No; body and guard rules apply
Type
array
Details
Ordered list of assets on this post. Items: object.
channelId
Required
No; body and guard rules apply
Type
string
Details
Channel's Id for which we want to create the post
draftId
Required
No; body and guard rules apply
Type
string
Details
Is set when the Post is generated from a Draft
dueAt
Required
No; body and guard rules apply
Type
string
Details
Date when the post is scheduled to be published
ideaId
Required
No; body and guard rules apply
Type
string
Details
Is set when the Post is generated from an Idea
metadata
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
mode
Required
No; body and guard rules apply
Type
string
Details
How the post is being scheduled. Values: addToQueue, customScheduled, shareNext, shareNow.
needsApproval
Required
No; body and guard rules apply
Type
boolean
Details
Submit the post for approval instead of scheduling it. A post submitted for approval is always a draft, so this conflicts with turning saveToDraft off. Only valid when your posting policy on the target channel requires approval.
saveToDraft
Required
No; body and guard rules apply
Type
boolean
Details
If true, saves the post as a draft instead of scheduling it. When saving as draft: - Post status will be 'draft' instead of 'buffer' - Posting limits are not checked - The post will not be published until explicitly scheduled
schedulingType
Required
No; body and guard rules apply
Type
string
Details
Scheduling type to indicate notification publishing or automatic publishing Values: automatic, notification.
source
Required
No; body and guard rules apply
Type
string
Details
source where the composer was initiated from, used for tracking.
tagIds
Required
No; body and guard rules apply
Type
array
Details
List of tag IDs Items: string.
text
Required
No; body and guard rules apply
Type
string
Details
Text content of the Post. Note: for threaded posts, this needs to match the first item in the thread array.
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.
confirm
Required
No; body and guard rules apply
Type
boolean
Details
Must be true for this exact user-requested Buffer mutation.

Native input requirements: channelId, mode, schedulingType. Use individual fields or complete payload/payload_file.

Default upstream fields: post.id, post.status. Inspect get_operation_schema for every selectable path.

create_post_template

buffer-cli create-post-template

body
Required
No; body and guard rules apply
Type
string
Details
The main content body of the template, may contain unresolved template placeholders.
description
Required
No; body and guard rules apply
Type
string
Details
A short user-facing description of the template. Nullable for backwards-compat at the GraphQL boundary — the resolver rejects null/empty values with a clear input error so the underlying storage contract (non-empty string) is still honored.
emoji
Required
No; body and guard rules apply
Type
string
Details
The emoji associated with the template.
organizationId
Required
No; body and guard rules apply
Type
string
Details
Organization the template belongs to. The caller must be a member of this organization. For internal visibility this is the team scope; for private it's recorded on the template but does not affect visibility.
title
Required
No; body and guard rules apply
Type
string
Details
The title of the template.
visibility
Required
No; body and guard rules apply
Type
string
Details
Defaults to private if omitted. public is rejected — it is only available to official Buffer clients. Values: internal, private, public.
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.
confirm
Required
No; body and guard rules apply
Type
boolean
Details
Must be true for this exact user-requested Buffer mutation.

Native input requirements: body, organizationId, title. Use individual fields or complete payload/payload_file.

Default upstream fields: __typename, postTemplate.id, postTemplate.body, postTemplate.description, postTemplate.emoji, postTemplate.organizationId, postTemplate.title, postTemplate.visibility, postTemplate.createdAt, postTemplate.updatedAt, message. Inspect get_operation_schema for every selectable path.

get_daily_posting_limits

buffer-cli get-daily-posting-limits

channelIds
Required
No; body and guard rules apply
Type
array
Details
List of channel IDs to check limits for. All channels must belong to the same organization. Items: string.
date
Required
No; body and guard rules apply
Type
string
Details
The date to check limits for. Defaults to today if not provided.
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.

Native input requirements: channelIds. Use individual fields or complete payload/payload_file.

Default upstream fields: channelId, isAtLimit, limit, scheduled, sent. Inspect get_operation_schema for every selectable path.

delete_content_item

buffer-cli delete-content-item

id
Required
No; body and guard rules apply
Type
string
Details
The content item to delete.
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.
confirm
Required
No; body and guard rules apply
Type
boolean
Details
Must be true for this exact user-requested Buffer mutation.

Native input requirements: id. Use individual fields or complete payload/payload_file.

Default upstream fields: __typename, _empty, errors.channelId, errors.message, message. Inspect get_operation_schema for every selectable path.

delete_post

buffer-cli delete-post

id
Required
No; body and guard rules apply
Type
string
Details
Post id to delete.
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.
confirm
Required
No; body and guard rules apply
Type
boolean
Details
Must be true for this exact user-requested Buffer mutation.

Native input requirements: id. Use individual fields or complete payload/payload_file.

Default upstream fields: __typename, id, message. Inspect get_operation_schema for every selectable path.

delete_post_template

buffer-cli delete-post-template

id
Required
No; body and guard rules apply
Type
string
Details
The ID of the template to delete.
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.
confirm
Required
No; body and guard rules apply
Type
boolean
Details
Must be true for this exact user-requested Buffer mutation.

Native input requirements: id. Use individual fields or complete payload/payload_file.

Default upstream fields: __typename, _empty, message. Inspect get_operation_schema for every selectable path.

edit_post

buffer-cli edit-post

id
Required
No; body and guard rules apply
Type
string
Details
ID of the post to edit
aiAssisted
Required
No; body and guard rules apply
Type
boolean
Details
If this post was edited with the help of AI
approvalChange
Required
No; body and guard rules apply
Type
string
Details
Change the post's approval state alongside this edit. Leave unset to keep the post's current approval state. Only valid when your posting policy on the post's channel requires approval, and only on your own drafts. Asking for the state the post is already in does nothing. Values: request, revert.
assets
Required
No; body and guard rules apply
Type
array
Details
Ordered list of assets on this post. Omit to preserve the existing list, pass an empty array to clear it Items: object.
draftId
Required
No; body and guard rules apply
Type
string
Details
Is set when the Post is generated from a Draft
dueAt
Required
No; body and guard rules apply
Type
string
Details
Date when the post is scheduled to be published
ideaId
Required
No; body and guard rules apply
Type
string
Details
Is set when the Post is generated from an Idea
metadata
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
mode
Required
No; body and guard rules apply
Type
string
Details
How the post is being scheduled. Omit the field or pass null to make no scheduling change — null does not clear or reset the schedule: a scheduled post keeps its current share mode, queue slot, and any custom time, and the edit applies only the other provided fields. Pass a non-null ShareMode to apply that mode. Values: addToQueue, customScheduled, shareNext, shareNow.
saveToDraft
Required
No; body and guard rules apply
Type
boolean
Details
If true, saves the post as a draft instead of keeping it scheduled. When saving as draft: - Post status will be 'draft' instead of 'buffer' - The post will not be published until explicitly scheduled
schedulingType
Required
No; body and guard rules apply
Type
string
Details
Scheduling type to indicate notification publishing or automatic publishing. Omit it, or send null, to leave the post publishing the way it already does. Values: automatic, notification.
source
Required
No; body and guard rules apply
Type
string
Details
source where the composer was initiated from, used for tracking.
tagIds
Required
No; body and guard rules apply
Type
array
Details
tags Items: string.
text
Required
No; body and guard rules apply
Type
string
Details
Text content of the Post. Omit the field to keep the current text; pass an empty string or null to clear it. Note: for threaded posts, this needs to match the first item in the thread array.
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.
confirm
Required
No; body and guard rules apply
Type
boolean
Details
Must be true for this exact user-requested Buffer mutation.

Native input requirements: id. Use individual fields or complete payload/payload_file.

Default upstream fields: __typename, post.id, post.allowedActions, post.assets.__typename, post.assets.id, post.assets.mimeType, post.assets.source, post.assets.thumbnail, post.assets.type, post.author.id, post.author.avatar, post.author.email, post.author.isDeleted, post.author.name, post.author.urn, post.channel.id, post.channel.allowedActions, post.channel.avatar, post.channel.descriptor, post.channel.displayName, post.channel.externalLink, post.channel.hasActiveMemberDevice, post.channel.isDisconnected, post.channel.isLocked, post.channel.isNew, post.channel.isQueuePaused, post.channel.metadata.__typename, post.channel.metadata.defaultToReminders, post.channel.metadata.maxCharacters, post.channel.metadata.serverUrl, post.channel.metadata.subscriptionType, post.channel.metadata.shouldShowLinkedinAnalyticsRefreshBanner, post.channel.metadata.businessPortfolioId, post.channel.metadata.lastSubscribedAt, post.channel.metadata.phoneNumberId, post.channel.metadata.wabaId, post.channel.name, post.channel.organizationId, post.channel.products, post.channel.scopes, post.channel.service, post.channel.serviceId, post.channel.showTrendingTopicSuggestions, post.channel.timezone, post.channel.type, post.channel.createdAt, post.channel.updatedAt, post.channelId, post.channelService, post.contentItemId, post.dueAt, post.error.message, post.error.rawError, post.error.supportUrl, post.externalLink, post.ideaId, post.isCustomScheduled, post.metadata.__typename, post.metadata.firstComment, post.metadata.isAiGenerated, post.metadata.link, post.metadata.shouldShareToFeed, post.metadata.type, post.metadata.title, post.metadata.threadCount, post.metadata.url, post.metadata.details.__typename, post.metadata.details.button, post.metadata.details.link, post.metadata.details.code, post.metadata.details.endDate, post.metadata.details.startDate, post.metadata.details.terms, post.metadata.details.title, post.metadata.details.endTime, post.metadata.details.isFullDayEvent, post.metadata.details.startTime, post.metadata.embeddable, post.metadata.license, post.metadata.madeForKids, post.metadata.notifySubscribers, post.metadata.privacy, post.metadata.spoilerText, post.metadata.locationId, post.metadata.locationName, post.metadata.topic, post.metrics.description, post.metrics.name, post.metrics.type, post.metrics.unit, post.metrics.value, post.metricsUpdatedAt, post.notes.id, post.notes.allowedActions, post.notes.text, post.notes.type, post.notes.createdAt, post.notes.updatedAt, post.notificationStatus, post.schedulingType, post.sentAt, post.sharedNow, post.shareMode, post.status, post.tags.id, post.tags.color, post.tags.colorName, post.tags.isLocked, post.tags.name, post.text, post.via, post.createdAt, post.updatedAt, message, code, link. Inspect get_operation_schema for every selectable path.

get_idea_groups

buffer-cli get-idea-groups

organizationId
Required
No; body and guard rules apply
Type
string
Details
Unique identifier for the organization.
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.

Native input requirements: organizationId. Use individual fields or complete payload/payload_file.

Default upstream fields: id, name, isLocked. Inspect get_operation_schema for every selectable path.

get_ideas

buffer-cli get-ideas

groupFilter
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
organizationId
Required
No; body and guard rules apply
Type
string
Details
The organization to fetch ideas from.
tagsFilter
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.
first
Required
No; body and guard rules apply
Type
integer
Details
Local page-size cap 100, default 25; provider may impose additional query limits. minimum: 1. maximum: 100.
after
Required
No; body and guard rules apply
Type
string
Details
Opaque cursor from pageInfo.endCursor. One page per ordinary call. maxLength: 8192.

Native input requirements: organizationId. Use individual fields or complete payload/payload_file.

Default upstream fields: items.id, items.content.aiAssisted, items.content.date, items.content.services, items.content.text, items.content.title, items.groupId, items.organizationId, items.position, items.createdAt, items.updatedAt, pageInfo.endCursor, pageInfo.hasNextPage, pageInfo.hasPreviousPage, pageInfo.startCursor. Inspect get_operation_schema for every selectable path.

get_instagram_audio

buffer-cli get-instagram-audio

audioId
Required
No; body and guard rules apply
Type
string
Details
Meta audio asset ID
channelId
Required
No; body and guard rules apply
Type
string
Details
Instagram channel used to authorize the refresh
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.

Native input requirements: audioId, channelId. Use individual fields or complete payload/payload_file.

Default upstream fields: __typename, audio.id, audio.coverArtworkUrl, audio.creatorUsername, audio.displayArtist, audio.duration, audio.previewUrl, audio.title, audio.type, channelIds, message. Inspect get_operation_schema for every selectable path.

move_post_in_queue

buffer-cli move-post-in-queue

id
Required
No; body and guard rules apply
Type
string
Details
ID of the post to move.
position
Required
No; body and guard rules apply
Type
string
Details
Target position within the channel's queue. Values: bottom, top.
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.
confirm
Required
No; body and guard rules apply
Type
boolean
Details
Must be true for this exact user-requested Buffer mutation.

Native input requirements: id, position. Use individual fields or complete payload/payload_file.

Default upstream fields: __typename, post.id, post.allowedActions, post.assets.__typename, post.assets.id, post.assets.mimeType, post.assets.source, post.assets.thumbnail, post.assets.type, post.author.id, post.author.avatar, post.author.email, post.author.isDeleted, post.author.name, post.author.urn, post.channel.id, post.channel.allowedActions, post.channel.avatar, post.channel.descriptor, post.channel.displayName, post.channel.externalLink, post.channel.hasActiveMemberDevice, post.channel.isDisconnected, post.channel.isLocked, post.channel.isNew, post.channel.isQueuePaused, post.channel.metadata.__typename, post.channel.metadata.defaultToReminders, post.channel.metadata.maxCharacters, post.channel.metadata.serverUrl, post.channel.metadata.subscriptionType, post.channel.metadata.shouldShowLinkedinAnalyticsRefreshBanner, post.channel.metadata.businessPortfolioId, post.channel.metadata.lastSubscribedAt, post.channel.metadata.phoneNumberId, post.channel.metadata.wabaId, post.channel.name, post.channel.organizationId, post.channel.products, post.channel.scopes, post.channel.service, post.channel.serviceId, post.channel.showTrendingTopicSuggestions, post.channel.timezone, post.channel.type, post.channel.createdAt, post.channel.updatedAt, post.channelId, post.channelService, post.contentItemId, post.dueAt, post.error.message, post.error.rawError, post.error.supportUrl, post.externalLink, post.ideaId, post.isCustomScheduled, post.metadata.__typename, post.metadata.firstComment, post.metadata.isAiGenerated, post.metadata.link, post.metadata.shouldShareToFeed, post.metadata.type, post.metadata.title, post.metadata.threadCount, post.metadata.url, post.metadata.details.__typename, post.metadata.details.button, post.metadata.details.link, post.metadata.details.code, post.metadata.details.endDate, post.metadata.details.startDate, post.metadata.details.terms, post.metadata.details.title, post.metadata.details.endTime, post.metadata.details.isFullDayEvent, post.metadata.details.startTime, post.metadata.embeddable, post.metadata.license, post.metadata.madeForKids, post.metadata.notifySubscribers, post.metadata.privacy, post.metadata.spoilerText, post.metadata.locationId, post.metadata.locationName, post.metadata.topic, post.metrics.description, post.metrics.name, post.metrics.type, post.metrics.unit, post.metrics.value, post.metricsUpdatedAt, post.notes.id, post.notes.allowedActions, post.notes.text, post.notes.type, post.notes.createdAt, post.notes.updatedAt, post.notificationStatus, post.schedulingType, post.sentAt, post.sharedNow, post.shareMode, post.status, post.tags.id, post.tags.color, post.tags.colorName, post.tags.isLocked, post.tags.name, post.text, post.via, post.createdAt, post.updatedAt, message. Inspect get_operation_schema for every selectable path.

get_post

buffer-cli get-post

id
Required
No; body and guard rules apply
Type
string
Details
The ID of the post to be retrieved
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.

Native input requirements: id. Use individual fields or complete payload/payload_file.

Default upstream fields: id, text, status, channel.name, channel.id, createdAt. Inspect get_operation_schema for every selectable path.

get_posts

buffer-cli get-posts

filter
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
organizationId
Required
No; body and guard rules apply
Type
string
Details
The Organization id to fetch posts for
sort
Required
No; body and guard rules apply
Type
array
Details
The sort to apply to the posts results Items: object.
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.
first
Required
No; body and guard rules apply
Type
integer
Details
Local page-size cap 100, default 25; provider may impose additional query limits. minimum: 1. maximum: 100.
after
Required
No; body and guard rules apply
Type
string
Details
Opaque cursor from pageInfo.endCursor. One page per ordinary call. maxLength: 8192.

Native input requirements: organizationId. Use individual fields or complete payload/payload_file.

Default upstream fields: items.id, items.text, items.status, pageInfo. Inspect get_operation_schema for every selectable path.

get_post_template

buffer-cli get-post-template

id
Required
No; body and guard rules apply
Type
string
Details
The unique identifier of the template to fetch.
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.

Native input requirements: id. Use individual fields or complete payload/payload_file.

Default upstream fields: id, body, description, emoji, organizationId, title, visibility, createdAt, updatedAt. Inspect get_operation_schema for every selectable path.

get_post_templates

buffer-cli get-post-templates

filter
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
organizationId
Required
No; body and guard rules apply
Type
string
Details
Organization to scope internal-visibility templates to. The caller must be a member of this organization.
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.
first
Required
No; body and guard rules apply
Type
integer
Details
Local page-size cap 100, default 25; provider may impose additional query limits. minimum: 1. maximum: 100.
after
Required
No; body and guard rules apply
Type
string
Details
Opaque cursor from pageInfo.endCursor. One page per ordinary call. maxLength: 8192.

Native input requirements: organizationId. Use individual fields or complete payload/payload_file.

Default upstream fields: items.id, items.body, items.description, items.emoji, items.organizationId, items.title, items.visibility, items.createdAt, items.updatedAt, pageInfo.endCursor, pageInfo.hasNextPage, pageInfo.hasPreviousPage, pageInfo.startCursor. Inspect get_operation_schema for every selectable path.

promote_content_item_draft_to_posts

buffer-cli promote-content-item-draft-to-posts

id
Required
No; body and guard rules apply
Type
string
Details
The content item to promote.
posts
Required
No; body and guard rules apply
Type
array
Details
The channel-specific posts to create, one per channel. Provide at least one post, and at most one post per channel. Items: object.
tagIds
Required
No; body and guard rules apply
Type
array
Details
Tags to apply to this content item. Omit to keep the current tags. An empty list or null removes them all. Items: string.
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.
confirm
Required
No; body and guard rules apply
Type
boolean
Details
Must be true for this exact user-requested Buffer mutation.

Native input requirements: id, posts. Use individual fields or complete payload/payload_file.

Default upstream fields: __typename, contentItem.id, contentItem.accountId, contentItem.allowedActions, contentItem.author.id, contentItem.author.avatar, contentItem.author.email, contentItem.author.isDeleted, contentItem.author.name, contentItem.author.urn, contentItem.body.__typename, contentItem.body.id, contentItem.body.aiAssisted, contentItem.body.assets.__typename, contentItem.body.assets.id, contentItem.body.assets.mimeType, contentItem.body.assets.source, contentItem.body.assets.thumbnail, contentItem.body.assets.type, contentItem.body.text, contentItem.organizationId, contentItem.tags.id, contentItem.tags.color, contentItem.tags.colorName, contentItem.tags.isLocked, contentItem.tags.name, contentItem.targetDate, contentItem.title, contentItem.createdAt, errors.__typename, errors.message, errors.channelId, message. Inspect get_operation_schema for every selectable path.

remove_post_from_content_item

buffer-cli remove-post-from-content-item

id
Required
No; body and guard rules apply
Type
string
Details
The content item to remove the post from.
postId
Required
No; body and guard rules apply
Type
string
Details
The post to remove from a content item.
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.
confirm
Required
No; body and guard rules apply
Type
boolean
Details
Must be true for this exact user-requested Buffer mutation.

Native input requirements: id, postId. Use individual fields or complete payload/payload_file.

Default upstream fields: __typename, contentItem.id, contentItem.accountId, contentItem.allowedActions, contentItem.author.id, contentItem.author.avatar, contentItem.author.email, contentItem.author.isDeleted, contentItem.author.name, contentItem.author.urn, contentItem.body.__typename, contentItem.body.id, contentItem.body.aiAssisted, contentItem.body.assets.__typename, contentItem.body.assets.id, contentItem.body.assets.mimeType, contentItem.body.assets.source, contentItem.body.assets.thumbnail, contentItem.body.assets.type, contentItem.body.text, contentItem.organizationId, contentItem.tags.id, contentItem.tags.color, contentItem.tags.colorName, contentItem.tags.isLocked, contentItem.tags.name, contentItem.targetDate, contentItem.title, contentItem.createdAt, post.id, post.allowedActions, post.assets.__typename, post.assets.id, post.assets.mimeType, post.assets.source, post.assets.thumbnail, post.assets.type, post.author.id, post.author.avatar, post.author.email, post.author.isDeleted, post.author.name, post.author.urn, post.channel.id, post.channel.allowedActions, post.channel.avatar, post.channel.descriptor, post.channel.displayName, post.channel.externalLink, post.channel.hasActiveMemberDevice, post.channel.isDisconnected, post.channel.isLocked, post.channel.isNew, post.channel.isQueuePaused, post.channel.metadata.__typename, post.channel.metadata.defaultToReminders, post.channel.metadata.maxCharacters, post.channel.metadata.serverUrl, post.channel.metadata.subscriptionType, post.channel.metadata.shouldShowLinkedinAnalyticsRefreshBanner, post.channel.metadata.businessPortfolioId, post.channel.metadata.lastSubscribedAt, post.channel.metadata.phoneNumberId, post.channel.metadata.wabaId, post.channel.name, post.channel.organizationId, post.channel.products, post.channel.scopes, post.channel.service, post.channel.serviceId, post.channel.showTrendingTopicSuggestions, post.channel.timezone, post.channel.type, post.channel.createdAt, post.channel.updatedAt, post.channelId, post.channelService, post.contentItemId, post.dueAt, post.error.message, post.error.rawError, post.error.supportUrl, post.externalLink, post.ideaId, post.isCustomScheduled, post.metadata.__typename, post.metadata.firstComment, post.metadata.isAiGenerated, post.metadata.link, post.metadata.shouldShareToFeed, post.metadata.type, post.metadata.title, post.metadata.threadCount, post.metadata.url, post.metadata.details.__typename, post.metadata.details.button, post.metadata.details.link, post.metadata.details.code, post.metadata.details.endDate, post.metadata.details.startDate, post.metadata.details.terms, post.metadata.details.title, post.metadata.details.endTime, post.metadata.details.isFullDayEvent, post.metadata.details.startTime, post.metadata.embeddable, post.metadata.license, post.metadata.madeForKids, post.metadata.notifySubscribers, post.metadata.privacy, post.metadata.spoilerText, post.metadata.locationId, post.metadata.locationName, post.metadata.topic, post.metrics.description, post.metrics.name, post.metrics.type, post.metrics.unit, post.metrics.value, post.metricsUpdatedAt, post.notes.id, post.notes.allowedActions, post.notes.text, post.notes.type, post.notes.createdAt, post.notes.updatedAt, post.notificationStatus, post.schedulingType, post.sentAt, post.sharedNow, post.shareMode, post.status, post.tags.id, post.tags.color, post.tags.colorName, post.tags.isLocked, post.tags.name, post.text, post.via, post.createdAt, post.updatedAt, message. Inspect get_operation_schema for every selectable path.

get_search_instagram_audio

buffer-cli get-search-instagram-audio

audioType
Required
No; body and guard rules apply
Type
string
Details
Music or original sound catalog Values: music, originalSound.
channelId
Required
No; body and guard rules apply
Type
string
Details
Instagram channel to search audio for
query
Required
No; body and guard rules apply
Type
string
Details
Search text. Required. Use trendingInstagramAudio for trending results.
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.

Native input requirements: audioType, channelId, query. Use individual fields or complete payload/payload_file.

Default upstream fields: __typename, audio.id, audio.coverArtworkUrl, audio.creatorUsername, audio.displayArtist, audio.duration, audio.previewUrl, audio.title, audio.type, channelIds, message. Inspect get_operation_schema for every selectable path.

get_tag

buffer-cli get-tag

id
Required
No; body and guard rules apply
Type
string
Details
The unique identifier of the tag to fetch.
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.

Native input requirements: id. Use individual fields or complete payload/payload_file.

Default upstream fields: id, color, colorName, isLocked, name. Inspect get_operation_schema for every selectable path.

get_tags_v2

buffer-cli get-tags-v2

filter
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
organizationId
Required
No; body and guard rules apply
Type
string
Details
Organization to list tags for. The caller must be a member of this organization.
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.
first
Required
No; body and guard rules apply
Type
integer
Details
Local page-size cap 100, default 25; provider may impose additional query limits. minimum: 1. maximum: 100.
after
Required
No; body and guard rules apply
Type
string
Details
Opaque cursor from pageInfo.endCursor. One page per ordinary call. maxLength: 8192.

Native input requirements: organizationId. Use individual fields or complete payload/payload_file.

Default upstream fields: items.id, items.color, items.colorName, items.isLocked, items.name, pageInfo.endCursor, pageInfo.hasNextPage, pageInfo.hasPreviousPage, pageInfo.startCursor. Inspect get_operation_schema for every selectable path.

get_trending_instagram_audio

buffer-cli get-trending-instagram-audio

audioType
Required
No; body and guard rules apply
Type
string
Details
Music or original sound catalog Values: music, originalSound.
channelId
Required
No; body and guard rules apply
Type
string
Details
Instagram channel to load trending audio for
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.

Native input requirements: audioType, channelId. Use individual fields or complete payload/payload_file.

Default upstream fields: __typename, audio.id, audio.coverArtworkUrl, audio.creatorUsername, audio.displayArtist, audio.duration, audio.previewUrl, audio.title, audio.type, channelIds, message. Inspect get_operation_schema for every selectable path.

update_content_item

buffer-cli update-content-item

id
Required
No; body and guard rules apply
Type
string
Details
The content item to update.
targetDate
Required
No; body and guard rules apply
Type
string
Details
Omit to preserve the existing target date. Null clears it.
title
Required
No; body and guard rules apply
Type
string
Details
Omit to preserve the existing title. Null clears it.
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.
confirm
Required
No; body and guard rules apply
Type
boolean
Details
Must be true for this exact user-requested Buffer mutation.

Native input requirements: id. Use individual fields or complete payload/payload_file.

Default upstream fields: __typename, contentItem.id, contentItem.accountId, contentItem.allowedActions, contentItem.author.id, contentItem.author.avatar, contentItem.author.email, contentItem.author.isDeleted, contentItem.author.name, contentItem.author.urn, contentItem.body.__typename, contentItem.body.id, contentItem.body.aiAssisted, contentItem.body.assets.__typename, contentItem.body.assets.id, contentItem.body.assets.mimeType, contentItem.body.assets.source, contentItem.body.assets.thumbnail, contentItem.body.assets.type, contentItem.body.text, contentItem.organizationId, contentItem.tags.id, contentItem.tags.color, contentItem.tags.colorName, contentItem.tags.isLocked, contentItem.tags.name, contentItem.targetDate, contentItem.title, contentItem.createdAt, errors.message, message. Inspect get_operation_schema for every selectable path.

update_content_item_draft

buffer-cli update-content-item-draft

id
Required
No; body and guard rules apply
Type
string
Details
The content item whose channel-less draft is replaced.
draft
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
tagIds
Required
No; body and guard rules apply
Type
array
Details
Tags to apply to this content item. Omit to keep the current tags. An empty list or null removes them all. Items: string.
targetDate
Required
No; body and guard rules apply
Type
string
Details
Date indicating when this piece of content should go out. This is a planning aid only and does not schedule any posts. Omit to preserve the existing target date. Null clears it.
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.
confirm
Required
No; body and guard rules apply
Type
boolean
Details
Must be true for this exact user-requested Buffer mutation.

Native input requirements: id, draft. Use individual fields or complete payload/payload_file.

Default upstream fields: __typename, contentItem.id, contentItem.accountId, contentItem.allowedActions, contentItem.author.id, contentItem.author.avatar, contentItem.author.email, contentItem.author.isDeleted, contentItem.author.name, contentItem.author.urn, contentItem.body.__typename, contentItem.body.id, contentItem.body.aiAssisted, contentItem.body.assets.__typename, contentItem.body.assets.id, contentItem.body.assets.mimeType, contentItem.body.assets.source, contentItem.body.assets.thumbnail, contentItem.body.assets.type, contentItem.body.text, contentItem.organizationId, contentItem.tags.id, contentItem.tags.color, contentItem.tags.colorName, contentItem.tags.isLocked, contentItem.tags.name, contentItem.targetDate, contentItem.title, contentItem.createdAt, errors.__typename, errors.message, message. Inspect get_operation_schema for every selectable path.

update_post_template

buffer-cli update-post-template

id
Required
No; body and guard rules apply
Type
string
Details
The ID of the template to update.
body
Required
No; body and guard rules apply
Type
string
Details
The main content body of the template, may contain unresolved template placeholders.
description
Required
No; body and guard rules apply
Type
string
Details
A short user-facing description of the template.
emoji
Required
No; body and guard rules apply
Type
string
Details
The emoji associated with the template.
title
Required
No; body and guard rules apply
Type
string
Details
The title of the template.
visibility
Required
No; body and guard rules apply
Type
string
Details
public is rejected — it is only available to official Buffer clients. Values: internal, private, public.
payload
Required
No; body and guard rules apply
Type
object
Details
Complete native input object instead of individual input fields.
payload_file
Required
No; body and guard rules apply
Type
string
Details
Regular local JSON input file, no symlink, at most 1 MiB; cannot mix with payload or individual input fields. minLength: 1.
fields
Required
No; body and guard rules apply
Type
array
Details
Upstream field paths relative to the result, as in official CLI --fields. Default fields are bounded. Use items.id for connection nodes; pageInfo.endCursor for cursors. minItems: 1. maxItems: 100. Items: string.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.
confirm
Required
No; body and guard rules apply
Type
boolean
Details
Must be true for this exact user-requested Buffer mutation.

Native input requirements: id. Use individual fields or complete payload/payload_file.

Default upstream fields: __typename, postTemplate.id, postTemplate.body, postTemplate.description, postTemplate.emoji, postTemplate.organizationId, postTemplate.title, postTemplate.visibility, postTemplate.createdAt, postTemplate.updatedAt, message. Inspect get_operation_schema for every selectable path.

list_accounts

buffer-cli list-accounts

None
Required
No
Type
None
Details
No arguments

graphql_query

buffer-cli graphql-query

document
Required
Yes
Type
string
Details
See the full input schema. minLength: 1. maxLength: 65536.
variables
Required
No; body and guard rules apply
Type
object
Details
Native JSON variables; validated remotely by Buffer.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.

graphql_mutation

buffer-cli graphql-mutation

document
Required
Yes
Type
string
Details
See the full input schema. minLength: 1. maxLength: 65536.
variables
Required
No; body and guard rules apply
Type
object
Details
Native JSON variables; validated remotely by Buffer.
account
Required
No; body and guard rules apply
Type
string
Details
Private account profile name. Selects credentials only; an organization default does not restrict provider token permissions. minLength: 1.
confirm
Required
No; body and guard rules apply
Type
boolean
Details
Must be true for this exact user-requested Buffer mutation.

preview_operation

buffer-cli preview-operation

operation
Required
Yes
Type
string
Details
See the full input schema. Values: account, addPostToContentItem, aggregatedPostMetrics, channel, channels, configuration, contentItem, contentItems, createContentItem, createContentItemDraft, createIdea, createPost, createPostTemplate, dailyPostingLimits, deleteContentItem, deletePost, deletePostTemplate, editPost, ideaGroups, ideas, instagramAudio, movePostInQueue, post, posts, postTemplate, postTemplates, promoteContentItemDraftToPosts, removePostFromContentItem, searchInstagramAudio, tag, tagsV2, trendingInstagramAudio, updateContentItem, updateContentItemDraft, updatePostTemplate.
arguments
Required
Yes
Type
object
Details
Arguments for that named tool. Provide all required native input, including organizationId; profile defaults are not read.

query_pages

buffer-cli query-pages

operation
Required
Yes
Type
string
Details
See the full input schema. Values: contentItems, ideas, posts, postTemplates, tagsV2.
arguments
Required
Yes
Type
object
Details
Arguments for the native read tool, including filters, fields, first/after and account.
max_pages
Required
No; body and guard rules apply
Type
integer
Details
See the full input schema. minimum: 1. maximum: 5. default: 1.

get_operation_schema

buffer-cli get-operation-schema

operation
Required
Yes
Type
string
Details
See the full input schema. Values: account, addPostToContentItem, aggregatedPostMetrics, channel, channels, configuration, contentItem, contentItems, createContentItem, createContentItemDraft, createIdea, createPost, createPostTemplate, dailyPostingLimits, deleteContentItem, deletePost, deletePostTemplate, editPost, ideaGroups, ideas, instagramAudio, movePostInQueue, post, posts, postTemplate, postTemplates, promoteContentItemDraftToPosts, removePostFromContentItem, searchInstagramAudio, tag, tagsV2, trendingInstagramAudio, updateContentItem, updateContentItemDraft, updatePostTemplate.

Nested native input definitions

These tables preserve the current nested object/array structures, required fields, enums and constraints. Repeated identical shapes are shown once; full inline schema remains available for each command.

##### addPostToContentItem.input

id
Required
Yes
Type
string
Details
The content item to add the post to.
postId
Required
Yes
Type
string
Details
The post to add. The post must already exist. The post and the content item must belong to the same organization.

##### aggregatedPostMetrics.input

channelIds
Required
No; body and guard rules apply
Type
array
Details
Optional list of channel IDs to filter by. When omitted (null), the aggregate spans every channel in the organization the actor has insights access to. When set to an empty array, no channels match and the result is empty. Items: string.
endDateTime
Required
Yes
Type
string
Details
End of the aggregation window. Consumers typically pass UTC midnight of the last calendar day in the window (the backend treats the range as inclusive of that day), for example 2026-01-31T00:00:00Z. Date range is capped to 365 days.
organizationId
Required
Yes
Type
string
Details
The organization ID
startDateTime
Required
Yes
Type
string
Details
Start of the aggregation window. Consumers typically pass UTC midnight of the first calendar day in the window, for example 2026-01-01T00:00:00Z.
tags
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.

##### aggregatedPostMetrics.input.tags

in
Required
Yes
Type
array
Details
Include results that have any of the specified tags (union/OR). Items: string.
isEmpty
Required
No; body and guard rules apply
Type
boolean
Details
When true, include results that have no tags assigned. Can be combined with 'in' for union filtering. Defaults to false if not specified.

##### channel.input

id
Required
Yes
Type
string
Details
The ID of the channel to be retrieved

##### channels.input

filter
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
organizationId
Required
Yes
Type
string
Details
The Organization id to fetch channels for

##### channels.input.filter

isLocked
Required
No; body and guard rules apply
Type
boolean
Details
If not defined, it returns all channels Else, if true, it only returns locked channels if false, it only returns not locked channels
product
Required
No; body and guard rules apply
Type
string
Details
If not passed, it return all channels Else, it filters the channels based on what the product supports. Values: analyze, buffer, comments, engage, publish, startPage.

##### configuration.input

organizationId
Required
Yes
Type
string
Details
The organization to return configuration for.

##### contentItem.input

id
Required
Yes
Type
string
Details
The unique identifier of the content item to fetch.

##### contentItems.input

filter
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
organizationId
Required
Yes
Type
string
Details
Organization to list content items for. The caller must be a member of this organization.
sort
Required
No; body and guard rules apply
Type
array
Details
Sorting to apply, each entry breaking ties in the one before it. Defaults to newest first. A pagination cursor is only valid for the sort that produced it, so reset after to null whenever the sort changes. Items: object.

##### contentItems.input.filter

contentStatus
Required
No; body and guard rules apply
Type
string
Details
Only return content items with this content status. When omitted, content items in every status are returned. Values: draftContent, postContent.
tags
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
targetDate
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.

##### contentItems.input.filter.targetDate

presence
Required
No; body and guard rules apply
Type
string
Details
Only return content items by whether a target date is set: present returns only dated items, absent only undated ones. Values: absent, present.
range
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.

##### contentItems.input.filter.targetDate.range

end
Required
No; body and guard rules apply
Type
string
Details
Include results with dates equal to or before the specified date
start
Required
No; body and guard rules apply
Type
string
Details
Include results with dates equal to or after the specified date

##### contentItems.input.sort[]

direction
Required
Yes
Type
string
Details
The direction to sort by. Values: asc, desc.
field
Required
Yes
Type
string
Details
The field to sort by. Values: targetDate, createdAt.

##### createContentItem.input

organizationId
Required
Yes
Type
string
Details
Organization that owns the content item and all variants created in it.
posts
Required
Yes
Type
array
Details
The channel-specific post variants to create, one per channel. Provide at least one variant, and at most one variant per channel. Items: object.
tagIds
Required
No; body and guard rules apply
Type
array
Details
Tags to apply to this content item. Omit to create it with no tags. Items: string.
targetDate
Required
No; body and guard rules apply
Type
string
Details
Optional date indicating when this piece of content should go out. This is a planning aid only and does not schedule any posts.
title
Required
No; body and guard rules apply
Type
string
Details
Optional title describing what this piece of content is about.

##### createContentItem.input.posts[]

aiAssisted
Required
No; body and guard rules apply
Type
boolean
Details
If this post was created with the help of AI
assets
Required
No; body and guard rules apply
Type
array
Details
Ordered list of assets on this post. Items: object.
channelId
Required
Yes
Type
string
Details
Channel's Id for which we want to create the post
draftId
Required
No; body and guard rules apply
Type
string
Details
Is set when the Post is generated from a Draft
dueAt
Required
No; body and guard rules apply
Type
string
Details
Date when the post is scheduled to be published
ideaId
Required
No; body and guard rules apply
Type
string
Details
Is set when the Post is generated from an Idea
metadata
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
mode
Required
Yes
Type
string
Details
How the post is being scheduled. Values: addToQueue, customScheduled, shareNext, shareNow.
needsApproval
Required
No; body and guard rules apply
Type
boolean
Details
Submit the post for approval instead of scheduling it. A post submitted for approval is always a draft, so this conflicts with turning saveToDraft off. Only valid when your posting policy on the target channel requires approval.
saveToDraft
Required
No; body and guard rules apply
Type
boolean
Details
If true, saves the post as a draft instead of scheduling it. When saving as draft: - Post status will be 'draft' instead of 'buffer' - Posting limits are not checked - The post will not be published until explicitly scheduled
schedulingType
Required
Yes
Type
string
Details
Scheduling type to indicate notification publishing or automatic publishing Values: automatic, notification.
source
Required
No; body and guard rules apply
Type
string
Details
source where the composer was initiated from, used for tracking.
tagIds
Required
No; body and guard rules apply
Type
array
Details
List of tag IDs Items: string.
text
Required
No; body and guard rules apply
Type
string
Details
Text content of the Post. Note: for threaded posts, this needs to match the first item in the thread array.

##### createContentItem.input.posts[].assets[]

document
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
image
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
link
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
video
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.

##### createContentItem.input.posts[].assets[].document

thumbnailUrl
Required
Yes
Type
string
Details
Document thumbnail URL
title
Required
Yes
Type
string
Details
Document title
url
Required
Yes
Type
string
Details
Document URL

##### createContentItem.input.posts[].assets[].image

metadata
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
thumbnailUrl
Required
No; body and guard rules apply
Type
string
Details
URL to the static thumbnail of the asset
url
Required
Yes
Type
string
Details
URL to the file source

##### createContentItem.input.posts[].assets[].image.metadata

altText
Required
Yes
Type
string
Details
Alternative text for accessibility
animatedThumbnail
Required
No; body and guard rules apply
Type
string
Details
Animated thumbnail URL
dimensions
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
userTags
Required
No; body and guard rules apply
Type
array
Details
Accounts to tag at specific points on the image. Each tag's x/y position uses normalized 0.0-1.0 coordinates - see UserTagInput. Items: object.

##### createContentItem.input.posts[].assets[].image.metadata.dimensions

height
Required
Yes
Type
integer
Details
Image height in pixels
width
Required
Yes
Type
integer
Details
Image width in pixels

##### createContentItem.input.posts[].assets[].image.metadata.userTags[]

handle
Required
Yes
Type
string
Details
The handle (username) of the account to tag, without the leading @.
x
Required
Yes
Type
number
Details
Horizontal position of the tag as a normalized decimal float between 0.0 and 1.0 - the fraction of the image width from the left edge (0.5 is the horizontal center). Pass a number, not a string, and do not use pixel coordinates; to convert, divide the pixel X by the image width.
y
Required
Yes
Type
number
Details
Vertical position of the tag as a normalized decimal float between 0.0 and 1.0 - the fraction of the image height from the top edge (0.5 is the vertical center). Pass a number, not a string, and do not use pixel coordinates; to convert, divide the pixel Y by the image height.

##### createContentItem.input.posts[].assets[].link

description
Required
No; body and guard rules apply
Type
string
Details
Description of the link
thumbnailUrl
Required
No; body and guard rules apply
Type
string
Details
Thumbnail URL of the link
title
Required
No; body and guard rules apply
Type
string
Details
Title of the link
url
Required
Yes
Type
string
Details
URL to the link

##### createContentItem.input.posts[].assets[].video

metadata
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
thumbnailUrl
Required
No; body and guard rules apply
Type
string
Details
Do not use: social networks do not accept custom video thumbnail images, and the API rejects video assets that set this field. To choose the video thumbnail, set metadata.thumbnailOffset to select a frame from the video (supported for Instagram, TikTok, and Pinterest only).
url
Required
Yes
Type
string
Details
URL to the file source

##### createContentItem.input.posts[].assets[].video.metadata

thumbnailOffset
Required
No; body and guard rules apply
Type
integer
Details
Offset of the thumbnail chosen for the video, in ms
title
Required
No; body and guard rules apply
Type
string
Details
Video title

##### createContentItem.input.posts[].metadata

bluesky
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
facebook
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
google
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
instagram
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
linkedin
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
mastodon
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
pinterest
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
substack
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
threads
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
tiktok
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
twitter
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
youtube
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.

##### createContentItem.input.posts[].metadata.bluesky

linkAttachment
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
thread
Required
No; body and guard rules apply
Type
array
Details
The ordered list of posts that make up the thread (not paginated). This array is the source of truth for what gets published: every post in the thread, including the root post, must be provided here. Posts are published in order, each replying to the previous one. The first item is the root post and should match the top-level text on the post input. Items: object.

##### createContentItem.input.posts[].metadata.bluesky.linkAttachment

description
Required
No; body and guard rules apply
Type
string
Details
Description shown on the link card
thumbnail
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
title
Required
No; body and guard rules apply
Type
string
Details
Title shown on the link card
url
Required
Yes
Type
string
Details
URL that the link asset has been built from

##### createContentItem.input.posts[].metadata.bluesky.linkAttachment.thumbnail

url
Required
Yes
Type
string
Details
URL of the thumbnail image

##### createContentItem.input.posts[].metadata.bluesky.thread[]

assets
Required
No; body and guard rules apply
Type
array
Details
Ordered list of assets on this threaded post Items: object.
metadata
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
text
Required
No; body and guard rules apply
Type
string
Details
The text body content of the threaded post

##### createContentItem.input.posts[].metadata.facebook

annotations
Required
No; body and guard rules apply
Type
array
Details
Annotations representing entities in the text Items: object.
firstComment
Required
No; body and guard rules apply
Type
string
Details
Facebook post's first comment
linkAttachment
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
type
Required
Yes
Type
string
Details
The channel-specific type of the post, eg, post, story, reel for Facebook Values: post, reel, story.

##### createContentItem.input.posts[].metadata.facebook.annotations[]

content
Required
Yes
Type
string
Details
The content of the annotation, e.g. '107509875938399'
indices
Required
Yes
Type
array
Details
The indices of the annotation in the text, e.g. [6, 9] (from 6 to 9 characters in the text) Items: integer.
text
Required
Yes
Type
string
Details
The text representation of the annotation, eg 'Buffer'
url
Required
Yes
Type
string
Details
The URL the annotation points to, e.g. https://www.facebook.com/107509875938399

##### createContentItem.input.posts[].metadata.google

detailsEvent
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
detailsOffer
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
detailsWhatsNew
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
title
Required
No; body and guard rules apply
Type
string
Details
Title if available in the given GBP post type: event and offer
type
Required
Yes
Type
string
Details
The channel-specific type of the post, eg, post, offer, event for Google Business Profile Values: event, offer, whats_new.

##### createContentItem.input.posts[].metadata.google.detailsEvent

button
Required
No; body and guard rules apply
Type
string
Details
Action button. Optional: a post with no button, or none, publishes without a call-to-action. On edit, omitting it preserves the existing value. Values: book, call, learn_more, none, order, shop, signup.
endDate
Required
No; body and guard rules apply
Type
string
Details
End date of the event. Required on create; optional on edit (omitted preserves existing value).
isFullDayEvent
Required
Yes
Type
boolean
Details
Indicate whether the event has a start or end time.
link
Required
No; body and guard rules apply
Type
string
Details
Link to the action
startDate
Required
No; body and guard rules apply
Type
string
Details
Start date of the event. Required on create; optional on edit (omitted preserves existing value).
title
Required
No; body and guard rules apply
Type
string
Details
Title of the event. Required on create; optional on edit (omitted preserves existing value).

##### createContentItem.input.posts[].metadata.google.detailsOffer

code
Required
No; body and guard rules apply
Type
string
Details
Coupon code for the offer
endDate
Required
No; body and guard rules apply
Type
string
Details
End date of the offer. Required on create; optional on edit (omitted preserves existing value).
link
Required
No; body and guard rules apply
Type
string
Details
Link to the offer
startDate
Required
No; body and guard rules apply
Type
string
Details
Start date of the offer. Required on create; optional on edit (omitted preserves existing value).
terms
Required
No; body and guard rules apply
Type
string
Details
Terms and Conditions
title
Required
No; body and guard rules apply
Type
string
Details
Title of the offer. Required on create; optional on edit (omitted preserves existing value).

##### createContentItem.input.posts[].metadata.google.detailsWhatsNew

button
Required
No; body and guard rules apply
Type
string
Details
Action button. Optional: a post with no button, or none, publishes without a call-to-action. On edit, omitting it preserves the existing value. Values: book, call, learn_more, none, order, shop, signup.
link
Required
No; body and guard rules apply
Type
string
Details
Link to the action

##### createContentItem.input.posts[].metadata.instagram

firstComment
Required
No; body and guard rules apply
Type
string
Details
Instagram post's first comment
geolocation
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
isAiGenerated
Required
No; body and guard rules apply
Type
boolean
Details
Whether the post discloses AI-generated content
link
Required
No; body and guard rules apply
Type
string
Details
Shop Grid link for the post
shouldShareToFeed
Required
Yes
Type
boolean
Details
Indicates whether post should be shared to feed
stickerFields
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
type
Required
Yes
Type
string
Details
The channel-specific type of the post, eg, post, story, reel for Instagram Values: carousel, event, ghost_post, offer, post, reel, short, story, thread, whats_new.

##### createContentItem.input.posts[].metadata.instagram.geolocation

id
Required
No; body and guard rules apply
Type
string
Details
The id of this location
text
Required
No; body and guard rules apply
Type
string
Details
The name of this location

##### createContentItem.input.posts[].metadata.instagram.stickerFields

music
Required
No; body and guard rules apply
Type
string
Details
Placeholder text for the post's music
other
Required
No; body and guard rules apply
Type
string
Details
Additional field for any other post content
products
Required
No; body and guard rules apply
Type
string
Details
Placeholder text for the post's linked products
text
Required
No; body and guard rules apply
Type
string
Details
Text for the Story or Reel
topics
Required
No; body and guard rules apply
Type
string
Details
Placeholder text for the post's topics (Reels only)

##### createContentItem.input.posts[].metadata.linkedin

annotations
Required
No; body and guard rules apply
Type
array
Details
Annotations representing entities in the text Items: object.
firstComment
Required
No; body and guard rules apply
Type
string
Details
LinkedIn post's first comment
linkAttachment
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.

##### createContentItem.input.posts[].metadata.linkedin.annotations[]

id
Required
Yes
Type
string
Details
The id of the annotation, e.g. 1521226
entity
Required
Yes
Type
string
Details
The entity of the annotation, e.g. urn:li:organization:1521226
length
Required
Yes
Type
integer
Details
The length of the annotation, e.g. 6
link
Required
Yes
Type
string
Details
The link of the annotation, e.g. https://www.linkedin.com/company/bufferapp
localizedName
Required
Yes
Type
string
Details
The localized name of the annotation, e.g. Buffer
start
Required
Yes
Type
integer
Details
The start of the annotation, e.g. 5
vanityName
Required
Yes
Type
string
Details
The vanity name of the annotation, e.g. bufferapp

##### createContentItem.input.posts[].metadata.mastodon

spoilerText
Required
No; body and guard rules apply
Type
string
Details
Spoiler text hiding the root text of this post
thread
Required
No; body and guard rules apply
Type
array
Details
The ordered list of posts that make up the thread (not paginated). This array is the source of truth for what gets published: every post in the thread, including the root post, must be provided here. Posts are published in order, each replying to the previous one. The first item is the root post and should match the top-level text on the post input. Items: object.

##### createContentItem.input.posts[].metadata.pinterest

boardServiceId
Required
No; body and guard rules apply
Type
string
Details
The board ID of the Pin, can be obtained when fetching the channel details with the following query: `` query GetChannelWithSubprofiles { channel(input: { id: "[CHANNEL_ID_HERE]" }) { metadata { ... on PinterestMetadata { boards { serviceId } } } } } `` Required on create; optional on edit (omitted preserves existing board).
title
Required
No; body and guard rules apply
Type
string
Details
The title of the Pin
url
Required
No; body and guard rules apply
Type
string
Details
The Pin destination link

##### createContentItem.input.posts[].metadata.substack

linkAttachment
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.

##### createContentItem.input.posts[].metadata.threads

linkAttachment
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
locationId
Required
No; body and guard rules apply
Type
string
Details
LocationId associated with the post
locationName
Required
No; body and guard rules apply
Type
string
Details
Location name associated with the post
thread
Required
No; body and guard rules apply
Type
array
Details
The ordered list of posts that make up the thread (not paginated). This array is the source of truth for what gets published: every post in the thread, including the root post, must be provided here. Posts are published in order, each replying to the previous one. The first item is the root post and should match the top-level text on the post input. Items: object.
topic
Required
No; body and guard rules apply
Type
string
Details
Topic associated with the post
type
Required
No; body and guard rules apply
Type
string
Details
The type of the post Values: carousel, event, ghost_post, offer, post, reel, short, story, thread, whats_new.

##### createContentItem.input.posts[].metadata.tiktok

isAiGenerated
Required
No; body and guard rules apply
Type
boolean
Details
Whether the post discloses AI-generated content (TikTok video only)
title
Required
No; body and guard rules apply
Type
string
Details
The title of the TikTok post (for photo posts)

##### createContentItem.input.posts[].metadata.twitter

isAiGenerated
Required
No; body and guard rules apply
Type
boolean
Details
Whether the post discloses AI-generated content (original tweets only, never retweets)
retweet
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
thread
Required
No; body and guard rules apply
Type
array
Details
The ordered list of posts that make up the thread (not paginated). This array is the source of truth for what gets published: every post in the thread, including the root post, must be provided here. Posts are published in order, each replying to the previous one. The first item is the root post and should match the top-level text on the post input. Items: object.

##### createContentItem.input.posts[].metadata.twitter.retweet

id
Required
Yes
Type
string
Details
Retweet ID
comment
Required
No; body and guard rules apply
Type
string
Details
Optional user comment shown above the embedded retweet

##### createContentItem.input.posts[].metadata.youtube

categoryId
Required
No; body and guard rules apply
Type
string
Details
Youtube Category ID, one ID of this list: ID: 1 -> Film & Animation ID: 2 -> Autos & Vehicles ID: 10 -> Music ID: 15 -> Pets & Animals ID: 17 -> Sports ID: 19 -> Travel & Events ID: 20 -> Gaming ID: 22 -> People & Blogs ID: 23 -> Comedy ID: 24 -> Entertainment ID: 25 -> News & Politics ID: 26 -> Howto & Style ID: 27 -> Education ID: 28 -> Science & Technology ID: 29 -> Nonprofits & Activism Required on create; optional on edit (omitted preserves existing value).
embeddable
Required
No; body and guard rules apply
Type
boolean
Details
Indicates whether the video allows embedding (default: true)
isAiGenerated
Required
No; body and guard rules apply
Type
boolean
Details
Whether the post discloses AI-generated content
license
Required
No; body and guard rules apply
Type
string
Details
Video license (default: youtube) Values: creativeCommon, youtube.
madeForKids
Required
No; body and guard rules apply
Type
boolean
Details
Indicates whether the video is suitable for kids (default: false)
notifySubscribers
Required
No; body and guard rules apply
Type
boolean
Details
Indicates whether to notify subscribers on publish video (default: true)
privacy
Required
No; body and guard rules apply
Type
string
Details
Privacy setting for post (default: public) Values: private, public, unlisted.
title
Required
No; body and guard rules apply
Type
string
Details
Title of the Youtube post. Required on create; optional on edit (omitted preserves existing value).

##### createContentItemDraft.input

correlationId
Required
No; body and guard rules apply
Type
string
Details
Client-generated UUID that makes draft creation idempotent. A retry with the same UUID in the same organization returns the first content item in its current state.
draft
Required
Yes
Type
object
Details
See the full input schema.
organizationId
Required
Yes
Type
string
Details
Organization that will own the content item.
tagIds
Required
No; body and guard rules apply
Type
array
Details
Tags to apply to this content item. Omit to create it with no tags. Items: string.
targetDate
Required
No; body and guard rules apply
Type
string
Details
Optional date indicating when this piece of content should go out. This is a planning aid only and does not schedule any posts.
title
Required
No; body and guard rules apply
Type
string
Details
Optional title describing what this piece of content is about.

##### createContentItemDraft.input.draft

aiAssisted
Required
No; body and guard rules apply
Type
boolean
Details
Set to true when the draft content was written with the help of AI.
assets
Required
No; body and guard rules apply
Type
array
Details
Images, videos, or documents to attach to the draft, in display order. Items: object.
text
Required
Yes
Type
string
Details
The written content of the draft. Can be empty when the draft holds at least one asset.

##### createIdea.input

content
Required
Yes
Type
object
Details
See the full input schema.
cta
Required
No; body and guard rules apply
Type
string
Details
Call-to-action identifier for analytics tracking
group
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
organizationId
Required
Yes
Type
string
Details
Organization ID that will own the idea
templateId
Required
No; body and guard rules apply
Type
string
Details
Template ID used to create the idea

##### createIdea.input.content

aiAssisted
Required
No; body and guard rules apply
Type
boolean
Details
Whether AI tools were used in creation
date
Required
No; body and guard rules apply
Type
string
Details
Target date for the idea, often used for planning publish schedules
media
Required
No; body and guard rules apply
Type
array
Details
List of media items to attach Items: object.
services
Required
No; body and guard rules apply
Type
array
Details
Services associated with the idea for targeting specific platforms Items: string.
tags
Required
No; body and guard rules apply
Type
array
Details
Tags to categorize the idea Items: object.
text
Required
No; body and guard rules apply
Type
string
Details
Main body text or description
title
Required
No; body and guard rules apply
Type
string
Details
Title or headline of the idea

##### createIdea.input.content.media[]

url
Required
Yes
Type
string
Details
The URL of the media
alt
Required
No; body and guard rules apply
Type
string
Details
Alternative text for the media
thumbnailUrl
Required
No; body and guard rules apply
Type
string
Details
Thumbnail URL for the media
type
Required
Yes
Type
string
Details
The type of media (image, gif, video, link, document, unsupported). Note: 'video' is not supported via public API Values: image, gif, video, link, document, unsupported.
size
Required
No; body and guard rules apply
Type
integer
Details
The size of the media in bytes
source
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.

##### createIdea.input.content.media[].source

name
Required
Yes
Type
string
Details
See the full input schema.
id
Required
No; body and guard rules apply
Type
string
Details
See the full input schema.
trigger
Required
No; body and guard rules apply
Type
string
Details
See the full input schema.
author
Required
No; body and guard rules apply
Type
string
Details
for unsplash only
authorUrl
Required
No; body and guard rules apply
Type
string
Details
See the full input schema.

##### createIdea.input.content.tags[]

id
Required
Yes
Type
string
Details
See the full input schema.
name
Required
Yes
Type
string
Details
See the full input schema.
color
Required
Yes
Type
string
Details
See the full input schema.

##### createIdea.input.group

groupId
Required
No; body and guard rules apply
Type
string
Details
Target group ID (null for unassigned group)
placeAfterId
Required
No; body and guard rules apply
Type
string
Details
ID of idea to place after (null for top position)

##### createPost.input

aiAssisted
Required
No; body and guard rules apply
Type
boolean
Details
If this post was created with the help of AI
assets
Required
No; body and guard rules apply
Type
array
Details
Ordered list of assets on this post. Items: object.
channelId
Required
Yes
Type
string
Details
Channel's Id for which we want to create the post
draftId
Required
No; body and guard rules apply
Type
string
Details
Is set when the Post is generated from a Draft
dueAt
Required
No; body and guard rules apply
Type
string
Details
Date when the post is scheduled to be published
ideaId
Required
No; body and guard rules apply
Type
string
Details
Is set when the Post is generated from an Idea
metadata
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
mode
Required
Yes
Type
string
Details
How the post is being scheduled. Values: addToQueue, customScheduled, shareNext, shareNow.
needsApproval
Required
No; body and guard rules apply
Type
boolean
Details
Submit the post for approval instead of scheduling it. A post submitted for approval is always a draft, so this conflicts with turning saveToDraft off. Only valid when your posting policy on the target channel requires approval.
saveToDraft
Required
No; body and guard rules apply
Type
boolean
Details
If true, saves the post as a draft instead of scheduling it. When saving as draft: - Post status will be 'draft' instead of 'buffer' - Posting limits are not checked - The post will not be published until explicitly scheduled
schedulingType
Required
Yes
Type
string
Details
Scheduling type to indicate notification publishing or automatic publishing Values: automatic, notification.
source
Required
No; body and guard rules apply
Type
string
Details
source where the composer was initiated from, used for tracking.
tagIds
Required
No; body and guard rules apply
Type
array
Details
List of tag IDs Items: string.
text
Required
No; body and guard rules apply
Type
string
Details
Text content of the Post. Note: for threaded posts, this needs to match the first item in the thread array.

##### createPost.input.metadata

bluesky
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
facebook
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
google
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
instagram
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
linkedin
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
mastodon
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
pinterest
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
substack
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
threads
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
tiktok
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
twitter
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
youtube
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.

##### createPost.input.metadata.bluesky

linkAttachment
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
thread
Required
No; body and guard rules apply
Type
array
Details
The ordered list of posts that make up the thread (not paginated). This array is the source of truth for what gets published: every post in the thread, including the root post, must be provided here. Posts are published in order, each replying to the previous one. The first item is the root post and should match the top-level text on the post input. Items: object.

##### createPost.input.metadata.bluesky.thread[]

assets
Required
No; body and guard rules apply
Type
array
Details
Ordered list of assets on this threaded post Items: object.
metadata
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
text
Required
No; body and guard rules apply
Type
string
Details
The text body content of the threaded post

##### createPost.input.metadata.bluesky.thread[].assets[]

document
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
image
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
link
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
video
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.

##### createPost.input.metadata.bluesky.thread[].assets[].image

thumbnailUrl
Required
No; body and guard rules apply
Type
string
Details
URL to the static thumbnail of the asset
url
Required
Yes
Type
string
Details
URL to the file source

##### createPost.input.metadata.bluesky.thread[].assets[].video

thumbnailUrl
Required
No; body and guard rules apply
Type
string
Details
Do not use: social networks do not accept custom video thumbnail images, and the API rejects video assets that set this field. To choose the video thumbnail, set metadata.thumbnailOffset to select a frame from the video (supported for Instagram, TikTok, and Pinterest only).
url
Required
Yes
Type
string
Details
URL to the file source

##### createPost.input.metadata.bluesky.thread[].metadata

bluesky
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
threads
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.

##### createPost.input.metadata.mastodon

spoilerText
Required
No; body and guard rules apply
Type
string
Details
Spoiler text hiding the root text of this post
thread
Required
No; body and guard rules apply
Type
array
Details
The ordered list of posts that make up the thread (not paginated). This array is the source of truth for what gets published: every post in the thread, including the root post, must be provided here. Posts are published in order, each replying to the previous one. The first item is the root post and should match the top-level text on the post input. Items: object.

##### createPost.input.metadata.threads

linkAttachment
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
locationId
Required
No; body and guard rules apply
Type
string
Details
LocationId associated with the post
locationName
Required
No; body and guard rules apply
Type
string
Details
Location name associated with the post
thread
Required
No; body and guard rules apply
Type
array
Details
The ordered list of posts that make up the thread (not paginated). This array is the source of truth for what gets published: every post in the thread, including the root post, must be provided here. Posts are published in order, each replying to the previous one. The first item is the root post and should match the top-level text on the post input. Items: object.
topic
Required
No; body and guard rules apply
Type
string
Details
Topic associated with the post
type
Required
No; body and guard rules apply
Type
string
Details
The type of the post Values: carousel, event, ghost_post, offer, post, reel, short, story, thread, whats_new.

##### createPost.input.metadata.twitter

isAiGenerated
Required
No; body and guard rules apply
Type
boolean
Details
Whether the post discloses AI-generated content (original tweets only, never retweets)
retweet
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
thread
Required
No; body and guard rules apply
Type
array
Details
The ordered list of posts that make up the thread (not paginated). This array is the source of truth for what gets published: every post in the thread, including the root post, must be provided here. Posts are published in order, each replying to the previous one. The first item is the root post and should match the top-level text on the post input. Items: object.

##### createPostTemplate.input

body
Required
Yes
Type
string
Details
The main content body of the template, may contain unresolved template placeholders.
description
Required
No; body and guard rules apply
Type
string
Details
A short user-facing description of the template. Nullable for backwards-compat at the GraphQL boundary — the resolver rejects null/empty values with a clear input error so the underlying storage contract (non-empty string) is still honored.
emoji
Required
No; body and guard rules apply
Type
string
Details
The emoji associated with the template.
organizationId
Required
Yes
Type
string
Details
Organization the template belongs to. The caller must be a member of this organization. For internal visibility this is the team scope; for private it's recorded on the template but does not affect visibility.
title
Required
Yes
Type
string
Details
The title of the template.
visibility
Required
No; body and guard rules apply
Type
string
Details
Defaults to private if omitted. public is rejected — it is only available to official Buffer clients. Values: internal, private, public.

##### dailyPostingLimits.input

channelIds
Required
Yes
Type
array
Details
List of channel IDs to check limits for. All channels must belong to the same organization. Items: string.
date
Required
No; body and guard rules apply
Type
string
Details
The date to check limits for. Defaults to today if not provided.

##### deleteContentItem.input

id
Required
Yes
Type
string
Details
The content item to delete.

##### deletePost.input

id
Required
Yes
Type
string
Details
Post id to delete.

##### deletePostTemplate.input

id
Required
Yes
Type
string
Details
The ID of the template to delete.

##### editPost.input

id
Required
Yes
Type
string
Details
ID of the post to edit
aiAssisted
Required
No; body and guard rules apply
Type
boolean
Details
If this post was edited with the help of AI
approvalChange
Required
No; body and guard rules apply
Type
string
Details
Change the post's approval state alongside this edit. Leave unset to keep the post's current approval state. Only valid when your posting policy on the post's channel requires approval, and only on your own drafts. Asking for the state the post is already in does nothing. Values: request, revert.
assets
Required
No; body and guard rules apply
Type
array
Details
Ordered list of assets on this post. Omit to preserve the existing list, pass an empty array to clear it Items: object.
draftId
Required
No; body and guard rules apply
Type
string
Details
Is set when the Post is generated from a Draft
dueAt
Required
No; body and guard rules apply
Type
string
Details
Date when the post is scheduled to be published
ideaId
Required
No; body and guard rules apply
Type
string
Details
Is set when the Post is generated from an Idea
metadata
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
mode
Required
No; body and guard rules apply
Type
string
Details
How the post is being scheduled. Omit the field or pass null to make no scheduling change — null does not clear or reset the schedule: a scheduled post keeps its current share mode, queue slot, and any custom time, and the edit applies only the other provided fields. Pass a non-null ShareMode to apply that mode. Values: addToQueue, customScheduled, shareNext, shareNow.
saveToDraft
Required
No; body and guard rules apply
Type
boolean
Details
If true, saves the post as a draft instead of keeping it scheduled. When saving as draft: - Post status will be 'draft' instead of 'buffer' - The post will not be published until explicitly scheduled
schedulingType
Required
No; body and guard rules apply
Type
string
Details
Scheduling type to indicate notification publishing or automatic publishing. Omit it, or send null, to leave the post publishing the way it already does. Values: automatic, notification.
source
Required
No; body and guard rules apply
Type
string
Details
source where the composer was initiated from, used for tracking.
tagIds
Required
No; body and guard rules apply
Type
array
Details
tags Items: string.
text
Required
No; body and guard rules apply
Type
string
Details
Text content of the Post. Omit the field to keep the current text; pass an empty string or null to clear it. Note: for threaded posts, this needs to match the first item in the thread array.

##### ideaGroups.input

organizationId
Required
Yes
Type
string
Details
Unique identifier for the organization.

##### ideas.input

groupFilter
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
organizationId
Required
Yes
Type
string
Details
The organization to fetch ideas from.
tagsFilter
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.

##### ideas.input.groupFilter

groups
Required
No; body and guard rules apply
Type
array
Details
Return only ideas that belong to these specific groups (union/OR). Items: string.
membership
Required
No; body and guard rules apply
Type
string
Details
Return ideas by a group-membership bucket rather than by specific group IDs. Values: grouped, ungrouped.

##### instagramAudio.input

audioId
Required
Yes
Type
string
Details
Meta audio asset ID
channelId
Required
Yes
Type
string
Details
Instagram channel used to authorize the refresh

##### movePostInQueue.input

id
Required
Yes
Type
string
Details
ID of the post to move.
position
Required
Yes
Type
string
Details
Target position within the channel's queue. Values: bottom, top.

##### post.input

id
Required
Yes
Type
string
Details
The ID of the post to be retrieved

##### posts.input

filter
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
organizationId
Required
Yes
Type
string
Details
The Organization id to fetch posts for
sort
Required
No; body and guard rules apply
Type
array
Details
The sort to apply to the posts results Items: object.

##### posts.input.filter

channelIds
Required
No; body and guard rules apply
Type
array
Details
When set, it will filter posts by channel Items: string.
dueAt
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
dueAtPresence
Required
No; body and guard rules apply
Type
string
Details
When set, it will filter posts by whether their scheduled posting date exists. absent cannot be combined with dueAt, because absent dates cannot also match a date range. Values: absent, present.
endDate
Required
No; body and guard rules apply
Type
string
Details
When set, it will return posts with createdAt or dueAt date before endDate
postTypes
Required
No; body and guard rules apply
Type
array
Details
When set, it will filter posts by format. post is a fallback bucket rather than one stored format: it matches every post the other formats do not claim, which is what Post.metadata.type reports for the same post. carousel and thread are rejected, because no stored value resolves to them. Items: string.
startDate
Required
No; body and guard rules apply
Type
string
Details
When set, it will return posts with createdAt or dueAt date after startDate
status
Required
No; body and guard rules apply
Type
array
Details
When set, it will filter posts by status Items: string.
tagIds
Required
No; body and guard rules apply
Type
array
Details
When set, it will filter posts by tag Items: string.
tags
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
createdAt
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.

##### posts.input.sort[]

direction
Required
Yes
Type
string
Details
The direction to sort by. Values: asc, desc.
field
Required
Yes
Type
string
Details
The field to sort by. Values: dueAt, createdAt.

##### postTemplate.input

id
Required
Yes
Type
string
Details
The unique identifier of the template to fetch.

##### postTemplates.input

filter
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
organizationId
Required
Yes
Type
string
Details
Organization to scope internal-visibility templates to. The caller must be a member of this organization.

##### postTemplates.input.filter

visibility
Required
No; body and guard rules apply
Type
string
Details
Narrow the result to a single visibility scope. Omit to receive the union of: public templates, internal templates from the supplied organization, and private templates from the actor's account. Values: internal, private, public.

##### promoteContentItemDraftToPosts.input

id
Required
Yes
Type
string
Details
The content item to promote.
posts
Required
Yes
Type
array
Details
The channel-specific posts to create, one per channel. Provide at least one post, and at most one post per channel. Items: object.
tagIds
Required
No; body and guard rules apply
Type
array
Details
Tags to apply to this content item. Omit to keep the current tags. An empty list or null removes them all. Items: string.

##### removePostFromContentItem.input

id
Required
Yes
Type
string
Details
The content item to remove the post from.
postId
Required
Yes
Type
string
Details
The post to remove from a content item.

##### searchInstagramAudio.input

audioType
Required
Yes
Type
string
Details
Music or original sound catalog Values: music, originalSound.
channelId
Required
Yes
Type
string
Details
Instagram channel to search audio for
query
Required
Yes
Type
string
Details
Search text. Required. Use trendingInstagramAudio for trending results.

##### tag.input

id
Required
Yes
Type
string
Details
The unique identifier of the tag to fetch.

##### tagsV2.input

filter
Required
No; body and guard rules apply
Type
object
Details
See the full input schema.
organizationId
Required
Yes
Type
string
Details
Organization to list tags for. The caller must be a member of this organization.

##### tagsV2.input.filter

isLocked
Required
No; body and guard rules apply
Type
boolean
Details
Return only locked tags when true, only unlocked tags when false. Omit to return both. See Tag.isLocked for what locking means.

##### trendingInstagramAudio.input

audioType
Required
Yes
Type
string
Details
Music or original sound catalog Values: music, originalSound.
channelId
Required
Yes
Type
string
Details
Instagram channel to load trending audio for

##### updateContentItem.input

id
Required
Yes
Type
string
Details
The content item to update.
targetDate
Required
No; body and guard rules apply
Type
string
Details
Omit to preserve the existing target date. Null clears it.
title
Required
No; body and guard rules apply
Type
string
Details
Omit to preserve the existing title. Null clears it.

##### updateContentItemDraft.input

id
Required
Yes
Type
string
Details
The content item whose channel-less draft is replaced.
draft
Required
Yes
Type
object
Details
See the full input schema.
tagIds
Required
No; body and guard rules apply
Type
array
Details
Tags to apply to this content item. Omit to keep the current tags. An empty list or null removes them all. Items: string.
targetDate
Required
No; body and guard rules apply
Type
string
Details
Date indicating when this piece of content should go out. This is a planning aid only and does not schedule any posts. Omit to preserve the existing target date. Null clears it.

##### updatePostTemplate.input

id
Required
Yes
Type
string
Details
The ID of the template to update.
body
Required
No; body and guard rules apply
Type
string
Details
The main content body of the template, may contain unresolved template placeholders.
description
Required
No; body and guard rules apply
Type
string
Details
A short user-facing description of the template.
emoji
Required
No; body and guard rules apply
Type
string
Details
The emoji associated with the template.
title
Required
No; body and guard rules apply
Type
string
Details
The title of the template.
visibility
Required
No; body and guard rules apply
Type
string
Details
public is rejected — it is only available to official Buffer clients. Values: internal, private, public.

Complete client, OS and desktop setup

Codex

Codex is the current validation priority. Private token paths must exist in the process or remote environment where the server runs.

codex mcp add buffer -- npx -y @thenavidm/buffer-mcp-cli@latest
codex mcp list

Account credentials must reach the server through private environment settings. codex mcp add --env NAME=value stores values in your local config, so never commit that config or put secrets in a shared command. In TOML, the equivalent server is:

[mcp_servers.buffer]
command = "npx"
args = ["-y", "@thenavidm/buffer-mcp-cli@latest"]
env_vars = ["BUFFER_API_KEY", "BUFFER_API_TOKEN", "BUFFER_TOKEN_FILE", "BUFFER_ACCOUNTS", "BUFFER_DEFAULT_ACCOUNT", "BUFFER_ORGANIZATION_ID", "BUFFER_READ_ONLY", "BUFFER_ALLOW_DESTRUCTIVE"]

env_vars forwards those names from the environment available to Codex. If that environment does not contain them, configure private env settings locally. Codex can also call the CLI directly with SKILL.md and --agent output.

Claude Code

For a user-scoped connection, after privately configuring credentials:

claude mcp add --scope user buffer -- npx -y @thenavidm/buffer-mcp-cli@latest
claude mcp list

Use the client's private local environment settings for the account variable if they are not inherited. Claude's -e NAME=value registration option writes values into its config; only use it locally through your secret manager, with no shared command transcript. Never place credentials in a project .mcp.json. Reconnect and ask Claude to verify credentials.

Alternatively install the CLI, make SKILL.md available to Claude, and use shell commands. Registering both surfaces is optional.

Claude Desktop

Install the .mcpb extension

  1. Download buffer-2.0.0.mcpb from GitHub Releases.
  2. In a supported Claude Desktop build, open Settings > Extensions > Advanced settings > Install Extension… and select it.
  3. Enter a private API key in the sensitive setting, or an absolute private token-file path. Leave the unused credential method empty. Requests use Authorization: Bearer at the fixed Buffer endpoint. Configure an optional organization input default privately; it does not narrow a PAT's permissions.
  4. Enable read-only if you want only the 24 read operations. Reconnect and ask for account verification.

The bundle includes production dependencies and no credentials. Use a regular private token-only file if you prefer file-based credentials. The manifest requires Node 22 or newer from a compatible host. Organization policy may restrict custom extensions. Manual bundle updates require installing the new version; no automatic directory updates are promised. GUI installation remains unverified separately from archive/protocol checks.

Manual config

Open Settings > Developer > Edit Config, or use your platform's config file:

OSTypical config path
macOS~/Library/Application Support/Claude/claude_desktop_config.json
Windows%APPDATA%\Claude\claude_desktop_config.json
Linux~/.config/Claude/claude_desktop_config.json; confirm the location through Edit Config in your installed build
{
"mcpServers": {
"buffer": {
"command": "npx",
"args": ["-y", "@thenavidm/buffer-mcp-cli@latest"],
"env": {
"BUFFER_API_KEY": "YOUR_PRIVATE_API_KEY",
"BUFFER_TOKEN_FILE": "",
"BUFFER_ORGANIZATION_ID": "YOUR_ORGANIZATION_ID"}
}
}
}

Replace the placeholders only in your private file. Merge the server entry into an existing mcpServers object instead of replacing other integrations. Fully quit and reopen Claude Desktop. Do not enable an extension and a manual entry with the same name; choose one route.

If a Windows launcher cannot execute npx directly, use "command": "cmd" with "args": ["/c", "npx", "-y", "@thenavidm/buffer-mcp-cli@latest"]. An absolute node executable and installed dist/index.js path also avoids launcher/PATH problems.

Cursor

Use private user settings at ~/.cursor/mcp.json, or Settings > Tools & MCP. Cursor documents environment interpolation and envFile support.

{
"mcpServers": {
"buffer": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@thenavidm/buffer-mcp-cli@latest"],
"env": {
"BUFFER_API_KEY": "${env:BUFFER_API_KEY}",
"BUFFER_TOKEN_FILE": "${env:BUFFER_TOKEN_FILE}",
"BUFFER_ORGANIZATION_ID": "${env:BUFFER_ORGANIZATION_ID}"}
}
}
}

The environment values must exist for the Cursor process. If you use envFile, keep that file private and outside version control. A project's .cursor/mcp.json must not contain actual credentials. Reconnect the server after saving.

VS Code and Copilot

Use MCP: Open User Configuration. VS Code uses servers and secure inputs, rather than a mcpServers root:

{
"inputs": [
{"type": "promptString", "id": "buffer-api-key", "description": "Buffer API key (leave empty for a private token file)", "password": true},
{"type": "promptString", "id": "buffer-token-file", "description": "Optional private token-file path (leave empty for API key)"},
{"type": "promptString", "id": "buffer-organization-id", "description": "Optional Buffer organization input default"}],
"servers": {
"buffer": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@thenavidm/buffer-mcp-cli@latest"],
"env": {
"BUFFER_API_KEY": "${input:buffer-api-key}",
"BUFFER_TOKEN_FILE": "${input:buffer-token-file}",
"BUFFER_ORGANIZATION_ID": "${input:buffer-organization-id}"}
}
}
}

Start Buffer through the MCP controls, approve trust if prompted, and enter credentials in the private input prompts. Workspace .vscode/mcp.json may contain this placeholder-only structure, but never resolved secret values. Remote development runs the server in the selected remote environment, so local file paths refer to that environment.

Windsurf

Open Cascade's MCP settings or edit the private user file ~/.codeium/windsurf/mcp_config.json. Use the Claude Desktop manual mcpServers block above with your locally configured env values. See Windsurf's current MCP documentation. Restart or reconnect Buffer in Cascade; project files must not contain secrets.

Zed

Open Settings > AI > MCP Servers > Add Server > Add Local Server, or your user settings file. Zed uses context_servers:

{
"context_servers": {
"buffer": {
"command": "npx",
"args": ["-y", "@thenavidm/buffer-mcp-cli@latest"],
"env": {
"BUFFER_API_KEY": "YOUR_PRIVATE_API_KEY",
"BUFFER_TOKEN_FILE": "",
"BUFFER_ORGANIZATION_ID": "YOUR_ORGANIZATION_ID"}
}
}
}

Enter actual values only in private user settings. Check the active-server indicator before prompting. Do not wrap command and args inside a nested command object from older Zed examples.

Gemini CLI

Merge the Claude Desktop manual mcpServers block into your private ~/.gemini/settings.json. Configure the private credential values locally, then restart Gemini CLI and inspect /mcp. See Gemini CLI's MCP configuration. Its project settings must not contain real credentials. You can instead use the CLI from an agent shell.

Other local stdio clients use the same command and arguments, adapted to their config format. A client that only accepts a remote MCP URL cannot connect directly: this package does not ship a public HTTP listener. ChatGPT's remote connector setup is not a substitute for local stdio installation.

Docker

Build locally from the reviewed source; no prebuilt registry image is claimed:

git clone https://github.com/thenavidm/buffer-mcp-cli.git
cd buffer-mcp-cli
docker build -t buffer-mcp-cli .
docker run --rm -i -e BUFFER_API_KEY buffer-mcp-cli

Cline and other local MCP clients

Use the client's Add MCP server flow with command npx, arguments -y and @thenavidm/buffer-mcp-cli@latest, stdio transport, and private local BUFFER_API_KEY or BUFFER_TOKEN_FILE settings. UI names depend on the installed client. Reconnect and discover tools before an account call. Browser-only clients need a remote HTTPS connector; use Buffer's official server rather than this local stdio command.

Output, flags and exit codes

Both surfaces return structured JSON, including native GraphQL data and available rate-limit headers. Connection data remains native edges/node/pageInfo; query_pages returns bounded page responses with continuation state.

buffer-cli create-post --help
buffer-cli schema create-post
buffer-cli get-post --id SELECTED_POST --fields id --fields status --agent --select data.post.id,data.post.status
FlagMeaning
--agentJSON, compact, no-input, no-color, yes; does not provide --confirm
--json / --compactJSON output and compact spacing
--select a,b.cKeep selected output paths after receipt
--fields id --fields statusNative upstream field selection for supported named operations
--payload / --payload-fileComplete native input JSON or regular private file; do not mix with input fields
--account NAMESelect one private profile
--confirmApprove the exact requested mutation, subject to enabled policies
--help / schema COMMANDActual discovered flags and full input schema
ExitMeaning
0Successful local result or provider response
2Usage, invalid input or refused mutation
3Not found
4Authentication or forbidden permission
5Provider/GraphQL/typed mutation/network failure
7Rate limit or quota failure
10Nothing configured or invalid private profile/token configuration

GraphQL can fail inside HTTP 200. errors arrays fail even with partial data; typed mutation error unions fail rather than reporting success. Named mutations require a recognized successful result type. Acceptance/status from Buffer is not an assertion that a downstream social network completed publishing.

Official and pinned community comparisons

Surface and current evidence
https://mcp.buffer.com/mcp; 20 documented tools plus generic GraphQL query/mutation
Tradeoff
Provider-maintained remote connection and client approval flow. Generic GraphQL already reaches the API; do not claim ours uniquely supports the full API. Live authenticated discovery was not performed in this review.
Surface and current evidence
@bufferapp/cli 1.2.2; buffer; 35 published generated operations
Tradeoff
Native inputs, schema exploration, upstream --fields, dry-run, JSON/stdin, doctor, contexts and Codex/Claude skills already exist. Setup and update flows remain useful.
This owned package
Surface and current evidence
Shared buffer-cli / local MCP / versioned .mcpb; 35 named operations plus six useful helpers
Tradeoff
Enforces mutation confirmation/read-only policies in both surfaces, isolated private profiles, credential redaction, local previews and bounded read pagination. Requires Node 22+. No automatic OAuth renewal or official interactive setup.
Surface and current evidence
Current reference: 42 root operations
Tradeoff
Seven newer snippet/tag roots are marked experimental; generic GraphQL can request them subject to provider availability. They are not presented as stable named-tool superiority.
Surface and current evidence
Python local MCP, 13 source-declared tools
Tradeoff
Current GraphQL workflows include post batches, R2 media hosting and optional Twitter-side integration. No dedicated task CLI is established by this source review. update_post performs delete then create, which can partially fail; it is not a transactional update. Those integrations are useful capabilities absent from this wrapper.
Surface and current evidence
Node MCP for legacy API
Tradeoff
Source targets api.bufferapp.com/1 and old profiles/updates/schedules. It is not evidence of current GraphQL parity. Only source was reviewed; account compatibility was not exercised.

Checked October 3, 2026. The current reference, changelog and published official 1.2.2 archive were read directly. A clean anonymous npm 10.9.8 install of that archive fails EUNSUPPORTEDPROTOCOL because its published commander dependency is catalog:. No dependency rewrite or workaround was used. This is a dated installer observation, not a permanent provider limitation or evidence that every installer fails.

To compare local confirmation behavior despite that packaging issue, a network-free fixture exercises the actual published executePipeline and pure helpers with its real generated createPost input/document, a fake token resolver and a mocked GraphQL response. Valid shareNow input without a confirm flag reaches the injected request once; official dry-run reaches it zero times. This is an isolated published function fixture, not a complete official CLI installation or a claim that remote MCP clients lack approvals. The owned equivalent refuses before transmission without explicit confirmation; read-only/disabled policies refuse even confirmed calls.

Pinned community sources were read without executing them or using provider accounts: GraphQL d8516a6 and legacy REST 25eeb35. Their advertised capabilities are not treated as validated account outcomes.

Both official CLI and this package perform upstream field selection and detect typed API errors. Neither capability is claimed unique. Our local --select additionally trims already received output; it cannot reduce upstream work. The owned recurring workflow is deliberate reviewed publishing or administration across isolated profiles with shared enforced policy and bounded reads. No token, speed, success-rate or global superiority claim is inferred from schemas, SEO or tool counts. Provider-account outcomes, desktop GUI and matched Codex task usage remain separate.

Versions and migration

ComponentCurrent baseline
Package / desktop2.0.0
Named operations / current reference35 generated / 42 roots, seven experimental newer roots via generic
Shared catalogue41 tools: 24 reads, 17 confirmed mutations
Official CLI inspected@bufferapp/cli 1.2.2 (published package)
Official MCP20 documented tools plus generic GraphQL; no authenticated discovery
Node22+; CI targets 22/24 on macOS/Linux/Windows
@modelcontextprotocol/sdk1.32.0
ajv8.20.0
ajv-formats3.0.1
graphql16.14.2
typescript7.0.2
vitest5.0.3
vite8.3.2
acorn8.18.0
@anthropic-ai/mcpb2.1.2

Checked October 3, 2026. CHANGELOG records dated changes. Package/manifest, annotated default-branch tag, npm latest and desktop filename must agree. Preserve AGPL and private legacy history. Refresh through reviewed, checksum-recorded official schemas; never copy a public schema example without scanning it.

The private 1.0.0 legacy MCP had no declared CLI binaries and used older query/input shapes. Current organizations are read through account.organizations, and channel uses channel(input:{id}), not channel(id). New named tools use get_ for queries and native snake_case for mutations; discover current commands instead of relying on old names. Every mutation now requires confirmation. BUFFER_API_TOKEN remains an alias, while native current input and exact role restrictions take precedence. No prior public npm release is assumed.

Updates and removal

npx -y @thenavidm/buffer-mcp-cli@latest re-resolves the latest registry tag when the client launches; restart to run the updated process. Global installs require npm update -g @thenavidm/buffer-mcp-cli; pinned versions require an intentional change. Desktop archives are versioned and must be downloaded/reinstalled separately. Clones require reviewing the changelog, pulling, npm ci and rebuilding.

npm update -g @thenavidm/buffer-mcp-cli
buffer-cli --version
# Disconnect the server in each client before local removal.
npm uninstall -g @thenavidm/buffer-mcp-cli

Remove the matching client entry or desktop extension and separately remove any registered skill. Delete/revoke private grants using provider controls if requested. Local uninstall does not revoke credentials, disconnect social accounts or undo scheduled/published posts. Keep private input/audit files only for your actual needs.

Validation and remaining evidence

Forty behavior/shared-CLI tests and actual stdio discovery pass: 41 tools, 24 reads and 17 confirmed mutations. Schema refresh statically parses current published metadata without executing vendor modules; source checksums are recorded. The official comparison is an isolated actual published-pipeline fixture, not a full CLI installation.

All seven source CI jobs passed on Node 22/24 across macOS, Linux and Windows, including desktop packaging. The annotated 2.0.0 release published npm and a versioned desktop archive. A fresh anonymous npm install and the downloaded desktop package both expose 41 tools and 24 in read-only mode; both public artifacts have zero credential-scan findings. Runtime audit has zero findings. Private legacy history is preserved; source/npm/desktop artifacts are scanned for secrets. Provider account outcomes, desktop GUI installation, fresh Codex equivalent-task/token measurements and private scene deployment remain separately tracked. Neither surface requires Claude Code, and its benchmarks remain deferred.

More tools for your publishing workflow

Connect the tools needed for the exact work you want to do.

Buffer MCP Server & CLI FAQs

Official alternatives, private PAT/OAuth, profiles, drafts, scheduling, analytics, pagination, desktop setup and safeguards.

No.

Navid Media builds this owned wrapper.

Buffer maintains separate official MCP and CLI products, which are compared here.

The useful added workflow is one shared enforced confirmation/read-only policy across local surfaces, isolated profiles and bounded native read pagination.

Official field selection, dry-run and API coverage already exist; no blanket superiority is claimed.

Yes. buffer-mcp and buffer-cli share 41 tools, handlers, input schemas, private accounts and guard.

The AGPL wrapper is free.

Buffer plans, API quota, account roles and social-platform policies remain separate.

Use the intended account's publish.buffer.com/settings/api controls.

Store it privately in BUFFER_API_KEY or a regular token-only BUFFER_TOKEN_FILE; login only prints instructions.

Personal API keys can act across accessible organizations.

A local organization default/profile is input routing and cannot narrow those provider permissions.

Yes.

Unique named private profiles select their own keys/files/default organization.

They never inherit a global credential or organization when the profile array is configured.

Use the documented local stdio registration or shared CLI.

Codex is the priority; fresh matched task/token usage remains pending.

Use Node 22+ on the chosen OS.

GUI environment/PATH and Windows private-file ACLs need separate setup.

Cross-platform CI is required before release.

The versioned .mcpb bundles production dependencies and private configuration fields for a compatible desktop host.

Actual GUI installation remains a separate acceptance check.

No. --agent/--yes set output/noninteractive behavior.

The precise requested mutation still needs --confirm or confirm=true and enabled policies.

Yes.

Mutations disappear from discovery and direct calls refuse.

Generic query parses operation type and refuses mutation/subscription/multiple-operation documents.

No.

It validates native structure and fields and returns document/variables without credentials or requests.

Permissions, media, platform and scheduling rules remain remote checks.

Buffer reports GraphQL errors and typed mutation errors in the JSON body.

The wrapper checks them, and named mutations require a recognized successful result type.

No local media upload is implemented.

Supply the current native asset URLs that Buffer can reach and that the chosen platform supports; local file paths are not uploads.

Ordinary reads fetch one page. query_pages fetches one to five pages, reports continuation and stops on malformed/repeated cursors; it never claims an unbounded complete library.

Generic GraphQL can request the seven newer documented experimental roots, subject to provider availability and native variables.

They are not stable dedicated named tools in this release.

No automatic OAuth exchange/refresh is implemented.

Analytics requires the current PAT insightsRead permission, supported data and a date window up to 365 days; current OAuth grants cannot request that scope.

Only a matched successful Codex task with actual usage can establish that.

Upstream fields and local output selection help bound data, but counts, character estimates and borrowed metrics do not prove token savings.

Restart @latest client launches, update global npm installs separately, and reinstall the versioned desktop bundle separately.

Uninstall does not revoke keys or undo scheduled/published posts.

Navid Moazzez

AI business strategist & AI OS builder

Navid Moazzez helps creators and founders master AI and build their own AI Operating System (AI OS) to automate their business and life.

Navid.me is reader-supported. When you buy through links on this site, I may earn an affiliate commission. Learn more.

More MCP servers & CLIs

Related free tools

Free AI newsletter

The most actionable AI newsletter for founders

Every week, get proven AI strategies, curated tools, and step-by-step systems to grow your audience, create better content, and build a profitable creator business.

No fluff, no filler, no BS. Just five minutes each week that might level up your online business and life.

P.S. Sign up now to get free access to my ultimate AI tools guide for creators.

Loved by 10,000+ readers