Approval & comparisons

Migrating off the Buffer API: what actually happened, and what to do next

What really changed with Buffer's public API for third-party developers, the current state of its new GraphQL API, and how to map a Buffer-style integration onto PostGate.

Quick answer

Buffer restricted third-party access to its original public API around 2019, and on May 27, 2026 announced a new GraphQL Public API — with the legacy REST API shutting down fully on February 1, 2027. What remains unconfirmed from Buffer's own materials is whether the new API supports multi-tenant third-party OAuth, the flow a SaaS product posting on behalf of many customers actually needs.

"What happened to Buffer's API" is one of those questions that keeps resurfacing — on Hacker News threads, in indie-hacker forums, in half-answered GitHub issues — because the honest answer has changed more than once and depends on what you were trying to do with it. This post lays out what we could actually confirm, with sources, including a real 2026 update to the story that most of the older "Buffer killed its API" posts don't mention. Where the record is ambiguous, we say so instead of picking the cleaner narrative.

The short version: Buffer restricted third-party access to its original public API years ago, and in 2026 it opened a new one — but not, as far as we could verify, in the shape a multi-tenant SaaS product needs. The rest of this post covers what changed, what is still unclear, and how to map a Buffer-style integration onto PostGate if you need a working third-party publishing API today.

PostGate handles OAuth, publishing and delivery evidence for every network through one API. Start free or read the docs.

01

What actually happened in 2019?

Buffer's original public API dated back to 2012 and, by its own account, had accumulated a large base of third-party integrations. Around 2019, Buffer restricted that access. According to Ayrshare's account of the change, Buffer said it could no longer permit certain third-party usage of the API, "especially when the posting goes beyond the stated agreements" it had with the social networks — a plausible read given that Meta, LinkedIn, and Pinterest all tightened their own platform terms after the Cambridge Analytica fallout that year. Buffer also audited existing integrations and revoked access for tools that replicated its own core scheduling functionality, which reads as a competitive decision as much as a compliance one: after that point, new developer app registrations on the legacy API were effectively closed to outside SaaS products.

That is the event most "Buffer killed its API" posts are describing, and for years it was an accurate summary of the current state: a public API existed, but you could not get a new client ID for it if you weren't already an approved partner.

02

The 2026 relaunch — and what it does not (yet) cover

In 2026 the picture changed again, and this is the part a lot of the older discourse misses. On May 27, 2026, Buffer announced a new GraphQL Public API — strongly typed, with an MCP server and a CLI, available on every plan including the free tier, and described as having "fully managed" OAuth. In parallel, Buffer published a retirement notice for the old REST API: brownouts on November 11 and December 9, 2026, full shutdown on February 1, 2027, and new client creation on the legacy API already closed.

What we could not confirm from Buffer's own materials is whether that new API supports the flow a third-party SaaS product actually needs — OAuth that lets your product connect and post on behalf of many different customers' Buffer accounts, not just your own. Buffer's launch post illustrates personal-automation use cases (a reporting script, a content analyzer) built against a developer's own account with a personal API key, and does not explicitly address multi-tenant access. Independent developer write-ups from around the same period describe third-party OAuth — the kind an outside SaaS app needs to onboard end users — as documented for the new API but not yet enabled, with Buffer positioning it as coming later. We are flagging this as unresolved rather than settled: it is the detail most likely to determine whether "the Buffer API is back" is true for your use case specifically, and it is worth checking Buffer's current developer docs directly before you commit engineering time to it.

03

Why do teams look for an alternative regardless?

Even setting the OAuth question aside, a few practical reasons keep coming up for teams evaluating Buffer as an integration target versus a dedicated publishing API. First, timing: a legacy API that is actively brownouting on a published schedule while its replacement's third-party access story is still being finalized is not a comfortable foundation for a customer-facing feature you need working now. Second, scope: Buffer's API surfaces the channels Buffer itself supports, which is a narrower and differently-shaped set than what a multi-platform publishing product usually needs to cover. Third, dependency risk: building a product feature on top of another product's API means your roadmap partly follows theirs — the 2019 restriction is the concrete example of what that risk looks like when it materializes.

04

How does Buffer's model map onto PostGate?

Buffer's new GraphQL API organizes around channels (connected social accounts), posts (what it calls "updates" in the legacy API), and per-account queues. A documented createPost mutation takes a single channelId, a schedulingType, and a mode (addToQueue or customScheduled with a dueAt timestamp) — and notably, it targets one channel per mutation, so posting the same content to multiple connected accounts means sending multiple mutations.

