Pular para o conteúdo

Códigos de erro da API do Twitter e como corrigi-los

Um erro da API do X (Twitter) tem duas partes: um status HTTP de 400 a 504 que indica o tipo de falha e um código ou tipo no corpo JSON que indica a causa. Só o 429 e os status 5xx passam se você esperar.

Resposta curta: Repita apenas os erros 429 e 5xx, na hora indicada por x-rate-limit-reset ou depois de uma pausa crescente. Todos os outros erros se repetem até você corrigir a requisição (400), as chaves (401), o saldo pré-pago (402), o acesso do app (403, 453) ou o ID (404). Para ler dados do X com uma chave e sem OAuth, use a Sorsa API: posts a partir de US$ 0,014 por 1.000, com 100 requisições grátis no cadastro.

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

#Como ler um erro da API do X

Toda chamada que falha na API oficial do X devolve três coisas: o status HTTP, um corpo JSON e, na maioria dos endpoints, headers de rate limit. O status diz que tipo de falha ocorreu, o corpo diz qual causa dentro desse tipo você encontrou, e os headers dizem quando um rate limit é reiniciado.

HTTP/1.1 403 Forbidden { "title": "Client Forbidden", "type": ".../problems/client-forbidden", "reason": "client-not-enrolled", "detail": "When authenticating requests to the X API v2 endpoints, you must use keys and tokens from a developer App that is attached to a Project. ...", "required_enrollment": "Appropriate Level of API Access" } 1 Status: o tipo de falha 403 é acesso, nunca tempo: tentar de novo dá o mesmo erro 2 Type e reason: a causa Nomes estáveis em que seu código pode se basear 3 Detail: a solução, segundo o X Aqui: use chaves de um App dentro de um Project
O status indica a classe da falha, o tipo e o motivo indicam a causa, e o detalhe traz a correção do próprio X.

Os corpos da API v2 do X seguem um único formato: um title, um detail e um type, que é um URI em https://api.x.com/2/problems/, às vezes acompanhado de um reason como client-not-enrolled. Os endpoints antigos da v1.1, e a resposta de rate limit na documentação da v2 do próprio X, usam em vez disso um array errors com um code numerado e uma message: {"errors": [{"code": 88, "message": "Rate limit exceeded"}]}. Escreva seu código para ramificar por type, reason ou code, porque o X pode reescrever o texto legível a qualquer momento.

Um 200 também pode trazer erros. Quando uma requisição pede vários posts ou usuários e alguns foram apagados ou são protegidos, o X devolve em data os que encontrou e lista o restante em um array errors com o tipo resource-not-found ou not-authorized-for-resource. Verifique a presença de errors em toda resposta, inclusive nas bem-sucedidas.

Imprima o corpo antes de lançar uma exceção. Em Python, raise_for_status() mostra só a linha de status, e a própria equipe do X pede aos desenvolvedores, no fórum, que imprimam response.text, porque o corpo nomeia o parâmetro ou a configuração com problema.

#Status de erro da API do X e como corrigir cada um

A API oficial do X responde com onze status de erro: cinco deles (429, 500, 502, 503 e 504) passam se você esperar e tentar de novo, e os outros seis falham outra vez até você mudar a requisição, as chaves, o saldo ou o acesso. A referência de códigos de resposta (abre em uma nova aba) do X lista dez deles; o 402 é o que ficou de fora.

