YouTube API Quota Exceeded: Causes and Fixes

Why YouTube Data API requests fail with quotaExceeded, what the daily 10,000-unit quota actually costs per call, how to check and raise it, and how to avoid hitting it - including using a transcript API that doesn't consume your quota.

00:09:00 · SEP 13, 2026

Краткий ответ

Вы видите quotaExceeded, потому что ваш проект Google Cloud израсходовал всю суточную квоту в 10 000 единиц для YouTube Data API v3, которая сбрасывается в полночь по тихоокеанскому времени. Самые быстрые решения: перестать использовать search.list (100 единиц) там, где подходит прямой поиск по ID, кэшировать результаты вместо повторного запроса или перейти на API транскриптов, который вообще не расходует вашу собственную квоту YouTube.

Почему это происходит

Каждый проект Google Cloud получает стандартную квоту YouTube Data API v3 в размере 10 000 единиц в день, которая сбрасывается в полночь по тихоокеанскому времени — переноса остатка нет, и досрочный сброс запустить нельзя. Квота отслеживается по проекту, а не по API-ключу, поэтому создание второго ключа в том же проекте не даёт второй пул.

Каждый вызов API стоит единицы, а не запросы — и стоимость неравномерна. Вот полная картина по эндпоинтам, которые реально используют разработчики:

ВызовСтоимость в квоте
search.list100 единиц
videos.list1 единица
channels.list1 единица
playlistItems.list1 единица
commentThreads.list1 единица за страницу
captions.list50 единиц
captions.download200 единиц, требует OAuth (не аутентификацию по API-ключу)

При 100 единицах за один поиск проект может исчерпать всю суточную квоту всего за 100 вызовов поиска — ещё до того, как будут скачаны какие-либо субтитры. Это самый распространённый способ, которым небольшие проекты упираются в лимит: они сделали не 10 000 запросов, а несколько сотен дорогих. Для сравнения, videos.list, channels.list и playlistItems.list дёшевы — по 1 единице каждый: если вы уже знаете ID видео, канала или плейлиста, эти вызовы почти не расходуют суточный бюджет.

Как проверить текущее использование квоты

  1. Откройте Google Cloud Console для проекта, привязанного к вашему API-ключу.
  2. Перейдите в APIs & Services → YouTube Data API v3 → Quotas & System Limits.
  3. Здесь показано текущее использование относительно Queries per day и лимитов в минуту, обновляемое с небольшой задержкой, а не в реальном времени.

Если вы уже близки к потолку, не сделав 10 000 запросов, этот раздел позволяет подтвердить, что дело именно в проблеме дорогих вызовов выше, а не в ошибке.

quotaExceeded против rateLimitExceeded

Оба возвращают код 403, и в неформальном разговоре их часто объединяют как «ошибки квоты», но это разные проблемы с разными решениями:

  • quotaExceeded (причина: dailyLimitExceeded) — ваш проект израсходовал всю суточную квоту единиц. Ничего не помогает, кроме ожидания сброса в полночь по тихоокеанскому времени, снижения стоимости вызова или получения одобренного увеличения квоты.
  • rateLimitExceeded — вы отправляете запросы слишком быстро в коротком временном окне, независимо от вашей суточной суммы. Это проблема темпа, а не бюджета — см. наше руководство по лимиту частоты запросов, чтобы узнать, как правильно с ней справиться с помощью отката.

Пять способов это исправить

  1. Кэшируйте агрессивно. Квота списывается за каждый вызов API, а не за каждый запрос пользователя — если вы многократно повторно запрашиваете субтитры одного и того же видео, кэшируйте результат (даже простой TTL-кэш в памяти) вместо повторного вызова API за данными, которые не меняются каждую минуту.
  2. Избегайте search.list там, где подходит прямой поиск по ID. Если у вас уже есть ID видео, канала или плейлиста, соответствующий вызов .list в 100 раз дешевле поиска.
  3. Группируйте запросы по ID. videos.list принимает до 50 ID, разделённых запятыми, за один вызов по той же цене в 1 единицу, что и один ID — получать 50 видео по одному вместо пакетного запроса обходится в 50 раз дороже без всякой причины.
  4. Запросите увеличение квоты, как только у вас появится реальное продакшен-использование, которое это обосновывает, через форму YouTube API Services Audit and Quota Extension, доступную со страницы квоты в Cloud Console. Ожидайте ручной проверки, а не мгновенного одобрения.
  5. Используйте API транскриптов, который не расходует вашу собственную квоту YouTube. API GetYouTubeTranscript получает транскрипты через собственную инфраструктуру, а не проксирует captions.download вашим ключом, поэтому суточного потолка в 10 000 единиц отслеживать не нужно — только собственный лимит частоты запросов вашего тарифа.

