Publicar no Threads leva duas chamadas de API, não uma: você cria um container de mídia, depois publica ele. Perfis são limitados a 250 posts publicados via API a cada 24 horas, posts de texto têm teto de 500 caracteres, e cada permissão que seu app usa precisa passar pela App Review da Meta antes que qualquer pessoa fora da sua lista de testers consiga se conectar.
O que a API do Threads consegue publicar, e o que não consegue?
Posts únicos suportam três tipos de mídia: TEXT, IMAGE e VIDEO. Carrosséis suportam filhos do tipo IMAGE e VIDEO, entre 2 e 20 deles, e um carrossel conta como um único post no seu limite de publicação.
As especificações, da própria documentação da Meta:
| Restrição | Valor |
|---|---|
| Tamanho do texto | 500 caracteres |
| Filhos do carrossel | 2 a 20 |
| Formatos de imagem | JPEG, PNG |
| Tamanho do arquivo de imagem | 8 MB no máximo |
| Largura da imagem | 320 a 1440 pixels |
| Proporção da imagem | 10:1 no máximo |
| Container de vídeo | MOV ou MP4 |
| Codecs de vídeo | vídeo H264 ou HEVC, áudio AAC |
| Taxa de quadros do vídeo | 23 a 60 FPS |
| Duração do vídeo | 300 segundos (5 minutos) |
| Tamanho do arquivo de vídeo | 1 GB no máximo |
| Bitrate do vídeo | 100 Mbps de vídeo, 128 kbps de áudio |
Um detalhe que surpreende: emojis contam nos 500 caracteres pelo valor em bytes UTF-8, não como caracteres únicos. Uma legenda que parece ter 480 caracteres no seu editor pode ser rejeitada. Se você está contando no lado do cliente, conte bytes pra emojis. O post sobre o limite de caracteres do Threads e o contador de caracteres do Threads gratuito lidam com isso.
Nota: os números aqui foram verificados contra developers.facebook.com/docs/threads/posts e /docs/threads/overview em setembro de 2026. Plataformas mudam isso sem aviso.
Qual é o modelo de autenticação?
O Threads roda na infraestrutura de apps da Meta, mas com credenciais próprias. Você cria um app da Meta com o caso de uso Threads, e esse app emite um ID e um secret específicos do Threads, distintos dos mostrados em outras partes do painel. Usar o par errado é um erro comum na primeira hora.
Os escopos são granulares:
threads_basic(exigido por todos os endpoints)threads_content_publish(publicação)threads_manage_repliesethreads_read_repliesthreads_manage_insightsthreads_deletethreads_location_tagging
A revisão do app não é opcional. Cada permissão precisa ser aprovada pela App Review, e o app precisa estar publicado em produção, antes que qualquer pessoa que não seja tester consiga concedê-la. Até lá, você só consegue postar em perfis do Threads que você convidou explicitamente como testers pelo painel do app, e que aceitaram o convite nas configurações do Threads deles. A documentação da Meta não informa quanto tempo a revisão leva, então não vamos chutar.
O ciclo de vida do token que você precisa construir
Essa é a parte que vira um trabalho em segundo plano.
- A janela de autorização retorna um código.
- Troque por um token de acesso de curta duração, válido por 1 hora.
- Troque esse por um token de longa duração via
GET /access_tokencomgrant_type=th_exchange_token. Válido por 60 dias. - Renove via
GET /refresh_access_tokencomgrant_type=th_refresh_token. Um token precisa ter pelo menos 24 horas e ainda não ter expirado pra ser renovável. Um token renovado vale por mais 60 dias.
Um token que passa 60 dias sem renovação expira e o usuário precisa reautorizar. Permissões concedidas por usuários de app com perfis privados são válidas por 90 dias.
Nota: os números aqui foram verificados contra developers.facebook.com/docs/threads/get-started e /get-started/long-lived-tokens em setembro de 2026. Plataformas mudam isso sem aviso.
Qual é a sequência real de publicação?
Pra um post único:
POST /{threads-user-id}/threadscommedia_typee seu texto ou URL de mídia. Isso retorna um ID de container.- Espere. A Meta recomenda em média 30 segundos antes de publicar, pra deixar o servidor terminar de processar a mídia.
POST /{threads-user-id}/threads_publishcom esse ID de container.
Pra um carrossel, insira uma etapa: crie um container por filho, depois crie um container de carrossel referenciando eles, depois publique esse.
# 1. create the container
curl -X POST "https://graph.threads.net/v1.0/$USER_ID/threads" \
-d "media_type=IMAGE" \
-d "image_url=https://example.com/photo.jpg" \
-d "text=Shipping notes for this week." \
-d "access_token=$TOKEN"
# -> {"id":"1789..."}
# 2. wait ~30s for processing, then publish
curl -X POST "https://graph.threads.net/v1.0/$USER_ID/threads_publish" \
-d "creation_id=1789..." \
-d "access_token=$TOKEN"
Note que imagens e vídeos são passados por URL pública, não enviados como bytes. Os servidores da Meta buscam eles. Isso significa que sua mídia precisa estar publicamente acessível, sem autenticação, e ainda no ar quando a busca acontece, o que é um requisito de hospedagem que a maioria das pessoas não planeja.
Quais são os limites de taxa?
| Ação | Limite |
|---|---|
| Posts publicados | 250 por período móvel de 24 horas |
| Respostas | 1.000 a cada 24 horas |
| Exclusões | 100 a cada 24 horas |
| Buscas de localização | 500 a cada 24 horas |
| Chamadas gerais de API | 4800 x número de impressões, a cada 24 horas (mínimo de 10 impressões) |
Vale a pena ler a fórmula das impressões duas vezes. Seu orçamento de chamadas gerais escala com o alcance real do perfil, com um piso. Um perfil novinho em folha tem o orçamento mínimo.
Nota: os números aqui foram verificados contra developers.facebook.com/docs/threads/overview em setembro de 2026. Plataformas mudam isso sem aviso.
O que realmente vai te custar três semanas?
App Review. Preparar gravações de tela, uma política de privacidade, um caminho de demonstração funcionando e uma verificação de negócio, depois iterar sobre rejeições. A duração não é publicada, então planeje isso como um risco de cronograma, não como uma tarefa.
O trabalho de renovação de token. Tokens de longa duração expiram em 60 dias e só são renováveis quando têm 24 horas de vida. Isso é um trabalho agendado, um armazenamento de tokens criptografados, um caminho de alerta quando a renovação falha, e um fluxo de reconexão na sua interface.
Falha assíncrona. A chamada de criação de container retornar 200 não significa que sua mídia é válida. A chamada de publicação é onde um vídeo com problema aparece, cerca de 30 segundos depois, em uma requisição diferente. Seu modelo de post precisa de um estado de processing e uma forma de reportar uma falha que chegou depois que o usuário fechou a aba.
Hospedagem de mídia pública. Como a Meta busca por URL, você precisa de URLs públicas duráveis com comportamento de cache sensato, e um plano pro que acontece quando a busca é limitada por taxa ou bloqueada pela proteção contra bots do seu CDN.
Contagem de bytes pra emojis. Barato de corrigir, caro de descobrir em produção.
Resumo
- Duas chamadas pra publicar: criar um container, esperar cerca de 30 segundos, publicar. Três pra um carrossel.
- Mídia é passada por URL pública. A Meta busca ela.
- 500 caracteres. Emojis contam como bytes UTF-8.
- 250 posts publicados via API por perfil a cada 24 horas.
- Tokens de curta duração duram 1 hora, os de longa duração 60 dias, renováveis a partir de 24 horas de vida.
- App Review é exigida por permissão antes que não-testers consigam se conectar. Nenhuma duração é publicada.
Agendar Threads junto com tudo o resto
Se o Threads é uma plataforma entre várias em vez de o produto inteiro, a maior parte do trabalho acima se repete por rede com formatos diferentes. O X usa OAuth 2.0 PKCE e envios de bytes em blocos. O Bluesky não precisa de nenhuma revisão de app. O LinkedIn precisa de dois apps separados: perfis pessoais usam w_member_social, páginas de empresa usam r_organization_social, w_organization_social e rw_organization_admin, revisados separadamente.
O BulkPublish cobre 15 plataformas por trás de uma única API REST, incluindo o Threads, com a sequência de container, a renovação de 60 dias e a consulta de status assíncrona tratadas do lado do servidor. A documentação para desenvolvedores e a referência da API REST listam os endpoints, e agendar posts no Threads cobre o caminho pra quem não é desenvolvedor.