API субтитров YouTube и MCP-сервер

Получайте субтитры, транскрипты, переводы и готовые статьи из своего кода или из AI-агента. Два способа: обычный REST API или MCP-сервер, который подключается к Claude Code, Claude.ai и Cursor.

Быстрый старт

Создайте API-ключ и вызовите API с ним. Управление ключами →

curl -X POST https://api.unwatched.click/api/v1/subtitles \
  -H "Authorization: Bearer unw_sk_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://www.youtube.com/watch?v=dQw4w9WgXcQ","lang":"en"}'

Аутентификация

Каждый запрос требует API-ключ. Работают оба варианта заголовка — MCP-клиенты умеют только Authorization, а x-api-key удобнее для curl. Ключи хранятся в виде хеша: если потеряли — отзовите и создайте новый.

Authorization: Bearer unw_sk_YOUR_KEY
# or, equivalently:
x-api-key: unw_sk_YOUR_KEY

MCP-сервер

Эндпоинт MCP — POST https://api.unwatched.click/mcp. Ничего устанавливать не нужно: добавьте URL и ключ в любой MCP-клиент. В Claude Code:

claude mcp add --transport http unwatched https://api.unwatched.click/mcp \
  --header "Authorization: Bearer unw_sk_YOUR_KEY"

В Claude.ai: Settings → Connectors → добавить custom connector с тем же URL и заголовком. В Cursor добавьте это в mcp.json:

{
  "mcpServers": {
    "unwatched": {
      "url": "https://api.unwatched.click/mcp",
      "headers": {
        "Authorization": "Bearer unw_sk_YOUR_KEY"
      }
    }
  }
}

Доступные инструменты

  • get_video_subtitles — полный транскрипт с таймкодами
  • list_subtitle_tracks — какие языки субтитров есть у видео
  • get_video_info — название, длительность, превью, дата публикации
  • get_video_frame — кадр по таймингу, возвращается изображением
  • translate_transcript — перевод полученного транскрипта с сохранением таймкодов
  • summarize_video — генерация структурированной статьи по видео
  • search_articles — поиск по уже сгенерированным статьям

REST-эндпоинты

POST /api/v1/subtitles              { url | videoId, lang? }
GET  /api/v1/videos/:videoId
GET  /api/v1/videos/:videoId/tracks
POST /api/v1/frames                 { url | videoId, t | timestamps[], width?, includeBase64? }
GET  /api/v1/videos/:videoId/frame?t=&width=
POST /api/v1/transcripts/translate  { videoId, sourceLang, targetLang }
POST /api/v1/summaries              { url | videoId, lang, length?, sourceLang? }
GET  /api/v1/articles?query=&category=&lang=&page=&limit=
GET  /api/v1/credits

Транскрипт возвращается как segments из { start, end, text } в секундах — по времени окончания можно цитировать точные фрагменты.

Кредиты

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

ОперацияЦена
Get subtitles (cache miss)2 кредитов
Standard summary1 credits / hour
Перевод транскрипта1 credits / hour
Скриншот видео1 кредитов
Метаданные, список дорожек, поиск статейIncluded

Ошибки

Ошибки всегда возвращают { "error": { "code", "message" } } — разбирать нужно только одну форму.

СтатусКодЗначение
400INVALID_REQUESTПараметры отсутствуют или некорректны.
401INVALID_API_KEYКлюч отсутствует, недействителен, отозван или истёк.
402INSUFFICIENT_CREDITSНедостаточно кредитов для операции.
404TRANSCRIPT_NOT_FOUNDТранскрипт не сохранён — сначала получите субтитры.
422NO_SUBTITLESУ видео нет пригодных субтитров.
429RATE_LIMITEDСлишком много запросов. По умолчанию 60 в минуту на ключ.
502EXTRACTION_FAILEDНе удалось извлечь субтитры для этого видео.
503SERVICE_BUSYМощности извлечения перегружены. Повторите чуть позже.