Loading...
Loading...
Buffer API for social media post scheduling and channel management. Use when user mentions "Buffer", "bufferapp", "schedule post", "social media queue", "cross-post", or managing Twitter/X, LinkedIn, Instagram, Facebook, TikTok, Threads, Mastodon, Bluesky, Pinterest, YouTube, or Google Business posts through Buffer.
npx skill4agent add vm0-ai/vm0-skills bufferzero doctor check-connector --env-name BUFFER_TOKENzero doctor check-connector --url https://api.buffer.com --method POSTBeta API. Buffer's public API is currently in beta. Personal API keys replace the legacy OAuth v1 API. Only organization owners can create keys (paid accounts: up to 5 keys, free accounts: 1 key). The legacy REST API atstill exists but is not accepting new developer applications and requires OAuth — it is not used by this connector.api.bufferapp.com/1/*
POST{"query": "...", "variables": {...}}Account
└── Organizations
└── Channels (Twitter, LinkedIn, Instagram, Facebook, TikTok, Threads, Mastodon, Bluesky, Pinterest, YouTube, Google Business)
└── Posts (draft | scheduled | sent)https://api.buffer.comAuthorization: Bearer $BUFFER_TOKEN
Content-Type: application/json401 Unauthorized| Variable | Description |
|---|---|
| Buffer personal API key (from Developer Dashboard) |
POST https://api.buffer.com/tmp/buffer_orgs.json{
"query": "query GetOrganizations { account { organizations { id name } } }"
}curl -s -X POST "https://api.buffer.com" --header "Authorization: Bearer $BUFFER_TOKEN" --header "Content-Type: application/json" -d @/tmp/buffer_orgs.json/tmp/buffer_channels.json<organization-id>{
"query": "query GetChannels($organizationId: String!) { channels(input: { organizationId: $organizationId }) { id name service serviceId serviceType timezone } }",
"variables": { "organizationId": "<organization-id>" }
}curl -s -X POST "https://api.buffer.com" --header "Authorization: Bearer $BUFFER_TOKEN" --header "Content-Type: application/json" -d @/tmp/buffer_channels.json/tmp/buffer_create_post.json<channel-id>scheduledAt{
"query": "mutation CreatePost($input: PostCreateInput!) { createPost(input: $input) { id status scheduledAt text } }",
"variables": {
"input": {
"organizationId": "<organization-id>",
"channelIds": ["<channel-id>"],
"text": "Launching today: our new onboarding flow. Read more at https://example.com",
"scheduledAt": "2026-05-01T15:00:00Z",
"status": "scheduled"
}
}
}curl -s -X POST "https://api.buffer.com" --header "Authorization: Bearer $BUFFER_TOKEN" --header "Content-Type: application/json" -d @/tmp/buffer_create_post.jsonstatusdraftscheduledscheduledAtneedsApprovalmedia/tmp/buffer_create_image_post.json{
"query": "mutation CreatePost($input: PostCreateInput!) { createPost(input: $input) { id status } }",
"variables": {
"input": {
"organizationId": "<organization-id>",
"channelIds": ["<channel-id>"],
"text": "Ship log: weekly changelog is live.",
"media": {
"photos": [
{ "url": "https://example.com/screenshot.png", "altText": "Changelog screenshot" }
]
},
"status": "scheduled",
"scheduledAt": "2026-05-01T15:00:00Z"
}
}
}curl -s -X POST "https://api.buffer.com" --header "Authorization: Bearer $BUFFER_TOKEN" --header "Content-Type: application/json" -d @/tmp/buffer_create_image_post.jsonphotosvideo: { url: "<url>", thumbnailUrl: "<url>" }/tmp/buffer_posts.json{
"query": "query GetPosts($input: PostsInput!) { posts(input: $input) { edges { node { id status text scheduledAt channel { id service } } } pageInfo { hasNextPage endCursor } } }",
"variables": {
"input": {
"organizationId": "<organization-id>",
"status": ["scheduled"],
"first": 25
}
}
}curl -s -X POST "https://api.buffer.com" --header "Authorization: Bearer $BUFFER_TOKEN" --header "Content-Type: application/json" -d @/tmp/buffer_posts.json | jq '.data.posts.edges[].node'status["sent"]["draft"]["needsApproval"]/tmp/buffer_update_post.json<post-id>{
"query": "mutation UpdatePost($input: PostUpdateInput!) { updatePost(input: $input) { id text scheduledAt } }",
"variables": {
"input": {
"postId": "<post-id>",
"text": "Updated copy.",
"scheduledAt": "2026-05-02T15:00:00Z"
}
}
}curl -s -X POST "https://api.buffer.com" --header "Authorization: Bearer $BUFFER_TOKEN" --header "Content-Type: application/json" -d @/tmp/buffer_update_post.json/tmp/buffer_delete_post.json{
"query": "mutation DeletePost($input: PostDeleteInput!) { deletePost(input: $input) { id } }",
"variables": { "input": { "postId": "<post-id>" } }
}curl -s -X POST "https://api.buffer.com" --header "Authorization: Bearer $BUFFER_TOKEN" --header "Content-Type: application/json" -d @/tmp/buffer_delete_post.jsonstatus: "scheduled"scheduledAtscheduledAtshareNext: truechannelIds{
"query": "mutation CreatePost($input: PostCreateInput!) { createPost(input: $input) { id } }",
"variables": {
"input": {
"organizationId": "<organization-id>",
"channelIds": ["<twitter-channel-id>", "<linkedin-channel-id>", "<bluesky-channel-id>"],
"text": "Launching today.",
"status": "scheduled",
"scheduledAt": "2026-05-01T15:00:00Z"
}
}
}# First page
curl -s -X POST "https://api.buffer.com" --header "Authorization: Bearer $BUFFER_TOKEN" --header "Content-Type: application/json" -d @/tmp/buffer_posts.json | jq '{next: .data.posts.pageInfo.endCursor, nodes: [.data.posts.edges[].node | {id, text, scheduledAt}]}'"first"input"after": "<endCursor>"-d @/tmp/filename.json{"query": "{ __schema { queryType { fields { name } } } }"}updatePoststatus: "sent"