StatusO que significa na API oficial do XCorreçãoRepetir?
400 Bad RequestUm parâmetro está ausente, malformado ou fora do intervalo; o array errors do corpo o nomeiaCorrija o parâmetro que o corpo nomeiaNão
401 UnauthorizedO X não consegue verificar quem chama: chaves erradas ou revogadas, método de autenticação errado, assinatura OAuth 1.0a inválidaGere as chaves de novo, use a autenticação que o endpoint indica, sincronize o relógioNão
402 Payment RequiredO saldo pré-pago do pagamento por uso acabou: tipo credits-depletedAdicione créditos ou use as chaves do app com saldoNão
403 ForbiddenAs chaves funcionam, mas este app, token ou conta não pode fazer issoLeia o reason ou o code: inscrição, permissões, nível de acessoNão
404 Not FoundO post, o usuário ou a URL não existe, ou o post foi apagadoConfira o ID e o caminho do endpointNão
409 ConflictUm filtered stream está sem regrasAdicione uma regra e depois conecteNão
429 Too Many RequestsUma janela de rate limit se esgotou (código 88) ou o teto mensal de uso foi atingido (usage-capped)Espere o x-rate-limit-reset; um teto de uso espera o próximo ciclo de cobrançaNo reset
500 Internal Server ErrorUma falha dentro do X (código 131)Tente de novo com uma pausa crescenteSim
502 Bad GatewayOs servidores de entrada do X não receberam resposta do serviço por trás delesTente de novo com uma pausa crescenteSim
503 Service UnavailableO X está acima da capacidade (código 130)Tente de novo com uma pausa crescenteSim
504 Gateway TimeoutOs servidores do X expiraram na requisiçãoTente de novo com uma pausa crescente e peça menos por chamadaSim
  • 400 Bad Request

    O que significa na API oficial do X
    Um parâmetro está ausente, malformado ou fora do intervalo; o array errors do corpo o nomeia
    Correção
    Corrija o parâmetro que o corpo nomeia
    Repetir?
    Não
  • 401 Unauthorized

    O que significa na API oficial do X
    O X não consegue verificar quem chama: chaves erradas ou revogadas, método de autenticação errado, assinatura OAuth 1.0a inválida
    Correção
    Gere as chaves de novo, use a autenticação que o endpoint indica, sincronize o relógio
    Repetir?
    Não
  • 402 Payment Required

    O que significa na API oficial do X
    O saldo pré-pago do pagamento por uso acabou: tipo credits-depleted
    Correção
    Adicione créditos ou use as chaves do app com saldo
    Repetir?
    Não
  • 403 Forbidden

    O que significa na API oficial do X
    As chaves funcionam, mas este app, token ou conta não pode fazer isso
    Correção
    Leia o reason ou o code: inscrição, permissões, nível de acesso
    Repetir?
    Não
  • 404 Not Found

    O que significa na API oficial do X
    O post, o usuário ou a URL não existe, ou o post foi apagado
    Correção
    Confira o ID e o caminho do endpoint
    Repetir?
    Não
  • 409 Conflict

    O que significa na API oficial do X
    Um filtered stream está sem regras
    Correção
    Adicione uma regra e depois conecte
    Repetir?
    Não
  • 429 Too Many Requests

    O que significa na API oficial do X
    Uma janela de rate limit se esgotou (código 88) ou o teto mensal de uso foi atingido (usage-capped)
    Correção
    Espere o x-rate-limit-reset; um teto de uso espera o próximo ciclo de cobrança
    Repetir?
    No reset
  • 500 Internal Server Error

    O que significa na API oficial do X
    Uma falha dentro do X (código 131)
    Correção
    Tente de novo com uma pausa crescente
    Repetir?
    Sim
  • 502 Bad Gateway

    O que significa na API oficial do X
    Os servidores de entrada do X não receberam resposta do serviço por trás deles
    Correção
    Tente de novo com uma pausa crescente
    Repetir?
    Sim
  • 503 Service Unavailable

    O que significa na API oficial do X
    O X está acima da capacidade (código 130)
    Correção
    Tente de novo com uma pausa crescente
    Repetir?
    Sim
  • 504 Gateway Timeout

    O que significa na API oficial do X
    Os servidores do X expiraram na requisição
    Correção
    Tente de novo com uma pausa crescente e peça menos por chamada
    Repetir?
    Sim
Espere e tente de novo A mesma requisição funciona depois ERRO TENTAR QUANDO 429 code 88 em x-rate-limit-reset 500, 502, 504 após 1, 2, 4, 8 segundos 503 code 130 após um backoff: o X está acima da capacidade Pare após 4 ou 5 tentativas e registre o corpo: pode ser uma queda mais longa Corrija antes e depois envie Tentar de novo dá o mesmo erro ERRO MUDAR 400 o parâmetro citado 401 as chaves, o token ou o relógio 402 o saldo ou o teto de gasto 403, 453 o acesso do app 404 o ID ou username 429 capped espere o próximo ciclo
Repetir só resolve erros de tempo. Todo outro erro da API do X exige uma mudança antes que a mesma requisição possa dar certo.

#402 Payment Required: créditos da API do X esgotados

