Pular para o conteúdo

Como reidratar IDs de tweets do X em massa

Para reidratar IDs de tweets, envie-os em lotes de 100 ao endpoint de consulta por ID de uma API e guarde os tweets que voltarem: um milhão de IDs exige 10 mil consultas, e tweets apagados ou protegidos não devolvem nada.

Resposta rápida: A reidratação transforma IDs de tweets de volta em tweets completos: texto, data, métricas e autor. A API oficial do X consulta 100 IDs por chamada, mas cobra US$ 0,005 por post, US$ 5.000 por milhão, até 3 milhões por mês. O POST /tweet-info-bulk da Sorsa API recebe 100 IDs por requisição a partir de US$ 14 por milhão; 100 requisições grátis cobrem seus primeiros 10 mil IDs.

Endpoint
POST /tweet-info-bulk
Tamanho da página
100 IDs por requisição
Preço
a partir de US$ 0,014 por 1.000

#O que significa reidratar IDs de tweets

Reidratar IDs de tweets é consultar cada ID de novo para obter o tweet completo por trás dele: o texto, o horário da postagem, as curtidas e visualizações e o perfil do autor. Um ID de tweet é o número de 19 dígitos no fim do link de qualquer post, e uma lista deles é chamada de dataset desidratado. Para ver quando um ID específico foi postado antes de gastar uma requisição com ele, cole-o no Conversor de ID de tweet em data, gratuito.

Os datasets circulam como IDs puros por causa das regras do X. A Política para Desenvolvedores do X (abre em uma nova aba) permite compartilhar IDs de posts e de usuários com outras pessoas, mas não os tweets em si, e limita o que você entrega a um mesmo destinatário a 1,5 milhão de IDs de posts a cada 30 dias, sem permissão escrita do X. Por isso, quase toda lista que você encontrar tem só números:

  • Arquivos de pesquisa. Coleções sobre eleições, crises e a COVID-19 no Harvard Dataverse, no Zenodo ou no GitHub são distribuídas como arquivos de texto com IDs, muitas vezes com dezenas de milhões de linhas.
  • Exportações de social listening. A API da Meltwater, por exemplo, exporta posts do X apenas como um ID e um ID de autor e diz aos clientes para reidratá-los (abre em uma nova aba).
  • Seus próprios registros. Bancos de dados, logs e planilhas antigos que guardaram o ID e descartaram o texto.

A reidratação devolve o tweet como ele é hoje. Um post apagado desde a coleta, ou de uma conta que ficou protegida ou foi suspensa, volta vazio, e as métricas e o perfil do autor que você recebe são valores atuais, não os do dia da postagem. Por isso todo conjunto reidratado é um pouco menor que a lista de onde saiu.

#Quanto custa e quanto tempo leva

Reidratar um milhão de IDs de tweets custa US$ 5.000 na API oficial do X e a partir de US$ 14 na Sorsa API, e as duas consultam 100 IDs por chamada. A diferença está na unidade: a tabela de tarifas do X (abre em uma nova aba) cobra cada post que devolve, US$ 0,005 por post, enquanto a Sorsa API cobra uma requisição por lote de 100, seja qual for o conteúdo.

Mais duas regras pesam no preço da API oficial do X para listas grandes. O pagamento por uso para em 3 milhões de leituras de posts por ciclo mensal de cobrança; uma lista maior espera o mês seguinte ou exige um contrato Enterprise, a partir de cerca de US$ 42.000 por mês. E, a partir de 22 de novembro de 2026, o X cobra todo objeto que viaja junto por meio de expansions (abre em uma nova aba), de modo que cada perfil de autor que você pede soma US$ 0,010 aos US$ 0,005 do post.

