Ir al contenido

API de X 403 Forbidden: qué lo causa y cómo solucionarlo

Un 403 Forbidden de la API oficial de X significa que tus claves funcionan pero X rechaza esta solicitud; el cuerpo nombra la causa, desde una app que no pasó al pago por uso hasta los likes y follows eliminados el 20 de abril de 2026.

Respuesta corta: Registra el cuerpo completo de la respuesta y compara su texto: client-not-enrolled significa pasar la app al pago por uso, una app de solo lectura o un token solo de app bloquea la publicación, y los follows, los likes y las citas ahora requieren un contrato Enterprise. Para leer posts y perfiles públicos sin estos 403, usa Sorsa API: una clave API, desde $0.014 por 1,000 tweets, y 100 solicitudes gratis.

Endpoint
POST /tweet-info-bulk
Tamaño de página
100 tweets por solicitud
Precio
desde $0.014 por 1,000

#Qué significa un 403 Forbidden en la API oficial de X

Un 403 es X diciendo que sabe quién eres y aun así no hará esto. La referencia de códigos de respuesta (se abre en una pestaña nueva) de X lo define como autenticación válida sin permiso para el recurso o la acción. Un 401 es el otro caso: las credenciales mismas faltan o son incorrectas.

Toda causa de un 403 devuelve el mismo estado, así que el estado por sí solo no te dice nada. El cuerpo sí. X responde con JSON de Problem Details con un title, un detail y un type, y los errores de inscripción agregan un reason. Registra la respuesta completa y lee tú mismo los campos:

Anatomy of an official X API 403 response: status line, x-transaction-id header, detail, reason and type HTTP/1.1 403 Forbidden x-transaction-id: 7f3a91c2e05b44d1 { "title": "Client Forbidden", "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. You can create a ..." "reason": "client-not-enrolled", "required_enrollment": "...", "type": ".../problems/client-forbidden" } 1 Estado 403 Entendido y rechazado. 2 x-transaction-id El ID que pide el personal de X cuando reportas un 403. 3 detail Palabras de X. Puede decir Project cuando la solución real es pasar la app a pago por uso. 4 reason y type La causa en un formato que tu código pueda comparar. Regístralos.
El estado dice "rechazado"; el reason, el type y el detail dicen por qué. Regístralos todos, junto con x-transaction-id.

Dos hábitos ahorran horas. Registra el cuerpo y el encabezado de respuesta x-transaction-id en cada 403, porque el personal de X pide ambos antes de revisar un caso en el foro de desarrolladores. Y no reintentes: un 403 vuelve igual hasta que algo cambie en la app, el token, el post o la cuenta. Los reintentos son para los errores 429 y 5xx, que nuestra guía de códigos de error de la API de Twitter cubre código por código.

#Encuentra tu 403 por su texto de error

Compara el texto de tu cuerpo 403 con esta tabla: cada fila nombra la causa y la primera solución. La mayoría de las filas vienen de escrituras; las lecturas fallan por inscripción, permisos (scopes), cuentas protegidas y antiguas llamadas v1.1.

