SubDownload API
  • 🏠 Início
  • 🛠 Skills
  • ⚡ Integração MCP
  • 📚 Guias e tutoriais
  • 📘 Referência da API
  • 💳 Suporte e cobrança
  • 🤖 LLMS.txt
Externo
  • 🔑 Obter chave de API
  • 📋 Especificação OpenAPI
  • ⚡ Servidor MCP
ℹ️A documentação para desenvolvedores é publicada em inglês. A navegação lateral segue o idioma escolhido.

Referência da API

Base URL: https://api.subdownload.com · Auth: Authorization: Bearer sk_live_xxx

Endpoints

GET /v1/verify free
Verifica se uma API Key é válida. Retorna informações de token e usuário. Não consome créditos.

Requisição

curl -H "Authorization: Bearer sk_live_xxx" \
  https://api.subdownload.com/v1/verify

Resposta 200

{
  "valid": true,
  "token": { "name": "My App", "prefix": "sk_live_abc", "monthly_quota": 0, "used_quota": 120 },
  "user": { "id": 42, "email": "[email protected]", "plan": "free", "credits_remaining": 148 }
}
GET /v1/youtube/transcript 1 credit
Obtém a transcrição / legendas de um vídeo do YouTube. Aceita ID de vídeo ou qualquer URL YouTube válida (watch, youtu.be, shorts).

Parâmetros

NomeTipoObrigatórioDescrição
video_idstringOBRIGATÓRIOID de vídeo de 11 caracteres ou URL completa do YouTube. Alias: video_url.
langstringopcionalCódigos de idioma preferidos, separados por vírgula (ex.: en,zh,ja).

Requisição

curl -H "Authorization: Bearer sk_live_xxx" \
  "https://api.subdownload.com/v1/youtube/transcript?video_id=dQw4w9WgXcQ&lang=en"

Resposta 200

{
  "data": {
    "video_id": "dQw4w9WgXcQ",
    "language": "en",
    "segments": [
      { "text": "We're no strangers to love", "start": 0.0, "duration": 3.5 }
    ],
    "text": "We're no strangers to love...",
    "meta": { "title": "...", "author": "...", "thumbnail": "..." }
  },
  "credits_used": 1,
  "credits_remaining": 148
}

Erros

400 video_id faltando · 404 sem legendas · 402 créditos esgotados

GET /v1/youtube/search 1 credit
Busca no YouTube vídeos ou canais que correspondem a uma palavra-chave.

Parâmetros

NomeTipoObrigatórioDescrição
qstringOBRIGATÓRIOConsulta de busca (1-200 caracteres).
typestringopcionalvideo (padrão) ou channel.
limitintegeropcional1-50 resultados (padrão 20).

Requisição

curl -H "Authorization: Bearer sk_live_xxx" \
  "https://api.subdownload.com/v1/youtube/search?q=rust+tutorial&limit=5"
GET /v1/youtube/channel/resolve free
Resolve qualquer referência de canal (@handle, URL ou ID UC…) para info canônica do canal.

Parâmetros

NomeTipoObrigatórioDescrição
inputstringOBRIGATÓRIO@handle, URL do canal, URL do vídeo ou ID UC…
GET /v1/youtube/channel/search 1 credit
Busca dentro dos vídeos de um canal específico.

Parâmetros

NomeTipoObrigatórioDescrição
channelstringOBRIGATÓRIO@handle, URL ou ID UC… (alias: channel_id).
qstringOBRIGATÓRIOConsulta de busca.
limitintegeropcional1-50 (padrão 30).
GET /v1/youtube/channel/latest free
Busca os ~15 vídeos mais recentes de um canal via RSS. Rápido e grátis.

Parâmetros

NomeTipoObrigatórioDescrição
channelstringOBRIGATÓRIO@handle, URL ou ID UC… (alias: channel_id).
GET /v1/youtube/channel/videos 1 credit/page
Lista todos os vídeos enviados por um canal, paginado ~100 por página.

Parâmetros

NomeTipoObrigatórioDescrição
channelstringprimeira pág.@handle, URL ou ID UC… (alias: channel_id).
continuationstringpróx. págs.Token retornado pela chamada anterior.
Nota: forneça channel OU continuation, não ambos.
GET /v1/youtube/playlist/videos 1 credit/page
Lista vídeos em uma playlist do YouTube com paginação.

Parâmetros