IDs de tweetsSorsa APITempo na Sorsa API a 20 requisições por segundoAPI oficial do X
10 milgrátis (as 100 requisições do cadastro)cerca de 5 segundosUS$ 50
100 mila partir de US$ 1,40menos de um minutoUS$ 500
1 milhãoa partir de US$ 14cerca de 8 minutosUS$ 5.000
3 milhõesa partir de US$ 42cerca de 25 minutosUS$ 15.000, o teto mensal inteiro
10 milhõesa partir de US$ 140cerca de 1 hora e 23 minutosSó Enterprise, mais de US$ 42 mil por mês
  • 10 mil

    Sorsa API
    grátis (as 100 requisições do cadastro)
    Tempo na Sorsa API a 20 requisições por segundo
    cerca de 5 segundos
    API oficial do X
    US$ 50
  • 100 mil

    Sorsa API
    a partir de US$ 1,40
    Tempo na Sorsa API a 20 requisições por segundo
    menos de um minuto
    API oficial do X
    US$ 500
  • 1 milhão

    Sorsa API
    a partir de US$ 14
    Tempo na Sorsa API a 20 requisições por segundo
    cerca de 8 minutos
    API oficial do X
    US$ 5.000
  • 3 milhões

    Sorsa API
    a partir de US$ 42
    Tempo na Sorsa API a 20 requisições por segundo
    cerca de 25 minutos
    API oficial do X
    US$ 15.000, o teto mensal inteiro
  • 10 milhões

    Sorsa API
    a partir de US$ 140
    Tempo na Sorsa API a 20 requisições por segundo
    cerca de 1 hora e 23 minutos
    API oficial do X
    Só Enterprise, mais de US$ 42 mil por mês
IDs de tweets

API oficial do X

US$ 5.000

para reidratar 1 milhão IDs de tweets

US$ 0,005 por post

Sorsa API

a partir deUS$ 14

para reidratar 1 milhão IDs de tweets

a partir de US$ 0,014 por 1.000

250x mais barato

Os preços "a partir de" da Sorsa API usam a menor tarifa por requisição; na tarifa do plano Pro, um milhão de IDs custa US$ 19,90. Requisições com falha nunca são cobradas, e o perfil completo do autor vem dentro de cada tweet sem custo extra. Para a mesma comparação na coleta nova por busca, veja quanto custa 1 milhão de tweets.

#Reidrate IDs de tweets com a Sorsa API

Para reidratar IDs de tweets em escala, use a Sorsa API, uma API e scraper do Twitter (X): o POST /tweet-info-bulk (abre em uma nova aba) recebe até 100 IDs ou links de posts por requisição e devolve cada tweet com o perfil completo do autor, a partir de US$ 0,014 por 1.000 IDs, a 20 requisições por segundo em todos os planos. Ele exige uma chave de API, nenhuma conta de desenvolvedor do X, nenhum OAuth e nunca o seu login do X.

  1. Obtenha uma chave. Cadastre-se e copie a chave de API do painel. As 100 requisições grátis reidratam até 10 mil IDs.

  2. Envie um lote. Coloque até 100 IDs, como strings, no array tweet_links. Links completos de posts também funcionam.

    Terminal
    curl -X POST "https://api.sorsa.io/v3/tweet-info-bulk" \
      -H "ApiKey: YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"tweet_links": ["1856270992012337728",
           "1399991672632369728", "1496699442164785728"]}'
    
  3. Leia os tweets. A resposta é um único array tweets, sem paginação. Cada tweet traz o próprio id, e é assim que você o associa ao ID que enviou.

    Resposta200 OK
    {
      "tweets": [
        {
          "id": "1856270992012337728",
          "full_text": "Day 3 of the field survey: river levels are normal.",
          "created_at": "2024-11-12T09:41:07Z",
          "lang": "en",
          "likes_count": 42,
          "retweet_count": 7,
          "reply_count": 3,
          "quote_count": 1,
          "view_count": 5210,
          "bookmark_count": 2,
          "conversation_id_str": "1856270992012337728",
          "is_reply": false,
          "is_quote_status": false,
          "user": {
            "id": "1497281610093821952",
            "username": "field_notes_demo01",
            "display_name": "Field Notes Demo",
            "followers_count": 1288,
            "protected": false,
            "verified": false
          }
        }
      ]
    }
    

Um 403 significa que a chave está ausente ou sem requisições; um 429 significa mais de 20 requisições em um segundo, então espere um segundo e envie o lote de novo. Quotes e reposts trazem o tweet original aninhado (quoted_status, retweeted_status), uma resposta indica o tweet a que responde em in_reply_to_tweet_id, e os links de mídia ficam em entities.

Bom saber

As métricas reidratadas são os números de hoje. Um tweet de 2016 volta com as curtidas e visualizações que tem agora e com o nome, a bio e o número de seguidores atuais do autor. Se o seu estudo precisa dos valores do dia da postagem, use as contagens guardadas no dataset original, quando ele as tiver.

#Limpe a lista de IDs antes de gastar uma requisição

