Retrieves the authenticated user's account information
Example Response
{
"data": {
"account": {
"id": "...",
"email": "...",
"backupEmail": "...",
"avatar": "..."
}
}
}
Connect Buffer to your agents, automation tools, or build something entirely new.
Retrieves the authenticated user's account information
{
"data": {
"account": {
"id": "...",
"email": "...",
"backupEmail": "...",
"avatar": "..."
}
}
}
Fetches a single channel using the provided ID
| Name | Type | Description |
|---|---|---|
| input Required | ChannelInput! | Query's input. |
{
"data": {
"channel": {
"id": "...",
"allowedActions": [
"backfillChannel"
],
"avatar": "...",
"descriptor": "..."
}
}
}
Fetch all channels for the organization taking into account the current's user permissions
| Name | Type | Description |
|---|---|---|
| input Required | ChannelsInput! | Query's input. |
{
"data": {
"channels": [
{
"id": "...",
"allowedActions": [
"backfillChannel"
],
"avatar": "...",
"descriptor": "..."
}
]
}
}
Update a content item's title or target date. Fields that are omitted keep their current value.
This API is an early preview and can change without a deprecation period.
| Name | Type | Description |
|---|---|---|
| input Required | UpdateContentItemInput! | Input for updateContentItem. |
{
"data": {
"updateContentItem": {}
}
}
Replace a channel-less draft's content in full, and optionally set the content item's target date in the same write. Only valid while the content item is still a draft.
This API is an early preview and can change without a deprecation period.
| Name | Type | Description |
|---|---|---|
| input Required | UpdateContentItemDraftInput! | Input for updateContentItemDraft. |
{
"data": {
"updateContentItemDraft": {}
}
}
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).
| Name | Type | Description |
|---|---|---|
| input Required | UpdatePostTemplateInput! | Input for updating a post template. |
{
"data": {
"updatePostTemplate": {}
}
}
Aggregate normalized post metrics across a filtered post set. Useful for yearly summaries, channel-level rollups, and BI exports without paginating through thousands of posts.
For per-post metrics, use posts(input) or post(input) with a
metrics { … } selection — this query is purely for aggregation.
The result always contains a baseline trio of entries: postCount
(number of matched posts in the window), reactions, and comments.
Posts on networks that don't track reactions or comments contribute 0
to those totals.
Beyond the baseline, additional metric types are returned only when every channel in the filter set supports them. A single-network filter surfaces that network's richer metrics (e.g. impressions, reach, engagementRate on LinkedIn); a mixed-network filter trims the extras to those common to every network in the set.
| Name | Type | Description |
|---|---|---|
| input Required | AggregatedPostMetricsInput! | Query's input: organization, date range, optional channel and tag filters. Date range is capped to 365 days. |
{
"data": {
"aggregatedPostMetrics": {
"metrics": [
{
"description": "...",
"name": "...",
"type": "clicks",
"unit": "count"
}
],
"metricsUpdatedAt": "..."
}
}
}
Returns daily posting limit status for the given channels on the specified date.
| Name | Type | Description |
|---|---|---|
| input Required | DailyPostingLimitsInput! | Query's input. |
{
"data": {
"dailyPostingLimits": [
{
"channelId": "...",
"isAtLimit": true,
"limit": 0,
"scheduled": 0
}
]
}
}
Fetches a post by PostID for the given organization: first and last can be set for forward pagination using Relay convention
| Name | Type | Description |
|---|---|---|
| input Required | PostInput! | Query's input. |
{
"data": {
"post": {
"id": "...",
"allowedActions": [
"addPostNote"
],
"assets": [
{
"id": "...",
"mimeType": "...",
"source": "...",
"thumbnail": "..."
}
],
"author": {
"id": "...",
"avatar": "...",
"email": "...",
"isDeleted": true
}
}
}
}
Fetches posts for the given organization: first and last can be set for forward pagination using Relay convention
| Name | Type | Description |
|---|---|---|
| after Optional | String | The cursor of the post to start fetching from |
| first Optional | Int | The number of posts to return |
| input Required | PostsInput! | Query's input. |
{
"data": {
"posts": {
"edges": [
{
"cursor": "...",
"node": {}
}
],
"pageInfo": {
"endCursor": "...",
"hasNextPage": true,
"hasPreviousPage": true,
"startCursor": "..."
}
}
}
}
Fetch a single post template by ID. Returns null if not found.
| Name | Type | Description |
|---|---|---|
| input Required | PostTemplateInput! | Input for fetching a single post template. |
{
"data": {
"postTemplate": {
"id": "...",
"body": "...",
"description": "...",
"emoji": "..."
}
}
}
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. The visibility scope is always pinned to the actor and the
supplied organization — the input filter can only narrow within that
scope, never widen it.
| Name | Type | Description |
|---|---|---|
| after Optional | String | The cursor after which to return results. |
| first Optional | Int | The number of templates to return. |
| input Required | PostTemplatesInput! | Input containing the organization scope and optional filters. |
{
"data": {
"postTemplates": {
"edges": [
{
"cursor": "...",
"node": {}
}
],
"pageInfo": {
"endCursor": "...",
"hasNextPage": true,
"hasPreviousPage": true,
"startCursor": "..."
},
"totalCount": 0
}
}
}
Create post for channel
| Name | Type | Description |
|---|---|---|
| input Required | CreatePostInput! | The mutation's input |
{
"data": {
"createPost": {}
}
}
Create a post template visible only to the caller (private) or to
the caller's organization (internal).
| Name | Type | Description |
|---|---|---|
| input Required | CreatePostTemplateInput! | Input for creating a post template. |
{
"data": {
"createPostTemplate": {}
}
}
Delete a post by id.
| Name | Type | Description |
|---|---|---|
| input Required | DeletePostInput! | Input for the deletePost mutation. |
{
"data": {
"deletePost": {}
}
}
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).
| Name | Type | Description |
|---|---|---|
| input Required | DeletePostTemplateInput! | Input for deleting a post template. |
{
"data": {
"deletePostTemplate": {}
}
}
Edit post for channel
| Name | Type | Description |
|---|---|---|
| input Required | EditPostInput! | The mutation's input |
{
"data": {
"editPost": {}
}
}
Move a queued post to the top or bottom of its channel's queue. Unlike editPost, this is a scheduling-only operation that never re-validates the post's content.
| Name | Type | Description |
|---|---|---|
| input Required | MovePostInQueueInput! | The mutation's input |
{
"data": {
"movePostInQueue": {}
}
}
Promote a channel-less draft into channel-specific posts. One-way: once promoted, the content item can no longer be edited as a draft. If any post fails validation, none are created. A failure can also be reported when a post could not be fully processed after the promotion already took effect; re-fetch the content item to check its state before retrying.
This API is an early preview and can change without a deprecation period.
| Name | Type | Description |
|---|---|---|
| input Required | PromoteContentItemDraftToPostsInput! | Input for promoteContentItemDraftToPosts. |
{
"data": {
"promoteContentItemDraftToPosts": {}
}
}
Retrieves idea groups based on the provided input parameters.
| Name | Type | Description |
|---|---|---|
| input Required | IdeaGroupsInput! | Input for retrieving idea groups. |
{
"data": {
"ideaGroups": [
{
"id": "...",
"isLocked": true,
"name": "..."
}
]
}
}
Fetch a paginated list of ideas with optional filtering
| Name | Type | Description |
|---|---|---|
| after Optional | String | Cursor for pagination, marks where to start fetching from |
| first Optional | Int | Maximum number of items to return |
| input Required | IdeasInput! | Filtering criteria for the ideas list |
{
"data": {
"ideas": {
"edges": [
{
"cursor": "...",
"node": {}
}
],
"pageInfo": {
"endCursor": "...",
"hasNextPage": true,
"hasPreviousPage": true,
"startCursor": "..."
}
}
}
}
Create a new idea with the given content and metadata
| Name | Type | Description |
|---|---|---|
| input Required | CreateIdeaInput! | Input to create an idea |
{
"data": {
"createIdea": {}
}
}
Fetch a single content item by id. Errors if no content item with that id exists.
This API is an early preview and can change without a deprecation period.
| Name | Type | Description |
|---|---|---|
| input Required | ContentItemInput! | Input for fetching a single content item. |
{
"data": {
"contentItem": {
"id": "...",
"accountId": "...",
"author": {
"id": "...",
"avatar": "...",
"email": "...",
"isDeleted": true
},
"body": {}
}
}
}
Fetch an organization's content items in the requested order, newest first
by default. Uses standard cursor pagination: pass the previous page's
pageInfo.endCursor as after to fetch the next page. Requesting more than
100 items in a single page is rejected.
This API is an early preview and can change without a deprecation period.
| Name | Type | Description |
|---|---|---|
| after Optional | String | The cursor after which to return results. Cursors are opaque: treat them as a black box and reset to null when the input changes, since a cursor from a different result set produces undefined behavior. |
| first Optional | Int | The number of content items to return, up to 100. |
| input Required | ContentItemsInput! | Input for listing content items. |
{
"data": {
"contentItems": {
"edges": [
{
"cursor": "...",
"node": {}
}
],
"pageInfo": {
"endCursor": "...",
"hasNextPage": true,
"hasPreviousPage": true,
"startCursor": "..."
},
"totalCount": 0
}
}
}
Create a content item together with all of its channel-specific post variants in a single operation. Validation is all-or-nothing: if any variant fails validation, no content item and no variants are created. Variants that fail while being processed after creation are reported per channel in the failure payload; the content item and its variants are still created in that case.
This API is an early preview and can change without a deprecation period.
| Name | Type | Description |
|---|---|---|
| input Required | CreateContentItemInput! | Input for createContentItem. |
{
"data": {
"createContentItem": {}
}
}
Create a content item holding a channel-less draft, before any channels are selected. No network-specific validation applies to the draft content.
This API is an early preview and can change without a deprecation period.
| Name | Type | Description |
|---|---|---|
| input Required | CreateContentItemDraftInput! | Input for createContentItemDraft. |
{
"data": {
"createContentItemDraft": {}
}
}
Delete a content item: the item itself and any posts created from it. Deletion is all-or-nothing. Every post must be deletable on its own, or nothing is deleted and every blocked post is reported at once. A post can only be deleted while it is a draft, awaiting approval, scheduled, or failed, so an item cannot be deleted while any of its posts is publishing or already published. An item still holding a channel-less draft has no posts, so nothing blocks it. An error can also be reported when a post could not be fully processed after the deletion already took effect; re-fetch before retrying.
This API is an early preview and can change without a deprecation period.
| Name | Type | Description |
|---|---|---|
| input Required | DeleteContentItemInput! | Input for deleteContentItem. |
{
"data": {
"deleteContentItem": {}
}
}
Indicates exactly one field must be supplied and this field must not be null.
Locations: INPUT_OBJECT