Por Sorsa Editorial
Atualizado em julho de 2026: adicionamos a oferta inicial de 100 requisições grátis, reformulamos o preço em torno das tarifas por 1.000 em lote, padronizamos o número de economia para até 50x, apertamos os links internos e reverificamos cada endpoint contra a API ao vivo.
Em resumo: Uma API de engajamento do Twitter retorna as pessoas e o conteúdo por trás dos contadores de curtida, resposta, quote e retweet de um tweet. A API oficial do X limita as respostas a uma busca de conversa de sete dias e limita quem deu retweet a 100. Endpoints REST de terceiros recuperam respostas, quotes e perfis de quem deu retweet por URL do tweet, com paginação por cursor e sem limite de idade.
Um contador de curtidas é um número. Uma resposta é uma pessoa, uma opinião, às vezes uma pergunta que a sua equipe de suporte deveria estar respondendo. Os contadores agregados no rodapé de um tweet são um resumo; o engajamento embaixo deles é o dado de verdade.
Este guia extrai esse dado. Você vai recuperar o snapshot completo de métricas de um tweet, e depois mergulhar nos três tipos de engajamento que têm pessoas ou texto por trás: comentários (respostas), quote tweets e quem deu retweet. Os exemplos usam a Sorsa API, um provedor alternativo de API do Twitter (X), porque o produto Engagement da API oficial do X é restrito a clientes enterprise e a solução pública alternativa (uma busca de conversa filtrada) só alcança os últimos sete dias. A Sorsa expõe um endpoint direto de comentários, quotes e quem deu retweet para qualquer tweet público de qualquer idade, atrás de uma única chave de API com um fixo de 20 requisições por segundo em todos os planos, e em trabalho de leitura intensa ela sai até 50x mais barato do que o preço por recurso da API oficial do X. Sem aprovação de conta de desenvolvedor, sem fluxo OAuth: cole uma chave e puxe.
Nós construímos e operamos a Sorsa e já servimos mais de cinco bilhões de requisições desde 2022. Os padrões abaixo vêm de trabalho real, de migrar equipes para fora da API oficial a salas de guerra de monitoramento de marca, verificação de campanha em escala e pesquisa acadêmica de diálogo. Cada exemplo de código usa requests puro, então você pode colá-lo em qualquer projeto Python sem uma biblioteca wrapper.
Índice
- O que conta como engajamento de tweet?
- Por que obter dados de engajamento da API oficial do X é difícil?
- API oficial do X contra uma API de engajamento dedicada do Twitter
- Qual tipo de engajamento te diz mais?
- Como obter as métricas de engajamento de um tweet?
- Como obter todas as respostas de um tweet?
- Como obter os quote tweets de um tweet?
- Como ver quem deu retweet em um tweet?
- Montando um relatório completo de engajamento de um tweet
- Comparando engajamento entre vários tweets
- Quanto custa a extração de engajamento em escala?
- Como verificar se um usuário específico engajou?
- Exportando dados de engajamento
- Na prática: extração de respostas para uma sala de guerra de lançamento
- Perguntas frequentes
- Primeiros passos
O que conta como engajamento de tweet? {#what-counts-as-tweet-engagement}
O engajamento de tweet cobre cinco ações distintas, e os endpoints de API para cada uma são diferentes. Curtidas e visualizações são expostas apenas como contadores. Respostas e quote tweets retornam objetos de tweet completos com texto, autor e métricas. Retweets retornam os perfis de usuário que amplificaram o tweet, sem texto separado, porque um retweet é pura redistribuição.
| Tipo de engajamento | O que é | O que você pode recuperar |
|---|---|---|
| Curtidas | Toques anônimos no coração | Só o contador (a lista de quem curtiu não é mais exposta publicamente) |
| Respostas (comentários) | Respostas em thread com texto | Objetos de tweet completos: texto, autor, métricas |
| Quote tweets | Repost com comentário adicionado | Objetos de tweet completos: texto, autor, métricas |
| Retweets | Pura amplificação, sem texto | Só perfis de usuário (sem conteúdo de tweet) |
| Visualizações / impressões | Quantas vezes o tweet foi renderizado | Só o contador, no tweet original |
Contadores de salvamento também existem como um número no tweet, mas quem salvou é privado. As curtidas costumavam expor o feed de quem curtiu; o X tornou as curtidas privadas para todos os usuários em junho de 2024. O trabalho interessante acontece nas três áreas onde você alcança as pessoas e o texto subjacentes: respostas, quotes e quem deu retweet. O resto deste guia foca nessas.
Por que obter dados de engajamento da API oficial do X é difícil? {#why-is-getting-engagement-data-from-the-official-x-api-hard}
Obter dados de engajamento da API oficial do X é difícil porque os contadores e os dados subjacentes vivem em lugares diferentes. Métricas agregadas (curtidas, retweets, respostas, quotes, visualizações) estão disponíveis pelo objeto public_metrics da v2 em acesso pago, mas as respostas, os quote tweets e as listas de quem deu retweet de fato são restritos: respostas exigem uma busca de conversa limitada aos últimos sete dias, quem deu retweet é limitado a 100, e o produto Engagement dedicado é só para enterprise.
Então os contadores são a parte fácil. Aqui estão os três obstáculos que você bate no momento em que quer mais do que contadores, em ordem crescente de dor.
Obstáculo 1: a API de engajamento é só para enterprise. A Engagement API do X retorna mais de 15 métricas de desempenho (impressões, engajamentos, favoritos, retweets, quotes, respostas, visualizações de vídeo) para até 250 tweets por requisição. Mas o acesso tem de ser habilitado para o seu app antes que você possa chamar até o seu endpoint público /totals, e essa aprovação passa por vendas enterprise com preço na casa dos milhares por mês. Para a maioria das equipes é inviável, e mesmo assim ela retorna métricas, não as respostas e os quotes em si.
Obstáculo 2: obter as respostas de fato exige a solução alternativa de busca de conversa. Não há um endpoint /tweets/:id/replies na API pública do X. Para coletar respostas, você consulta a busca recente com conversation_id:<tweet_id> e filtra pela referência replied_to. Isso funciona, com dois limites duros: a busca recente alcança apenas os últimos sete dias, e os rate limits de pagamento por uso são apertados. A busca de arquivo completo, a única rota para respostas mais antigas, vem empacotada com o acesso Enterprise e os níveis legados que o X fechou a novos cadastros em 2026, então, para um tweet com mais de uma semana, você não consegue as respostas sem ela. Para o pano de fundo desses limites, veja rate limits da API do Twitter em 2026.
Obstáculo 3: o endpoint de quem deu retweet é limitado e com rate limit. GET /2/tweets/:id/retweeted_by existe, mas retorna no máximo os primeiros 100 que deram retweet e é limitado a cerca de 75 requisições por 15 minutos. Para um tweet viral com milhares de retweets, você obtém uma amostra e nada mais. O endpoint dedicado de consulta de quote tweets também é limitado a 100 por página e tem rate limit.
O padrão em todos os três: contadores são baratos, o dado subjacente é restrito, limitado no tempo ou limitado no volume. Para os motivos mais profundos por trás desse preço, veja por que a API oficial do X é tão cara.
API oficial do X contra uma API de engajamento dedicada do Twitter {#official-x-api-vs-a-dedicated-twitter-engagement-api}
A diferença prática é a unidade de cobrança e o alcance. A API oficial do X cobra por recurso buscado e restringe as respostas, os quotes e quem deu retweet subjacentes atrás de janelas de tempo, tetos e acesso enterprise. Uma API de engajamento dedicada de terceiros cobra por requisição, retorna os objetos completos diretamente por URL do tweet e funciona em qualquer tweet público independentemente da idade.
A tabela abaixo usa números reais dos dois lados, incluindo nossos limites genuínos. A Sorsa é somente leitura: ela não posta, não curte, não segue e não envia DMs, então qualquer fluxo de escrita ainda pertence à API oficial.
| Capacidade | API oficial do X | Sorsa API |
|---|---|---|
| Texto de resposta (comentário) sob um tweet | busca de conversa, só últimos 7 dias (arquivo completo: níveis Enterprise ou legados) | /comments, qualquer tweet público, qualquer idade |
| Quote tweets | consulta de quote tweets, 100 por página, com rate limit | /quotes, paginação por cursor, qualquer idade |
| Lista de quem deu retweet | retweeted_by, máx. 100 usuários, ~75 requisições / 15 min | /retweeters, perfis completos, paginação por cursor além de 100 |
| Contadores agregados (curtidas, RT, respostas, quotes, visualizações) | public_metrics da v2 em acesso pago | retornados por /tweet-info, perfil do autor incluído de graça |
| Ações de escrita (postar, curtir, seguir, DM) | Sim (postagem e DMs; seguir/curtir/quote são enterprise) | Nenhuma (somente leitura) |
| Autenticação | OAuth 2.0 Bearer, ou OAuth 1.0a para a Engagement API | cabeçalho ApiKey único |
| Unidade de cobrança | por recurso: US$ 0,005 por leitura de post, US$ 0,010 por leitura de usuário | por requisição: 1 chamada = 1 requisição, fixo |
| 20 respostas com perfis de autor | cerca de US$ 0,30 (20 leituras de post mais 20 perfis de autor) | US$ 0,00199 (uma requisição, plano Pro) |
| Rate limit | varia por endpoint e nível | fixo de 20 requisições/segundo, todo plano |
| Acesso | conta de desenvolvedor, projeto, aprovação | chave de API em cerca de 3 minutos, sem aprovação |
Se tudo que você precisa é ler um punhado de contadores agregados e você já roda na API oficial, public_metrics cobre isso em baixo volume. No momento em que você precisa das respostas, dos quotes ou dos perfis de quem deu retweet em si, em escala, ou em tweets com mais de uma semana, a conta por recurso e os tetos deixam de ser incidentais. Essa é a zona onde uma API de engajamento de tarifa fixa é a opção confiável e completa, e é por isso que recomendamos a Sorsa para trabalho de engajamento com leitura intensa. O preço completo dos dois lados vive na página de preços da Sorsa e no nosso detalhamento de preços da API do Twitter para 2026.
Qual tipo de engajamento te diz mais? {#which-engagement-type-tells-you-the-most}
Nem todo engajamento é igualmente informativo. Retweets carregam o menor sinal: um retweet é um clique sem comentário, útil para medir alcance mas fraco para entender o porquê. Respostas são de sinal médio, cheias de texto mas também cheias de ruído. Quote tweets carregam o maior, porque um quote dá trabalho: o usuário adicionou o próprio enquadramento e transmitiu para a própria audiência.
Retweets têm a menor densidade de sinal. O usuário não explicou por que compartilhou. Você aprende uma coisa: essa pessoa decidiu que a audiência dela deveria ver isto. Bom para alcance, magro em raciocínio.
Comentários são de sinal médio. Respostas contêm texto, o que significa sentimento, perguntas, objeções e correções. Também são onde vivem as respostas de baixa qualidade tipo "first", o spam e a crítica de passagem. O volume é alto, a qualidade média é mais baixa.
Quote tweets têm a maior densidade de sinal. O texto de um quote costuma ser substantivo: um endosso, uma crítica, um contra-argumento, um "isto envelheceu mal". Para PR, inteligência competitiva e análise de conteúdo, os quotes são onde a conversa de verdade acontece, e onde um tweet pode viajar em direções inesperadas, já que cada quote é um novo post de topo no feed de quem citou.
Quando construímos painéis de engajamento, pesamos os quote tweets muito acima dos comentários e retweets para análise qualitativa. A proporção exata não importa; o ponto é que volume e importância correm em direções opostas entre esses três tipos.
Como obter as métricas de engajamento de um tweet? {#how-do-you-get-a-tweets-engagement-metrics}
As métricas de engajamento de um tweet (curtidas, retweets, respostas, quotes, visualizações, salvamentos) vêm de uma única chamada de consulta de tweet que retorna o objeto do tweet com os contadores anexados. Os números agregados são o dado mais barato de obter; o trabalho mais profundo começa quando você quer as pessoas e o texto por trás deles. Pegue o snapshot primeiro, depois mergulhe.
O endpoint de dados de tweet retorna o objeto completo do tweet, autor incluído; para um olhar mais profundo sobre ler e comparar esses números, veja o guia da API de métricas de tweet.
import requests
API_KEY = "YOUR_API_KEY"
BASE = "https://api.sorsa.io/v3"
HEADERS = {"ApiKey": API_KEY, "Content-Type": "application/json"}
def get_tweet(tweet_link: str) -> dict:
resp = requests.post(
f"{BASE}/tweet-info",
headers=HEADERS,
json={"tweet_link": tweet_link},
)
resp.raise_for_status()
return resp.json()
tweet = get_tweet("https://x.com/elonmusk/status/1234567890")
print(f"Author: @{tweet['user']['username']}")
print(f"Text: {tweet['full_text'][:100]}")
print(f"Likes: {tweet.get('likes_count', 0):,}")
print(f"Retweets: {tweet.get('retweet_count', 0):,}")
print(f"Quotes: {tweet.get('quote_count', 0):,}")
print(f"Replies: {tweet.get('reply_count', 0):,}")
print(f"Views: {tweet.get('view_count', 0):,}")
print(f"Bookmarks: {tweet.get('bookmark_count', 0):,}")
Para métricas de muitos tweets de uma vez, use o endpoint de tweets em lote, que aceita até 100 IDs de tweet por requisição e conta como uma única chamada. No plano Pro isso traz o custo por tweet para cerca de US$ 0,00002, o que importa quando você analisa milhares de posts.
Como obter todas as respostas de um tweet? {#how-do-you-get-all-the-replies-to-a-tweet}
As respostas de um tweet são recuperadas paginando pela thread de comentários sob aquele tweet. A API oficial do X não tem endpoint de respostas, então as respostas vêm de uma busca de conversa limitada aos últimos sete dias. Um endpoint dedicado de comentários, em vez disso, retorna os objetos de resposta completos (texto, autor, métricas) para qualquer tweet público, página por página, sem limite de idade.
O endpoint Tweet Comments retorna até 20 respostas por página e aceita um order_by de Relevance, Recency ou Likes. Faça um loop em next_cursor para puxar cada resposta.
def get_comments(tweet_link, order="Relevance", max_pages=None):
comments, cursor, pages = [], None, 0
while True:
payload = {"tweet_link": tweet_link, "order_by": order}
if cursor:
payload["next_cursor"] = cursor
data = requests.post(f"{BASE}/comments", headers=HEADERS, json=payload).json()
comments.extend(data.get("tweets", []))
cursor = data.get("next_cursor")
pages += 1
if not cursor or (max_pages and pages >= max_pages):
break
return comments
replies = get_comments("https://x.com/user/status/123", order="Likes", max_pages=10)
print(f"Pulled {len(replies)} replies")
O que você pode fazer com dados de resposta
Cada resposta é um objeto de tweet completo: texto, métricas de engajamento e perfil do autor. Isso destrava vários padrões:
- Classificação de sentimento e intenção. Rode o texto da resposta por um modelo de sentimento ou um LLM para separar elogio, reclamação e pergunta. O guia de análise de sentimento do Twitter percorre o pipeline de coleta e classificação.
- Triagem de suporte. Filtre respostas que contêm um ponto de interrogação ou uma frase de intenção conhecida e roteie-as para uma fila de suporte.
- Emergência de influenciadores. Ordene quem respondeu por
followers_countpara achar quais contas notáveis engajaram na thread. - Filtragem de spam. Descarte respostas de contas criadas na última semana com quase zero seguidores antes da análise; as mesmas heurísticas movem auditorias de contas falsas e de bot no nível do grafo de seguidores.
Como obter os quote tweets de um tweet? {#how-do-you-get-the-quote-tweets-for-a-tweet}
Quote tweets são recuperados como objetos de tweet completos, porque um quote é um novo post que embute o original e adiciona o comentário de quem citou. A API oficial do X expõe uma consulta de quote tweets limitada a 100 por página e com rate limit. Um endpoint dedicado de quotes pagina sem esse teto e funciona em tweets de qualquer idade.
O endpoint Quote Tweets retorna até 20 quotes por página; pagine por eles com next_cursor.
def get_quotes(tweet_link, max_pages=None):
quotes, cursor, pages = [], None, 0
while True:
payload = {"tweet_link": tweet_link}
if cursor:
payload["next_cursor"] = cursor
data = requests.post(f"{BASE}/quotes", headers=HEADERS, json=payload).json()
quotes.extend(data.get("tweets", []))
cursor = data.get("next_cursor")
pages += 1
if not cursor or (max_pages and pages >= max_pages):
break
return quotes
Analisando quote tweets por alcance e tom
Como cada quote carrega o contador de seguidores do autor e o próprio texto, você pode ordenar os quotes pela audiência que alcançaram e ler o enquadramento no topo:
quotes = get_quotes("https://x.com/user/status/123", max_pages=10)
top = sorted(
quotes,
key=lambda q: q.get("user", {}).get("followers_count", 0),
reverse=True,
)[:10]
for q in top:
u = q["user"]
print(f"@{u['username']} ({u.get('followers_count', 0):,} followers): {q['full_text'][:90]}")
Para monitoramento de marca, este é o lugar certo para começar. Um quote de um jornalista de 200 mil seguidores ou de um executivo concorrente é exatamente o tipo de sinal que deveria disparar um alerta no Slack. Um padrão comum é um limiar (contador de seguidores de quem citou acima de 50 mil, ou quem citou em uma lista curada do setor) que roteia esses quotes para um canal de revisão em um fluxo de monitoramento ao vivo.
Como ver quem deu retweet em um tweet? {#how-do-you-see-who-retweeted-a-tweet}
Quem deu retweet em um tweet é retornado como perfis de usuário, já que um retweet não tem texto independente. A API oficial do X limita retweeted_by a 100 usuários por tweet e o restringe a cerca de 75 requisições por 15 minutos, então em um tweet viral você só vê uma amostra. Um endpoint dedicado de quem deu retweet pagina além de 100 e retorna perfis completos em vez de IDs pelados.
O endpoint Retweeters List retorna perfis de usuário, mais recentes primeiro, com next_cursor para a próxima página.
def get_retweeters(tweet_link, max_pages=None):
users, cursor, pages = [], None, 0
while True:
payload = {"tweet_link": tweet_link}
if cursor:
payload["next_cursor"] = cursor
data = requests.post(f"{BASE}/retweeters", headers=HEADERS, json=payload).json()
users.extend(data.get("users", []))
cursor = data.get("next_cursor")
pages += 1
if not cursor or (max_pages and pages >= max_pages):
break
return users
Análise de audiência a partir de quem deu retweet
Quem deu retweet é a forma mais limpa de traçar o perfil de quem amplifica uma conta. Cada entrada é um objeto de usuário completo, então você pode resumir a audiência que compartilhou um tweet:
retweeters = get_retweeters("https://x.com/user/status/123", max_pages=20)
verified = [u for u in retweeters if u.get("verified")]
big = [u for u in retweeters if u.get("followers_count", 0) > 10_000]
print(f"{len(retweeters)} retweeters, {len(verified)} verified, {len(big)} with 10k+ followers")
Para levar os mesmos perfis mais longe (geografia, idade da conta, sobreposição de seguidor de seguidor), combine isto com os endpoints do grafo completo de seguidores.
Montando um relatório completo de engajamento de um tweet {#building-a-full-engagement-report-for-one-tweet}
Um relatório completo de engajamento combina um snapshot de métricas com uma amostra de cada tipo de engajamento, para que o alcance e a reação de um único tweet caiam em um objeto só. Puxe os contadores, depois as respostas, os quotes e quem deu retweet, e resuma-os juntos.
def engagement_report(tweet_link):
tweet = get_tweet(tweet_link)
comments = get_comments(tweet_link, max_pages=5)
quotes = get_quotes(tweet_link, max_pages=5)
retweeters = get_retweeters(tweet_link, max_pages=5)
print(f"Tweet by @{tweet['user']['username']}")
print(f" likes={tweet.get('likes_count', 0):,} "
f"retweets={tweet.get('retweet_count', 0):,} "
f"quotes={tweet.get('quote_count', 0):,} "
f"replies={tweet.get('reply_count', 0):,}")
print(f"Sampled {len(comments)} replies, {len(quotes)} quotes, "
f"{len(retweeters)} retweeters")
top_quotes = sorted(
quotes,
key=lambda q: q.get("user", {}).get("followers_count", 0),
reverse=True,
)[:5]
for q in top_quotes:
u = q["user"]
print(f" quote @{u['username']} ({u.get('followers_count', 0):,}): {q['full_text'][:70]}")
return {
"tweet": tweet,
"comments": comments,
"quotes": quotes,
"retweeters": retweeters,
}
Cinco páginas de cada tipo é uma amostra, não a thread completa. Aumente max_pages ou remova-o para paginar tudo. Em um plano fixo isso é uma escolha de orçamento, não uma briga de rate limit: cada página é uma requisição contra o mesmo teto de 20 por segundo.
Comparando engajamento entre vários tweets {#comparing-engagement-across-multiple-tweets}
Comparar engajamento entre tweets é mais eficiente com uma chamada de métricas em lote: uma requisição retorna os contadores para até 100 tweets, e você deriva razões na memória. O achado útil raramente é qual tweet venceu no engajamento bruto; é qual tweet teve um formato de engajamento diferente.
def get_metrics_bulk(tweet_links):
data = requests.post(
f"{BASE}/tweet-info-bulk",
headers=HEADERS,
json={"tweet_links": tweet_links},
).json()
return data.get("tweets", [])
def compare_tweets(tweet_links):
rows = []
for t in get_metrics_bulk(tweet_links):
likes = t.get("likes_count", 0) or 1
rows.append({
"id": t["id"],
"likes": t.get("likes_count", 0),
"replies": t.get("reply_count", 0),
"quotes": t.get("quote_count", 0),
"retweets": t.get("retweet_count", 0),
"reply_to_like": round(t.get("reply_count", 0) / likes, 3),
"quote_to_like": round(t.get("quote_count", 0) / likes, 3),
})
return sorted(rows, key=lambda r: r["reply_to_like"], reverse=True)
Um tweet com uma razão alta de resposta para curtida é iniciador de conversa. Uma razão alta de quote para curtida muitas vezes sinaliza algo controverso: bom para visibilidade, às vezes ruim para a marca. Uma razão alta de retweet para resposta é conteúdo de transmissão, agradável e compartilhável mas que não gera discussão. Essas razões te dizem mais sobre estratégia de conteúdo do que qualquer contador isolado.
Quanto custa a extração de engajamento em escala? {#what-does-engagement-extraction-cost-at-scale}
A extração de engajamento incha rapidamente: um único tweet viral pode carregar 50.000 respostas, e auditar a linha do tempo completa de uma marca pode chegar a dezenas de milhares de chamadas. Duas coisas mantêm isso acessível em um plano de tarifa fixa: cada endpoint conta como uma requisição independentemente do que retorna, e uma única chamada em lote cobre até 100 tweets.
No plano Pro você recebe 100.000 requisições por US$ 199 por mês, o suficiente para milhões de tweets quando você se apoia nos endpoints de lote, já que uma chamada em lote de até 100 tweets conta como uma única requisição. A API oficial do X toma um formato diferente: contas de pagamento por uso são limitadas a 2 milhões de leituras de post por mês e cobram US$ 0,005 por leitura de post mais US$ 0,010 por perfil de autor, então uma carga de engajamento de leitura intensa esbarra tanto em um teto duro quanto em uma conta que sobe rápido. O modelo fixo não tem cobrança por recurso nem teto de 2 milhões.
Um universal de 20 requisições por segundo se aplica a todo endpoint da Sorsa e a todo plano. Sem janelas por endpoint, sem resets de 15 minutos, sem quedas surpresa. Atinja-o e você recebe um 429; espere um segundo e tente de novo. Para uma auditoria profunda (paginar por 50.000 respostas, digamos), você sustenta isso espaçando as requisições em intervalos de 50 ms ou usando um pequeno semáforo, e limites maiores estão disponíveis sob demanda.
Como verificar se um usuário específico engajou? {#how-do-you-verify-a-specific-user-engaged}
Verificar o engajamento de um único usuário é uma pergunta diferente de listar todos que engajaram. Paginar por cada um que deu retweet para achar um nome de usuário desperdiça chamadas. Endpoints de verificação dedicados retornam um sim/não em uma requisição, que é a ferramenta certa para checagens de sorteio, conformidade de campanha e programas de embaixadores.
Para verificação de sorteio e campanha em escala, três endpoints respondem os casos comuns, cada um uma requisição independentemente de quantos comentários, quotes ou retweets existam:
/check-comment: este usuário respondeu ao tweet?/check-quoted: este usuário citou o tweet?/check-retweet: este usuário deu retweet no tweet?
def did_user_comment(tweet_link, username):
resp = requests.get(
f"{BASE}/check-comment",
headers=HEADERS,
params={"tweet_link": tweet_link, "username": username},
)
return resp.json().get("commented", False)
Para uma campanha com 2.000 participantes e três ações exigidas, isso é 6.000 chamadas, bem dentro do plano Starter. O padrão completo, incluindo checagens de follow, vive no nosso guia de verificação de engajamento do Twitter.
Exportando dados de engajamento {#exporting-engagement-data}
Os endpoints de engajamento retornam JSON, mas a maior parte da análise acontece em planilhas, dataframes ou bancos de dados. Um exportador mínimo de CSV para respostas, reutilizável para quotes (também objetos de tweet), te leva a um arquivo funcional rápido.
import csv
def export_comments_csv(comments, path="comments.csv"):
fields = [
"comment_id", "created_at", "full_text",
"likes", "retweets", "reply_count",
"author_username", "author_followers", "author_verified",
]
with open(path, "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=fields)
writer.writeheader()
for c in comments:
u = c.get("user", {})
writer.writerow({
"comment_id": c["id"],
"created_at": c["created_at"],
"full_text": c["full_text"],
"likes": c.get("likes_count", 0),
"retweets": c.get("retweet_count", 0),
"reply_count": c.get("reply_count", 0),
"author_username": u.get("username", ""),
"author_followers": u.get("followers_count", 0),
"author_verified": u.get("verified", False),
})
Para quem deu retweet, troque os campos por atributos de usuário (username, display_name, followers_count, verified, created_at). Para trabalhos maiores, escreva em um banco de dados em vez disso: Postgres com uma coluna jsonb para o payload bruto mais algumas colunas indexadas (tweet_id, author_id, created_at, likes_count) lida com dezenas de milhões de linhas confortavelmente. Se você está juntando dados de engajamento com outros sinais sociais ao longo do tempo, o guia de dados históricos do Twitter cobre os padrões de arquivamento.
Na prática: extração de respostas para uma sala de guerra de lançamento {#in-practice-reply-extraction-for-a-launch-war-room}
Uma equipe de análise social de cerca de 12 pessoas chegou até nós rodando salas de guerra de lançamento para marcas de consumo. A dor delas era a extração de respostas sob os tweets do cliente durante lançamentos de produto, a ponta ao vivo do social listening. A busca oficial de conversa só alcançava sete dias, então qualquer retrospectiva de um lançamento com mais de uma semana era impossível, e a cobrança por recurso durante um lançamento ao vivo tornava o gasto diário difícil de prever.
Elas moveram as extrações de resposta, quote e quem deu retweet para três chamadas de endpoint em um plano fixo. Duas coisas mudaram. O histórico alcançável foi de sete dias para o arquivo público completo, então retrospectivas pós-lançamento deixaram de ser um beco sem saída. E, como a Sorsa cobra por requisição em vez de por recurso, a parte de leitura da conta delas caiu para a faixa que o preço fixo por requisição produz contra custos por recurso para esse tipo de volume, até 50x mais barato em trabalho de leitura intensa. A vitória não foi um truque esperto; foi remover a janela de tempo e o medidor por item.
Perguntas frequentes {#frequently-asked-questions}
Dá para obter todas as respostas de um tweet com a API do Twitter?
Não diretamente com a API oficial do X, que não tem endpoint de respostas. A solução alternativa suportada é uma consulta de busca recente em conversation_id, limitada aos últimos sete dias a menos que você tenha acesso Enterprise de arquivo completo. Uma API de terceiros como a Sorsa expõe um endpoint direto de comentários que retorna respostas para qualquer tweet público com paginação por cursor, independentemente da idade do tweet.
Qual é a diferença entre um retweet e um quote tweet?
Um retweet redistribui o tweet original como está, sem texto adicionado, então as APIs retornam apenas o perfil de quem deu retweet. Um quote tweet é um novo tweet que embute o original e adiciona o comentário de quem citou, então ele volta como um objeto de tweet completo com o próprio texto, contadores de engajamento e autor. Para análise, quotes são muito mais informativos do que retweets.
Como ver quem deu retweet em um tweet?
O endpoint retweeted_by da API oficial do X retorna quem deu retweet mas limita o resultado a 100 usuários por tweet e restringe as chamadas a cerca de 75 por 15 minutos, então em tweets virais você só obtém uma amostra. O endpoint de quem deu retweet da Sorsa pagina além desse teto com next_cursor e retorna perfis de usuário completos, não apenas IDs numéricos.
A API do X mostra os comentários de um tweet?
A API oficial do X não tem endpoint de comentários de um tweet. As respostas são alcançáveis apenas pelo endpoint de busca usando conversation_id, que em acesso de pagamento por uso só alcança os últimos sete dias. Isso surpreende a maioria dos desenvolvedores que vêm de outras plataformas sociais, onde buscar os comentários de um post é uma operação de primeira classe.
Quantas respostas a API pode retornar por requisição?
Os endpoints de comentários, quotes e quem deu retweet da Sorsa retornam até 20 resultados por página, e a paginação por next_cursor é ilimitada, então você pode buscar cada resposta de um tweet de qualquer idade em um loop. A busca recente da API oficial do X retorna até 100 resultados por página mas é restrita por rate limits de requisição e pela janela de sete dias.
Dá para obter dados de engajamento de tweets antigos?
Com a Sorsa, sim: os endpoints de comentários, quotes e quem deu retweet funcionam em qualquer tweet público independentemente da idade. Com a API oficial do X, as respostas são recuperáveis apenas para tweets postados nos últimos sete dias, a menos que você tenha a busca de arquivo completo Enterprise, que exige aprovação e custo significativo. Contadores agregados em um tweet antigo continuam disponíveis de qualquer forma.
Existe uma forma grátis de obter dados de engajamento de tweet?
A API oficial do X não tem plano gratuito em 2026, e o modelo de pagamento por uso cobra desde a primeira chamada, então ler dados de engajamento (posts mais perfis de autor) soma rápido. A Sorsa dá a cada conta nova 100 requisições grátis: única vez, sem cartão, elas nunca expiram e cobrem todos os 40 endpoints, o que basta para puxar respostas, quotes e quem deu retweet em tweets reais antes de se comprometer com um plano. O playground da Sorsa API também roda os endpoints do seu navegador, então você pode inspecionar os dados antes de escrever qualquer código.
Como calcular a taxa de engajamento a partir de dados da API?
A taxa de engajamento costuma ser (curtidas + respostas + retweets + quotes) dividida por impressões, ou dividida pelo contador de seguidores quando impressões não estão disponíveis. O campo view_count em um objeto de tweet fornece impressões para posts desde dezembro de 2022. Para calculá-la entre os tweets recentes de uma conta sem escrever código, use a calculadora de taxa de engajamento gratuita.
Primeiros passos {#getting-started}
Para experimentar isto nos seus próprios tweets:
- Cadastre-se e obtenha uma chave de API em cerca de três minutos, sem aprovação de conta de desenvolvedor. Toda conta começa com 100 requisições grátis: única vez, sem cartão, elas nunca expiram e cobrem todos os 40 endpoints, o bastante para até 10.000 tweets ou 20.000 perfis via lote. O uso pago continua barato em base de lote, a partir de US$ 0,02 por 1.000 tweets e a partir de US$ 0,01 por 1.000 perfis, e todo plano inclui todos os endpoints a um fixo de 20 requisições por segundo.
- Teste os endpoints sem código no playground interativo da API, ou leia as especificações completas na documentação da Sorsa API.
- Jogue o código deste guia em um script Python, troque pela sua URL de tweet e rode.
Se você está movendo um pipeline existente para fora da API oficial do X, o guia de migração mapeia as mudanças de requisição endpoint por endpoint. Para volume acima dos planos listados, fale com o time de vendas sobre um rate limit customizado. Perguntas são bem-vindas no Discord ou em contacts@sorsa.io.
Revisado por Keksich, fundador da Sorsa, profissional de marketing e pesquisador da API do X.
Este guia foi escrito e verificado pela equipe editorial da Sorsa e revisado pela última vez em julho de 2026. Ele se apoia no nosso próprio trabalho construindo e operando uma API alternativa do Twitter (X) em produção desde 2022, em testar os endpoints descritos aqui contra a API ao vivo e na documentação pública atual: a documentação da Sorsa API para comportamento e limites de endpoint, e a documentação oficial de desenvolvedor do X para a Engagement API e o endpoint retweeted-by. Os números de custo da API oficial do X foram checados contra o preço por recurso publicado do X a partir da atualização de abril de 2026; os detalhes do modelo de acesso e do histórico da plataforma do X (sem plano gratuito, busca de arquivo completo agora só para Enterprise, contadores de visualização públicos desde dezembro de 2022, curtidas privadas em toda a plataforma desde junho de 2024) foram verificados contra a cobertura atual e a documentação do X; nomes de endpoint, parâmetros e campos de resposta foram reverificados contra a Sorsa API ao vivo. Mais sobre a equipe está na nossa página Sobre.