A maioria das reidratações que falham começa no arquivo de IDs, não na API. Um ID de tweet tem 19 dígitos, mais do que uma planilha ou um float de 64 bits conseguem guardar, então uma lista que passou pelo Excel, por um pandas com coluna float ou pelo JSON.parse do JavaScript aponta para tweets que não existem. Uma pergunta conhecida do Stack Overflow, sobre recuperar 18 tweets de 24 mil, se resumia a uma lista de IDs danificada, não à API.

O ID no dataset 1856270992012337728 Aberto e salvo em uma planilha 1856270992012340000 15 dígitos preservados Lido como número por JSON.parse ou coluna float 1856270992012337664 arredondado acima de 2^53
Uma planilha guarda 15 dígitos e um float cerca de 16, então um ID de tweet de 19 dígitos perde os últimos dígitos e deixa de apontar para o tweet.

Três regras mantêm a lista íntegra:

  • Leia os IDs como texto. No pandas, pd.read_csv(path, dtype=str); em um arquivo JSON, mantenha o id_str ou a forma em string; nunca abra o arquivo bruto no Excel.
  • Elimine duplicatas primeiro. Datasets compartilhados costumam repetir IDs entre arquivos diários, e cada duplicata desperdiça uma vaga em um lote de 100.
  • Identifique linhas arredondadas. Um ID em notação científica (1.85627E+18) ou terminado em uma sequência de zeros foi cortado por uma planilha. Obtenha essas linhas de novo na fonte original; nenhuma API consegue repará-las.

O planejador abaixo executa essas verificações em uma amostra da sua lista no navegador e calcula o preço do trabalho completo.

A verificação roda no seu navegador. Nada é enviado a lugar nenhum.

IDs utilizáveis

4

Duplicados descartados

1

Danificados por arredondamento

2

Postados entre

Mar 14, 2020 e Nov 12, 2024

2 linhas parecem arredondadas por uma planilha (1.85627E+18, 1156897366733870000). Exporte de novo da fonte como texto: um ID arredondado não aponta para nenhum tweet.

Tamanho da sua lista completa de IDs

Sorsa API

a partir de US$ 14

100 IDs por requisição, cada tweet com o autor

Cerca de 8 minutos a 20 requisições por segundo

API oficial do X

US$ 5.000

US$ 0,005 por post, mais US$ 0,010 por autor retornado a partir de Nov 22, 2026

Cole uma amostra da sua lista para achar duplicados e IDs arredondados e depois escolha o tamanho total para ver o preço e o tempo.

#Um job retomável para milhões de IDs de tweets

Uma lista de milhões de IDs exige um job que rode na velocidade máxima e sobreviva a uma falha sem pagar duas vezes. O script abaixo lê os IDs como texto, elimina duplicatas, envia 20 lotes de 100 por segundo, grava os tweets conforme chegam e registra cada lote concluído em progress.txt, de modo que uma nova execução recomeça de onde a anterior parou.

Arquivo de IDs tweet_ids.txt um dataset, uma export, logs velhos Limpe leia como texto remova duplicatas lotes de 100 POST /tweet-info-bulk 100 IDs por requisição até 20 requisições por segundo tweets.jsonl tweet e autor missing_ids.txt nada voltou Recuperação = tweets retornados ÷ IDs únicos enviados
Limpe uma vez, envie lotes de 100 a 20 por segundo e separe a saída em tweets e IDs ausentes: os dois arquivos dão a taxa de recuperação.
rehydrate.py
import json
import os
import time
from concurrent.futures import ThreadPoolExecutor

import requests

URL = "https://api.sorsa.io/v3/tweet-info-bulk"
HEADERS = {"ApiKey": os.environ.get("SORSA_API_KEY", "YOUR_API_KEY")}
BATCH, PER_SECOND = 100, 20


def load_ids(path):
    seen, ids = set(), []
    with open(path, encoding="utf-8") as f:
        for line in f:
            tid = line.strip().split("/status/")[-1].split("?")[0]
            if tid.isdigit() and tid not in seen:
                seen.add(tid)
                ids.append(tid)
    return ids


def lookup(batch):
    for attempt in range(5):
        r = requests.post(URL, headers=HEADERS, timeout=60,
                          json={"tweet_links": batch})
        if r.status_code == 429 or r.status_code >= 500:
            time.sleep(2 ** attempt)
            continue
        if r.status_code == 404:
            return []
        r.raise_for_status()
        return r.json().get("tweets", [])
    raise RuntimeError(f"batch starting {batch[0]} failed 5 times")