Um 402 da API oficial do X significa que o saldo pré-pago por trás do seu app não tem mais nada para gastar, então o X recusa toda chamada cobrada até chegarem novos créditos. O modelo de pagamento por uso do X cobra cada leitura antecipadamente, US$ 0,005 por post e US$ 0,010 por usuário na tabela de preços do X (abre em uma nova aba), e os novos desenvolvedores não têm outra porta de entrada desde 6 de fevereiro de 2026.

Este é o corpo, como um desenvolvedor o publicou no fórum do X em outubro de 2026:

Response402 Payment Required
{
  "title": "Payment Required",
  "detail": "credits depleted",
  "type": "https://api.x.com/2/problems/credits-depleted"
}

O link do type não leva a lugar útil: a referência de erros do X não tem entrada para o 402, uma lacuna que um desenvolvedor relatou no fórum do X (abre em uma nova aba) em julho de 2026. As causas, da mais comum para a menos comum:

  • O saldo está em zero ou um pouco abaixo. Uma requisição pode deixar um pequeno resto negativo, e o X bloqueia as chamadas até que novos créditos o cubram. Compre créditos no Developer Console; a recarga automática não roda enquanto o saldo está zerado ou negativo.
  • O limite de gasto do ciclo foi usado. Um limite que você define no console é o máximo que sua conta gasta em um ciclo de cobrança. Aumente-o ou espere o próximo ciclo.
  • As chaves pertencem a outro app. Se o Client ID, o secret ou o Bearer token vêm de um app de outro Project ou de uma conta de desenvolvedor mais antiga, toda chamada cobrada falha mesmo com o console mostrando saldo. O 402 com saldo de US$ 20 (abre em uma nova aba) de um desenvolvedor terminou exatamente aí, em outubro de 2026. Copie as chaves do app com saldo e autorize de novo. Um GET /2/users/me que funciona só prova que a autenticação passa.
  • Rajadas esgotam o saldo mais rápido do que a recarga automática o repõe. A página de preços do X avisa que um uso capaz de esvaziar uma recarga em 5 minutos ainda pode ficar sem créditos. Aumente o valor da recarga.

Bom saber

Um 402 e um 429 do tipo usage-capped interrompem leituras pagas, por motivos diferentes. O 402 é dinheiro: adicione créditos e a próxima chamada funciona. O teto de uso é volume: o pagamento por uso para em 3 milhões de leituras de posts por ciclo de cobrança, e depois disso só o próximo ciclo ou um contrato Enterprise, a partir de cerca de US$ 42 mil por mês, devolve as leituras.

#403 Forbidden, 453 e outros erros de acesso

Um 403 significa que o X aceitou suas chaves e recusou a ação, e o reason ou o code numerado no corpo diz qual porta está fechada; repetir a chamada nunca a abre. Os seis que você mais encontra:

  • client-not-enrolled (tipo client-forbidden): as chaves vêm de um app que não está vinculado a um Project ou não está inscrito no acesso que o endpoint exige. No Developer Console, coloque o app dentro de um Project de pagamento por uso e use as chaves desse app, como a equipe do X aconselhou em um tópico de outubro de 2026 (abre em uma nova aba).
  • 453: "You currently have access to a subset of X API v2 endpoints and limited v1.1 endpoints (e.g. media post, oauth) only." (você tem acesso apenas a um subconjunto de endpoints da v2 e a poucos da v1.1). A chamada foi para um endpoint da v1.1 que não é de upload de mídia nem de OAuth, que é o que tweepy.API e outros clientes mais antigos fazem. Chame o endpoint da v2: tweepy.Client em Python, o pacote twitter-api-v2 em Node.js.
  • 261, "Your App cannot perform write actions" (seu app não pode executar ações de escrita): o app está configurado como somente leitura. Mude para Read and Write e gere os tokens de acesso de novo, porque os tokens antigos mantêm a permissão com que foram criados.
  • Contas protegidas ou suspensas: código 179 ou o tipo not-authorized-for-resource para um post protegido, 63 para um usuário suspenso. Nada do seu lado os abre; pule o item.
  • 326, temporarily locked (temporariamente bloqueada): a conta por trás do token acionou as verificações de spam do X. Entre no x.com e conclua a verificação que o X mostrar.
  • 226 e 187 em escritas: o filtro de spam do X ou um post duplicado. A mensagem 226 tem correções próprias no nosso guia sobre por que o X diz que uma requisição parece automatizada.

