Buffer API Retirement: What Developers Use Next
Buffer is retiring its legacy REST API on February 1, 2027, and after that date the old api.bufferapp.com endpoints stop returning data. Buffer’s API itself is not going away: a GraphQL API at api.buffer.com replaced it in 2026, and Buffer runs a hosted MCP server for AI agents. If your code still calls the old endpoints, you have until the first brownout on November 11, 2026 to find out what breaks.
The facts: what Buffer announced and what still works
| Item | Status |
|---|---|
Legacy REST API (api.bufferapp.com) | Closed to new clients. Fully retired February 1, 2027, when requests stop returning data |
| Planned brownouts | November 11, 2026 and December 9, 2026 |
| Warning headers on legacy endpoints | Deprecation, Sunset, and a Link header pointing to migration information |
GraphQL API (api.buffer.com) | Live. One endpoint, queries and mutations, API key or OAuth 2.0 with PKCE |
| What the GraphQL API covers | Create and schedule posts, ideas, channels, posts, organization data. Buffer says it has feature parity with “nearly every” legacy capability |
| MCP server | Hosted at mcp.buffer.com/mcp, Bearer API key |
Sources: Buffer’s legacy API retirement announcement (published July 27, 2026), Buffer’s developer introduction, REST migration guide and MCP guide. Checked August 31, 2026, with the retirement date and GraphQL status re-checked October 18, 2026. The brownout dates are from the August check of the announcement.
A brownout is a deliberate, temporary outage that exposes clients still hitting old endpoints. Treat November 11 as your real deadline, because that is the day an unmigrated cron job fails in production.
Migration decision table: stay on Buffer, go native, or use a scheduler API
| Stay on Buffer GraphQL | Go native per platform | Use a scheduler API | |
|---|---|---|---|
| Pick it when | Your team already works in Buffer and the GraphQL API covers your operations | One network matters most, or you need its ads, analytics or community features | You publish to several networks and want a dashboard for humans next to the API |
| What you rewrite | The client: GraphQL queries, one post per channel, cursor pagination, typed errors | Everything: app registration, app review, OAuth, token refresh, payloads, media rules per network | The client, plus reconnecting each account through OAuth in the new tool |
| Ongoing maintenance | Low, Buffer absorbs platform changes | High, every platform change lands on you | Low, the provider absorbs platform changes |
| Human dashboard | Yes | No, you build it | Yes |
| Approval step | Not established in the guides I checked | You build it | Depends on the provider. PostSider has draft and approval-status endpoints |
| AI agent access | Hosted MCP | You build the tools | Depends on the provider. PostSider has hosted MCP and a local stdio package |
| Risk | Low if parity covers you, check the word “nearly” | App review delays and rejected scopes | A second vendor dependency |
My default: if you are a Buffer user with a working dashboard and one script, stay on Buffer GraphQL. The migration is a client rewrite, not a vendor change. Go native only when a platform-specific capability is the product. Move to a scheduler API when the reason you are touching this code anyway is that you need more networks, an approval step, or one API that a script, a teammate and an agent can share.
If your migration involves an autonomous agent rather than a direct REST client, compare the authentication models before choosing a vendor. Our MCP social media server guide explains hosted OAuth, local stdio and draft verification; this is a different workflow from the REST API described elsewhere in this article.
What changes in your code
Here is the shape of the change for the most common call, scheduling one post to two accounts. The legacy call sent an array of profile IDs in one form-encoded request:
# Legacy REST (stops working February 1, 2027)
curl -X POST https://api.bufferapp.com/1/updates/create.json \
-d access_token="$BUFFER_TOKEN" \
-d text="Release notes for v2.4 are live" \
-d "profile_ids[]=PROFILE_A" \
-d "profile_ids[]=PROFILE_B" \
-d scheduled_at="2026-11-20T09:00:00Z"
On the GraphQL API the same job becomes one mutation per channel, sent as JSON to a single endpoint with a Bearer key:
# GraphQL (one request per channel; copy the mutation and input
# fields from Buffer's GraphQL reference, they are not shown here)
for CHANNEL in CHANNEL_A CHANNEL_B; do
curl -X POST https://api.buffer.com \
-H "Authorization: Bearer $BUFFER_API_KEY" \
-H "Content-Type: application/json" \
--data "{\"query\": \"$CREATE_POST_MUTATION\", \"variables\": {\"channelId\": \"$CHANNEL\"}}"
done
Four things break if you only swap the URL:
- Fan-out moves to your code. One request no longer covers several accounts, so a partial failure (channel A accepted, channel B rejected) is now your problem to record and retry.
- Errors hide inside HTTP 200. GraphQL returns typed error fields in the body. Retry logic that only checks status codes will report success on a failed post.
- Pagination moves to cursors. Page-and-offset loops that walk a live queue skip or repeat posts when items are added mid-walk.
- Profile time slots are gone from the request. Scheduling is per post, with either Buffer’s queue or a custom UTC time, so timing logic moves into post creation.
If you go the scheduler API route instead, the PostSider version of the same job is one POST /public/v1/posts with both channels in the posts array, an Idempotency-Key header so a retry does not publish twice, and the raw organization key in Authorization without Bearer. The full request, including readback of the stored post, is in how to schedule social media posts with an API.
Map the old concepts before changing code
| Legacy REST concept | New GraphQL concept | What needs review |
|---|---|---|
| Profile | Channel | Internal object names and database fields |
| Update | Post | Status mapping and response parsing |
| Page plus offset | Cursor pagination | Loops and persisted cursors |
| Array of profile IDs | One channel per request | A request loop or a job queue |
| HTTP error handling | Typed GraphQL errors | Retry and display logic |
| Profile time slots | Per-post scheduling | Timing decisions at creation |
| Legacy access token | API key or OAuth 2.0 with PKCE | Secrets storage and the authorization flow |
Then search your code for api.bufferapp.com, profile_ids, update IDs, page and offset parameters, hardcoded queue assumptions, status string comparisons, token refresh code, and retry branches that only read HTTP status. Write down every operation your product performs. “We use Buffer” is too vague to migrate safely.
One authentication decision deserves a minute. Buffer’s API key acts across every organization and channel the account can reach, which suits an internal script. A product acting for other Buffer users needs OAuth with PKCE. Do not ship the first design in the second situation.
Going native: when it is worth the maintenance
Native APIs give you the most control and the most integrations to babysit: app registration, app review, token refresh, a payload format and media rules per network, separate rate limits and error formats, and every provider’s deprecations landing on your calendar. I ranked how painful each network’s access process is in the platform API graveyard.
Native is the right call when your product is built around one network’s analytics, ads or community features. It is a poor default when the requirement is “create a post, attach media, publish to several networks at a chosen time.”
Using a scheduler API: what PostSider offers, with my bias stated
I build PostSider, so read this section as the vendor talking. PostSider is a social media scheduler with a dashboard for people and three machine interfaces on every paid plan: the REST API at /public/v1, the @postsider/node TypeScript SDK, and an MCP server (hosted at mcp.postsider.com/mcp with OAuth, or the @postsider/mcp package over stdio with an API key). It publishes to 30+ networks, has drafts, review and approval, posting queues, Smart Slots, per-platform caption variants, signed webhooks and a 60 requests per minute default limit per organization. It does not write posts for you. The agent stays on your side.
It is not the only option with an agent surface: Buffer and Ayrshare both run hosted MCP servers. The social media scheduler API comparison puts Buffer, Ayrshare and PostSider side by side on auth, scheduling, retry contracts and agent access, with sources. If you are weighing Buffer against PostSider as a product rather than as an API, PostSider vs Buffer covers pricing and channels, and MCP vs REST vs SDK covers which interface to wire first.
Test the migration before the first brownout
Do not wait for February. A safe migration starts with a small target:
- List the organizations and channels your new credentials can reach.
- Read a small set of existing posts.
- Create one draft.
- Schedule one test post and read it back.
- Walk a paginated list while adding a post to it.
- Send one invalid request and confirm your code sees the typed error.
- Revoke the token and confirm your code fails loudly.
- Compare old and new results, then move one workflow at a time.
Retries are where migrations double-post. If your old code retried on timeout, read idempotency for social posting before you port that branch.
If you are leaving Buffer as a user rather than as a developer, the Buffer and Hootsuite switching guide is the better starting point. For the API route, read the PostSider API documentation or compare the plans.
Lukasz Blania builds PostSider, a social media publishing platform with a human dashboard, REST API, TypeScript SDK and MCP server.
Pricing after the API change is compared on the Buffer alternatives page, including what a flat tier replaces.
A one-time licence is the other way to avoid a monthly API bill, and the Mixpost price comparison prices that trade against a subscription.
Frequently asked questions
Is Buffer's API gone?
No. Buffer is retiring its legacy REST API (api.bufferapp.com) on February 1, 2027, but its GraphQL API at api.buffer.com is live and Buffer runs a hosted MCP server at mcp.buffer.com/mcp.
When will Buffer's legacy REST API stop working?
Buffer says the legacy REST API will be fully retired on February 1, 2027, after which legacy endpoints stop returning data. Its announcement also listed brownouts for November 11 and December 9, 2026, so expect failures on those days if you have not migrated.
What replaces Buffer's legacy REST API?
The direct replacement is Buffer's GraphQL API, with API key or OAuth 2.0 with PKCE authentication. The other routes are native platform APIs, or a scheduler with its own REST API such as PostSider's /public/v1.
Can developers use Buffer with AI agents?
Yes. Buffer documents a hosted MCP server at mcp.buffer.com/mcp that authenticates with a Bearer API key. Ayrshare and PostSider also run hosted MCP servers, so MCP support alone does not decide the migration.
What changes in code when moving from the Buffer REST API to GraphQL?
Profiles become channels, updates become posts, one request creates a post on one channel instead of an array of profiles, pagination moves to cursors, and errors arrive as typed fields in the response body, so an HTTP 200 can still carry a failure.