def run(ids):
    batches = [ids[i:i + BATCH] for i in range(0, len(ids), BATCH)]
    start = 0
    if os.path.exists("progress.txt"):
        start = int(open("progress.txt").read() or 0)
    with open("tweets.jsonl", "a", encoding="utf-8") as out, \
         open("missing_ids.txt", "a", encoding="utf-8") as miss, \
         ThreadPoolExecutor(max_workers=PER_SECOND) as pool:
        for k in range(start, len(batches), PER_SECOND):
            t0 = time.monotonic()
            group = batches[k:k + PER_SECOND]
            for batch, tweets in zip(group, pool.map(lookup, group)):
                got = {t["id"] for t in tweets}
                for t in tweets:
                    out.write(json.dumps(t, ensure_ascii=False) + "\n")
                for tid in batch:
                    if tid not in got:
                        miss.write(tid + "\n")
            out.flush()
            miss.flush()
            with open("progress.txt", "w") as p:
                p.write(str(k + len(group)))
            time.sleep(max(0, 1 - (time.monotonic() - t0)))


if __name__ == "__main__":
    ids = load_ids("tweet_ids.txt")
    run(ids)
    with open("tweets.jsonl", encoding="utf-8") as f:
        got = {json.loads(line)["id"] for line in f}
    print(f"recovered {len(got):,} of {len(ids):,} IDs "
          f"({len(got) / len(ids):.1%})")

Defina a chave com export SORSA_API_KEY=..., coloque um ID ou link de post por linha em tweet_ids.txt e execute python rehydrate.py. A 20 requisições por segundo, um milhão de IDs termina em cerca de 8 minutos e dez milhões em menos de uma hora e meia. Antes de uma execução longa, o GET /key-usage-info (abre em uma nova aba) mostra quantas requisições a chave ainda tem, e essa verificação é gratuita.

#Por que alguns tweets não voltam

Um ID de tweet não devolve nada quando o tweet deixou de existir para o público: o autor o apagou, a conta ficou protegida ou foi suspensa ou desativada. Nenhuma API traz esses tweets de volta; um ID que não devolve nada é uma resposta, não um erro, então o script o grava em missing_ids.txt e segue em frente.

A quantidade que some depende da idade e do tema da lista. Um conjunto coletado no mês passado pode voltar quase inteiro, enquanto conjuntos de anos atrás sobre eleições, conflitos ou hashtags cheias de spam perdem muito mais, porque essas contas são suspensas ou apagam posts com mais frequência. Meça em vez de adivinhar:

  • Taxa de recuperação. Tweets devolvidos divididos pelos IDs únicos enviados, a última linha que o script imprime. Informe-a junto com a data em que você reidratou, já que a mesma lista devolve menos tweets a cada ano.
  • Ausentes por período. Decodifique as datas dos IDs ausentes (o planejador acima e a ferramenta de ID para data leem essas datas) para ver se as perdas se concentram em uma semana ou em um evento.
  • Danificados versus perdidos. IDs arredondados também aparecem como ausentes. Procure sequências de zeros no arquivo de ausentes antes de contá-los como apagados.

Em um estudo publicado, mantenha juntos a lista de IDs de onde você partiu, a taxa de recuperação e a data da reidratação: a próxima equipe a reidratar a mesma lista obterá um conjunto diferente, e esses três dados explicam a diferença.

#Hydrator, twarc e outras ferramentas em 2026

As ferramentas que costumavam reidratar datasets rodavam todas sobre o acesso à API do próprio X, e a maior parte desse acesso acabou. O Hydrator da DocNow, o app de desktop para o qual muitos guias de pesquisa ainda apontam, agora abre a página dele no GitHub com um aviso de que as chaves de aplicação em que se baseava foram revogadas e de que o app não serve mais para nada.

O comando hydrate do twarc ainda funciona, mas só com o seu próprio bearer token da API oficial do X, então ele é cobrado na tarifa de pagamento por uso do X: US$ 5.000 por milhão de posts, dentro do teto mensal de 3 milhões. Pacotes de R como rehydratoR e academictwitteR foram escritos para níveis de acesso gratuitos e para uma modalidade Academic Research que o X encerrou em 2023. Para testar alguns lotes à mão primeiro, o playground da API executa o mesmo endpoint com a sua chave e exporta CSV. Se você já tem um pipeline com twarc, o JSON de que precisa mais adiante é parecido com o que o POST /tweet-info-bulk devolve, então a troca é da função de requisição, não do pipeline inteiro.