Curtidas, seguir e quote posts também saíram do acesso self-service em 20 de abril de 2026, então essas escritas agora terminam em um 403 em um app de pagamento por uso. Cada texto 403, com os passos do console para cada um, está no nosso guia sobre o erro 403 Forbidden na API do X.

#429 e 5xx: os erros que se corrigem esperando

Um 429 ou um 5xx é o único tipo de erro da API do X que uma nova tentativa pode corrigir, e só no momento certo: a hora do reset para um 429, uma pausa crescente para um 5xx.

Um 429 com código 88 significa que a janela de um endpoint ficou sem requisições. Três headers em toda resposta mostram onde você está: x-rate-limit-limit, x-rate-limit-remaining e x-rate-limit-reset, um horário Unix em segundos; a maioria das janelas dura 15 minutos. Um 429 do tipo usage-capped é o teto mensal de 3 milhões de leituras de posts, e o header de reset não o levanta. Quanto dura cada limite, no app do X e na API, está no nosso guia sobre o rate limit exceeded no Twitter.

Um 5xx é uma falha do lado do X: 500 e código 131 são erros internos, 503 e código 130 indicam capacidade excedida, 502 e 504 são timeouts entre servidores do X. Espere 1, 2, 4 e 8 segundos entre as tentativas, depois pare e registre o corpo.

Este handler repete só o que pode dar certo e para em todo o resto, com o corpo na mensagem:

Python
import time
import requests

RETRY = {500, 502, 503, 504}

def call_x(url, headers, params=None, tries=5):
    for attempt in range(tries):
        r = requests.get(url, headers=headers, params=params, timeout=30)
        if r.ok:
            body = r.json()
            for err in body.get("errors", []):  # partial errors in a 200
                print("skipped:", err.get("detail"))
            return body
        if r.status_code == 429 and "usage-capped" not in r.text:
            reset = int(r.headers.get("x-rate-limit-reset", time.time() + 60))
            time.sleep(max(reset - time.time(), 1) + 1)
        elif r.status_code in RETRY:
            time.sleep(2 ** attempt)
        else:  # 400-409 and a capped 429: fix the cause first
            raise RuntimeError(f"X API {r.status_code}: {r.text}")
    raise RuntimeError(f"X API still failing after {tries} tries")

#Códigos de erro da API do X por número

Os códigos numerados vêm da API v1.1 e ainda chegam hoje: em respostas da v1.1, em tracebacks do Tweepy e em alguns corpos da v2, como o código 88 em uma chamada com rate limit. As mensagens e os status abaixo são do próprio X, da última tabela de códigos que ele publicou (arquivada em maio de 2023 (abre em uma nova aba)); o 453 vem de relatos de desenvolvedores no fórum do X. Um código que não está aqui volta ao seu status na tabela acima.

