Um vídeo vertical, quarenta contas: como um agente distribui Reels e Shorts pelo Shager
Guia prático para agentes que distribuem vídeo curto: checagem de formato, metadados de Reels e Shorts, legenda por conta, envio escalonado e chamadas MCP.

Um agente consegue distribuir um vídeo vertical curto para dezenas de contas do Instagram, do Facebook e do YouTube enviando o arquivo uma única vez com as dimensões e a duração, criando um só post que define o formato de cada rede e escrevendo uma legenda diferente para cada conta. O Shager valida o arquivo segundo as regras de cada rede antes de enviar qualquer coisa e depois dispara conta por conta, com uma pausa aleatória entre elas. O trabalho de verdade do agente está nos metadados, não no upload.
Essa última frase resume a lição. Uma distribuição de vídeo curto raramente falha por causa do vídeo em si. Ela falha porque o agente não sabe que o vídeo tem 3 minutos e 4 segundos, ou porque quarenta contas recebem exatamente a mesma legenda, palavra por palavra.
O que o agente precisa saber sobre o arquivo antes do upload?
Três números: largura, altura e duração. As redes classificam e aceitam vídeos curtos com base neles, e um agente que chuta vai gerar posts que caem no formato errado ou são rejeitados.
A regra do YouTube é a mais fácil de explicar. Segundo a própria página de ajuda do Google sobre Shorts de três minutos, vídeos enviados desde 15 de outubro de 2024 com proporção quadrada ou vertical e duração de até três minutos são classificados como Shorts. Um vídeo de 3:04 em 9:16, portanto, é um vídeo comum, não um Short, não importa a intenção do agente.
O Instagram é mais flexível com a proporção, mas tem as suas preferências. A documentação de publicação de conteúdo da Meta para a Instagram Platform lista os contêineres e codecs aceitos para Reels e recomenda 9:16 para evitar cortes ou faixas vazias. O vídeo precisa estar em uma URL acessível publicamente no momento da publicação, porque é a Meta que vai buscá-lo.
É por isso que o upload_media_from_url do Shager aceita os campos opcionais width, height e duration_ms. Se você os informar, a validação de Reels, Shorts e stories acontece no upload e de novo antes do agendamento, em vez de aparecer como um post com falha na conta número 23.
Se o agente não tiver esses números, deve obtê-los antes do upload. No Claude Code ou no Codex, basta uma chamada ao ffprobe:
ffprobe -v error -select_streams v:0 \
-show_entries stream=width,height:format=duration \
-of json launch-teaser.mp4

A sequência de chamadas MCP
Esta é a sequência que um agente executa para um cliente com 38 contas conectadas, usando o servidor MCP do Shager em https://app.shager.ai/api/mcp. Os nomes das ferramentas são os reais; os IDs são fictícios.
whoamipara confirmar a qual organização a chave pertence e se ela pode publicar.list_workspacespara encontrar o espaço de trabalho do cliente.list_channelsdesse espaço de trabalho, para ver redes, status e formatos suportados.list_groupspara encontrar o grupo que reúne as contas desta campanha.upload_media_from_urlcom as dimensões e a duração.create_postcomo rascunho, com legendas por conta e formato por rede.request_approvalse o cliente aprova os vídeos, ouschedule_postse não aprova.get_postdepois do horário agendado, para conferir o estado de cada conta.
A chamada de upload:
{
"tool": "upload_media_from_url",
"arguments": {
"workspace_id": "ws_example",
"url": "https://cdn.example-agency.com/clients/aurora/launch-teaser.mp4",
"file_name": "launch-teaser.mp4",
"width": 1080,
"height": 1920,
"duration_ms": 42000
}
}
O post em rascunho. Repare que o format é definido por canal, porque o mesmo arquivo é um REEL no Instagram e no Facebook e um SHORT no YouTube:
{
"tool": "create_post",
"arguments": {
"workspace_id": "ws_example",
"caption": "Aurora opens its new showroom on Thursday. 42 seconds inside.",
"media_ids": ["med_teaser"],
"youtube_title": "Inside the new Aurora showroom",
"youtube_privacy": "public",
"cta_url": "https://aurora-example.com/showroom",
"campaign": "showroom-launch",
"label": "Showroom teaser, week 38",
"per_channel": [
{ "channel_id": "ch_ig_downtown", "format": "REEL",
"caption": "Downtown team here. Thursday we open the doors, and this is what you'll see first." },
{ "channel_id": "ch_fb_northside", "format": "REEL",
"caption": "Northside customers asked for a showroom. Here's a 42 second look before Thursday." },
{ "channel_id": "ch_yt_main", "format": "SHORT",
"caption": "A first look at the new Aurora showroom, opening Thursday." }
],
"stagger_seconds": [45, 120]
}
}
Em uma execução real, o per_channel tem uma entrada para cada conta, não só três. Quem escreve é o agente; não deveria ser uma pessoa.
Por que cada conta precisa da sua própria legenda?
Porque quarenta páginas publicando o mesmo texto em menos de uma hora é justamente o padrão que os sistemas antispam foram feitos para detectar, e porque a leitura fica ruim para quem segue duas dessas páginas. O próprio auth.md do Shager orienta os agentes, com todas as letras, a variar as legendas de cada conta pelo per_channel.
Variar bem não é trocar palavras por sinônimos. O agente deve ancorar cada legenda em algo verdadeiro sobre aquela conta: a localização, a equipe, o público. Explicamos o método em detalhes em variação de legenda por conta com IA, incluindo como manter a voz da marca estável enquanto o texto muda.
No caso do vídeo curto, mantenha as legendas curtas. A mensagem está no vídeo. Uma legenda que repete a narração desperdiça o espaço.
Onde fica o link no vídeo curto?
É aqui que os agentes mais erram, porque aplicam uma única regra a todas as redes.
No YouTube, o Google afirma na central de ajuda que URLs nos comentários e nas descrições de Shorts não são clicáveis, para reduzir o spam. Um link de captação no primeiro comentário de um Short é texto, não link. No Instagram, URLs em legendas e comentários também não viram links. Os posts de páginas do Facebook são onde um link no primeiro comentário se comporta como as pessoas esperam.
Então, numa distribuição de vídeo curto, o agente deve definir o first_comment por canal só onde ele for útil, e deixá-lo vazio nos Shorts. O Shager continua gerando um link curto rastreável por conta a partir do cta_url, e assim os dados de cliques continuam separados por conta onde quer que o link apareça. O passo a passo completo está em links de captação no primeiro comentário com agentes.

