Documentação da API
Uma API REST para transcrições, buscas e metadados do YouTube. Obtenha uma chave de API no seu painel — 100 créditos grátis, sem cartão necessário.
Autenticação
Envie sua chave de API como um bearer token, ou via x-api-key:
Authorization: Bearer sk_live_...
# or
x-api-key: sk_live_...URL base
https://getyoutubetranscript.com/api/v1Créditos e planos
| Plano | Preço | Créditos/mês | Preço do top-up | Limite de taxa |
|---|---|---|---|---|
| Grátis | $ 0/mês | 100 (único) | — | 60 req/min |
| Mensal | $ 5/mês | 1.000 | $ 2,50 / 1.000 | 200 req/min |
| Anual | $ 4,50/mês ($ 54/ano) | 1.000 | $ 1,50 / 1.000 | 300 req/min |
| Starter | $ 19/mês | 7.500 | $ 1,50 / 1.000 | 300 req/min |
| Pro | $ 49/mês | 25.000 | $ 1,50 / 1.000 | 400 req/min |
| Scale | $ 99/mês | 60.000 | $ 1,50 / 1.000 | 600 req/min |
1 crédito = 1 requisição bem-sucedida. Requisições com falha nunca são cobradas. Exemplo: 10 requisições de transcrição em que 2 vídeos não têm legendas custam 8 créditos, e tentar de novo um vídeo que falhou não custa nada até dar certo. Créditos avulsos (top-up) expiram 30 dias após a compra ou ao final do seu período de faturamento atual, o que ocorrer depois, e exigem uma assinatura ativa para serem usados.
Endpoints
/transcript1 créditoObtém a transcrição de um vídeo do YouTube, com metadados (título, canal, miniatura). Também retorna language_code vs. requested_language, caption_type (manual ou auto, null se desconhecido) e cached / fetched_at.
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
v | Sim | ID do vídeo ou URL completa do YouTube |
language | Não | Código do idioma (padrão: en) |
timestamps | Não | Defina como true para incluir marcações de tempo por linha (segments: start, duration, text em segundos). Desativado por padrão. |
Requisição
curl "https://getyoutubetranscript.com/api/v1/transcript?v=jNQXAC9IVRw" \
-H "Authorization: Bearer sk_live_..."Resposta
{
"success": true,
"data": {
"video_id": "jNQXAC9IVRw",
"language_code": "en",
"requested_language": "en",
"caption_type": "manual",
"title": "Me at the zoo",
"author_name": "jawed",
"author_url": "https://www.youtube.com/channel/UC4Qob...",
"thumbnail_url": "https://...",
"transcript": "All right, so here we are...",
"word_count": 39,
"cached": true,
"fetched_at": "2026-09-20T03:10:58.938Z"
}
}/transcript/languagesGrátisLista os idiomas de legenda de um vídeo (manuais e gerados automaticamente) antes de buscar um. default_language_code é o que /transcript retorna sem idioma; um vídeo sem legendas retorna uma lista vazia.
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
v | Sim | ID do vídeo ou URL completa do YouTube |
Requisição
curl "https://getyoutubetranscript.com/api/v1/transcript/languages?v=kJQP7kiw5Fk" \
-H "Authorization: Bearer sk_live_..."Resposta
{
"success": true,
"data": {
"video_id": "kJQP7kiw5Fk",
"default_language_code": "en",
"languages": [
{ "language_code": "en", "name": "English - en", "caption_type": "manual" },
{ "language_code": "es", "name": "Spanish", "caption_type": "manual" }
]
}
}/batch1 crédito / vídeo com sucessoColoque até 100 vídeos na fila em uma única chamada. Retorna um batch_id na hora e busca as transcrições em segundo plano. Consulte GET /batch ou informe webhook_url para receber um POST assinado (cabeçalho X-GYT-Signature) ao terminar. Vídeos com falha nunca são cobrados.
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
videos | Sim | Array de IDs ou URLs de vídeo (1-100). Duplicados são buscados uma vez só. |
language | Não | Código de idioma para todos os vídeos (padrão: en) |
timestamps | Não | true para incluir segments por linha nos resultados |
webhook_url | Não | URL https pública notificada quando o lote termina |
Idempotency-Key | Não | Cabeçalho. Repita a requisição com segurança: a mesma chave retorna o lote original. |
Requisição
curl -X POST "https://getyoutubetranscript.com/api/v1/batch" \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"videos": ["jNQXAC9IVRw", "https://youtu.be/dQw4w9WgXcQ"],
"webhook_url": "https://example.com/hooks/transcripts"
}'Resposta
{
"success": true,
"data": {
"batch_id": "324eb615-e4d5-4b3c-b8e7-04235671066b",
"status": "queued",
"total": 2,
"succeeded": 0,
"failed": 0,
"pending": 2,
"results_url": "https://getyoutubetranscript.com/api/v1/batch?id=324eb615-...",
"webhook_secret": "whsec_..."
}
}/batchGrátisStatus do lote, contagens e uma página de resultados na ordem de envio. Itens com sucesso têm os mesmos campos de /transcript; itens com falha trazem um error_code.
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
id | Sim | O batch_id retornado por POST /batch |
offset | Não | Itens a pular (padrão: 0) |
limit | Não | Itens por página, 1-50 (padrão: 20) |
Requisição
curl "https://getyoutubetranscript.com/api/v1/batch?id=324eb615-e4d5-4b3c-b8e7-04235671066b" \
-H "Authorization: Bearer sk_live_..."Resposta
{
"success": true,
"data": {
"batch_id": "324eb615-...",
"status": "completed",
"total": 2,
"succeeded": 1,
"failed": 1,
"credits_charged": 1,
"items": [
{ "position": 0, "status": "succeeded", "charged": true, "video_id": "jNQXAC9IVRw", "caption_type": "manual", "transcript": "All right, so here we are...", ... },
{ "position": 1, "status": "failed", "charged": false, "video_id": "dQw4w9WgXcQ", "error_code": "TRANSCRIPT_DISABLED" }
],
"next_offset": null
}
}/search1 crédito / páginaBusca vídeos do YouTube com filtros e paginação.
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
q | Sim | Termo de busca (mínimo de 2 caracteres) |
country | Não | Código de país de 2 letras (padrão: us) |
language | Não | Código do idioma (padrão: en) |
page_token | Não | O continuation_token da resposta anterior, para buscar a próxima página |
limit | Não | Máximo de resultados (padrão 20, máximo 50) |
Requisição
curl "https://getyoutubetranscript.com/api/v1/search?q=lofi+beats" \
-H "Authorization: Bearer sk_live_..."Resposta
{
"success": true,
"data": {
"query": "lofi beats",
"video_results": [ { "title": "...", "videoId": "...", "channel": { "name": "..." } } ],
"continuation_token": "c_bKt9xQ2mVf7LpR0aZ3sWyA"
}
}/resolveGrátisResolve um handle, URL ou nome de usuário de canal para seu ID real de canal. Uma entrada sintática (já um ID de canal ou URL contendo um) é resolvida instantaneamente sem chamada de rede; um handle simples dispara uma consulta real.
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
handle | Sim | ID do canal, URL, ou @handle |
Requisição
curl "https://getyoutubetranscript.com/api/v1/resolve?handle=@mkbhd" \
-H "Authorization: Bearer sk_live_..."Resposta
{
"success": true,
"data": {
"channel_id": "UCBJycsmduvYEL83R_U4JriQ",
"title": "Marques Brownlee",
"handle": "http://www.youtube.com/@mkbhd",
"resolved_via": "scrape"
}
}/channel/latestGrátisDados do canal (título, inscritos, descrição, avatar) e os vídeos mais recentes da aba inicial do canal. Para todo o histórico de envios use /channel/videos.
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
channel | Sim | @handle, URL ou ID do canal |
Requisição
curl "https://getyoutubetranscript.com/api/v1/channel/latest?channel=@mkbhd" \
-H "Authorization: Bearer sk_live_..."Resposta
{
"success": true,
"data": {
"channel": { "id": "UCBJycsmduvYEL83R_U4JriQ", "title": "Marques Brownlee", "subscribers": 1160000, "avatar": "https://..." },
"about": { "description": "...", "links": [] },
"videos_sections": [ ... ]
}
}/channel/videos1 crédito / páginaTodos os vídeos enviados por um canal, dos mais recentes aos mais antigos, com paginação.
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
channel | Sim | @handle, URL ou ID do canal |
continuation | Não | continuation_token da resposta anterior, para buscar a próxima página (use no lugar dos outros parâmetros). Expira após 24 horas. |
Requisição
curl "https://getyoutubetranscript.com/api/v1/channel/videos?channel=@mkbhd" \
-H "Authorization: Bearer sk_live_..."Resposta
{
"success": true,
"data": {
"videos": [ { "position": 1, "id": "...", "title": "...", "views": "6.2M", "published_time": "1d ago", "length": "10:47" } ],
"has_more": true,
"continuation_token": "c_pqHR9v13sqaqxlcKhA4MnA"
}
}/channel/search1 crédito / páginaPesquisa dentro dos vídeos de um canal, com paginação.
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
channel | Sim | @handle, URL ou ID do canal |
q | Sim | Termo de busca (mínimo de 2 caracteres) |
continuation | Não | continuation_token da resposta anterior, para buscar a próxima página (use no lugar dos outros parâmetros). Expira após 24 horas. |
Requisição
curl "https://getyoutubetranscript.com/api/v1/channel/search?channel=@mkbhd&q=iphone" \
-H "Authorization: Bearer sk_live_..."Resposta
{
"success": true,
"data": {
"videos": [ { "position": 1, "id": "...", "title": "...", "published_time": "3w ago", "length": "17:14", "channel": { "name": "Marques Brownlee" } } ],
"has_more": true,
"continuation_token": "c_pnm10M6orzLgOTVWJk2oww"
}
}/playlist1 crédito / páginaTodos os vídeos de uma playlist, com paginação. continuation_token é null na última página.
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
list | Sim | ID ou URL da playlist |
continuation | Não | continuation_token da resposta anterior, para buscar a próxima página (use no lugar dos outros parâmetros). Expira após 24 horas. |
Requisição
curl "https://getyoutubetranscript.com/api/v1/playlist?list=PLxxx" \
-H "Authorization: Bearer sk_live_..."Resposta
{
"success": true,
"data": {
"playlist_id": "PLxxx",
"title": "...",
"videos": [ { "position": 1, "id": "...", "title": "...", "channel": { "name": "..." } } ],
"has_more": true,
"continuation_token": "c_DfE9mQx2Ln8TbW4kJ1pZsA"
}
}/creditsGrátisConsulte o saldo de créditos restante desta chave antes de gastá-lo - os mesmos dados que a ferramenta MCP get_credits retorna.
| Parâmetro | Obrigatório | Descrição |
|---|
Requisição
curl "https://getyoutubetranscript.com/api/v1/credits" \
-H "Authorization: Bearer sk_live_..."Resposta
{
"success": true,
"data": {
"plan_credits_left": 87,
"topup_credits_left": 0,
"plan": "monthly",
"rate_limit_per_minute": 200
}
}Erros
Os erros retornam um corpo JSON com um campo code estável para uso condicional, além do status HTTP:
| Status | Código | Significado |
|---|---|---|
| 400 | BAD_REQUEST | Parâmetro ausente ou inválido |
| 400 | CURSOR_EXPIRED | O cursor de página expirou (após 24 horas) - comece de novo pela primeira página |
| 401 | MISSING_API_KEY / INVALID_API_KEY | Nenhuma chave fornecida, ou chave inválida/revogada |
| 402 | PAYMENT_REQUIRED | Sem créditos - compre um top-up ou faça upgrade |
| 404 | VIDEO_UNAVAILABLE / TRANSCRIPT_NOT_FOUND | Vídeo ou recurso não encontrado |
| 429 | RATE_LIMITED | Muitas requisições para o seu plano |
| 503 | UPSTREAM_UNAVAILABLE | Problema temporário no serviço upstream - seguro para tentar novamente |
| 504 | UPSTREAM_TIMEOUT | O serviço levou mais de 25 segundos - não é cobrado e é seguro tentar de novo |
Usando esta API com uma ferramenta de IA
Prefere deixar o Claude (ou outra ferramenta de IA para código) chamar esta API para você em vez de escrever requisições manualmente? Baixe a skill YouTube Transcript - uma Claude Skill pronta que ensina como buscar transcrições, fazer buscas e muito mais.
Usar no Zapier
Sem código: nosso app do Zapier busca uma transcrição, pesquisa no YouTube ou lista os vídeos de um canal em qualquer Zap. Conecte com a mesma chave de API; cada ação custa os mesmos créditos da chamada à API.