CódigoMensagem do XStatusCausa e correção
32Could not authenticate you.401Chaves, token ou assinatura OAuth erradas: gere de novo e assine outra vez
34Sorry, that page does not exist.404URL do endpoint ou ID errado
50User not found.404A conta foi apagada ou renomeada: busque pelo ID do usuário
63User has been suspended.403A conta consultada está suspensa: pule-a
64Your account is suspended and is not permitted to access this feature.403A conta do próprio token está suspensa: apele ao X
87Client is not permitted to perform this action.403O endpoint não está aberto para este app
88Rate limit exceeded.429Espere o x-rate-limit-reset
89Invalid or expired token.401 ou 403Token revogado ou expirado: autorize de novo e guarde o novo token
92SSL is required.403Chame por HTTPS com TLS 1.2
99Unable to verify your credentials.403Consumer secret ou token secret errado
130Over capacity.503Tente de novo com uma pausa crescente
131Internal error.500Tente de novo com uma pausa crescente
135Could not authenticate you.401O desvio do relógio quebrou o timestamp do OAuth: sincronize o relógio
144No status found with that ID.404O post foi apagado ou o ID está errado
179Sorry, you are not authorized to see this status.403O autor protege seus posts
185User is over daily status update limit.403O limite de posts da conta foi usado: espere algumas horas
186Tweet needs to be a bit shorter.403O texto passa do limite de tamanho
187Status is a duplicate.403O mesmo texto já foi postado: mude-o
215Bad authentication data.400Sem header Authorization ou com um header malformado
220Your credentials do not allow access to this resource.403O token é restrito: use um com o escopo necessário
226This request looks like it might be automated.403O filtro de spam do X barrou uma escrita: reduza o ritmo
261Your App cannot perform write actions.403App somente leitura: defina Read and Write e gere os tokens de novo
326...this account is temporarily locked.403Entre no x.com e remova o bloqueio
327You have already retweeted this Tweet.403Já feito: trate como sucesso
349You cannot send messages to this user.403O destinatário não aceita suas mensagens
415Callback URL not approved for this client App.403Adicione a URL de callback exata nas configurações do app
453You currently have access to a subset of X API v2 endpoints...403Uma chamada da v1.1 ou um nível de acesso ausente: chame o endpoint da v2
  • 32

    Mensagem do X
    Could not authenticate you.
    Status
    401
    Causa e correção
    Chaves, token ou assinatura OAuth erradas: gere de novo e assine outra vez
  • 34

    Mensagem do X
    Sorry, that page does not exist.
    Status
    404
    Causa e correção
    URL do endpoint ou ID errado
  • 50

    Mensagem do X
    User not found.
    Status
    404
    Causa e correção
    A conta foi apagada ou renomeada: busque pelo ID do usuário
  • 63

    Mensagem do X
    User has been suspended.
    Status
    403
    Causa e correção
    A conta consultada está suspensa: pule-a
  • 64

    Mensagem do X
    Your account is suspended and is not permitted to access this feature.
    Status
    403
    Causa e correção
    A conta do próprio token está suspensa: apele ao X
  • 87

    Mensagem do X
    Client is not permitted to perform this action.
    Status
    403
    Causa e correção
    O endpoint não está aberto para este app
  • 88

    Mensagem do X
    Rate limit exceeded.
    Status
    429
    Causa e correção
    Espere o x-rate-limit-reset
  • 89

    Mensagem do X
    Invalid or expired token.
    Status
    401 ou 403
    Causa e correção
    Token revogado ou expirado: autorize de novo e guarde o novo token
  • 92

    Mensagem do X
    SSL is required.
    Status
    403
    Causa e correção
    Chame por HTTPS com TLS 1.2
  • 99

    Mensagem do X
    Unable to verify your credentials.
    Status
    403
    Causa e correção
    Consumer secret ou token secret errado
  • 130

    Mensagem do X
    Over capacity.
    Status
    503
    Causa e correção
    Tente de novo com uma pausa crescente
  • 131

    Mensagem do X
    Internal error.
    Status
    500
    Causa e correção
    Tente de novo com uma pausa crescente
  • 135

    Mensagem do X
    Could not authenticate you.
    Status
    401
    Causa e correção
    O desvio do relógio quebrou o timestamp do OAuth: sincronize o relógio
  • 144

    Mensagem do X
    No status found with that ID.
    Status
    404
    Causa e correção
    O post foi apagado ou o ID está errado
  • 179

    Mensagem do X
    Sorry, you are not authorized to see this status.
    Status
    403
    Causa e correção
    O autor protege seus posts
  • 185

    Mensagem do X
    User is over daily status update limit.
    Status
    403
    Causa e correção
    O limite de posts da conta foi usado: espere algumas horas
  • 186

    Mensagem do X
    Tweet needs to be a bit shorter.
    Status
    403
    Causa e correção
    O texto passa do limite de tamanho
  • 187

    Mensagem do X
    Status is a duplicate.
    Status
    403
    Causa e correção
    O mesmo texto já foi postado: mude-o
  • 215

    Mensagem do X
    Bad authentication data.
    Status
    400
    Causa e correção
    Sem header Authorization ou com um header malformado
  • 220

    Mensagem do X
    Your credentials do not allow access to this resource.
    Status
    403
    Causa e correção
    O token é restrito: use um com o escopo necessário
  • 226

    Mensagem do X
    This request looks like it might be automated.
    Status
    403
    Causa e correção
    O filtro de spam do X barrou uma escrita: reduza o ritmo
  • 261

    Mensagem do X
    Your App cannot perform write actions.
    Status
    403
    Causa e correção
    App somente leitura: defina Read and Write e gere os tokens de novo
  • 326

    Mensagem do X
    ...this account is temporarily locked.
    Status
    403
    Causa e correção
    Entre no x.com e remova o bloqueio
  • 327

    Mensagem do X
    You have already retweeted this Tweet.
    Status
    403
    Causa e correção
    Já feito: trate como sucesso
  • 349

    Mensagem do X
    You cannot send messages to this user.
    Status
    403
    Causa e correção
    O destinatário não aceita suas mensagens
  • 415

    Mensagem do X
    Callback URL not approved for this client App.
    Status
    403
    Causa e correção
    Adicione a URL de callback exata nas configurações do app
  • 453

    Mensagem do X
    You currently have access to a subset of X API v2 endpoints...
    Status
    403
    Causa e correção
    Uma chamada da v1.1 ou um nível de acesso ausente: chame o endpoint da v2