PostGate's POST /api/posts covers the same ground with one request per logical post: a profiles array replaces per-channel calls, an Idempotency-Key makes retries safe, andscheduled_at (a fixed instant, or "queue" for the next open slot) replaces Buffer's mode field. A Buffer channel becomes a PostGate profile, grouped under a profile group that stands in for a Buffer organization; a Buffer queue slot becomes a PostGate schedule.

Post to two channels: Buffer GraphQL vs. PostGatePostGate API
# Buffer — one mutation per channel
mutation {
  createPost(input: {
    text: "Launch day. 🚀"
    channelId: "channel_instagram_123"
    schedulingType: automatic
    mode: addToQueue
  }) {
    ... on PostActionSuccess { post { id text status } }
    ... on MutationError { message }
  }
}
# ...then send a second mutation with channelId: "channel_linkedin_456"

# PostGate — one request, every target
curl -X POST "https://postgate.studio/api/posts?profile_group_id=grp_acme123" \
  -H "Authorization: Bearer pg_live_..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: launch-post-001" \
  -d '{
    "post": { "body": "Launch day. 🚀" },
    "profiles": ["pro_instagram123", "pro_linkedin456"],
    "media": ["https://cdn.example.com/launch.jpg"]
  }'
05

Reading results: per-channel evidence, not a queue status

Buffer's typed-union response tells you whether a single mutation succeeded or returned a MutationError. Carry the same per-destination discipline into PostGate: a create-post call is acceptance, not proof of publication. Consume the post.published, post.partial, and post.failed webhooks, or poll the post ID, and read the targets array for the operational truth — status, attempt count, error, platform ID, and permalink per destination. A partial result is a normal terminal state when one target succeeds and another fails; keep the successful permalinks and act only on the failed ones.

06

What does a cutover plan look like?

Start in sandbox with a pg_test_ key, which runs the full lifecycle — validation, jobs, targets, delivery logs, webhooks — against a sandbox adapter that never calls a real network. Port your channel list to profile connections using PostGate's hosted connection flow rather than trying to reuse Buffer OAuth tokens; each platform's authorization has to be re-granted against the new app registration regardless of which API sits behind it. Run a parallel period publishing through both Buffer and PostGate for a subset of accounts, and diff the resulting permalinks and delivery status before cutting the rest over by customer or channel group.

If your team is currently blocked on Buffer's third-party OAuth timeline specifically, that blocker doesn't need to resolve itself before you can move — PostGate's hosted connection flow and profile groups already give a multi-tenant SaaS product the onboarding path Buffer's new API has not confirmed publicly yet.

07

What should you check before you start?

Re-verify Buffer's current developer documentation yourself before committing to either path — API surfaces described here can and do change, and this post reflects what was publicly documented as of August 2026. Inventory every channel-specific option your Buffer integration sets today (queue position, per-channel copy, tags) and confirm where each lives under PostGate's post.options.<platform> object. And budget real calendar time for reconnecting every customer's social accounts, since that step depends on their action, not your migration code.

Frequently asked questions

Did Buffer kill its API?

The 2019 story most posts describe is real: Buffer restricted third-party access to its 2012-era public API, audited existing integrations, revoked access for tools replicating its core scheduling functionality, and effectively closed new developer registrations to outside SaaS products. But in 2026 the picture changed — on May 27, 2026 Buffer announced a new GraphQL Public API, available on every plan including the free tier.

When does Buffer's legacy REST API shut down?

Buffer published a retirement schedule: brownouts on November 11 and December 9, 2026, and full shutdown on February 1, 2027. New client creation on the legacy API is already closed. Any integration still on the legacy REST API needs a migration path before those dates.

Does Buffer's new GraphQL API support multi-tenant OAuth for SaaS products?

This is unresolved as of August 2026. Buffer's launch post illustrates personal-automation use cases built against a developer's own account with a personal API key, and does not explicitly address multi-tenant access. Independent developer write-ups describe third-party OAuth as documented but not yet enabled, with Buffer positioning it as coming later. Check Buffer's current developer docs before committing engineering time.

How does posting differ between Buffer's new API and PostGate?

Buffer's createPost mutation targets one channelId per mutation, so posting the same content to multiple accounts means multiple mutations. PostGate's POST /api/posts takes one request per logical post: a profiles array replaces per-channel calls, an Idempotency-Key makes retries safe, and scheduled_at (a fixed instant, or "queue" for the next open slot) replaces Buffer's mode field.

Build it with PostGate

One API for every social platform your customers care about — sandboxed, documented, and ready today.

Start building Read the docs