Schedule, create, and manage social media posts via the Buffer GraphQL API. Use this skill when the user wants to post to social media through Buffer, schedule posts, create ideas, list channels, retrieve posts, or manage their Buffer queue. Triggers on: Buffer, schedule a post, publish to social media, Buffer API, social media queue, Buffer channels, create Buffer post, Buffer idea, or any mention of posting to LinkedIn/Twitter/Instagram/Facebook/Bluesky/Threads/Pinterest/Mastodon/YouTube/TikTok via Buffer.
Schedule, create, and manage social media posts via the Buffer GraphQL API. Use this skill when the user wants to post to social media through Buffer, schedule posts, create ideas, list channels, retrieve posts, or manage their Buffer queue. Triggers on: Buffer, schedule a post, publish to social media, Buffer API, social media queue, Buffer channels, create Buffer post, Buffer idea, or any mention of posting to LinkedIn/Twitter/Instagram/Facebook/Bluesky/Threads/Pinterest/Mastodon/YouTube/TikTok via Buffer.
Buffer GraphQL API
Schedule, create, and manage social media posts through Buffer's GraphQL API.
query GetChannel {
channel(input:{channelId:"YOUR_CHANNEL_ID"}){
id
name
service
type
metadata {...on LinkedInMetadata { handle }...on TwitterMetadata { handle }...on FacebookMetadata { facebookPageName }...on InstagramMetadata { handle }}}}
Creating Posts
Text Post
mutation CreatePost {
createPost(input:{text:"Hello from the Buffer API!",
channelId:"YOUR_CHANNEL_ID",
schedulingType: automatic,
mode: addToQueue
}){...on PostActionSuccess {
post {
id
text
status
}}...on MutationError {
message
}}}
Image Post
Same as text post, with assets.images:
mutation CreateImagePost {
createPost(input:{text:"Check out this image!",
channelId:"YOUR_CHANNEL_ID",
schedulingType: automatic,
mode: addToQueue,
assets:{images:[{url:"https://example.com/image.jpg"}]}}){...on PostActionSuccess {
post {
id
text
assets { id mimeType }}}...on MutationError {
message
}}}
Scheduled Post (Specific Time)
Use mode: customSchedule with a dueAt ISO 8601 timestamp:
mutation CreateScheduledPost {
createPost(input:{text:"Posting at a specific time",
channelId:"YOUR_CHANNEL_ID",
schedulingType: automatic,
mode: customSchedule,
dueAt:"2026-04-01T14:00:00.000Z"}){...on PostActionSuccess {
post { id text status }}...on MutationError { message }}}
Share Now
Use mode: shareNow:
mutation ShareNow {
createPost(input:{text:"Publishing immediately!",
channelId:"YOUR_CHANNEL_ID",
schedulingType: automatic,
mode: shareNow
}){...on PostActionSuccess {
post { id text status }}...on MutationError { message }}}
Share Next
Use mode: shareNext to push the post to the front of the queue:
mutation ShareNext {
createPost(input:{text:"This goes next in the queue",
channelId:"YOUR_CHANNEL_ID",
schedulingType: automatic,
mode: shareNext
}){...on PostActionSuccess {
post { id text status }}...on MutationError { message }}}
mutation CreateIdea {
createIdea(input:{organizationId:"YOUR_ORG_ID",
content:{title:"Blog post idea"text:"Write about the new GraphQL API features"}}){...on Idea {
id
content { title text }}}}
Retrieving Posts
Get Scheduled Posts
query GetScheduledPosts {
posts(input:{organizationId:"YOUR_ORG_ID",
filter:{status:[scheduled]},
sort:[{field: dueAt, direction: asc }]}){
totalCount
edges {
node {
id
text
status
createdAt
dueAt
channelId
}}
pageInfo {
hasNextPage
endCursor
}}}
Get Sent Posts for a Channel
query GetSentPosts {
posts(input:{organizationId:"YOUR_ORG_ID",
filter:{status:[sent],
channelIds:["YOUR_CHANNEL_ID"]}}){
edges {
node {
id
text
createdAt
channelId
}}}}
Iterative Scheduling: Do not expect complex GraphQL payloads to perfectly schedule multi-asset posts on the first try. Draft the payload, test it as a draft or send it to the ideas board, isolate any specific schema or media attachment errors, refine ONE field at a time, and re-test until the post format is correct.
Vibe Coding: Commit your working GraphQL queries or scheduling scripts locally before attempting destructive operations or bulk queue modifications.
Error Handling
Mutation Errors (Recoverable)
Returned as typed union members. Always include ... on MutationError { message } in mutations:
...on PostActionSuccess { post { id }}...on MutationError { message }
Specific error types: QueueLimitError, PostAlreadyExistsError, ValidationError, LimitReachedError, InvalidInputError, UnauthorizedError, VoidMutationError
Query Errors (Non-recoverable)
Returned in the standard GraphQL errors array with extension codes:
On 429, use the retryAfter value (seconds) from the error response.
Query Limits
Limit
Value
Max query complexity
175,000 points
Max query depth
25 levels
Max aliases
30
Max directives
50
Max tokens
15,000
Supported Channels
Facebook, Twitter/X, Instagram, LinkedIn, Pinterest, Google Business, Mastodon, TikTok (not via API), Bluesky, YouTube, Threads, Start Page
Agentic OS Integration
If the current project root contains an .agent/ directory, this skill MUST participate in the Agentic OS shared-memory model.
At the end of your execution, check for .agent/state/last-run.json. If it exists, append or update the file using its required schema to log your run. Ensure you capture your runtime (agent_runtime), skill_executed, a concise summary, decisions, and next_steps.