Texto en el cuerpo del 403Dónde apareceCausaPrimera solución
"reason": "client-not-enrolled", title "Client Forbidden"Cualquier llamada v2App en el paquete Free retirado, independiente o fuera de un ProjectPasa la app al pago por uso y crea claves nuevas
"Authenticating with OAuth 2.0 Application-Only is forbidden for this endpoint"Publicar, /2/users/me, marcadores, mensajes directosBearer token solo de appUsa un token en contexto de usuario
Un "detail": "Forbidden" a secasGET /2/users/meToken sin tweet.read ni users.readAgrega ambos permisos y autoriza de nuevo
Cualquier 403 en un like, un follow o un quote_tweet_id/2/users/{id}/likes, /following, citasEliminado del autoservicio el 20 de abril de 2026Solo con contrato Enterprise
"Reply to this conversation is not allowed because you have not been mentioned..."RespuestasRegla de respuesta convocada desde el 23 de febrero de 2026Responde solo cuando te mencionen o te citen
Un 403 en un post con dos o más $cashtagsPOST /2/tweetsLímite de autoservicio de 1 cashtag por postDeja un solo cashtag
"This user is not allowed to post a video longer than N minutes."Posts con videoEl tope de video de la cuenta que publicaRecorta el video
"You are not permitted to perform this action."POST /2/tweetsX rechazó este post: una regla de las anteriores, límites de publicación o una revisión antispamRevisa el contenido y baja el ritmo
"Your account is not permitted to access this feature."POST /2/tweetsRestricción de escritura en la cuenta que publicaDetén los reintentos y revisa la cuenta en x.com
Tipo not-authorized-for-resourceLeer un post o un usuarioContenido protegido o privadoNinguna: solo los seguidores aprobados pueden leerlo
Un tipo dm-, o "This operation is not permitted."Mensajes directosLos ajustes del destinatario o una revisión de seguridadLee el tipo; a menudo no hay nada que arreglar
Código 453, "You currently have access to a subset of X API V2 endpoints..."Endpoints v1.1v1.1 queda fuera de tu accesoLlama al endpoint v2
  • "reason": "client-not-enrolled", title "Client Forbidden"

    Dónde aparece
    Cualquier llamada v2
    Causa
    App en el paquete Free retirado, independiente o fuera de un Project
    Primera solución
    Pasa la app al pago por uso y crea claves nuevas
  • "Authenticating with OAuth 2.0 Application-Only is forbidden for this endpoint"

    Dónde aparece
    Publicar, /2/users/me, marcadores, mensajes directos
    Causa
    Bearer token solo de app
    Primera solución
    Usa un token en contexto de usuario
  • Un "detail": "Forbidden" a secas

    Dónde aparece
    GET /2/users/me
    Causa
    Token sin tweet.read ni users.read
    Primera solución
    Agrega ambos permisos y autoriza de nuevo
  • Cualquier 403 en un like, un follow o un quote_tweet_id

    Dónde aparece
    /2/users/{id}/likes, /following, citas
    Causa
    Eliminado del autoservicio el 20 de abril de 2026
    Primera solución
    Solo con contrato Enterprise
  • "Reply to this conversation is not allowed because you have not been mentioned..."

    Dónde aparece
    Respuestas
    Causa
    Regla de respuesta convocada desde el 23 de febrero de 2026
    Primera solución
    Responde solo cuando te mencionen o te citen
  • Un 403 en un post con dos o más $cashtags

    Dónde aparece
    POST /2/tweets
    Causa
    Límite de autoservicio de 1 cashtag por post
    Primera solución
    Deja un solo cashtag
  • "This user is not allowed to post a video longer than N minutes."

    Dónde aparece
    Posts con video
    Causa
    El tope de video de la cuenta que publica
    Primera solución
    Recorta el video
  • "You are not permitted to perform this action."

    Dónde aparece
    POST /2/tweets
    Causa
    X rechazó este post: una regla de las anteriores, límites de publicación o una revisión antispam
    Primera solución
    Revisa el contenido y baja el ritmo
  • "Your account is not permitted to access this feature."

    Dónde aparece
    POST /2/tweets
    Causa
    Restricción de escritura en la cuenta que publica
    Primera solución
    Detén los reintentos y revisa la cuenta en x.com
  • Tipo not-authorized-for-resource

    Dónde aparece
    Leer un post o un usuario
    Causa
    Contenido protegido o privado
    Primera solución
    Ninguna: solo los seguidores aprobados pueden leerlo
  • Un tipo dm-, o "This operation is not permitted."

    Dónde aparece
    Mensajes directos
    Causa
    Los ajustes del destinatario o una revisión de seguridad
    Primera solución
    Lee el tipo; a menudo no hay nada que arreglar
  • Código 453, "You currently have access to a subset of X API V2 endpoints..."

    Dónde aparece
    Endpoints v1.1
    Causa
    v1.1 queda fuera de tu acceso
    Primera solución
    Llama al endpoint v2

#client-not-enrolled: pasa la app al pago por uso

client-not-enrolled significa que la app detrás de tus claves no está inscrita en el acceso que necesita el endpoint, así que toda llamada v2 falla, tanto lecturas como escrituras. En 2026 la causa casi siempre es una app que se quedó en el paquete Free heredado, que aparece como app independiente o fuera de un Project.