#Tipos de problema da API v2 do X

Nas respostas da v2, o campo type traz a causa: um dos onze tipos que o X documenta, mais credits-depleted, que ele não documenta. Todos os URIs começam com https://api.x.com/2/problems/.

TipoO que significaCorreção
invalid-requestUm 400: um parâmetro está errado, listado em errorsCorrija esse parâmetro
resource-not-foundO post ou o usuário não existe, muitas vezes dentro de um 200Pule-o ou confira o ID
not-authorized-for-resourceConteúdo protegido ou privadoPule-o
client-forbiddenUm 403 com um reason, normalmente client-not-enrolledMova o app para um Project
credits-depletedUm 402: o saldo pré-pago acabouAdicione créditos
usage-cappedUm 429: o teto mensal de usoEspere o próximo ciclo de cobrança
rate-limit-exceededUm 429: uma janela de rate limitEspere o x-rate-limit-reset
streaming-connectionUm problema na conexão do streamReconecte com uma pausa crescente
rule-cap, invalid-rules, duplicate-rulesRegras do filtered stream: demais, sintaxe inválida, já existentesApague, corrija ou pule a regra
about:blankUm erro genéricoLeia o status
  • invalid-request

    O que significa
    Um 400: um parâmetro está errado, listado em errors
    Correção
    Corrija esse parâmetro
  • resource-not-found

    O que significa
    O post ou o usuário não existe, muitas vezes dentro de um 200
    Correção
    Pule-o ou confira o ID
  • not-authorized-for-resource

    O que significa
    Conteúdo protegido ou privado
    Correção
    Pule-o
  • client-forbidden

    O que significa
    Um 403 com um reason, normalmente client-not-enrolled
    Correção
    Mova o app para um Project
  • credits-depleted

    O que significa
    Um 402: o saldo pré-pago acabou
    Correção
    Adicione créditos
  • usage-capped

    O que significa
    Um 429: o teto mensal de uso
    Correção
    Espere o próximo ciclo de cobrança
  • rate-limit-exceeded

    O que significa
    Um 429: uma janela de rate limit
    Correção
    Espere o x-rate-limit-reset
  • streaming-connection

    O que significa
    Um problema na conexão do stream
    Correção
    Reconecte com uma pausa crescente
  • rule-cap, invalid-rules, duplicate-rules

    O que significa
    Regras do filtered stream: demais, sintaxe inválida, já existentes
    Correção
    Apague, corrija ou pule a regra
  • about:blank

    O que significa
    Um erro genérico
    Correção
    Leia o status

O array errors de um 400 nomeia o valor exato que o X rejeitou. Neste caso de outubro de 2026 do fórum do X, a busca full-archive recusou um end_time definido para o instante da requisição:

Response400 Bad Request
{
  "title": "Invalid Request",
  "detail": "One or more parameters to your request was invalid.",
  "type": "https://api.x.com/2/problems/invalid-request",
  "errors": [
    {
      "message": "Invalid 'end_time':'2026-10-20T08:04Z'. 'end_time' must be a minimum of 10 seconds prior to the request time.",
      "parameters": { "end_time": ["2026-10-20T08:04Z"] }
    }
  ]
}

A correção que a equipe do X deu: defina o end_time pelo menos 10 segundos no passado ou omita-o.

#Leia dados públicos do X com uma chave de API: Sorsa API

