{"openapi":"3.1.0","info":{"title":"Buffer (BYOK) API","version":"0.1.0","description":"Buffer (BYOK) lets an AI assistant read your own Buffer data through the Buffer API with a key you supply (Buffer API key). Read-only: 10 tools (list_organizations, list_channels, get_channel, list_sent_posts, list_scheduled_posts, list_draft_posts, get_post, get_post_metrics, get_aggregated_metrics, list_tags). The BYOK key travels with each request, is used for that one call only and is never...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-buffer.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-buffer/docs"},"termsOfService":"https://connectorbay.com/byok-buffer/terms"},"servers":[{"url":"https://byok-buffer.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-buffer/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_organizations":{"post":{"operationId":"list_organizations","summary":"List the Buffer organizations that belong to the authenticated account (ID and name). Start here to get the organization","description":"List the Buffer organizations that belong to the authenticated account (ID and name). Start here to get the organization ID the other tools need. Use for \"Which Buffer organizations do I have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_organizationsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_channels":{"post":{"operationId":"list_channels","summary":"List the connected social channels of an organization with network, display name, avatar and whether the queue is paused","description":"List the connected social channels of an organization with network, display name, avatar and whether the queue is paused or locked. Use for \"Which social channels are connected to my Buffer organization\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"organization_id":{"description":"Buffer organization ID from list_organizations.","maxLength":64,"title":"Organization Id","type":"string"}},"required":["organization_id"],"title":"list_channelsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_channel":{"post":{"operationId":"get_channel","summary":"Get one connected channel by ID with network, display name and queue status. Use for \"Is the queue paused on my Buffer c","description":"Get one connected channel by ID with network, display name and queue status. Use for \"Is the queue paused on my Buffer channel c1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"channel_id":{"description":"Channel ID from list_channels.","maxLength":64,"title":"Channel Id","type":"string"}},"required":["channel_id"],"title":"get_channelArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_sent_posts":{"post":{"operationId":"list_sent_posts","summary":"List published (sent) posts of an organization, newest first, with text, channel and timestamps. Paginated with a cursor","description":"List published (sent) posts of an organization, newest first, with text, channel and timestamps. Paginated with a cursor. Use for \"What did we publish on Buffer recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"organization_id":{"description":"Buffer organization ID from list_organizations.","maxLength":64,"title":"Organization Id","type":"string"},"first":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Number of posts to return (1 to 50).","title":"First"},"after":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from the previous page's pageInfo.endCursor to fetch the next page.","title":"After"}},"required":["organization_id"],"title":"list_sent_postsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_scheduled_posts":{"post":{"operationId":"list_scheduled_posts","summary":"List posts scheduled for future publishing, soonest first, with text, channel and due time. Paginated with a cursor. Use","description":"List posts scheduled for future publishing, soonest first, with text, channel and due time. Paginated with a cursor. Use for \"What is scheduled to go out on Buffer next\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"organization_id":{"description":"Buffer organization ID from list_organizations.","maxLength":64,"title":"Organization Id","type":"string"},"first":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Number of posts to return (1 to 50).","title":"First"},"after":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from the previous page's pageInfo.endCursor to fetch the next page.","title":"After"}},"required":["organization_id"],"title":"list_scheduled_postsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_draft_posts":{"post":{"operationId":"list_draft_posts","summary":"List draft posts of an organization, most recently created first. Paginated with a cursor. Use for \"Which Buffer drafts ","description":"List draft posts of an organization, most recently created first. Paginated with a cursor. Use for \"Which Buffer drafts are waiting to be finished\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"organization_id":{"description":"Buffer organization ID from list_organizations.","maxLength":64,"title":"Organization Id","type":"string"},"first":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Number of posts to return (1 to 50).","title":"First"},"after":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from the previous page's pageInfo.endCursor to fetch the next page.","title":"After"}},"required":["organization_id"],"title":"list_draft_postsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_post":{"post":{"operationId":"get_post","summary":"Get one post by ID with text, status, channel and timestamps. Use for \"Show me the Buffer post p1\".","description":"Get one post by ID with text, status, channel and timestamps. Use for \"Show me the Buffer post p1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"post_id":{"description":"Post ID from the post listing tools.","maxLength":64,"title":"Post Id","type":"string"}},"required":["post_id"],"title":"get_postArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_post_metrics":{"post":{"operationId":"get_post_metrics","summary":"Get the performance metrics (reactions, comments, impressions and similar, depending on the network) of one sent post. N","description":"Get the performance metrics (reactions, comments, impressions and similar, depending on the network) of one sent post. Needs a personal API key. Use for \"How did our Buffer post p1 perform\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"post_id":{"description":"ID of a sent post from list_sent_posts.","maxLength":64,"title":"Post Id","type":"string"}},"required":["post_id"],"title":"get_post_metricsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_aggregated_metrics":{"post":{"operationId":"get_aggregated_metrics","summary":"Get server-side aggregated post metrics (post count, reactions, comments and more) for an organization over a date windo","description":"Get server-side aggregated post metrics (post count, reactions, comments and more) for an organization over a date window of at most 365 days. Needs a personal API key. Use for \"How did all our Buffer posts perform in Q1 2026\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"organization_id":{"description":"Buffer organization ID from list_organizations.","maxLength":64,"title":"Organization Id","type":"string"},"start_date_time":{"description":"Start of the window as an ISO 8601 UTC timestamp.","maxLength":30,"title":"Start Date Time","type":"string"},"end_date_time":{"description":"End of the window as an ISO 8601 UTC timestamp, at most 365 days after the start.","maxLength":30,"title":"End Date Time","type":"string"}},"required":["organization_id","start_date_time","end_date_time"],"title":"get_aggregated_metricsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_tags":{"post":{"operationId":"list_tags","summary":"List an organization's post tags sorted by name, with color and whether the tag is locked, plus the total count. Paginat","description":"List an organization's post tags sorted by name, with color and whether the tag is locked, plus the total count. Paginated with a cursor. Use for \"Which tags do we use on Buffer\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"organization_id":{"description":"Buffer organization ID from list_organizations.","maxLength":64,"title":"Organization Id","type":"string"},"first":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Number of posts to return (1 to 50).","title":"First"},"after":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from the previous page's pageInfo.endCursor to fetch the next page.","title":"After"}},"required":["organization_id"],"title":"list_tagsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}