403 body
{
  "detail": "When authenticating requests to the X API v2 endpoints, ...",
  "reason": "client-not-enrolled",
  "required_enrollment": "Appropriate Level of API Access",
  "title": "Client Forbidden",
  "type": "https://api.x.com/2/problems/client-forbidden"
}

El detail habla de Projects, pero el personal de X describe con claridad la causa en 2026: el nivel Free está obsoleto, y una app que se quedó en él recibe este error hasta que pasa al pago por uso, como muestra un hilo del foro sobre apps independientes atascadas (se abre en una pestaña nueva). La misma respuesta señala que los endpoints de inicio de sesión siguen siendo gratuitos con el pago por uso.

Si el cuerpo no tiene un campo reason, la inscripción no es tu problema. El personal de X ha dicho sin rodeos que un 403 simple al publicar es otro error, así que mover proyectos o regenerar claves no lo tocará.

  1. Abre la Developer Console. Inicia sesión en console.x.com y busca la app cuyas claves usa tu código.

  2. Revisa su paquete. Necesita pago por uso y el entorno Production; una app independiente o una bajo un proyecto heredado Free, Basic o Pro falla.

  3. Pásala al pago por uso. Agrega un método de pago y créditos; las lecturas se cobran por elemento, $0.005 por post y $0.010 por usuario, como muestra nuestro desglose de los precios de la API de X.

  4. Crea claves y tokens nuevos. Regenera el Bearer token y los tokens de acceso, y luego despliégalos: los anteriores conservan la inscripción anterior.

  5. Pregunta en el foro si la consola no puede moverla. Publica el App ID numérico, el endpoint y el cuerpo completo; el personal de X ha movido a mano apps atascadas.

#Likes, follows y citas: eliminados del autoservicio

Desde el 20 de abril de 2026, la API oficial de X ya no da like, no sigue ni cita posts para ninguna app de autoservicio, así que estas llamadas devuelven 403 sin importar cómo esté configurada la app. La actualización de precios (se abre en una pestaña nueva) de X lista POST y DELETE /2/users/{id}/likes, POST y DELETE /2/users/{id}/following, y cualquier post enviado con quote_tweet_id, y la referencia de crear post (se abre en una pestaña nueva) ahora dice que citar posts requiere un plan Enterprise.

El autoservicio abarca el pago por uso y los planes heredados Free, Basic y Pro. Los likes y los follows ya habían salido del nivel Free el 22 de agosto de 2025, así que un bot creado antes de esa fecha pudo haber estado fallando por más de un año.

Ningún ajuste los devuelve. Los tokens nuevos, los permisos like.write o follows.write y más créditos no cambian nada; solo un contrato Enterprise, desde unos $42,000 al mes, todavía los escribe. La línea de tiempo muestra cuándo apareció cada uno de estos 403:

Six official X API changes from August 2025 to October 2026 that created new 403 errors 22 ago 2025 Likes y follows salen del plan Free 23 feb 2026 Respuestas solo si el autor te mencionó 1 sep 2026 Duración del video limitada por la cuenta que publica 6 feb 2026 Abre el pago por uso; Free se cierra a apps nuevas 20 abr 2026 Follows, likes y citas salen de todos los planes self-serve 26 oct 2026 Rechazos de DM con tipos propios
Seis cambios en 14 meses crearon la mayoría de los 403 que encuentran hoy los desarrolladores. El 20 de abril de 2026 eliminó tres acciones por completo.

Elige lo que hace tu código para ver si el acceso de autoservicio todavía lo permite, el 403 que devuelve y la solución:

