Envie vídeos ao YouTube de forma agendada, com título, descrição e visibilidade próprios, a partir de um script, de um job de CI ou de um agente de IA. Conecte o canal uma única vez com o login do Google.
URL base https://api.so-me.studio/v1 · Autenticação X-API-Key · socialMedia: YOUTUBE
Envie um destes valores em postType. Todo post precisa de texto, e fotos ou vídeos são anexados por fileId a partir da sua biblioteca de mídia.
VIDEO
Um arquivo de vídeo. O YouTube trata um vídeo vertical de até 3 minutos como Short, então não há um tipo separado para Shorts.
Envie a mídia e depois crie o post. Omita scheduledAt para publicar na hora.
POST /v1/media/presign-upload adiciona o arquivo à sua biblioteca de mídia e devolve um fileId e um uploadUrl pré-assinado.
curl -X POST https://api.so-me.studio/v1/media/presign-upload \
-H "X-API-Key: $SOME_API_KEY" \
-H "Content-Type: application/json" \
-d '{"files":[{"filename":"build-time.mp4","mimetype":"video/mp4","size":209715200}]}'
# → [{ "fileId": "…", "uploadUrl": "https://…", "fileSrc": "…", "s3Key": "…" }]Faça um PUT dos bytes em uploadUrl com exatamente o Content-Type que você declarou. A URL é válida por uma hora.
curl -X PUT "$UPLOAD_URL" \
-H "Content-Type: video/mp4" \
--upload-file ./build-time.mp4POST /v1/posts com o fileId. A resposta é o post com status SCHEDULED, e ele é publicado em scheduledAt por uma fila que tenta de novo em caso de falha.
curl -X POST https://api.so-me.studio/v1/posts \
-H "X-API-Key: $SOME_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"socialMedia": "YOUTUBE",
"postType": "VIDEO",
"text": "Como reduzimos nosso tempo de build pela metade",
"fileIds": ["<fileId>"],
"scheduledAt": "2026-11-08T16:00:00Z",
"metaData": {
"title": "Como reduzimos nosso tempo de build pela metade",
"description": "Cache, jobs em paralelo e uma opção surpreendente.",
"visibility": "public"
}
}'accountId é opcional quando o workspace tem uma conta de YouTube. Caso contrário, passe um id de GET /v1/accounts.
Os arquivos anexados com fileIds são verificados contra os limites de YouTube abaixo antes de qualquer coisa entrar na fila. Um arquivo que viola uma regra retorna 400 com um relatório por arquivo.
Os campos que mudam a forma como um post é publicado em YouTube.
| Campo | O que faz |
|---|---|
| metaData.title | O título do vídeo. O YouTube permite 100 caracteres, então títulos mais longos são cortados. Se omitido, usa text. |
| metaData.description | A descrição do vídeo. Se omitida, usa text. |
| metaData.visibility | private, unlisted ou public (privacyStatus funciona como alias). Defina explicitamente: um valor inválido ou conflitante falha antes de qualquer upload. |
| firstComment | Um comentário publicado abaixo do vídeo assim que ele vai ao ar, com até 10.000 caracteres. |
O Social media studio verifica cada arquivo contra estes limites antes de publicar. São os limites que configuramos, não uma promessa de YouTube: GET /v1/media/rules devolve a tabela atual, e POST /v1/media/validate verifica um arquivo sem publicá-lo.
Tipo de post VIDEO
A publicação é assíncrona. Assine post.published e post.failed, ou consulte GET /v1/posts/:id até que postStatus seja POSTED ou FAILED.
curl -X POST https://api.so-me.studio/v1/webhooks/subscriptions \
-H "X-API-Key: $SOME_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/hooks/social",
"categories": ["post"],
"events": ["post.published", "post.failed"]
}'
# The response includes the secret that signs every delivery.POST /hooks/social
X-Webhook-Event: post.published
X-Webhook-Signature: <hex HMAC-SHA256 of the raw body>
{
"event": "post.published",
"category": "post",
"timestamp": "2026-11-03T15:00:07.412Z",
"data": { "postId": "…", "platform": "YOUTUBE" }
}Toda entrega é assinada com HMAC-SHA256 em X-Webhook-Signature. post.failed é disparado após a última nova tentativa; corrija a causa e chame POST /v1/posts/:id/retry. Um primeiro comentário é reportado por conta própria, com post.first_comment_posted ou post.first_comment_failed.
A mesma chave de API aciona um servidor MCP com mais de 200 ferramentas e uma CLI, para que um agente possa publicar em YouTube sem chamadas HTTP escritas à mão.
Adicione o servidor ao Claude, ao Cursor ou a qualquer cliente MCP com a sua chave de API. OAuth também funciona. Para YouTube, o agente chama estas ferramentas com os mesmos campos da requisição REST:
{
"mcpServers": {
"so-me-studio": {
"url": "https://api.so-me.studio/mcp",
"headers": { "X-API-Key": "sk_live_…" }
}
}
}Instale com npm i -g @social-media-scheduler/cli. Ela envia os arquivos locais por você e imprime JSON, então um script ou um job de CI pode agendar um post em YouTube com um único comando.
so-me posts:create --platform YOUTUBE --post-type VIDEO \
-m ./build-time.mp4 \
-c "Como reduzimos nosso tempo de build pela metade" \
-s 2026-11-08T16:00:00Z \
--metadata '{"title":"Como reduzimos nosso tempo de build pela metade","visibility":"public"}'O acesso à API, à CLI e ao MCP está incluído em todos os planos pagos: Lite, Creator, Standard, Advanced e Lifetime. Veja os planos e limites
Sim. Envie um vídeo vertical de até 3 minutos como postType VIDEO. O YouTube o classifica como Short; não existe uma configuração separada para Shorts.
Sim. O Social media studio aceita vídeos do YouTube de até 350 MB cada, bem abaixo do limite do YouTube. Comprima vídeos longos ou de bitrate alto antes de enviá-los.
Sim. Defina metaData.visibility como private ou unlisted. O valor deve ser private, unlisted ou public.
Não. Você conecta a conta de YouTube uma única vez no painel do Social media studio, pelo login de YouTube. Os tokens ficam armazenados criptografados e são renovados do nosso lado, e o seu código envia apenas a sua chave de API do Social media studio no cabeçalho X-API-Key.
Não. Ele retorna assim que o post entra na fila. A publicação roda em um worker que tenta de novo em caso de falha, então escute post.published e post.failed, ou consulte GET /v1/posts/:id.
A API REST, a CLI e o servidor MCP estão incluídos em todos os planos pagos: Lite, Creator, Standard, Advanced e Lifetime. Lite, Creator, Standard e Advanced começam com um teste de 7 dias (cartão obrigatório), e o Lifetime é um pagamento único.
Pare de malabarismo com abas, escreva, adapte e publique em 20 plataformas a partir de um único calendário.