The Buffer connector lets your AI agent act in each user's Buffer account. Each user signs in to Buffer once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 23 tools.
- Tools
- 23
- What they doRead · write · destructive
- 12 · 8 · 312 read8 write3 destructive
- Users sign in with
- OAuth
- OAuth app
- Your own Buffer app
Setup
Install the SDK
Terminal window npm install @scalekit-sdk/node dotenvTerminal window pip install scalekit-sdk-python python-dotenvSet your credentials
Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret>Create the Buffer connection
In AgentKit > Connections, create a Buffer connection and copy its redirect URI. The name you give it is the
connection_nameyour code passes. See Configure connections.Register an OAuth app
Buffer connections use your own OAuth app. Register one with Buffer and add the redirect URI you copied.
Then enter the app's Client ID and Client Secret on the Buffer connection.
Authorize a user and make your first call
quickstart.mts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'import { createInterface } from 'node:readline/promises'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENVIRONMENT_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'buffer'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize Buffer:', link)const rl = createInterface({ input: process.stdin, output: process.stdout })await rl.question('Press Enter after authorizing...')rl.close()// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'buffer_get_account',toolInput: {},})console.log(result)Terminal window npx tsx quickstart.mtsquickstart.py import osfrom scalekit import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "buffer"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize Buffer:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="buffer_get_account",connection_name=connection_name,identifier=identifier,)print(result)Terminal window python quickstart.pyEach user signs in once. See Authorize a user for the full flow and statuses.
Tools
Pass the exact name toexecute_toolbuffer_get_accountGet the authenticated Buffer account profile.Read-onlyGet Account
Get the authenticated Buffer account profile. Returns account id, email, name, timezone, avatar url and creation date. Use get_account to identify the connected user. Use list_organizations to find organization ids.
Inputs
This tool takes no inputs.
buffer_get_channelGet a single Buffer channel by id.Read-onlyGet Channel
Get a single Buffer channel by id. Returns channel name, service, type, timezone, connection, lock and queue status, and posting schedule. Use get_channel when you already have the channel id. Use list_channels to discover channels in an organization.
Inputs
idstringrequired- ID of the channel to fetch. Get it from buffer_list_channels.
buffer_get_daily_posting_limitsCheck how many posts are sent and scheduled for channels on a given day against each network's daily limit.Read-onlyGet Daily Posting Limits
Check how many posts are sent and scheduled for channels on a given day against each network's daily limit. Returns per channel the sent count, scheduled count, limit (null means unlimited) and whether the limit is reached. Use get_daily_posting_limits before scheduling many posts on one day. Use list_posts to see the posts themselves.
Inputs
channelIdsarrayrequired- IDs of the channels to check. All channels must belong to the same organization.
datestring- Day to check as an ISO 8601 datetime. Defaults to today when omitted.
buffer_get_postGet a single Buffer post by id.Read-onlyGet Post
Get a single Buffer post by id. Returns post text, status, share mode, schedule and sent times, channel, tags, assets and any publishing error. Use get_post when you have the post id. Use list_posts to search for posts.
Inputs
idstringrequired- ID of the post to fetch. Get it from buffer_list_posts or the create_post response.
buffer_get_tagGet a single Buffer tag by id.Read-onlyGet Tag
Get a single Buffer tag by id. Returns the tag id, name, color, color name and lock state. Use get_tag when you have the tag id. Use list_tags to browse an organization's tags.
Inputs
idstringrequired- ID of the tag to fetch. Get it from buffer_list_tags.
buffer_list_channelsList the connected social channels of a Buffer organization, optionally only locked or unlocked ones.Read-onlyList Channels
List the connected social channels of a Buffer organization, optionally only locked or unlocked ones. Returns channel id, name, service, type, timezone, connection and queue status, and posting schedule. Use list_channels to find the channelId needed by create_post and list_posts. Use get_channel for one channel by id.
Inputs
organizationIdstringrequired- ID of the Buffer organization that owns the channels. Get it from buffer_list_organizations.
isLockedboolean- When true return only locked channels, when false only unlocked channels. Omit to return all channels.
productstring- Only return channels supported by this Buffer product. Omit to return all channels.one of
analyzebuffercommentsengagepublishstartPage
buffer_list_idea_groupsList the idea groups (board columns) of a Buffer organization.Read-onlyList Idea Groups
List the idea groups (board columns) of a Buffer organization. Returns each group's id, name and lock state. Use list_idea_groups to find the group ids used to filter list_ideas.
Inputs
organizationIdstringrequired- ID of the Buffer organization that owns the idea groups. Get it from buffer_list_organizations.
buffer_list_ideasList ideas in a Buffer organization, optionally filtered by group or tag, with cursor pagination.Read-onlyList Ideas
List ideas in a Buffer organization, optionally filtered by group or tag, with cursor pagination. Returns idea id, title, text, target date, services, tags, media and group id, plus pageInfo.endCursor for the next page. Use list_ideas to browse saved content ideas. Use list_idea_groups to find group ids.
Inputs
organizationIdstringrequired- ID of the Buffer organization that owns the ideas. Get it from buffer_list_organizations.
afterstring- Opaque pagination cursor. Pass pageInfo.endCursor from the previous response to fetch the next page; omit for the first page.
firstinteger- Number of items to return per page (maximum 100). Omit to use Buffer's default page size.
groupIdsarray- Only return ideas in these idea group IDs. Takes precedence over groupMembership.
groupMembershipstring- Return only grouped or only ungrouped ideas. Ignored when groupIds is set.one of
groupedungrouped tagIdsarray- Only return ideas carrying any of these tag IDs.
buffer_list_organizationsList the Buffer organizations the authenticated account belongs to.Read-onlyList Organizations
List the Buffer organizations the authenticated account belongs to. Returns each organization's id, name, owner email and connected channel count. Use list_organizations first to get the organizationId required by list_channels, list_posts, list_ideas and tag tools.
Inputs
This tool takes no inputs.
buffer_list_postsList posts in a Buffer organization, filtered by status, channel, tag or date range, with cursor pagination.Read-onlyList Posts
List posts in a Buffer organization, filtered by status, channel, tag or date range, with cursor pagination. Returns post id, text, status, schedule time, channel, tags and assets for each post, plus pageInfo.endCursor for the next page. Use list_posts to browse or find posts. Use get_post for one post by id.
Inputs
organizationIdstringrequired- ID of the Buffer organization that owns the posts. Get it from buffer_list_organizations.
afterstring- Opaque pagination cursor. Pass pageInfo.endCursor from the previous response to fetch the next page; omit for the first page.
channelIdsarray- Only return posts for these channel IDs.
createdAtEndstring- Only return posts created at or before this ISO 8601 datetime.
createdAtStartstring- Only return posts created at or after this ISO 8601 datetime.
dueAtEndstring- Only return posts scheduled at or before this ISO 8601 datetime.
dueAtStartstring- Only return posts scheduled at or after this ISO 8601 datetime.
firstinteger- Number of items to return per page (maximum 100). Omit to use Buffer's default page size.
sortDirectionstring- Sort direction when sortField is set: asc or desc. Defaults to desc when sortField is set.one of
ascdesc sortFieldstring- Field to sort by: dueAt or createdAt. Omit to use Buffer's default order.one of
dueAtcreatedAt statusarray- Only return posts in these statuses. Valid values: draft, error, needs_approval, scheduled, sending, sent.
tagIdsarray- Only return posts carrying any of these tag IDs.
buffer_list_snippetsList the saved hashtag snippets of a Buffer organization sorted by name, with cursor pagination.Read-onlyList Snippets
List the saved hashtag snippets of a Buffer organization sorted by name, with cursor pagination. Returns snippet id, name and text, plus pageInfo.endCursor for the next page. Use list_snippets to find snippet ids for update_snippet and delete_snippet.
Inputs
organizationIdstringrequired- ID of the Buffer organization that owns the snippets. Get it from buffer_list_organizations.
afterstring- Opaque pagination cursor. Pass pageInfo.endCursor from the previous response to fetch the next page; omit for the first page.
firstinteger- Number of items to return per page (maximum 100). Omit to use Buffer's default page size.
buffer_create_ideaCreate an idea in a Buffer organization to capture content before it is assigned to a channel.WriteCreate Idea
Create an idea in a Buffer organization to capture content before it is assigned to a channel. Returns the created idea with id, title, text, services, media and timestamps. Use create_idea to save draft content for later. Use create_post to schedule content on a channel now.
Inputs
organizationIdstringrequired- ID of the Buffer organization that owns the idea. Get it from buffer_list_organizations.
datestring- Target date for the idea as an ISO 8601 datetime, often used for planning.
imageUrlsarray- Publicly accessible HTTPS URLs of images to attach to the idea. Video is not supported for ideas.
servicesarray- Social networks the idea targets. Valid values: bluesky, facebook, googlebusiness, instagram, linkedin, mastodon, pinterest, startPage, substack, threads, tiktok, twitter, whatsapp, youtube.
textstring- Main body text of the idea.
titlestring- Title or headline of the idea.
buffer_create_postCreate a post on one Buffer channel: add it to the queue, share it next or now, schedule it for a time, or save it as a draft.WriteCreate Post
Create a post on one Buffer channel: add it to the queue, share it next or now, schedule it for a time, or save it as a draft. Returns the created post with id, text, status, schedule time, channel and assets, or an error message when Buffer rejects the post. Use create_post to publish new content. Use edit_post to change an existing post. Use create_idea to capture content without a channel. Requires the channel id from list_channels.
Inputs
channelIdstringrequired- ID of the channel to post to. Get it from buffer_list_channels.
modestringrequired- How the post is scheduled: addToQueue (next queue slot), shareNext (first queue slot), shareNow (publish immediately) or customScheduled (publish at dueAt).one of
addToQueueshareNextshareNowcustomScheduled dueAtstring- ISO 8601 datetime to publish at. Required when mode is customScheduled.
imageUrlsarray- Publicly accessible HTTPS URLs of images to attach, in order. Buffer does not host media, so the URLs must be directly downloadable.
metadataobject- Network-specific post options keyed by service, for example {"instagram": {"type": "post", "shouldShareToFeed": true}} or {"twitter": {"thread": [{"text": "1/ Hello"}, {"text": "2/ World"}]}}. Supported keys are bluesky, facebook, google, instagram, linkedin, mastodon, pinterest, substack, threads, tiktok, twitter and youtube. Instagram posts require type and shouldShareToFeed.
saveToDraftboolean- When true the post is saved as a draft and not scheduled. Posting limits are not checked for drafts.
schedulingTypestring- automatic publishes the post by itself, notification sends a reminder to publish it manually. Defaults to automatic.one of
automaticnotification tagIdsarray- IDs of tags to apply to the post. Get them from buffer_list_tags.
textstring- Text of the post. Buffer enforces each network's character limit. For threaded posts it must match the first thread entry in metadata.
videoUrlstring- Publicly accessible HTTPS URL of one video to attach. Buffer does not host media, so the URL must be directly downloadable.
buffer_create_snippetCreate a saved hashtag snippet in a Buffer organization.WriteCreate Snippet
Create a saved hashtag snippet in a Buffer organization. Returns the created snippet with id, name and text, or an error message when the name or text is empty or too long. Use create_snippet to save reusable hashtags. Use update_snippet to change one.
Inputs
namestringrequired- Display name of the snippet.
organizationIdstringrequired- ID of the Buffer organization that owns the snippet. Get it from buffer_list_organizations.
textstringrequired- The hashtags inserted into a post when the snippet is used.
buffer_create_tagCreate a tag in a Buffer organization with a name and color.WriteCreate Tag
Create a tag in a Buffer organization with a name and color. Returns the created tag, or an error message when the name is a duplicate or the plan's tag limit is reached. Use create_tag to add a label. Use update_tag to rename or recolor an existing tag. The caller must be an administrator of the organization.
Inputs
colorstringrequired- Tag color as a hex triplet: # followed by exactly six hex digits. Shorthand such as #F51 is rejected.
namestringrequired- Tag display name, 1 to 100 characters, unique within the organization (comparison is case-sensitive).
organizationIdstringrequired- ID of the Buffer organization that owns the tag. Get it from buffer_list_organizations.
buffer_edit_postEdit an existing Buffer post: change its text, schedule, mode, tags, media or draft state.WriteEdit Post
Edit an existing Buffer post: change its text, schedule, mode, tags, media or draft state. Omitted fields keep their current value. Returns the updated post, or an error message when Buffer rejects the edit. Use edit_post to change a post. Use move_post_in_queue to only reorder a queued post. Use create_post for new posts. Requires the post id from list_posts or get_post.
- Idempotent
Inputs
idstringrequired- ID of the post to edit. Get it from buffer_list_posts.
dueAtstring- New ISO 8601 publish time. Use together with mode customScheduled.
imageUrlsarray- Replaces all existing media. Publicly accessible HTTPS URLs of images to attach, in order. Buffer does not host media, so the URLs must be directly downloadable.
metadataobject- Network-specific post options keyed by service, for example {"instagram": {"type": "post", "shouldShareToFeed": true}} or {"twitter": {"thread": [{"text": "1/ Hello"}, {"text": "2/ World"}]}}. Supported keys are bluesky, facebook, google, instagram, linkedin, mastodon, pinterest, substack, threads, tiktok, twitter and youtube. Instagram posts require type and shouldShareToFeed.
modestring- New scheduling mode: addToQueue, shareNext, shareNow or customScheduled. Omit to leave scheduling unchanged.one of
addToQueueshareNextshareNowcustomScheduled saveToDraftboolean- When true, convert the post to a draft instead of keeping it scheduled.
schedulingTypestring- Change between automatic publishing and notification reminders. Omit to leave unchanged.one of
automaticnotification tagIdsarray- IDs of tags to apply to the post. Get them from buffer_list_tags.
textstring- New text for the post. Omit to keep the current text.
videoUrlstring- Publicly accessible HTTPS URL of one video to attach. Buffer does not host media, so the URL must be directly downloadable.
buffer_move_post_in_queueMove a queued Buffer post to the top or bottom of its channel's queue without changing its content.WriteMove Post In Queue
Move a queued Buffer post to the top or bottom of its channel's queue without changing its content. Returns the updated post with its new schedule time, or an error message. Use move_post_in_queue to reorder the queue. Use edit_post to change content or time. Requires the post id of a queued post from list_posts.
- Idempotent
Inputs
idstringrequired- ID of the queued post to move. Get it from buffer_list_posts.
positionstringrequired- Where to move the post in the channel queue: top takes the next slot, bottom takes the last slot.one of
topbottom
buffer_update_snippetReplace the name and text of a Buffer snippet.WriteUpdate Snippet
Replace the name and text of a Buffer snippet. Both are replaced, so send the current value for the one you are not changing. Returns the updated snippet, or an error message. Use update_snippet to edit a snippet. Use delete_snippet to remove it. Requires the snippet id from list_snippets.
- Idempotent
Inputs
idstringrequired- ID of the snippet to update. Get it from buffer_list_snippets.
namestringrequired- Display name of the snippet.
organizationIdstringrequired- ID of the Buffer organization that owns the snippet. Get it from buffer_list_organizations.
textstringrequired- The hashtags inserted into a post when the snippet is used.
buffer_update_tagRename or recolor a Buffer tag.WriteUpdate Tag
Rename or recolor a Buffer tag. Both name and color are replaced, so send the current value for the one you are not changing. Returns the updated tag, or an error message when the name is a duplicate or the tag is locked. Use update_tag to edit a tag. Use delete_tag to remove it. Requires the tag id from list_tags and administrator access.
- Idempotent
Inputs
colorstringrequired- Tag color as a hex triplet: # followed by exactly six hex digits. Shorthand such as #F51 is rejected.
idstringrequired- ID of the tag to update. Get it from buffer_list_tags.
namestringrequired- Tag display name, 1 to 100 characters, unique within the organization (comparison is case-sensitive).
buffer_delete_postPermanently delete a Buffer post by id.DestructiveDelete Post
Permanently delete a Buffer post by id. Returns the id of the deleted post, or an error message when the post cannot be deleted. Use delete_post to remove a post. Use edit_post with saveToDraft to unschedule it without deleting. Requires the post id from list_posts.
- Idempotent
Inputs
idstringrequired- ID of the post to delete. Get it from buffer_list_posts.
buffer_delete_snippetPermanently delete a Buffer snippet.DestructiveDelete Snippet
Permanently delete a Buffer snippet. Returns the id of the deleted snippet, or an error message. Use delete_snippet to remove a snippet. Use update_snippet to edit instead. Requires the snippet id from list_snippets.
- Idempotent
Inputs
idstringrequired- ID of the snippet to delete. Get it from buffer_list_snippets.
organizationIdstringrequired- ID of the Buffer organization that owns the snippet. Get it from buffer_list_organizations.
buffer_delete_tagPermanently delete a Buffer tag and remove it from every post, idea and content item that carries it.DestructiveDelete Tag
Permanently delete a Buffer tag and remove it from every post, idea and content item that carries it. Returns the id of the deleted tag, or an error message. Use delete_tag to remove a tag. Posts and ideas that carried it are kept. Requires the tag id from list_tags and administrator access.
- Idempotent
Inputs
idstringrequired- ID of the tag to delete. Get it from buffer_list_tags.
No tools match.