¿Qué hace tu código en la API oficial de X?

  • Leer posts, perfiles o buscar

    Abierto en pago por uso

    Costo
    $0.005 por post, $0.010 por usuario, hasta 3M de lecturas de posts al mes
    El 403
    client-not-enrolled cuando la app no está en pago por uso; not-authorized-for-resource en cuentas protegidas
    Solución
    Pasa la app a pago por uso en console.x.com y crea claves nuevas. Sorsa API lee los mismos datos públicos con una sola clave API y sin app.
  • Leer tus propios marcadores, me gusta o seguidores

    Abierto, solo con token de usuario

    Costo
    $0.001 por elemento como Owned Reads, desde el 20 de abril de 2026
    El 403
    "Unsupported Authentication" con un Bearer token solo de app
    Solución
    Llámalo con un token de contexto de usuario: OAuth 1.0a u OAuth 2.0 con PKCE.
  • Publicar un post

    Abierto en pago por uso

    Costo
    $0.015 por post, $0.20 con una URL
    El 403
    "You are not permitted to perform this action." o una app de solo lectura
    Solución
    Configura la app en Read and write, crea tokens de acceso nuevos y publica con un token de usuario.
  • Responder a un post

    Solo si te mencionan

    Desde
    23 de febrero de 2026, solo autoservicio
    El 403
    "Reply to this conversation is not allowed because you have not been mentioned or otherwise engaged by the author"
    Solución
    Responde solo a posts que mencionen a tu cuenta con @ o citen uno de sus posts.
  • Citar un post

    Retirado del autoservicio

    Desde
    20 de abril de 2026: quote_tweet_id requiere Enterprise
    El 403
    Cualquier post que lleve quote_tweet_id
    Solución
    Publica en su lugar un enlace al post, o pasa a un contrato Enterprise.
  • Dar o quitar me gusta

    Retirado del autoservicio

    Desde
    20 de abril de 2026; fuera del nivel Free desde el 22 de agosto de 2025
    El 403
    POST y DELETE /2/users/{id}/likes
    Solución
    Ninguna en autoservicio. Solo un contrato Enterprise todavía da me gusta por la API.
  • Seguir o dejar de seguir

    Retirado del autoservicio

    Desde
    20 de abril de 2026; fuera del nivel Free desde el 22 de agosto de 2025
    El 403
    POST y DELETE /2/users/{id}/following
    Solución
    Ninguna en autoservicio. Solo un contrato Enterprise todavía sigue cuentas por la API.
  • Publicar con $cashtags

    Uno por post

    Regla
    Los posts de autoservicio llevan como máximo 1 cashtag
    El 403
    Un post con un segundo $TICKER
    Solución
    Deja un cashtag y escribe los demás tickers sin el signo $.
  • Publicar un video largo

    Limitado por la cuenta

    Regla
    20 minutos por defecto, 125 minutos en X Premium, documentado el 1 de septiembre de 2026
    El 403
    "This user is not allowed to post a video longer than N minutes."
    Solución
    Recorta el video. Un presupuesto de API mayor no sube el límite.
  • Enviar un mensaje directo

    Rechazado por destinatario

    Desde
    26 de octubre de 2026: cada rechazo tiene su propio tipo
    El 403
    dm-recipient-not-accepting, dm-sender-not-verified y otros dm- tipos, o "This operation is not permitted."
    Solución
    Lee el tipo. La mayoría de los rechazos vienen de los ajustes del destinatario y no se arreglan en el código.
  • Llamar a un endpoint v1.1

    En su mayoría cerrado

    Regla
    El autoservicio cubre v2 y unos pocos endpoints v1.1, como la subida de multimedia
    El 403
    Code 453: "You currently have access to a subset of X API V2 endpoints and limited v1.1 endpoints only"
    Solución
    Llama al endpoint v2: en tweepy, tweepy.Client en lugar de tweepy.API.

Autoservicio significa pago por uso y los planes heredados Free, Basic y Pro. Del changelog y la documentación de X, revisados el 2 de noviembre de 2026.

Lo que permite el acceso de autoservicio a la API oficial de X en noviembre de 2026, acción por acción.

Una cita tiene una alternativa sencilla: publica el enlace del post en lugar de usar quote_tweet_id. X cobra un post con una URL a $0.20, frente a $0.015 por un post simple.

#403 en POST /2/tweets: tokens, respuestas, cuentas

Publicar está abierto en el pago por uso a $0.015 por post, así que un 403 en POST /2/tweets viene del token, del contenido del post o de la cuenta que hay detrás. Revísalos en ese orden.

Una app de solo lectura o un token solo de app

Un post necesita un token en contexto de usuario: OAuth 1.0a con las claves de consumidor de la app más el token de acceso y el secreto de la cuenta, o un token OAuth 2.0 del flujo PKCE con el permiso tweet.write. Un Bearer token solo de app recibe esta respuesta:

403 body
{
  "title": "Unsupported Authentication",
  "detail": "Authenticating with OAuth 2.0 Application-Only is forbidden ...",
  "status": 403
}

