> ## 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.

# Consistencia de la API

> Patrones consistentes en todos los endpoints de X API v2

X API v2 está diseñada con patrones consistentes en todos sus endpoints. Una vez que aprendas cómo funciona un endpoint, podrás aplicar los mismos patrones en el resto.

***

<div id="consistent-patterns">
  ## Patrones consistentes
</div>

<div id="url-structure">
  ### Estructura de la URL
</div>

Todos los endpoints de la API v2 siguen un patrón predecible:

```
/version/resource/{id}?parameters
/version/resource/verb?parameters
```

Ejemplos:

```
/2/tweets/1234567890                    # Get a specific post
/2/tweets/search/recent                 # Search recent posts
/2/users/by/username/xdevelopers        # Obtener usuario por nombre de usuario
/2/users/1234/followers                 # Get user's followers
```

<div id="response-structure">
  ### Estructura de la respuesta
</div>

Todas las respuestas usan la misma estructura principal:

```json theme={null}
{
  "data": { ... },       // Objeto(s) principal(es)
  "includes": { ... },   // Objetos expandidos
  "meta": { ... },       // Paginación, recuentos
  "errors": [ ... ]      // Errores parciales (si los hay)
}
```

<div id="id-format">
  ### Formato de ID
</div>

Todos los id se devuelven como cadenas de texto para garantizar la compatibilidad entre lenguajes:

```json theme={null}
{
  "id": "1234567890123456789",
  "author_id": "2244994945"
}
```

***

<div id="fields-and-expansions">
  ## Campos y expansions
</div>

Los mismos parámetros de [campos](/es/x-api/fundamentals/fields) y [expansions](/es/x-api/fundamentals/expansions) funcionan de manera coherente:

| Objeto      | Parámetro fields | Funciona en                                     |
| :---------- | :--------------- | :---------------------------------------------- |
| Publicación | `tweet.fields`   | Todos los endpoints que devuelven publicaciones |
| Usuario     | `user.fields`    | Todos los endpoints que devuelven usuarios      |
| Media       | `media.fields`   | Todos los endpoints con expansions de medios    |
| Encuesta    | `poll.fields`    | Todos los endpoints con expansions de encuestas |
| Lugar       | `place.fields`   | Todos los endpoints con expansions de lugares   |

***

<div id="object-schemas">
  ## Esquemas de objetos
</div>

El mismo tipo de objeto tiene los mismos campos independientemente del endpoint que lo devuelva:

* Una Publicación devuelta por search tiene los mismos campos que una Publicación devuelta por lookup
* Un usuario devuelto por followers tiene los mismos campos que un usuario devuelto por search
* Los objetos expandidos coinciden con sus homólogos independientes

***

<div id="authentication">
  ## Autenticación
</div>

Todos los endpoints utilizan los mismos métodos de autenticación:

| Método       | Formato de la cabecera               |
| :----------- | :----------------------------------- |
| Bearer Token | `Authorization: Bearer {token}`      |
| OAuth 1.0a   | `Authorization: OAuth {parameters}`  |
| OAuth 2.0    | `Authorization: Bearer {user_token}` |

***

<div id="error-handling">
  ## Manejo de errores
</div>

Los errors tienen un formato coherente:

```json theme={null}
{
  "title": "Solicitud no válida",
  "detail": "Falta el parámetro de consulta",
  "type": "https://api.x.com/2/problems/invalid-request"
}
```

[Ver todos los tipos de error →](/es/x-api/fundamentals/response-codes-and-errors)

***

<div id="pagination">
  ## Paginación
</div>

Todos los endpoints paginados usan el mismo sistema de tokens:

| Parámetro          | Descripción                              |
| :----------------- | :--------------------------------------- |
| `max_results`      | Resultados por página                    |
| `pagination_token` | Token de `next_token` o `previous_token` |

[Más información sobre la paginación →](/es/x-api/fundamentals/pagination)

***

<div id="naming-conventions">
  ## Convenciones de nomenclatura
</div>

* Ortografía del inglés estadounidense (`favorites` no `favourites`)
* Snake\_case para nombres de campos (`author_id`, `created_at`)
* Terminología consistente (`retweet_count`, no `repost_count` en campos)

***

<div id="empty-values">
  ## Valores vacíos
</div>

Los campos sin valor se omiten y no se devuelven como `null`:

```json theme={null}
// User without a bio
{
  "id": "1234",
  "name": "Example User",
  "username": "example"
  // "description" se omite, no es null
}
```

***

<div id="entity-consistency">
  ## Consistencia de entidades
</div>

El objeto `entities` solo contiene entidades extraídas del texto:

* `urls`
* `hashtags`
* `mentions`
* `cashtags`

Los elementos multimedia y las encuestas están en `attachments`, no en `entities`.

***

<div id="what-this-means-for-you">
  ## Qué significa esto para ti
</div>

<CardGroup cols={2}>
  <Card title="Aprende una vez, úsalo en todas partes" icon="graduation-cap">
    Los patrones que aprendas en un endpoint se aplican a todos los endpoints.
  </Card>

  <Card title="Respuestas predecibles" icon="square-check">
    Los mismos tipos de objeto tienen la misma estructura en toda la API.
  </Card>

  <Card title="Código más simple" icon="code">
    Crea funciones reutilizables para patrones comunes.
  </Card>

  <Card title="Depuración más sencilla" icon="bug">
    Los formatos de error coherentes simplifican la resolución de problemas.
  </Card>
</CardGroup>

***

<div id="report-inconsistencies">
  ## Informar sobre inconsistencias
</div>

¿Has encontrado alguna inconsistencia? Háznoslo saber:

* [Developer Forum](https://devcommunity.x.com)
* [Developer Feedback](https://t.co/devfeedback)
