api

Social Media API Rate Limits: A Developer Guide

Robert Ligthart
April 14, 202612 min read
Social Media API Rate Limits: A Developer Guide

If you've built against a social media API before, you already know the frustration. You get everything working in development, ship to production, and then hit a wall. A 429 Too Many Requests error. Traffic spikes, the queue backs up, and posts silently fail.

Social media API rate limits are not a minor inconvenience. They're a core architectural constraint, and if you don't design around them from the start, you'll rebuild significant parts of your integration later.

This guide covers how each major platform handles rate limits in 2026, what the actual numbers look like, and how the OmniSocials API abstracts most of this complexity into a single, predictable interface.


What Are Social Media API Rate Limits?

Social media API rate limits are caps on how many requests your application can make to a platform's API within a fixed time window. Every major platform enforces them. Exceed the cap and you get a 429 response — your request is rejected, not queued.

Rate limits exist for two reasons: protecting platform infrastructure from traffic spikes, and, increasingly, monetizing API access by forcing developers onto paid tiers.

The time windows vary significantly. Some platforms use per-minute windows, others per-hour or per-day. Some apply limits per application. Others apply them per user token. Instagram does both. The inconsistency across platforms is half the problem.


Platform-by-Platform Rate Limit Breakdown (2026)

Here's the current state of rate limits across the major platforms. These numbers reflect the standard developer tier as of early 2026 — premium tiers with higher limits exist but cost significantly more.

PlatformLimit TypeEndpointLimit
Instagram (Graph API)Per user tokenRead calls200/hour
Instagram (Graph API)Per user tokenMedia publish50/day
FacebookPer appGraph API calls200 × MAU/hour
X (Twitter)Per app (Basic)Post creation17/24 hours
X (Twitter)Per userPost creation100/24 hours
LinkedInPer memberShare creation150/day
LinkedInPer appAPI calls500/day (varies by endpoint)
TikTokPer appVideo publish1,000/day
YouTube Data APIPer projectAll requests (quota units)10,000 units/day
PinterestPer appWrite requests10/second

A few things stand out here.

X (Twitter) is the most restrictive for publishers. The Basic tier allows just 17 automated posts per 24 hours at the app level. If you're building a multi-account tool or a content automation system, that number is almost unusable. The Pro tier jumps to a much higher limit, but costs $5,000 per month.

YouTube uses a quota unit system rather than a simple request count. A search request costs 100 units. A video insert costs 1,600 units. With a 10,000 unit daily budget, you can insert roughly 6 videos before you're cut off. The YouTube Data API documentation has the full cost table.

Facebook's formula is unusual. Your rate limit scales with your app's monthly active users (MAU). For most early-stage apps, this means a very low ceiling — often just a few hundred calls per hour until you have meaningful traffic.


Why Managing Rate Limits Across Platforms Is So Hard

The technical challenge isn't any single platform's rate limit. It's the fact that every platform is different.

  • Different time windows — Instagram resets hourly, X resets every 24 hours, YouTube resets daily at midnight Pacific
  • Different limit types — per-app vs. per-user-token means your architecture for Instagram doesn't transfer to LinkedIn
  • Different error formats — the Retry-After header isn't universal; some platforms bury the reset time in a custom response field
  • Limits change without much notice — X tightened limits dramatically in 2023, and several third-party tools broke overnight

Here's what handling rate limits correctly looks like in a multi-platform integration, before any business logic runs:

async function postToInstagram(token, content) {
  const response = await fetch('https://graph.instagram.com/v18.0/media', {
    method: 'POST',
    headers: { 'Authorization': `Bearer ${token}` },
    body: JSON.stringify(content),
  });

  if (response.status === 429) {
    const retryAfter = response.headers.get('Retry-After') || 3600;
    await sleep(retryAfter * 1000);
    return postToInstagram(token, content); // retry
  }

  // handle Instagram's specific error format...
  // then repeat this entire pattern for LinkedIn, TikTok, Facebook...
}

That's one platform. Now imagine maintaining this for 6 platforms, each with different headers, different reset windows, and different behavior on retry. The rate limit handling code becomes larger than the actual feature code.


How the OmniSocials API Handles This Differently

The OmniSocials API wraps all 11 platforms behind a single endpoint with one consistent rate limit: 100 requests per minute per API key.

You don't track platform-specific windows. You don't parse different error formats per platform. You don't maintain separate retry logic per integration. OmniSocials handles the communication with each platform's native API — including rate limit headers, token refresh, and retry behavior — on its own infrastructure.

Here's the same "post to Instagram" operation using the OmniSocials API:

const response = await fetch('https://api.omnisocials.com/v1/posts', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    text: 'Shipping new features every week.',
    media: ['https://yourcdn.com/image.jpg'],
    platforms: ['instagram', 'linkedin', 'tiktok'],
    scheduled_at: '2026-04-10T09:00:00Z',
  }),
});

