> ## Documentation Index
> Fetch the complete documentation index at: https://generaltranslation.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Códigos de respuesta y errores

> Códigos de estado HTTP y gestión de errores para X API

export const Button = ({href, children}) => {
  return <div className="not-prose group">
    <a href={href}>
      <button className="flex items-center space-x-2.5 py-1 px-4 bg-primary-dark dark:bg-white text-white dark:text-gray-950 rounded-full group-hover:opacity-[0.9] font-medium">
        <span>
          {children}
        </span>
        <svg width="3" height="24" viewBox="0 -9 3 24" class="h-6 rotate-0 overflow-visible"><path d="M0 0L3 3L0 6" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"></path></svg>
      </button>
    </a>
  </div>;
};

La X API usa códigos de estado HTTP estándar. Las solicitudes satisfactorias devuelven códigos 2xx; los errores devuelven códigos 4xx o 5xx con detalles en el cuerpo de la respuesta.

***

<div id="http-status-codes">
  ## Códigos de estado HTTP
</div>

<div id="success-codes">
  ### Códigos de éxito
</div>

| Código  | Significado   | Descripción                                        |
| :------ | :------------ | :------------------------------------------------- |
| **200** | OK            | Solicitud correcta                                 |
| **201** | Creado        | Recurso creado (solicitudes POST)                  |
| **204** | Sin contenido | Éxito sin cuerpo de respuesta (solicitudes DELETE) |

<div id="client-error-codes">
  ### Códigos de error del cliente
</div>

| Código  | Significado       | Causas comunes                                                         |
| :------ | :---------------- | :--------------------------------------------------------------------- |
| **400** | Bad Request       | JSON no válido, consulta mal formada, falta de parámetros obligatorios |
| **401** | Unauthorized      | Credenciales de autenticación no válidas o ausentes                    |
| **403** | Forbidden         | Autenticación válida, pero sin permisos para este recurso o acción     |
| **404** | Not Found         | El recurso no existe o se ha eliminado                                 |
| **409** | Conflict          | El stream no tiene reglas (solo para el stream filtrado)               |
| **429** | Too Many Requests | Límite de frecuencia o de uso superado                                 |

<div id="server-error-codes">
  ### Códigos de error del servidor
</div>

| Code    | Meaning                                         | What to do                                                               |
| :------ | :---------------------------------------------- | :----------------------------------------------------------------------- |
| **500** | Error interno del servidor                      | Espera y vuelve a intentarlo; consulta la [página de estado](/es/status) |
| **502** | Error de puerta de enlace                       | Espera y vuelve a intentarlo                                             |
| **503** | Servicio no disponible                          | X está sobrecargado; espera y vuelve a intentarlo                        |
| **504** | Tiempo de espera de la puerta de enlace agotado | Espera y vuelve a intentarlo                                             |

***

<div id="error-response-format">
  ## Formato de respuesta de error
</div>

Las respuestas de error contienen detalles estructurados:

```json theme={null}
{
  "title": "Invalid Request",
  "detail": "The 'query' parameter is required.",
  "type": "https://api.x.com/2/problems/invalid-request"
}
```

| Campo    | Descripción                            |
| :------- | :------------------------------------- |
| `type`   | URI que identifica el tipo de error    |
| `title`  | Descripción breve del error            |
| `detail` | Explicación específica para este error |

Pueden aparecer campos adicionales según el tipo de error.

***

<div id="error-types">
  ## Tipos de error
</div>

| Tipo                              | Descripción                                         |
| :-------------------------------- | :-------------------------------------------------- |
| `about:blank`                     | Error genérico (consulta el código de estado HTTP)  |
| `.../invalid-request`             | Solicitud mal formada o parámetros no válidos       |
| `.../resource-not-found`          | La Publicación, el usuario u otro recurso no existe |
| `.../not-authorized-for-resource` | Sin acceso al contenido privado/protegido           |
| `.../client-forbidden`            | App no inscrita o sin el acceso requerido           |
| `.../usage-capped`                | Límite de uso superado                              |
| `.../rate-limit-exceeded`         | Límite de frecuencia superado                       |
| `.../streaming-connection`        | Problema de conexión de streaming                   |
| `.../rule-cap`                    | Demasiadas reglas de stream filtrado                |
| `.../invalid-rules`               | Error de sintaxis en la regla                       |
| `.../duplicate-rules`             | La regla ya existe                                  |

***

<div id="partial-errors">
  ## Errores parciales
</div>

Algunas solicitudes pueden completarse solo parcialmente. Una respuesta 200 puede incluir tanto `data` como `errors`:

```json theme={null}
{
  "data": [
    {"id": "123", "text": "Hello"}
  ],
  "errors": [
    {
      "resource_id": "456",
      "resource_type": "tweet",
      "title": "Not Found Error",
      "detail": "Could not find tweet with id: [456].",
      "type": "https://api.x.com/2/problems/resource-not-found"
    }
  ]
}
```

