An open source Buffer MCP and shared CLI with 41 tools, private profiles and explicit mutation approval.
Key takeaways
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 askingRead 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.
Set up Buffer access
Private API key and account access
- Sign in to the intended account's API settings. Create the API key needed for this task and review that client's current quota.
- 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.
- 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.
- 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.
- 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:
| Scope | Purpose |
|---|---|
| posts:read | Read posts and queues |
| posts:write | Create and manage posts |
| ideas:read | Read ideas |
| ideas:write | Create and manage ideas |
| account:read | Read account information |
| account:write | Manage permitted account settings |
| offline_access | Request 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:
- API keys / app clients
- 1 / 1
- 15 minutes
- 100
- 24 hours
- 250
- 30 days
- 3000
- API keys / app clients
- 3 / 3
- 15 minutes
- 100
- 24 hours
- 250
- 30 days
- 7500
- 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 --agentbuffer-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 --agentBare 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 --agentThe 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:
| Flag | What it does |
|---|---|
| --json | Structured JSON |
| --compact | One-line JSON |
| --agent | Compact JSON without prompts/color; no mutation approval |
| --select a,b.c | Trim local result after receipt |
| --fields FIELD | Repeat for explicit upstream paths |
| --confirm | Approve the exact requested mutation |
| --account NAME | Select one private profile |
| --payload / --payload-file | One native input object instead of input flags |
A script can branch on the exit code:
| Exit code | What it means |
|---|---|
| 0 | Success |
| 2 | Invalid input or refused mutation |
| 3 | Not found |
| 4 | Authentication/permission failure |
| 5 | GraphQL/typed/provider/transport failure |
| 7 | Rate limit/quota |
| 10 | Missing 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 --agentPreview 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 --agentquery_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
channelsthe 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.
- Default
- Credentials
- What it does
- Private account-wide PAT or authorized OAuth access token
- Default
- Credentials
- What it does
- Legacy alias; API_KEY wins if both exist
- Default
- Credentials
- What it does
- Regular owner-only token-only file, max 64 KiB; overrides environment key
- Default
- Credentials
- What it does
- Private named profile array; no global credential/default inheritance
- Default
- Credentials
- What it does
- Exact configured label; default first entry
- Default
- Credentials
- What it does
- Optional input default for single account; does not restrict permissions
- Default
- Safety
- What it does
- 1/true hides and refuses mutations; default false
- Default
- Safety
- What it does
- 0/false refuses even confirmed mutations; default true
- Default
- Safety
- What it does
- Private append-only guard decisions, no input content
- Default
- Tuning
- What it does
- Default 30000, range 100–300000
- 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 see | What to do |
|---|---|
| Exit 10 | Check private credential/file permissions, exact account label and GUI environment. |
| 401/403 | Check actual provider grant, organization/channel roles and account-wide PAT permissions. |
| Mutation refused | Confirm the exact user-requested action and inspect local policy. |
| Native input invalid | Read full nested schema and choose one input route. |
| Unknown fields | Use get_operation_schema and relative items/pageInfo paths. |
| HTTP 200 failure | Read safe error code; typed mutation errors are not success. |
| 429 or rate limit | Inspect shared provider bucket/reset; no automatic retry. |
| Unknown outcome | Inspect the original/returned post state before repeating. |
| Missing analytics | PAT insightsRead, supported data, daily refresh and date range. |
| Cursor missing/repeated | Stop and inspect state; never claim the whole library is fetched. |
| OAuth expiry | Renew through your issuer; this wrapper does not refresh. |
| Desktop rejected | Check 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
afterto 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
saveToDraftoff. 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
threadarray.
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
internalvisibility this is the team scope; forprivateit'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
privateif omitted.publicis 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
threadarray.
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
publicis 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
- 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
afterto 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:
presentreturns only dated items,absentonly 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
saveToDraftoff. 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
threadarray.
##### 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.thumbnailOffsetto 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
texton 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
texton 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
texton 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
texton 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
saveToDraftoff. 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
threadarray.
##### 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
texton 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.thumbnailOffsetto 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
texton 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
texton 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
texton 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
internalvisibility this is the team scope; forprivateit'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
privateif omitted.publicis 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
threadarray.
##### 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.
absentcannot be combined withdueAt, 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.
postis a fallback bucket rather than one stored format: it matches every post the other formats do not claim, which is whatPost.metadata.typereports for the same post.carouselandthreadare 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.isLockedfor 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
publicis 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 listAccount 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 listUse 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
- Download
buffer-2.0.0.mcpbfrom GitHub Releases. - In a supported Claude Desktop build, open Settings > Extensions > Advanced settings > Install Extension… and select it.
- 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.
- 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:
| OS | Typical 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-cliCline 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| Flag | Meaning |
|---|---|
| --agent | JSON, compact, no-input, no-color, yes; does not provide --confirm |
| --json / --compact | JSON output and compact spacing |
| --select a,b.c | Keep selected output paths after receipt |
| --fields id --fields status | Native upstream field selection for supported named operations |
| --payload / --payload-file | Complete native input JSON or regular private file; do not mix with input fields |
| --account NAME | Select one private profile |
| --confirm | Approve the exact requested mutation, subject to enabled policies |
| --help / schema COMMAND | Actual discovered flags and full input schema |
| Exit | Meaning |
|---|---|
| 0 | Successful local result or provider response |
| 2 | Usage, invalid input or refused mutation |
| 3 | Not found |
| 4 | Authentication or forbidden permission |
| 5 | Provider/GraphQL/typed mutation/network failure |
| 7 | Rate limit or quota failure |
| 10 | Nothing 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.
- 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
| Component | Current baseline |
|---|---|
Package / desktop | 2.0.0 |
Named operations / current reference | 35 generated / 42 roots, seven experimental newer roots via generic |
Shared catalogue | 41 tools: 24 reads, 17 confirmed mutations |
Official CLI inspected | @bufferapp/cli 1.2.2 (published package) |
Official MCP | 20 documented tools plus generic GraphQL; no authenticated discovery |
Node | 22+; CI targets 22/24 on macOS/Linux/Windows |
@modelcontextprotocol/sdk | 1.32.0 |
ajv | 8.20.0 |
ajv-formats | 3.0.1 |
graphql | 16.14.2 |
typescript | 7.0.2 |
vitest | 5.0.3 |
vite | 8.3.2 |
acorn | 8.18.0 |
@anthropic-ai/mcpb | 2.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-cliRemove 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.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 newsletterThe 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.