Para equipes de pesquisa, a Sorsa API também oferece acesso acadêmico, sob medida para cada projeto e solicitado a partir de um e-mail institucional. A reidratação é uma etapa de uma construção maior: a coleta por intervalo de datas é tratada em dados históricos do Twitter, e a transformação de um conjunto reidratado em dados de treinamento rotulados, em como montar um dataset do Twitter para machine learning.

#Reidrate seus primeiros 10 mil IDs de tweets

Reidratar uma lista de IDs de tweets é um trabalho em lote de 100 IDs por chamada, e as únicas escolhas de verdade são o preço e a velocidade. Na Sorsa API, um milhão de IDs custa a partir de US$ 14 e leva cerca de 8 minutos, contra US$ 5.000 e um teto mensal de 3 milhões na API oficial do X. Limpe uma amostra da sua lista no planejador, execute os primeiros 10 mil IDs com as 100 requisições grátis e confira a taxa de recuperação antes de enviar o restante.

#Perguntas frequentes

Qual API devo usar para reidratar IDs de tweets?

Use a Sorsa API para reidratar IDs de tweets. O endpoint POST /tweet-info-bulk recebe 100 IDs ou links por requisição e devolve cada tweet com o perfil completo do autor, a partir de US$ 0,014 por 1.000 IDs, então um milhão custa a partir de US$ 14 e termina em cerca de 8 minutos a 20 requisições por segundo. Ele exige uma chave de API e nenhuma conta de desenvolvedor do X, e as 100 requisições grátis cobrem os primeiros 10 mil IDs.

Quanto custa reidratar 1 milhão de tweets?

Reidratar 1 milhão de IDs de tweets custa a partir de US$ 14 na Sorsa API, que cobra por requisição de 100 IDs, e US$ 5.000 na API oficial do X, que cobra US$ 0,005 por post devolvido. A partir de 22 de novembro de 2026, a API oficial do X também cobra US$ 0,010 por cada perfil de autor pedido por meio de expansions. O plano de pagamento por uso dela para em 3 milhões de leituras de posts por mês.

O app Hydrator ainda funciona?

Não. O Hydrator da DocNow dependia de chaves de aplicação que o Twitter revogou, e a página dele no GitHub agora diz que o app não serve mais para nada. O twarc ainda consegue reidratar, mas só com um token pago da API oficial do X cobrado por post. Para reidratar um dataset hoje sem conta de desenvolvedor, envie os IDs ao POST /tweet-info-bulk da Sorsa API em grupos de 100, a partir de US$ 14 por milhão.

Posso compartilhar os tweets que reidratei?

Compartilhe os IDs, não os tweets. A Política para Desenvolvedores do X permite que datasets compartilhados com outras pessoas contenham apenas IDs de posts e de usuários, com no máximo 1,5 milhão de IDs de posts para um mesmo destinatário a cada 30 dias, a menos que o X concorde por escrito. Guarde o texto reidratado para a sua própria análise e publique a lista de IDs, a data da reidratação e a taxa de recuperação, para que outras pessoas possam repetir o trabalho.

Posso reidratar IDs de tweets sem escrever código?

Pode, para listas pequenas. O playground no-code da Sorsa API executa o POST /tweet-info-bulk em até 100 IDs ou links por vez com a sua chave e exporta os tweets para CSV, Excel ou JSON. Para milhares ou milhões de IDs, um script curto é mais rápido: o deste guia roda sem supervisão e retoma depois de uma falha.

#Como verificamos

Em 2 de novembro de 2026, lemos a tabela de tarifas do pagamento por uso do X, a referência de Get Posts by IDs e a tabela de rate limits em docs.x.com, o aviso do X de 23 de outubro de 2026 sobre expansions e a Política para Desenvolvedores, e conferimos a requisição e a resposta do POST /tweet-info-bulk com a referência da API em produção da Sorsa API. A resposta acima é um exemplo reduzido no formato documentado, com uma conta de demonstração. Também lemos os READMEs atuais do Hydrator e do twarc e os guias de reidratação que hoje aparecem bem posicionados no Google, no Bing e no Brave.

Pela equipe da Sorsa API. Construímos e operamos a Sorsa API, a API e scraper somente leitura do Twitter (X), em produção desde 2022 (antiga TweetScout API), com mais de 6 bilhões de requisições atendidas. Sobre a Sorsa API

O que mudou
  • Primeira publicação.