Las apps nuevas empiezan con permiso de lectura (Read). Cambia los ajustes de autenticación de usuario de la app a Read and write y luego crea un nuevo token de acceso y secreto: los tokens emitidos antes del cambio conservan solo Read.

"Reply to this conversation is not allowed"

Desde el 23 de febrero de 2026, las apps de autoservicio pueden responder solo cuando el autor del post original convocó a la cuenta que responde, mencionándola o citando uno de sus posts, según el registro de cambios de X (se abre en una pestaña nueva). Cualquier otra respuesta devuelve 403 con "Reply to this conversation is not allowed because you have not been mentioned or otherwise engaged by the author" (no se permite responder a esta conversación porque el autor no te ha mencionado ni interactuado contigo), aunque la misma respuesta funcione en x.com. Crea los bots de respuesta a partir de menciones: lee los posts que mencionan tu cuenta y responde a esos. Una respuesta convocada además cuesta menos en X, $0.010 frente a $0.015.

Un cashtag por post, y la duración del video

Los posts de autoservicio pueden llevar un $cashtag, y un segundo hace que X rechace el post; en un caso del foro, quitar el cashtag de más fue toda la solución. Los topes de video dependen de la cuenta que publica y no de tu gasto en la API: 20 minutos por defecto y 125 minutos en X Premium. Un video más largo devuelve "This user is not allowed to post a video longer than 20 minutes." (este usuario no puede publicar un video de más de 20 minutos).

"You are not permitted to perform this action"

Este 403 about:blank es el rechazo general de X para un post. Repasa primero las reglas anteriores: una respuesta que nadie convocó, un segundo cashtag, una cita. Si ninguna aplica, la cuenta chocó con límites de publicación o una revisión antispam: baja el ritmo, deja de publicar texto duplicado y prueba un post a mano en x.com.

"Your account is not permitted to access this feature"

Este texto apunta a la cuenta que publica, no a tu app. En un caso del foro de septiembre de 2026 empezó justo después de un lote de posts automatizados, las lecturas siguieron funcionando, y el personal de X describió una restricción de escritura a nivel de cuenta y no un permiso o unos créditos que faltaran. Detén la automatización, comprueba si la cuenta puede publicar en x.com y publica el x-transaction-id en el foro de desarrolladores si solo falla la API.

#403 en lecturas: permisos, cuentas protegidas, v1.1

Una lectura devuelve 403 cuando el problema es la app, el token o la cuenta de destino, y solo las cuentas protegidas están realmente fuera de alcance. client-not-enrolled también bloquea lecturas; las demás causas de lectura son estas:

  • GET /2/users/me con un "Forbidden" a secas. El token de usuario no tiene tweet.read ni users.read. Agrega ambos a la URL de autorización y haz que el usuario pase por ella otra vez: los tokens existentes conservan sus permisos anteriores.
  • Tus propios marcadores, likes y seguidores. Estas lecturas de datos propios (Owned Reads) cuestan $0.001 por elemento y necesitan un token en contexto de usuario; un token solo de app recibe "Unsupported Authentication".
  • Posts y cuentas protegidos. Llegan con el tipo not-authorized-for-resource, que la referencia de X describe como falta de acceso a contenido privado o protegido. En una consulta por lotes, el mismo tipo llega dentro de errors de una respuesta 200, junto a los posts que sí puedes leer.
  • Endpoints v1.1. El acceso de autoservicio cubre v2 y unos pocos endpoints v1.1, como la subida de multimedia, y el resto devuelve el código 453. En tweepy, las llamadas de tweepy.API como update_status usan v1.1; las de tweepy.Client usan v2.

Salvo las cuentas protegidas, ninguna de estas causas depende de los datos mismos: vienen de la app, el paquete y el token, y por eso leer datos públicos por otra vía las evita.

Las bibliotecas ocultan el cuerpo por defecto: tweepy lanza tweepy.errors.Forbidden: 403 Forbidden, y twitter-api-v2 lanza "Request failed with code 403". Ambas conservan la respuesta, así que imprímela antes de adivinar:

import tweepy

client = tweepy.Client(
    consumer_key="API_KEY", consumer_secret="API_SECRET",
    access_token="ACCESS_TOKEN", access_token_secret="ACCESS_SECRET",
)

