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:
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 403 | Dónde aparece | Causa | Primera solución |
|---|---|---|---|
"reason": "client-not-enrolled", title "Client Forbidden" | Cualquier llamada v2 | App en el paquete Free retirado, independiente o fuera de un Project | Pasa 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 directos | Bearer token solo de app | Usa un token en contexto de usuario |
Un "detail": "Forbidden" a secas | GET /2/users/me | Token sin tweet.read ni users.read | Agrega ambos permisos y autoriza de nuevo |
Cualquier 403 en un like, un follow o un quote_tweet_id | /2/users/{id}/likes, /following, citas | Eliminado del autoservicio el 20 de abril de 2026 | Solo con contrato Enterprise |
| "Reply to this conversation is not allowed because you have not been mentioned..." | Respuestas | Regla de respuesta convocada desde el 23 de febrero de 2026 | Responde solo cuando te mencionen o te citen |
| Un 403 en un post con dos o más $cashtags | POST /2/tweets | Límite de autoservicio de 1 cashtag por post | Deja un solo cashtag |
| "This user is not allowed to post a video longer than N minutes." | Posts con video | El tope de video de la cuenta que publica | Recorta el video |
| "You are not permitted to perform this action." | POST /2/tweets | X rechazó este post: una regla de las anteriores, límites de publicación o una revisión antispam | Revisa el contenido y baja el ritmo |
| "Your account is not permitted to access this feature." | POST /2/tweets | Restricción de escritura en la cuenta que publica | Detén los reintentos y revisa la cuenta en x.com |
Tipo not-authorized-for-resource | Leer un post o un usuario | Contenido protegido o privado | Ninguna: solo los seguidores aprobados pueden leerlo |
Un tipo dm-, o "This operation is not permitted." | Mensajes directos | Los ajustes del destinatario o una revisión de seguridad | 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..." | Endpoints v1.1 | v1.1 queda fuera de tu acceso | Llama 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.readniusers.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.
{
"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á.
-
Abre la Developer Console. Inicia sesión en console.x.com y busca la app cuyas claves usa tu código.
-
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.
-
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.
-
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.
-
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:
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-enrolledcuando la app no está en pago por uso;not-authorized-for-resourceen 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_idrequiere 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
POSTyDELETE /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
POSTyDELETE /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-verifiedy otrosdm-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.Clienten lugar detweepy.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:
{
"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/mecon un "Forbidden" a secas. El token de usuario no tienetweet.readniusers.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 deerrorsde 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.APIcomoupdate_statususan v1.1; las detweepy.Clientusan 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.
#Imprime el cuerpo completo del 403 en tweepy y Node.js
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
detailde X puede engañar. El texto declient-not-enrolledpide 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 enreasonytype, 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 leer | Sorsa API | API oficial de X |
|---|---|---|
| Configuración | Una clave API | App de desarrollador, paquete de pago por uso, tokens OAuth |
| Precio por 1,000 posts | desde $0.014 | $5.00 |
| Velocidad | 20 solicitudes por segundo en todos los planes | Ventanas de 15 minutos por endpoint |
| Techo mensual | Tu plan, hasta 10M de solicitudes, más solicitudes adicionales | 3M de lecturas de posts, luego Enterprise |
| Tu cuenta de X | Nunca interviene | Tokens 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
-
Obtén una clave. Regístrate y copia la clave desde el panel; incluye 100 solicitudes gratis, sin necesidad de tarjeta.
-
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 } } ] } -
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 connext_cursorhasta 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") -
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:
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.
#Cómo lo comprobamos
El 2 de noviembre de 2026 leímos la referencia de códigos de respuesta, la página de precios, la referencia de crear post y el registro de cambios de X en docs.x.com, además de las respuestas del personal de X en los hilos del foro de desarrolladores enlazados arriba, para cada texto de error citado aquí. Las solicitudes a Sorsa API siguen la referencia de API vigente; la respuesta que se muestra es un ejemplo en su formato con datos inventados.
Fuentes
- X API: Response codes and errors (se abre en una pestaña nueva)
- X API: Pay-per-usage pricing (se abre en una pestaña nueva)
- X API: Changelog (se abre en una pestaña nueva)
- X API: Create post reference (se abre en una pestaña nueva)
- X API: Manage posts (se abre en una pestaña nueva)
- X Developer Community: pricing update effective April 20, 2026 (se abre en una pestaña nueva)
- X Developer Community: Free tier stuck as a standalone app (se abre en una pestaña nueva)
- X Developer Community: POST /2/tweets 403 on pay-per-use (se abre en una pestaña nueva)
- X Developer Community: "Your account is not permitted to access this feature" (se abre en una pestaña nueva)
- X Developer Community: 403 when replying via the API (se abre en una pestaña nueva)
- Sorsa API reference