Se as suas chamadas com falha só leem dados públicos, a Sorsa API, uma API e scraper do Twitter (X), tira a maior parte desta página das suas costas. Ela precisa de uma chave de API em um header ApiKey e não exige conta de desenvolvedor do X, app, Project nem OAuth, então os erros de assinatura 401, client-not-enrolled, 453 e 402 nunca se aplicam a ela. Sua própria conta do X também nunca entra no processo.

A Sorsa API devolve todo erro em um único formato de corpo, {"message": "..."}, e estes são os status que você verá:

StatusNa Sorsa APICorreção
400Um parâmetro está ausente ou malformadoCorrija o parâmetro
401invalid api keyCopie a chave do painel de novo
403missing key in request header, ou as requisições da chave acabaramEnvie o header ApiKey; recarregue ou faça upgrade
404O post ou a conta não existe ou é protegidoConfira o ID
429Mais de 20 requisições em um segundoEspere um segundo
500Uma falha do nosso ladoTente de novo após 1 a 2 segundos
  • 400

    Na Sorsa API
    Um parâmetro está ausente ou malformado
    Correção
    Corrija o parâmetro
  • 401

    Na Sorsa API
    invalid api key
    Correção
    Copie a chave do painel de novo
  • 403

    Na Sorsa API
    missing key in request header, ou as requisições da chave acabaram
    Correção
    Envie o header ApiKey; recarregue ou faça upgrade
  • 404

    Na Sorsa API
    O post ou a conta não existe ou é protegido
    Correção
    Confira o ID
  • 429

    Na Sorsa API
    Mais de 20 requisições em um segundo
    Correção
    Espere um segundo
  • 500

    Na Sorsa API
    Uma falha do nosso lado
    Correção
    Tente de novo após 1 a 2 segundos

Enviamos os erros de chave à API real em 2 de novembro de 2026. Um header escrito Api-Key em vez de ApiKey conta como nenhuma chave, e a chamada devolve 403:

Terminal
curl "https://api.sorsa.io/v3/info?username=error_codes_demo_acct" \
  -H "Api-Key: YOUR_API_KEY"
Response403 Forbidden
{"message": "missing key in request header"}

Com o header certo e uma chave errada, a mesma chamada devolve 401 e {"message": "invalid api key"}. Requisições com falha nunca são cobradas, e a página de códigos de erro da Sorsa API (abre em uma nova aba) na documentação lista cada status com suas causas.

  1. Obtenha uma chave. Cadastre-se e copie sua chave de API do painel. As primeiras 100 requisições são grátis.

  2. Leia até 100 posts em uma requisição. O POST /tweet-info-bulk (abre em uma nova aba) recebe links ou IDs de posts e devolve cada post com o perfil completo do autor.

    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": ["2117203385470271488", "2117199027635167232"]}'
    
    Response200 OK
    {
      "tweets": [
        {
          "id": "2117203385470271488",
          "full_text": "Two layers in every error: status, then cause.",
          "created_at": "2026-11-02T09:12:44Z",
          "lang": "en",
          "likes_count": 41,
          "retweet_count": 6,
          "reply_count": 3,
          "view_count": 5210,
          "user": {
            "id": "1592041833471827968",
            "username": "error_codes_demo_acct",
            "display_name": "Error Codes Demo",
            "followers_count": 1840
          }
        },
        {
          "id": "2117199027635167232",
          "full_text": "Retry 429 and 5xx. Fix everything else first.",
          "created_at": "2026-11-02T08:55:20Z",
          "lang": "en",
          "likes_count": 27,
          "retweet_count": 4,
          "reply_count": 2,
          "view_count": 3380,
          "user": {
            "id": "1592041833471827968",
            "username": "error_codes_demo_acct",
            "display_name": "Error Codes Demo",
            "followers_count": 1840
          }
        }
      ]
    }
    
  3. Busque perfis do mesmo jeito. O GET /info (abre em uma nova aba) devolve um perfil por username, user_id ou user_link, e um 404 significa que a conta não existe mais ou é protegida.

  4. Acompanhe o saldo. O GET /key-usage-info (abre em uma nova aba) devolve as requisições restantes e a data em que elas se renovam; a consulta em si é grátis. Tente de novo um 429 após um segundo e trate um 403 com uma chave válida como sinal para recarregar.

