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_KEYMCP-сервер
Эндпоинт 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 summary | 1 credits / hour |
| Перевод транскрипта | 1 credits / hour |
| Скриншот видео | 1 кредитов |
| Метаданные, список дорожек, поиск статей | Included |
Ошибки
Ошибки всегда возвращают { "error": { "code", "message" } } — разбирать нужно только одну форму.
| Статус | Код | Значение |
|---|---|---|
| 400 | INVALID_REQUEST | Параметры отсутствуют или некорректны. |
| 401 | INVALID_API_KEY | Ключ отсутствует, недействителен, отозван или истёк. |
| 402 | INSUFFICIENT_CREDITS | Недостаточно кредитов для операции. |
| 404 | TRANSCRIPT_NOT_FOUND | Транскрипт не сохранён — сначала получите субтитры. |
| 422 | NO_SUBTITLES | У видео нет пригодных субтитров. |
| 429 | RATE_LIMITED | Слишком много запросов. По умолчанию 60 в минуту на ключ. |
| 502 | EXTRACTION_FAILED | Не удалось извлечь субтитры для этого видео. |
| 503 | SERVICE_BUSY | Мощности извлечения перегружены. Повторите чуть позже. |