Esto sucede cuando se solicitan varios recursos y algunos no están disponibles.

***

<div id="troubleshooting-common-errors">
  ## Solución de problemas comunes
</div>

<Accordion title="401 No autorizado">
  **Verifica tu autenticación:**

  * Verifica que estés usando el método de autenticación correcto para el endpoint
  * Asegúrate de que las credenciales no se hayan regenerado
  * Comprueba el formato del encabezado `Authorization`
  * Para OAuth 1.0a, verifica el cálculo de la firma

  [Guía de autenticación →](/es/resources/fundamentals/authentication/overview)
</Accordion>

<Accordion title="403 Prohibido">
  **Verifica tu acceso:**

  * Verifica que tu App tenga acceso a este endpoint
  * Algunos endpoints requieren una inscripción o aprobación específica
  * Los endpoints en contexto de usuario necesitan ámbitos de OAuth apropiados
  * El recurso puede ser privado o estar protegido
</Accordion>

<Accordion title="429 Demasiadas solicitudes">
  **Límite de tasa alcanzado:**

  * Consulta el encabezado `x-rate-limit-reset` para saber cuándo reintentar
  * Implementa backoff exponencial
  * Considera almacenar en caché las respuestas
  * Distribuye las solicitudes a lo largo de la ventana de tiempo

  [Guía de límites de tasa →](/es/x-api/fundamentals/rate-limits)
</Accordion>

<Accordion title="400 Solicitud no válida">
  **Corrige tu solicitud:**

  * Valida la sintaxis JSON
  * Comprueba si faltan parámetros obligatorios
  * Verifica los tipos de los parámetros (cadenas frente a números)
  * Escapa los caracteres especiales en las consultas
</Accordion>

<Accordion title="Faltan publicaciones esperadas">
  **Comprueba estos factores:**

  * Las Publicaciones de cuentas protegidas solo son visibles con autorización
  * Las Publicaciones eliminadas devuelven 404
  * Algunas Publicaciones no están disponibles en ciertas regiones
  * Verifica que la sintaxis de la consulta de búsqueda sea correcta
</Accordion>

<Accordion title="Desconexiones de streams">
  **Gestiona la reconexión:**

  * Implementa reconexión automática con backoff
  * Usa las funciones de recuperación para los datos perdidos
  * Comprueba si hay desconexiones por búfer lleno (el Client no consume lo suficientemente rápido)
  * Verifica que exista al menos una regla de stream

  [Guía de streaming →](/es/x-api/posts/filtered-stream/integrate/handling-disconnections)
</Accordion>

***

<div id="rate-limit-headers">
  ## Encabezados de límite de frecuencia
</div>

Todas las respuestas incluyen información sobre los límites de frecuencia:

```
x-rate-limit-limit: 900
x-rate-limit-remaining: 847
x-rate-limit-reset: 1705420800
```

| Header                   | Description                                             |
| :----------------------- | :------------------------------------------------------ |
| `x-rate-limit-limit`     | Máximo de solicitudes en la ventana actual              |
| `x-rate-limit-remaining` | Solicitudes restantes                                   |
| `x-rate-limit-reset`     | Marca de tiempo Unix en la que la ventana se restablece |

***

<div id="best-practices">
  ## Mejores prácticas
</div>

<CardGroup cols={2}>
  <Card title="Comprueba los códigos de estado" icon="square-check">
    Siempre comprueba el código de estado HTTP antes de procesar el cuerpo de la respuesta.
  </Card>

  <Card title="Gestiona errores parciales" icon="triangle-exclamation">
    Comprueba el array `errors` incluso en respuestas 200.
  </Card>

  <Card title="Implementa lógica de reintentos" icon="arrows-rotate">
    Utiliza backoff exponencial para errores 429 y 5xx.
  </Card>

  <Card title="Registra los detalles de la solicitud" icon="file-lines">
    Incluye el ID de la solicitud y la marca de tiempo para facilitar la depuración.
  </Card>
</CardGroup>

***

<div id="getting-help">
  ## Obtener ayuda
</div>

Cuando publiques preguntas sobre errores, incluye:

* La URL del endpoint de la API
* Encabezados de la solicitud (oculta las credenciales)
* Respuesta de error completa
* Lo que esperabas que ocurriera
* Pasos que ya has probado

<CardGroup cols={2}>
  <Card title="Foro de desarrolladores" icon="comments" href="https://devcommunity.x.com">
    Haz preguntas y busca soluciones.
  </Card>

  <Card title="Estado de la API" icon="signal" href="/es/status">
    Comprueba si hay incidencias conocidas.
  </Card>
</CardGroup>
