Como obter um tweet em JSON sem chave de API do X

Atualizado
Cinco formas testadas de ler um post público do X em JSON sem conta de desenvolvedor: FxTwitter, vxTwitter, syndication, oEmbed e UnifAPI.
Em resumo: você não precisa de conta de desenvolvedor do X para ler um post público em JSON. No dia 7 de outubro de 2026, buscamos o mesmo post da NASA com
curlem cinco lugares que respondem sem chave. O FxTwitter e o vxTwitter devolvem um objeto JSON limpo para um post ou um usuário individual. O endpoint de syndication do próprio X também devolve o post em JSON, sem documentação e sujeito a mudar. O endpoint oEmbed do X devolve um trecho de HTML embrulhado em JSON, não dados. O/tools/x/postda UnifAPI, grátis, sem fazer login e com limite por visitante, devolve o post com autor, mídia, post citado e todas as métricas, com os mesmos nomes de campo dos seus endpoints de busca, respostas e timeline. Se você só precisa de um post e nada mais, o FxTwitter basta. Se o post é o primeiro passo de um fluxo de trabalho que depois busca, lê respostas ou percorre uma timeline, use um endpoint cujo envelope continue o mesmo em todas essas etapas.
A pergunta "como pegar um tweet em JSON" (ou, em inglês, "get tweet json without api key") tem uma resposta diferente da que tinha em 2022. A API oficial continua funcionando, mas o nível gratuito é uma cota de tokens que um agente consome em uma tarde, e o nível pago começa em uma mensalidade que a maioria dos projetos paralelos não vai justificar por um punhado de leituras. Enquanto isso, um conjunto de endpoints públicos cresceu em torno do caso de uso de embed e prévia de link, e eles respondem a requisições HTTP simples sem credencial nenhuma.
Este post é o teste que fizemos antes de decidir o que construir. Toda requisição abaixo é reproduzível; copie o comando e rode.
O teste
Um post público, https://x.com/NASA/status/2107237881668313108, buscado com curl e User-Agent padrão, sem cookies, sem chave. Registramos o código de status, o content type e se o corpo continha o texto do post e a contagem de curtidas como campos estruturados.
| Endpoint | Status | Corpo | Texto + métricas como campos | URLs de mídia | Post citado | Também faz |
|---|---|---|---|---|---|---|
api.fxtwitter.com/NASA/status/<id> | 200 | JSON, 3,3 KB | Sim | Sim | Sim | Um usuário |
api.vxtwitter.com/NASA/status/<id> | 200 | JSON, 1,6 KB | Sim | Sim | Sim (URL) | Nada mais |
cdn.syndication.twimg.com/tweet-result?id=<id>&token=x | 200 | JSON, 3,2 KB | Só curtidas e contagem de respostas | Sim | Sim | Nada mais |
publish.twitter.com/oembed?url=… | 200 | JSON embrulhando HTML | Não (blockquote em HTML) | Não | Não | Nada mais |
unifapi.com/tools/x/post?id=<id> | 200 | JSON, mesmo modelo de busca, respostas, perfil | Sim | Sim | Sim | Busca, respostas, mídia, seguidores, tendências, comunidades |
Nada nessa tabela exige chave. Três dos cinco entregam um registro utilizável do post. As diferenças estão no que mais eles conseguem fazer, em quão estáveis são e em se você consegue continuar usando os mesmos nomes de campo quando a tarefa cresce.
FxTwitter e vxTwitter: feitos para prévia de link, bons o bastante para leitura
Os dois projetos existem para fazer links do X se expandirem no Discord e no Telegram. A API deles é um efeito colateral disso, e é um bom efeito colateral.
curl -s "https://api.fxtwitter.com/NASA/status/2107237881668313108" | jq '.tweet | {text, likes, retweets, views, created_at}'
Devolve o texto, as contagens de curtidas, reposts, respostas e visualizações, o objeto do autor, a mídia com tamanhos e variantes MP4, o post citado e um timestamp created_at. O vxTwitter devolve um objeto mais plano com os mesmos itens essenciais e um array mediaURLs.
O que eles não fazem: busca, respostas abaixo de um post, a timeline de um usuário, seguidores. O endpoint de usuário (api.fxtwitter.com/NASA) devolve as contagens e a bio, mas nenhum post. Eles também rodam em infraestrutura voluntária, sem limite de requisições publicado, então um fluxo de trabalho que se espalha por centenas de posts é um convidado, não um cliente.
O endpoint de syndication do X: oficial, sem documentação, frágil
O X serve timelines incorporadas a partir de cdn.syndication.twimg.com. A variante de post único responde em JSON:
curl -s "https://cdn.syndication.twimg.com/tweet-result?id=2107237881668313108&token=x" | jq '{text, favorite_count, created_at, user: .user.screen_name}'
São os dados que o próprio widget de embed do X renderiza, então são precisos, mas carregam só o que o widget mostra: favorite_count e conversation_count, sem reposts, sem visualizações. Também não tem documentação, o parâmetro token já mudou de significado mais de uma vez, e alguns posts voltam como um stub com um tombstone no lugar do texto. Use como contraprova, não como dependência.
oEmbed: não são dados
publish.twitter.com/oembed é o endpoint que os CMSs usam para incorporar um post. Ele devolve JSON, mas o payload é um blockquote em HTML com o texto dentro e uma tag de script. Não há métricas nem URLs de mídia. Se você quer o texto, vai acabar extraindo HTML de dentro de JSON, que é o pior dos dois mundos.
O endpoint gratuito de post da UnifAPI
curl -s "https://unifapi.com/tools/x/post?id=2107237881668313108"
{
"post": {
"id": "2107237881668313108",
"text": "Time to bring them home 🌎\n\nAfter nearly eight months aboard the @Space_Station, the four members of Crew-12 will soon head back to Earth…",
"createdAt": "2026-10-05T22:33:56.000Z",
"language": "en",
"url": "https://x.com/NASA/status/2107237881668313108",
"author": {
"id": "11348282",
"handle": "NASA",
"name": "NASA",
"verified": true,
"followers": 92373840
},
"metrics": {
"likes": 7210,
"reposts": 846,
"replies": 262,
"quotes": 60,
"bookmarks": 197,
"views": 2823329
},
"media": [
{
"kind": "photo",
"url": "https://pbs.twimg.com/media/HT5pcNwXwAAKdoM.jpg",
"width": 2048,
"height": 1365
}
],
"quoted": null
}
}
O parâmetro id também aceita a URL completa do status em x.com ou twitter.com, então um agente pode repassar o que quer que o usuário tenha colado. Adicione format=md ou envie Accept: text/markdown para receber o mesmo post em Markdown, que é mais barato de colocar no contexto de um modelo do que JSON.
Três propriedades importam para agentes:
- O envelope é compartilhado.
post,author,metricsemediatêm o mesmo formato em/tools/x/search,/tools/x/replies,/tools/x/profilee/tools/x/media. Um prompt que lê.metrics.likesem um deles funciona em todos. - O limite vem impresso. Toda resposta traz
X-RateLimit-Limit,X-RateLimit-RemainingeX-RateLimit-Reset. O limite gratuito é de 20 consultas a cada 10 minutos por visitante, e uma busca conta como duas; um 429 incluiRetry-Aftere a URL onde o limite é levantado (a API do X / Twitter medida, pay as you go, sem assinatura). - Os erros são tipados. Um id ausente ou malformado é
{ "error": { "type": "validation_error", … } }; um post apagado énot_found. Um agente pode ramificar emerror.typesem precisar interpretar uma mensagem.
A tabela completa de parâmetros e uma amostra capturada de cada endpoint estão na página em Markdown de cada ferramenta, por exemplo /tools/x-post-viewer/index.md, e em /llms.txt.
Qual usar
- Um post, em um bot que expande links: FxTwitter. É para isso que ele foi feito.
- Uma contraprova de que o texto de um post é o que o X serve: o endpoint de syndication.
- Um post que é o passo um de algo maior (ler o post, depois as respostas, depois buscar reações, depois ver quem respondeu): os endpoints gratuitos da UnifAPI, porque os passos seguintes existem e compartilham o formato.
- Volume, histórico além da janela recente ou garantias: a API medida com uma chave de workspace. Os nomes de campo batem com os dos endpoints gratuitos, então o prompt não muda.
FAQ
Preciso de conta de desenvolvedor do Twitter para ler um tweet público?
Não. Os cinco endpoints deste post respondem sem uma. A API oficial é o que você precisa para escrever, para dados privados e para vazão garantida.
Raspar o x.com diretamente é uma opção?
Não com curl. x.com/NASA/status/<id> devolve uma casca em HTML de 147 KB; o post é renderizado por JavaScript depois que a página carrega. Você precisaria de um navegador headless, que é mais lento, custa mais e quebra quando a marcação muda.
O endpoint da UnifAPI consegue ler o post de uma conta protegida?
Não. Posts protegidos e apagados devolvem not_found. Os endpoints leem apenas dados públicos e nunca contornam as configurações de privacidade do X.
Qual é o limite gratuito?
20 consultas a cada 10 minutos por visitante, somando todos os endpoints /tools/x/* (uma busca conta como duas), informado nos headers da resposta. Usar os endpoints é grátis, sem fazer login e sem precisar de conta; levantar o limite é pay as you go com uma chave de workspace da UnifAPI; não existe um nível de chave gratuita para solicitar.