Лимиты API соцсетей: Meta, TikTok, Telegram и LinkedIn
Каждая платформа считает лимиты по-своему. Meta — по приложению, пользователю и бизнес-объекту (BUC) в часовом или суточном окне и показывает остаток в заголовках ответа. TikTok — отдельно для каждого endpoint в скользящем минутном окне. Telegram-бот — скорость на чат и retry_after в ответе 429. LinkedIn — суточные лимиты приложения и участника. Надёжное решение: вебхуки, очередь, кеш и backoff с jitter.
Обновлено:
Что такое лимит API и почему «подождать и повторить» мало?
Лимит — объём запросов, который платформа принимает за окно (секунда, минута, час, 24 часа или сутки). При превышении Meta возвращает коды 4/17/32/613 или 800xx, TikTok, Telegram Bot API и LinkedIn — HTTP 429, MTProto — FLOOD_WAIT. Если окно часовое или суточное, быстрые повторы только сжигают квоту — нагрузкой нужно управлять очередью.
Модель лимитов по платформам
Цифры — из официальной документации (2026-09-17). Многие значения — формулы или значения по умолчанию: реальная квота вашего приложения может отличаться.
| Платформа / API | Как считается | Окно | При превышении |
|---|---|---|---|
| Meta, лимит платформы | Приложение: 200 × число пользователей; лимит пользователя не публикуется | 1 час | Код 4 (приложение), 17 (пользователь) |
| Facebook Pages (BUC) | 4800 × число вовлечённых пользователей страницы | 24 часа | 80001 (токен страницы/system user); 32 (токен пользователя/приложения) |
| Instagram Platform (BUC) | 4800 × число показов (impressions) | 24 часа | 80002 |
| Публикации Instagram | 100 публикаций через API на аккаунт; карусель — одна публикация | Скользящие 24 часа | Проверка через content_publishing_limit |
| Сообщения Instagram | Send API: текст 100/с, аудио/видео 10/с; Conversations API 2/с — на профессиональный аккаунт | 1 секунда | нет |
| Lead Ads (BUC) | 4800 × число созданных лидов | 24 часа | 80005 |
| Marketing API (BUC) | Ads Management: 300 + 40 × активные объявления (Standard Access) | 1 час | 80004 |
| TikTok API v2 | Отдельно на каждый endpoint; user/info, video/list, video/query — 600 | Скользящая минута | HTTP 429, rate_limit_exceeded |
| Публикации TikTok | video/init — 6/мин на токен; status/fetch — 30/мин; обычно ~15 постов в день на автора | Минута / 24 часа | spam_risk_too_many_posts |
| Telegram Bot API | ~1 сообщение/с в один чат; 20 сообщений/мин в группу; рассылка ~30 сообщений/с | Секунда / минута | HTTP 429 + retry_after |
| Telegram MTProto | Цифры не публикуются | нет | 420 FLOOD_WAIT_X |
| Суточные лимиты приложения и участника; цифры в Developer Portal | Сутки (сброс в 00:00 UTC) | HTTP 429 |
естьнетТаблицу можно прокрутить вбок
Что означают ошибки Facebook API 4, 17, 32, 613 и 800xx?
| Код | Значение | Что делать |
|---|---|---|
| 4 | Лимит на уровне приложения | Следите за X-App-Usage, приостановите фоновые запросы |
| 17 | Лимит на уровне пользователя | Замедлите очередь по этому токену |
| 32 | Лимит Pages API (с токеном пользователя или приложения) | Используйте токен страницы и следите за BUC-заголовком |
| 613 | Пользовательский лимит; подкод 1996 — резкое изменение трафика | Распределяйте запросы равномерно во времени |
| 80001 / 80002 | BUC: Pages / Instagram | Ждите estimated_time_to_regain_access по этому объекту |
| 80004 / 80000 | BUC: Ads Management / Ads Insights | Запрашивайте отчёты реже и крупными периодами |
| 80005 / 80006 | BUC: LeadGen / Messenger | Опирайтесь на вебхуки, уберите опрос |
Источник: документация Meta Graph API Rate Limiting и Error Handling.
Заголовки Meta: X-App-Usage и X-Business-Use-Case-Usage
Meta предупреждает заранее. В X-App-Usage — call_count, total_cputime и total_time: проценты использованной квоты приложения. X-Business-Use-Case-Usage — JSON с ключами по ID бизнес-объекта: у каждого элемента type (pages, instagram, ads_management, ...), те же три процента и estimated_time_to_regain_access — через сколько минут ограничение снимется.
Когда значение доходит до 100, запросы могут ограничиваться. Практическое правило: с 75–80% замедляйте фоновые задачи, с 95% — останавливайте. Если к запросу применимы оба типа лимитов, действует BUC. Несколько ID в одном запросе считаются отдельными вызовами.
Старый заголовок Marketing API X-Ad-Account-Usage в документации относится к старым версиям (v3.3 и ранее); в актуальных версиях ориентируйтесь на BUC-заголовок.
Чтение BUC-заголовка (чистый aiohttp)
SDK Socialift не отдаёт заголовки в объекте ошибки, поэтому для упреждающего контроля квоты ответ Graph API можно проверять так.
import json
import aiohttp
async def graph_get(session: aiohttp.ClientSession, url: str, params: dict) -> dict:
async with session.get(url, params=params) as r:
usage = json.loads(r.headers.get("X-Business-Use-Case-Usage") or "{}")
for object_id, items in usage.items():
for u in items:
peak = max(u.get("call_count", 0), u.get("total_cputime", 0), u.get("total_time", 0))
if peak >= 80:
await slow_down(object_id, u.get("type"),
minutes=u.get("estimated_time_to_regain_access", 0))
return await r.json()slow_down — ваша функция: ставит на паузу очередь этой страницы или Instagram-аккаунта.
Лимиты Instagram API: 100 публикаций и скорость сообщений
Вызовы Instagram Platform считаются по BUC: 4800 × число показов аккаунта за 24 часа. У небольшого аккаунта и квота небольшая — поэтому статистику кешируйте, а не запрашивайте каждую минуту.
Для публикаций есть отдельный лимит: аккаунт может опубликовать через API до 100 постов за скользящие 24 часа, карусель считается одной публикацией. Текущее состояние показывает GET /<IG_ID>/content_publishing_limit. В SDK публикация — ig.publish(...) и ig.publish_carousel(...).
Секундные лимиты Direct: сообщения с текстом, ссылками, реакциями и стикерами — 100 вызовов/с на профессиональный аккаунт, аудио и видео — 10/с, Conversations API — 2/с. Вместо частого чтения списка диалогов опирайтесь на вебхук messages.
TikTok API rate limit: лимиты endpoint'ов и дневной лимит публикаций
TikTok считает лимит отдельно для каждого endpoint в скользящем окне длиной в минуту. Значение по умолчанию в документации: /v2/user/info/, /v2/video/query/ и /v2/video/list/ — 600. При превышении приходит HTTP 429 и rate_limit_exceeded. Если нужно больше, TikTok предлагает обратиться через страницу поддержки.
У Content Posting API свои лимиты: /v2/post/publish/video/init/ — 6 запросов в минуту на user access token, creator_info — 20, status/fetch — 30. Кроме того, для Direct Post есть дневной лимит на автора (в документации — обычно около 15 постов в день, общий для всех API-клиентов); при достижении возвращается spam_risk_too_many_posts — повтором это не решить, переносите на завтра.
Клиент без аудита может публиковать от имени не более 5 пользователей за 24 часа и только с видимостью SELF_ONLY. В SDK tt.creator_info(token) получает настройки автора перед публикацией, а tt.wait_publish(...) ждёт статус.
Лимиты Telegram Bot API: 429, retry_after и рассылки
В FAQ Telegram Bot API: не отправляйте больше одного сообщения в секунду в один чат (короткие всплески допускаются, но в итоге начнутся ошибки 429); в группе бот не может отправлять больше 20 сообщений в минуту; массовая рассылка — около 30 сообщений в секунду.
При превышении ответ содержит ok: false, error_code: 429 и parameters.retry_after — сколько секунд ждать. Повторять раньше бессмысленно. Рассылку на большую аудиторию ставьте в очередь и отправляйте медленнее 30 сообщений в секунду.
Если в BotFather включить платные рассылки (paid broadcasts), бот может отправлять до 1000 сообщений в секунду: каждое сообщение сверх бесплатных 30 в секунду стоит 0.1 Telegram Stars. Для этого нужно не менее 100 000 Stars на балансе бота и не менее 100 000 активных пользователей в месяц.
Telegram-аккаунт (MTProto) цифры лимитов не публикует: при превышении приходит 420 FLOOD и FLOOD_WAIT_X (ждать X секунд). TelegramAccount в SDK превращает это в RateLimitError с retry_after, но сам не ждёт — решение за вами.
Где смотреть лимиты LinkedIn API?
У LinkedIn два суточных лимита: лимит приложения (сколько вызовов всё приложение делает за день) и лимит участника (сколько один участник через это приложение). Они сбрасываются ежедневно в 00:00 UTC, при превышении возвращается 429.
Стандартные лимиты в документации не публикуются: их видно в Developer Portal на вкладке Analytics приложения (только для endpoint'ов, вызванных в этот день хотя бы раз). При превышении 75% лимита приложения администраторам приходит письмо, но с задержкой 1–2 часа.
В development tier Community Management API лимит очень мал: 500 вызовов на приложение и 100 на участника за 24 часа. Для продакшена нужен standard tier.
Интеграция, устойчивая к лимитам: 6 шагов
Вебхуки вместо опроса
Комментарии, сообщения, лиды и статусы публикаций получайте вебхуками (Meta, TikTok, Telegram setWebhook). Опрос впустую тратит квоту.
Очередь на токен и аккаунт
Лимиты считаются по токену, странице или аккаунту — дайте каждому свою очередь и ограничение параллелизма.
Кешируйте
Профили, списки страниц, статистику храните с TTL; в запросе просите только нужные поля.
Экспоненциальный backoff с jitter
При временной ошибке задержка удваивается и получает случайную добавку — чтобы воркеры не возвращались одновременно.
Уважайте время платформы
Telegram retry_after, Meta estimated_time_to_regain_access, MTProto FLOOD_WAIT важнее формулы backoff.
Отделяйте неповторяемые ошибки
Дневной лимит публикаций, нехватка разрешений (PermissionError) или недействительный токен (AuthError) — не возвращайте в очередь, сохраните статус и уведомите.
Socialift SDK: RetryPolicy и RateLimitError
По умолчанию SDK делает всего 3 попытки. В фоновом воркере удобнее уменьшить число попыток внутри SDK и отдать решение об ожидании очереди.
import os
from socialift import ApiError, Instagram, RateLimitError, RetryPolicy
policy = RetryPolicy(attempts=2, backoff_base=1.0, backoff_max=20.0, jitter=True)
async def publish_job(job: dict) -> None:
async with Instagram.via_facebook(app_secret=os.environ["META_APP_SECRET"],
retry=policy) as ig:
try:
await ig.publish(job["page_token"], ig_user_id=job["ig_user_id"],
image_url=job["image_url"], caption=job["caption"])
except RateLimitError as exc:
await requeue(job, delay=exc.retry_after or 15 * 60)
except ApiError as exc:
if exc.code in (80001, 80002): # BUC — окно 24 часа
await requeue(job, delay=60 * 60)
else:
raiseRetryPolicy по умолчанию: 3 попытки, задержка min(0.5 × 2^(n−1), 30) секунд со случайным множителем 0.5–1.5 (jitter). Повтор срабатывает на RateLimitError, HTTP 429/500/502/503/504 и сетевые ошибки; если известен retry_after, SDK ждёт именно столько.
SDK превращает коды Meta 4, 17, 32, 613 и HTTP 429 в RateLimitError. Коды BUC (80001, 80002, ...) в этот список не входят — проверяйте их по ApiError.code.
Частые вопросы
Какой лимит у Instagram API?
Вызовы Instagram Platform считаются по BUC: 4800 × число показов аккаунта за 24 часа. Для публикаций отдельный лимит: до 100 постов через API за скользящие 24 часа, карусель считается одной публикацией.
Что значат ошибки Facebook API 4, 17, 32 и 613?
4 — лимит приложения, 17 — лимит пользователя, 32 — лимит Pages API при токене пользователя или приложения, 613 — пользовательский лимит (подкод 1996 — резкое изменение трафика). Все они временные: снизьте интенсивность и следите за процентами в заголовках.
Сколько сообщений в секунду может отправлять Telegram-бот?
По официальному FAQ — не больше одного в секунду в один чат, 20 в минуту в группу и около 30 в секунду при рассылке. С платными рассылками — до 1000 в секунду, каждое сообщение сверх бесплатных 30 стоит 0.1 Stars.
Какие лимиты у TikTok API?
Скользящее минутное окно на каждый endpoint: для user/info, video/list и video/query по умолчанию 600. Инициализация публикации (video/init) — 6 в минуту на токен. При превышении — HTTP 429 и rate_limit_exceeded.
Где посмотреть лимиты LinkedIn API?
Стандартные лимиты в документации не публикуются. В Developer Portal на вкладке Analytics приложения видны суточные лимиты и расход по endpoint'ам. Сброс — ежедневно в 00:00 UTC.
Можно ли сразу повторить запрос после 429?
Нет. Если платформа сообщила время ожидания (retry_after, estimated_time_to_regain_access), ждите его. Если нет — используйте экспоненциальный backoff с jitter. В часовом или суточном окне быстрые повторы только сжигают квоту.