Пример: получение транскрипта без обращения к квоте YouTube

cURL:

curl "https://getyoutubetranscript.com/api/v1/transcript?v=dQw4w9WgXcQ" \
  -H "Authorization: Bearer sk_live_..."

Node.js:

const res = await fetch(
  "https://getyoutubetranscript.com/api/v1/transcript?v=dQw4w9WgXcQ",
  { headers: { Authorization: `Bearer ${process.env.GETYOUTUBETRANSCRIPT_API_KEY}` } }
);
const { data } = await res.json();
console.log(data.transcript);

Python:

import os, requests

res = requests.get(
    "https://getyoutubetranscript.com/api/v1/transcript",
    params={"v": "dQw4w9WgXcQ"},
    headers={"Authorization": f"Bearer {os.environ['GETYOUTUBETRANSCRIPT_API_KEY']}"},
)
print(res.json()["data"]["transcript"])

Это стоит 1 кредит по вашему тарифу GetYouTubeTranscript, а не единицы квоты YouTube Data API вашего проекта Google Cloud. Получите 100 бесплатных кредитов без карты в панели управления, или посмотрите полную документацию API.

Заметка об обходных путях

Ротация IP-адресов, создание множества проектов Google Cloud или прямой скрапинг страниц YouTube в обход квоты — всё это несёт реальные риски: первые два способа рискуют нарушить условия использования YouTube API Services, а неофициальный скрапинг хрупок при изменении вёрстки. Специализированный API транскриптов берёт этот операционный риск на себя вместо того, чтобы вы несли его сами.

Часто задаваемые вопросы о квоте YouTube API

Q01

Что означает «The request cannot be completed because you have exceeded your quota»?

Это означает, что ваш проект Google Cloud исчерпал выделенную квоту единиц YouTube Data API v3 на текущий день. Google сбрасывает квоту в полночь по тихоокеанскому времени, а стандартный бесплатный лимит составляет 10 000 единиц в день и отслеживается по проекту (а не по API-ключу).

Q02

Сколько квоты реально стоит получение транскрипта?

У самого YouTube Data API нет прямого эндпоинта «получить транскрипт» — вызов captions.list стоит 50 единиц только для того, чтобы получить список доступных дорожек субтитров, а captions.download требует OAuth (а не просто API-ключа) и стоит 200 единиц. Вызов search.list, часто используемый для предварительного поиска видео, сам по себе стоит 100 единиц — поэтому несколько поисков плюс запросы субтитров могут быстро израсходовать суточный бюджет в 10 000 единиц.

Q03

В чём разница между quotaExceeded и rateLimitExceeded?

quotaExceeded (отображается как причина dailyLimitExceeded в теле ошибки) означает, что вы израсходовали всю суточную квоту единиц и должны дождаться сброса в полночь по тихоокеанскому времени. rateLimitExceeded означает, что вы отправляете запросы слишком быстро в коротком временном окне, независимо от суточной суммы — подробное различие см. в нашем руководстве по лимиту частоты запросов.

Q04

Могу ли я использовать несколько API-ключей, чтобы получить больше квоты?

Нет — квота отслеживается по проекту Google Cloud, а не по API-ключу. Несколько ключей, созданных в одном проекте, черпают из одного и того же суточного пула в 10 000 единиц. Создание отдельных проектов для умножения квоты технически возможно, но рискует нарушить условия использования YouTube API Services, которые запрещают обход лимитов квоты.

Q05

Могу ли я просто запросить увеличение квоты у Google?

Да, через форму YouTube API Services Audit and Quota Extension, доступную со страницы квоты в Cloud Console, но одобрение не гарантировано и не мгновенно — требуется обосновать продакшен-использование реальными деталями, и Google рассматривает запросы вручную. Самостоятельно просто оплатить увеличение квоты нельзя.

Q06

Бесплатная квота в 10 000 единиц что-то стоит?

Нет — это стандартный бесплатный лимит, предоставляемый каждому проекту Google Cloud, включившему YouTube Data API v3. Для его использования не нужен привязанный платёжный аккаунт, хотя Google может предложить включить биллинг при запросе увеличения.

Q07

Использует ли API GetYouTubeTranscript мою собственную квоту YouTube API?

Нет. Он не проксирует Data API YouTube вашим ключом — извлечение транскриптов работает через нашу собственную инфраструктуру, поэтому квоту captions.list/download отслеживать с вашей стороны не нужно. Вы ограничены только нашими собственными опубликованными лимитами частоты запросов (60 запросов/мин на бесплатном тарифе, до 300 запросов/мин на годовом).

Похожие материалы