try:
    client.create_tweet(text="Testing the posting path")
except tweepy.errors.Forbidden as e:
    print(e.api_messages)  # X's detail text
    print(e.response.headers.get("x-transaction-id"))
    print(e.response.text)  # the whole body: reason, type, title

Luego compara el texto con la tabla de arriba. Un ciclo que reintenta un 403 solo pierde tiempo: reintenta las respuestas 429 y 5xx con backoff, y corrige un 403 antes de enviar la solicitud de nuevo.

Para tener en cuenta

El detail de X puede engañar. El texto de client-not-enrolled pide un Project incluso cuando la app ya está en uno y la solución real es el paso al pago por uso, y "You are not permitted to perform this action" cubre varios rechazos distintos. Confía primero en reason y type, y en segundo lugar en la solicitud que enviaste.

#Lee datos públicos de X sin errores 403: usa Sorsa API

La mayoría de los 403 en lecturas vienen de la configuración de la API oficial de X: la app, su paquete, sus tokens y sus permisos. Para leer posts, perfiles, seguidores y resultados de búsqueda públicos sin esa configuración, usa Sorsa API, una API y scraper de Twitter (X): una clave API en un encabezado ApiKey, sin app de desarrollador, inscripción ni OAuth, así que ninguna de las causas de lectura de arriba puede ocurrir.

Esto es lo que obtiene en cada lado quien lee datos públicos:

Lo que importa para leerSorsa APIAPI oficial de X
ConfiguraciónUna clave APIApp de desarrollador, paquete de pago por uso, tokens OAuth
Precio por 1,000 postsdesde $0.014$5.00
Velocidad20 solicitudes por segundo en todos los planesVentanas de 15 minutos por endpoint
Techo mensualTu plan, hasta 10M de solicitudes, más solicitudes adicionales3M de lecturas de posts, luego Enterprise
Tu cuenta de XNunca intervieneTokens ligados a una cuenta
  • Configuración

    Sorsa API
    Una clave API
    API oficial de X
    App de desarrollador, paquete de pago por uso, tokens OAuth
  • Precio por 1,000 posts

    Sorsa API
    desde $0.014
    API oficial de X
    $5.00
  • Velocidad

    Sorsa API
    20 solicitudes por segundo en todos los planes
    API oficial de X
    Ventanas de 15 minutos por endpoint
  • Techo mensual

    Sorsa API
    Tu plan, hasta 10M de solicitudes, más solicitudes adicionales
    API oficial de X
    3M de lecturas de posts, luego Enterprise
  • Tu cuenta de X

    Sorsa API
    Nunca interviene
    API oficial de X
    Tokens ligados a una cuenta
  1. Obtén una clave. Regístrate y copia la clave desde el panel; incluye 100 solicitudes gratis, sin necesidad de tarjeta.

  2. Lee posts por ID. POST /tweet-info-bulk (se abre en una pestaña nueva) recibe hasta 100 IDs o enlaces de posts por solicitud y devuelve cada post con el perfil completo de su 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": ["1853412966240727289", "1853398071322091822"]}'
    
    Response200 OK
    {
      "tweets": [
        {
          "id": "1853412966240727289",
          "full_text": "Shipped the new export page today.",
          "created_at": "2026-10-30T14:02:11Z",
          "lang": "en",
          "likes_count": 184,
          "retweet_count": 22,
          "reply_count": 17,
          "quote_count": 3,
          "view_count": 9120,
          "is_reply": false,
          "user": {
            "id": "1592041833471827968",
            "username": "lena_ships_daily",
            "display_name": "Lena Ships",
            "followers_count": 4210,
            "verified": false,
            "protected": false
          }
        }
      ]
    }
    
  3. Busca en lugar de leer cronologías. POST /search-tweets (se abre en una pestaña nueva) acepta los operadores de búsqueda de X, devuelve unos 20 posts por página y avanza con next_cursor hasta que regresa vacío:

    Python
    import requests
    
    URL = "https://api.sorsa.io/v3/search-tweets"
    HEADERS = {"ApiKey": "YOUR_API_KEY"}
    
    body = {"query": "from:lena_ships_daily", "order": "latest"}
    posts = []
    while True:
        r = requests.post(URL, headers=HEADERS, json=body, timeout=30)
        r.raise_for_status()  # 403: missing key or no requests left
        data = r.json()
        posts += data.get("tweets", [])
        if not data.get("next_cursor"):
            break
        body["next_cursor"] = data["next_cursor"]
    print(len(posts), "posts")
    
  4. Vigila tu propio saldo. GET /key-usage-info (se abre en una pestaña nueva) muestra las solicitudes que quedan en la clave y nunca se descuenta de ellas.

