API REST com utilitários YouTube (transcrição, listagem de vídeos de canais, análises persistentes) e armazenamento de memória persistente (ficheiros Markdown/texto). Pensada para ser consumida por modelos de IA — todas as respostas são JSON exceto a raiz HTML.
Header X-API-Key: <chave> ou query param ?api_key=<chave>.
A chave é definida pela variável de ambiente TOOLS_API_KEY no servidor.
Necessária para: POST /memoria, POST /memoria/append, PATCH /memoria, POST /youtube-analyses. Os restantes endpoints são públicos.
/youtube
Transcrição completa + metadata de um vídeo do YouTube.
url string obrigatóriolink string opcionalGET /youtube?url=https://www.youtube.com/watch?v=XVO3zsHdvio
{
"video_id": "XVO3zsHdvio",
"title": "...",
"channel": "...",
"channel_id": "UC...",
"publish_date": "2025-09-12T14:00:00+00:00",
"publish_date_parts": {
"year": 2025,
"month": 9,
"day": 12
},
"duration_seconds": 612,
"view_count": 123456,
"language": "en",
"transcript": "texto completo concatenado...",
"segments": [
{
"start": 0.0,
"duration": 2.4,
"text": "..."
}
]
}
400 — Parâmetro 'url' em falta ou video_id inválido.404 — Transcrição desativada, inexistente ou vídeo privado.503 — Pedido bloqueado pelo YouTube (IP bloqueado)./youtube-channel
Lista vídeos de um canal com filtros de período, keyword e estado de análise. Fonte: RSS feed oficial do YouTube (timestamps reais ISO 8601) + yt-dlp como fallback para listagens >15.
channel string obrigatórioperiod enum opcional · default all · valores: 1d, 1w, 1m, 3m, 6m, 1y, allkeyword string opcionalstatus enum opcional · default all · valores: all, analyzed, pendingsort enum opcional · default newest · valores: newest, oldest, popular, relevantlimit int opcional · default 50GET /youtube-channel?channel=@HormoziHighlight&period=1d&sort=newest
{
"channel": "@HormoziHighlight",
"channel_id": "UCrvchO1h6lWZAuGaa1LqX9Q",
"source": "rss",
"total_videos_found": 15,
"filtered_count": 15,
"videos": [
{
"video_id": "sfaw7wmGfls",
"title": "The Modern-Day Cigarette: Brain Meds...",
"url": "https://youtu.be/sfaw7wmGfls",
"published": "2026-05-10T10:00:00+00:00",
"age_hours": 2.6,
"view_count": 1234,
"average_rating": 4.95,
"thumbnail": "https://i.ytimg.com/...",
"analyzed": false,
"analysis_date": null
}
]
}
ℹ Vídeos sem data (vindos só do fallback yt-dlp) são excluídos quando period != 'all'.
/youtube-analyses
Lista todas as análises guardadas (ordenadas por data desc) ou obtém uma análise específica.
video_id string opcionalGET /youtube-analyses?video_id=XVO3zsHdvio
/youtube-analyses/index
Alias para /youtube-analyses (lista cronológica do índice).
/youtube-analyses/search
Procura análises por título ou tópico.
topic string obrigatórioGET /youtube-analyses/search?topic=pricing
/youtube-analyses/{channel}
Lista análises de um canal específico.
GET /youtube-analyses/HormoziHighlight
/youtube-analyses/{channel}/{year}/{month}
Lista análises de um canal num mês específico.
GET /youtube-analyses/HormoziHighlight/2026/05
/youtube-analyses
🔑 X-API-Key
Guarda uma análise. Cria estrutura yt_analyses/{channel}/{year}/{month}/ automaticamente.
video_id string obrigatóriotitle string opcional · default Sem títulotopics string[] opcionalchannel string opcional · default unknowncontent string opcionalPOST /youtube-analyses (header X-API-Key: ...)
{
"video_id": "XVO3zsHdvio",
"title": "...",
"topics": [
"pricing",
"offers"
],
"channel": "HormoziHighlight",
"content": "# Análise\n..."
}
/memoria
Lê o conteúdo de um ficheiro de memória (Markdown/texto).
id string opcional · default defaultGET /memoria?id=notas-projeto-x
{
"id": "notas-projeto-x",
"ficheiro": "notas-projeto-x.md",
"conteudo": "...",
"tamanho_bytes": 1234,
"modificado": "2026-05-10T12:00:00"
}
/memoria/lista
Lista todos os ficheiros de memória com tamanho e data de modificação.
/memoria
🔑 X-API-Key
Cria ou substitui um ficheiro de memória. Corpo = conteúdo bruto OU JSON {conteudo}.
id string obrigatórioPOST /memoria?id=notas-projeto-x (header X-API-Key: ...) body: texto bruto
/memoria/append
🔑 X-API-Key
Acrescenta conteúdo ao fim de um ficheiro de memória (prefixa nova linha).
id string obrigatório/memoria
🔑 X-API-Key
Edição cirúrgica de um ficheiro de memória.
id string obrigatóriooperation enum obrigatório · valores: str_replace, replace_line, insert_at, remove_line, replace_between_markers{
"str_replace": {
"old": "string",
"new": "string",
"desc": "Substitui a 1ª ocorrência de 'old' por 'new'."
},
"replace_line": {
"line": "int (1-indexed)",
"content": "string"
},
"insert_at": {
"line": "int (1-indexed)",
"content": "string"
},
"remove_line": {
"line": "int (1-indexed)"
},
"replace_between_markers": {
"start_marker": "string",
"end_marker": "string",
"content": "string"
}
}
{
"operation": "str_replace",
"old": "Versão 1",
"new": "Versão 2"
}
/link-do-yt
Alias legacy de /youtube (retrocompatibilidade).
url string obrigatórioFaz GET /?format=json ou envia Accept: application/json para receber a especificação completa em JSON estruturado, com todos os parâmetros, exemplos e códigos de erro.
curl -s -H "Accept: application/json" https://tools.mfeliz.com/ | jq .