NomeTipoObrigatórioDescrição
playliststringprimeira pág.URL ou ID da playlist (PL…, UU…, LL…, FL…, OL…).
continuationstringpróx. págs.Token da resposta anterior.

Transcrição por IA (ASR)

Execute o Whisper em vídeos sem legendas. Assíncrono: POST cria uma tarefa e você consulta com GET até status=done. 5 créditos, cobrados apenas no sucesso — rodar ASR de novo no mesmo vídeo é grátis.

POST /v1/youtube/asr 5 créditos em done
Inicia uma transcrição AI Whisper assíncrona. Retorna task_id e dicas de ETA para cadenciar o polling.

Corpo (JSON)

NomeTipoObrigatórioDescrição
video_urlstringOBRIGATÓRIOURL do YouTube (watch / youtu.be / shorts / embed).
langstringopcionalDica de idioma (en, pt…). Omita para detecção automática.

Requisição

curl -X POST -H "Authorization: Bearer sk_live_xxx"   -H "Content-Type: application/json"   -d '{"video_url":"https://youtu.be/dQw4w9WgXcQ"}'   https://api.subdownload.com/v1/youtube/asr

Resposta 202

{
  "task_id": "task_01HX...",
  "status": "queued",
  "from_cache": false,
  "queue_position": 2,
  "estimated_wait_seconds": 61,
  "next_poll_after_seconds": 15,
  "poll_url": "/v1/youtube/asr/task_01HX..."
}
Respeite next_poll_after_seconds entre polls. Com cache hit, status=done volta imediatamente com os segments inline.
GET /v1/youtube/asr/{task_id} grátis
Consulta uma tarefa ASR. Grátis — sem créditos e sem cota de token. Apenas o criador pode ler.

Status: queued · downloading · transcribing · done · failed · cancelled. Os segments só são finais em status=done.

Library (biblioteca do usuário)

Armazenamento por usuário para transcrições salvas e resumos de IA. Leituras grátis; escritas consomem uma unidade de cota de token. Sem créditos de usuário.

GET /v1/library grátis
Lista itens que o usuário salvou na sua Library (transcrições + resumos).

Parâmetros

NomeTipoObrigatórioDescrição
favoritestringopcional1 ou true para retornar só favoritos.
qstringopcionalCorrespondência parcial em título/autor.
tagstringopcionalFiltro por tag.
limitintegeropcional1–100 (padrão 20).
offsetintegeropcionalOffset de paginação.
GET /v1/library/{id} grátis
Obtém os metadados de um item Library. Use has_asr / has_summary para decidir qual endpoint de conteúdo chamar em seguida.
GET /v1/library/{id}/transcript grátis
Retorna os segments ASR e o texto concatenado. 404 se não houver ASR concluído.
GET /v1/library/{id}/summary grátis
Retorna o texto do resumo armazenado. Use ?locale= para escolher entre locales salvos (padrão Accept-Language, depois en). 404 quando não há resumo para (video_id, locale).
POST /v1/library grátis (1 cota de token)
kind=asr sinaliza transcrição salva (segments já na tabela ASR). kind=summary envia o texto do resumo pré-gerado para a tabela summaries e marca has_summary=true. Upsert em (video_id, locale).

Corpo (JSON)

NomeTipoObrigatórioDescrição
video_idstringOBRIGATÓRIOID do vídeo do YouTube.
kindstringOBRIGATÓRIOasr ou summary.
title / author / thumbnail / video_url / language / tagstringopcionalMetadados para exibição / filtragem.
localestringmodo summaryLocale do resumo (padrão Accept-Language depois en).
textstringse kind=summaryTexto do resumo a persistir.
modelstringopcionalIdentificador do LLM (ex.: claude-opus-4).
DELETE /v1/library/{id} grátis
Soft-delete de um item Library. Um novo POST /v1/library para o mesmo vídeo restaura a linha em vez de criar duplicata.

SDKs oficiais

Use nossas bibliotecas oficiais para integração rápida:

LinguagemRepositório
Pythonapi-sdk/python
JavaScriptapi-sdk/javascript
Goapi-sdk/go
Javaapi-sdk/java
Kotlinapi-sdk/kotlin
Rustapi-sdk/rust

→ Código completo: github.com/SubDownload/api-sdk

→ Para cobrança, limites de taxa e códigos de erro veja Suporte e cobrança.