Sorsa API tiene su propia lista corta de errores. Devuelve 403 cuando falta el encabezado ApiKey ("missing key in request header", falta la clave en el encabezado de la solicitud) o cuando se agotaron las solicitudes de la clave, y 401 cuando la clave es incorrecta. Una solicitud fallida nunca se cobra.

Una vez que los 403 desaparecen, el precio decide el resto:

Posts leídos

API oficial de X

$5,000

para 1M posts

$0.005 por post

Sorsa API

desde$14

para 1M posts

desde $0.014 por 1,000

Sorsa API solo lee datos públicos y nunca publica, da like ni sigue, así que tu cuenta de X nunca corre riesgo. Para publicar, conserva un token en contexto de usuario en la API oficial de X para las escrituras y lee todo mediante Sorsa API; nuestra guía de la API de Twitter sin cuenta de desarrollador explica esa configuración.

#Arregla la escritura, traslada las lecturas

Un 403 de la API oficial de X nombra su causa en el cuerpo. Corrige la inscripción, los tokens o el contenido del post donde X todavía vende la acción, y deja de reintentar likes, follows y citas, que salieron del autoservicio el 20 de abril de 2026. Para leer posts y perfiles públicos, Sorsa API necesita una clave API y ninguna configuración de app, cuesta desde $0.014 por 1,000 tweets, y los primeros 10K tweets caben en las 100 solicitudes gratis que recibe cada cuenta.

#Preguntas frecuentes

¿Cuál es la diferencia entre 401 y 403 en la API oficial de X?

Un 401 significa que X no aceptó tus credenciales: las claves faltan, están mal escritas, fueron revocadas o firmadas incorrectamente. Un 403 significa que X las aceptó y aun así rechaza la solicitud, por la inscripción de la app, los permisos del token, el contenido del post o la cuenta. Regenerar las claves soluciona muchos errores 401 y casi ningún 403.

¿Debo reintentar un 403 de la API oficial de X?

No. Un 403 se repite hasta que algo cambie: el paquete de la app, el token, el post o el estado de la cuenta. Reintenta solo las respuestas 429 y 5xx, con backoff. Para un 403, registra el cuerpo y el encabezado x-transaction-id, compara el texto, corrige la causa y luego envía la solicitud una sola vez.

¿La API oficial de X es gratuita en 2026?

No. El nivel Free se cerró a las apps nuevas el 6 de febrero de 2026, el personal de X ahora lo llama obsoleto, y el pago por uso cobra cada lectura: $0.005 por post y $0.010 por usuario. Solo los endpoints de inicio de sesión siguen siendo gratuitos. Nuestra respuesta a ¿la API de Twitter es gratis? cubre lo que queda.

¿Qué API debo usar para leer datos de X sin errores 403?

Usa Sorsa API para leer datos públicos de X sin errores 403: requiere una clave API y ninguna app de desarrollador, inscripción ni OAuth, así que la configuración detrás de la mayoría de los 403 en lecturas no existe. Devuelve 100 posts por solicitud por lotes desde $0.014 por 1,000, a 20 solicitudes por segundo en todos los planes, con 100 solicitudes gratis para empezar.

¿Sorsa API devuelve errores 403?

Sí, en dos casos. Sorsa API devuelve 403 cuando falta el encabezado ApiKey, con el mensaje "missing key in request header", y cuando se agotaron las solicitudes de la clave; una clave incorrecta recibe 401 en su lugar. Una mejora de plan o solicitudes adicionales restablecen el acceso de inmediato, y las solicitudes fallidas nunca se cobran.

Por el equipo de Sorsa API. Creamos y operamos Sorsa API, la API y scraper de Twitter/X de solo lectura, en producción desde 2022 (antes TweetScout API) y con más de 6 mil millones de solicitudes procesadas. Acerca de Sorsa API

Qué cambió
  • Primera publicación.