Ler posts por ID custa a partir de US$ 0,014 por 1.000 na Sorsa API, 100 posts por requisição, contra US$ 5,00 por 1.000 na API oficial do X, cujo plano de pagamento por uso também para em 3 milhões de leituras de posts por mês:

Posts lidos

API oficial do X

US$ 5.000

para 1 milhão posts

US$ 0,005 por post

Sorsa API

a partir deUS$ 14

para 1 milhão posts

a partir de US$ 0,014 por 1.000

A partir de 22 de novembro de 2026, a API oficial do X também cobra o perfil do autor que vem com cada post, US$ 0,010 por usuário (aviso do X (abre em uma nova aba)); todo post da Sorsa API traz o perfil completo do autor na mesma requisição. A Sorsa API só lê: para postar, curtir ou enviar mensagens, mantenha a API oficial do X para essas chamadas.

#Corrija o erro que está na sua frente e depois mude suas leituras

Quase todo erro da API do X se resolve de um de dois jeitos: esperar, no caso de um 429 ou de um 5xx, ou mudar a requisição, as chaves, o saldo ou o acesso do app, em qualquer outro caso. Se os seus erros vêm da leitura de posts, perfis ou seguidores públicos, passe essas leituras para a Sorsa API: uma chave de API, mensagens de erro simples, 20 requisições por segundo em todos os planos e posts a partir de US$ 0,014 por 1.000, com 100 requisições grátis para testar hoje.

#Perguntas frequentes

Existe uma lista completa de códigos de erro da API do Twitter?

O X não publica mais uma. A referência atual lista dez status de erro, sem o 402, e onze tipos de problema, enquanto a tabela de códigos numerados, publicada pela última vez em 2023, sobrevive só em arquivos da web e em cópias no GitHub. As tabelas desta página juntam as duas e acrescentam os códigos que os desenvolvedores relatam hoje, como o 453 e o credits-depleted, cada um com sua causa e correção.

O que significa "Could not authenticate you" (erro 32)?

O erro 32 significa que o X não conseguiu verificar a assinatura ou as credenciais da requisição, então rejeitou quem chamou antes de ler a requisição em si. As causas habituais são chaves geradas de novo no console mas não no seu código, um token de acesso de outro app ou uma assinatura OAuth 1.0a montada errada. O código 135 traz a mesma mensagem quando o relógio do seu servidor está desajustado.

Por que o Tweepy lança "403 Forbidden"?

O Tweepy lança tweepy.errors.Forbidden para qualquer 403 e coloca os códigos do X em e.api_codes e o corpo em e.response.text. O código 453 significa que você chamou um método da v1.1 por tweepy.API: use tweepy.Client. Um motivo client-not-enrolled significa que o app está fora de um Project, e o código 261 significa que o app está configurado como somente leitura.

401 ou 403: qual é a diferença?

Um 401 significa que o X não conseguiu identificar quem chama: as chaves, o token ou a assinatura estão errados, e corrigir as credenciais resolve. Um 403 significa que o X sabe quem você é e recusa a ação: o acesso do app, a inscrição, as permissões ou a conta de destino a bloqueiam. Chaves novas não corrigem um 403; a configuração do console ou a requisição precisa mudar.

Qual API devo usar para ler dados do X sem esses erros?

Para ler dados públicos do X, use a Sorsa API: uma chave de API em um header, sem conta de desenvolvedor, Project nem OAuth, então os erros 401, 402, de inscrição no 403 e 453 da API oficial do X não surgem. Ela devolve 100 posts por requisição a partir de US$ 0,014 por 1.000, a 20 requisições por segundo em todos os planos, e requisições com falha nunca são cobradas.

#Como verificamos

Em 2 de novembro de 2026, lemos a referência para desenvolvedores do X sobre códigos de resposta, rate limits e preços de pagamento por uso, a tabela de códigos de erro de 2023 arquivada pelo X e os tópicos do fórum X Developers linkados acima, em que a equipe do X explica os casos de 402, client-not-enrolled e 400. Enviamos requisições sem chave e com chave errada à API real da Sorsa e registramos as duas respostas. A resposta em lote acima é um exemplo reduzido com uma conta de demonstração, escrito a partir da referência da API em produção.

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.