const { data } = await response.json();
// { id: "post_abc123", status: "scheduled", platforms: { instagram: "queued", linkedin: "queued", tiktok: "queued" } }

One request. Three platforms. No OAuth per platform, no rate limit math, no per-platform retry logic.

The same pattern in Python:

import requests

response = requests.post(
    'https://api.omnisocials.com/v1/posts',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
    json={
        'text': 'Shipping new features every week.',
        'media': ['https://yourcdn.com/image.jpg'],
        'platforms': ['instagram', 'linkedin', 'tiktok'],
        'scheduled_at': '2026-04-10T09:00:00Z',
    }
)
data = response.json()['data']

When you're building at scale, the simplification compounds. You implement rate limit handling once, for the OmniSocials API's 100 req/min limit, and that same logic covers every platform you publish to.

[Screenshot: OmniSocials API response showing multi-platform post status with per-platform queuing]


Native API vs. OmniSocials: Complexity Comparison

To make this concrete, here's what it takes to publish one post to Instagram and LinkedIn natively versus through OmniSocials.

StepNative APIsOmniSocials API
OAuth setup2 separate OAuth flowsOne API key
Rate limit trackingPer-platform, per-windowSingle 100 req/min limit
Token refreshManual per platformHandled automatically
Error handlingDifferent format per platformConsistent JSON error format
Retry logicCustom per platformOne implementation
Media formattingResize per platform specUpload once, auto-formatted
Total API calls to post to 2 platforms4-61

This table isn't hypothetical. Posting to Instagram via the Graph API alone requires: creating a media container, waiting for it to process, checking its status, and then publishing it. LinkedIn has a similar multi-step flow. OmniSocials reduces that to a single POST request and handles the rest.


Handling the OmniSocials Rate Limit in Production

At 100 requests per minute, the OmniSocials API gives you meaningful headroom for most applications. But if you're building batch-publishing tools or high-volume automation, you'll want standard rate limit handling in place.

async function postWithBackoff(payload, attempt = 1) {
  const response = await fetch('https://api.omnisocials.com/v1/posts', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer YOUR_API_KEY',
      'Content-Type': 'application/json',
    },
    body: JSON.stringify(payload),
  });

  if (response.status === 429) {
    const retryAfter = parseInt(response.headers.get('Retry-After') || '60', 10);
    const backoff = retryAfter * Math.pow(2, attempt - 1); // exponential backoff
    await new Promise(resolve => setTimeout(resolve, backoff * 1000));
    return postWithBackoff(payload, attempt + 1);
  }

  return response.json();
}

Exponential backoff on a single rate limit is dramatically simpler than managing separate backoff strategies for each native platform API.

For bulk operations, use a queue. Send posts one at a time with a small delay between each, rather than firing 50 requests simultaneously. The OmniSocials API also supports webhook notifications for post status changes — you can confirm delivery without polling the API repeatedly.

Full API reference, including rate limit headers and error codes, is at docs.omnisocials.com.


Frequently Asked Questions

What are social media API rate limits?

Social media API rate limits are caps on how many API requests your application can make within a set time window. Each platform sets its own limits — Instagram allows 200 Graph API calls per hour per user token, while X (Twitter) Basic tier allows just 17 post requests per 24 hours. Exceeding these limits returns a 429 Too Many Requests error and your request fails.

What happens when you hit an API rate limit?

When you exceed a platform's rate limit, the API returns a 429 HTTP status code. Most platforms include a Retry-After header indicating how long to wait before retrying. Your application needs to handle this gracefully with proper backoff logic — otherwise users see errors instead of their content going live.

How do I avoid hitting social media API rate limits?

The most reliable strategies: implement exponential backoff on 429 responses, queue requests with delays instead of firing them concurrently, cache read responses aggressively, and consider a unified API like OmniSocials that manages rate limit behavior across all platforms from a single integration point.

Does the OmniSocials API have rate limits?

Yes. The OmniSocials API allows 100 requests per minute per API key. Unlike native platform APIs, this single limit covers publishing across all 11 supported platforms — Instagram, LinkedIn, TikTok, YouTube, X, Facebook, Pinterest, Bluesky, Threads, Mastodon, and Google Business Profile.

Why do API rate limits vary so much between platforms?

Each platform sets limits based on infrastructure costs, abuse prevention, and monetization strategy. X tightened limits significantly in 2023 to push developers onto paid tiers. Meta applies limits per user token rather than per app. LinkedIn uses a points system that varies by endpoint. There's no industry standard, which is what makes multi-platform development so painful.


Sources


Tags:
api
OmniSocials

The AI-friendly social media management platform. Plan, schedule, and publish across all your socials, or let your AI assistant handle it via MCP. $10/mo.

European Union flagMade in Europe
$10 /monthper workspacebilled annually
No credit card required

© 2026 OmniSocials Inc. All rights reserved.