Ritmo: o que o stagger_seconds realmente faz
O stagger_seconds é uma pausa aleatória, em segundos, entre contas da mesma rede. O padrão é [30, 90]. Com 38 contas divididas entre três redes, a fila de cada rede anda de forma independente: as contas do Instagram são espaçadas entre si, e os canais do YouTube entre si.
Para vídeo, eu costumo aumentar o intervalo. Uma execução de 38 contas com [45, 120] demora mais para terminar, mas os posts se espalham por um período que parece gente publicando, não um script. Se o cliente faz questão de que tudo esteja no ar antes de um horário específico, o agente deve agendar mais cedo em vez de apertar o escalonamento. Falamos mais sobre horários em estratégia de agendamento para agentes.
Conferindo o resultado
Depois do horário agendado, o agente chama get_post. A resposta traz o estado geral do post e o estado de cada conta: horário de publicação, URL no ar ou o erro. Os status de post incluem PUBLISHED, PARTIALLY_PUBLISHED e FAILED, entre outros listados no documento OpenAPI.
Um resultado PARTIALLY_PUBLISHED é normal em escala. O token de uma conta expirou; uma página perdeu uma permissão. O papel do agente é informar essas contas pelo nome à pessoa responsável, não ficar tentando de novo às cegas. Muitas vezes, a solução é um novo link de conexão do cliente só para aquela conta.
Uma versão REST para scripts
Se o pipeline roda a partir de um script, e não de um agente em chat, os mesmos dois passos via REST ficam assim:
curl -s https://app.shager.ai/api/v1/workspaces/ws_example/media \
-H "Authorization: Bearer $SHAGER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://cdn.example-agency.com/clients/aurora/launch-teaser.mp4",
"file_name":"launch-teaser.mp4","width":1080,"height":1920,"duration_ms":42000}'
curl -s https://app.shager.ai/api/v1/workspaces/ws_example/posts \
-H "Authorization: Bearer $SHAGER_API_KEY" \
-H "Content-Type: application/json" \
-d @teaser-post.json
As respostas voltam como { "data": ... }, e os erros como { "error": { "code", "message" } }. O limite é de 120 requisições por minuto por chave, e uma execução de um único vídeo nunca chega perto disso.
Perguntas frequentes
O agente pode publicar um vídeo horizontal como Short?
Não. O YouTube classifica os Shorts pela proporção e pela duração, então um vídeo horizontal sobe como vídeo comum, seja qual for o format que você pedir. Peça ao editor uma versão vertical, ou publique a versão horizontal com o format definido como VIDEO no YouTube e deixe os Reels para a vertical.
O mesmo vídeo deve ir para todas as contas no mesmo dia?
Pode ir, com legendas variadas e um escalonamento amplo. Em grupos grandes, muitas agências dividem a execução em dois ou três dias, para que o público de cada conta não veja o mesmo vídeo compartilhado por uma página vizinha no mesmo horário. O agente pode fazer isso criando posts separados por grupo, com valores diferentes de schedule_at.
O que acontece se uma conta rejeitar o vídeo?
O Shager verifica cada conta segundo as regras da sua rede antes de enviar, então a maioria dos problemas aparece já no agendamento, com um motivo claro. Se algo ainda falhar na hora da publicação, o get_post mostra qual conta falhou e por quê, e o resto da execução não é afetado.
Para onde ir agora
Se o seu agente ainda não está conectado, comece pela porta de entrada para agentes, que cobre o servidor MCP, a API REST e o autocadastro. Depois, distribua um vídeo curto para um grupo pequeno antes de apontá-lo para a lista inteira de clientes.


