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

# v1 a v2

<div id="standard-v11-compared-to-x-api-v2">
  ## v1.1 estándar en comparación con X API v2
</div>

Si has estado trabajando con los endpoints GET statuses/show y GET statuses/lookup de la v1.1 estándar, esta guía te ayudará a entender las similitudes y diferencias entre esos endpoints estándar y los endpoints de consulta de Publicaciones de X API v2.

También puede interesarte nuestra [herramienta visual de migración de formato de datos](/es/x-api/migrate/data-format-migration), que te ayuda a ver rápidamente las diferencias entre el [formato de datos de X API v1.1](/es/x-api/fundamentals/data-dictionary) y el [formato de X API v2](/es/x-api/fundamentals/data-dictionary).

* **Similitudes**
  * Contexto de usuario OAuth 1.0a
  * Límites de Publicaciones por solicitud
  * Compatibilidad con el historial de edición y metadatos de las Publicaciones

* **Diferencias**
  * URLs de los endpoints
  * Requisitos de App y Project
  * Formato de datos de la respuesta
  * Parámetros de la solicitud

<div id="similarities">
  ### Semejanzas
</div>

<div id="oauth-10a-user-context-authentication-method">
  #### Método de autenticación con contexto de usuario de OAuth 1.0a
</div>

El endpoint estándar admite [Contexto de usuario de OAuth 1.0a](/es/resources/fundamentals/authentication), mientras que el nuevo endpoint de consulta de Publicaciones de X API v2 admite tanto el contexto de usuario de OAuth 1.0a como [OAuth 2.0 App-Only](/es/resources/fundamentals/authentication). Por lo tanto, si antes usabas uno de los endpoints estándar de consulta de Publicaciones de v1.1, puedes seguir utilizando el mismo método de autenticación si migras a la versión de X API v2.

La autenticación App-Only probablemente sea la forma más sencilla de empezar. Para aprender a generar un App Access Token, consulta [esta guía de OAuth 2.0 App-Only](/es/resources/fundamentals/authentication).

<div id="posts-per-request-limits">
  #### Límite de Publicaciones por solicitud
</div>

El endpoint de v1.1 [GET statuses/lookup](https://developer.x.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-statuses-lookup) permite especificar hasta 100 Publicaciones por solicitud. Esto también se aplica al endpoint `GET /tweets`. Para especificar un total de 100 Publicaciones, usa el parámetro `ids` como parámetro de consulta con una lista separada por comas de [ID de Publicaciones](/es/resources/fundamentals/x-ids).

**Compatibilidad con el historial de edición y metadatos de Publicaciones**

Ambas versiones proporcionan metadatos que describen cualquier historial de edición. Consulta las Referencias de la API de consulta de Publicaciones y la [página de conceptos básicos sobre edición de Publicaciones](/es/x-api/fundamentals/edit-posts) para más detalles.

<div id="differences">
  ### Diferencias
</div>

<div id="endpoint-urls">
  #### URLs de los endpoints
</div>

* **Endpoints estándar de la v1.1:**
  * `https://api.x.com/1.1/statuses/show`
  * `https://api.x.com/1.1/statuses/lookup`

* **Endpoint de X API v2:**
  * `https://api.x.com/2/tweets`
  * `https://api.x.com/2/tweets/:id`

<div id="app-and-project-requirements">
  #### Requisitos de App y Project
</div>

Los endpoints de X API v2 requieren credenciales de una [developer App](/es/resources/fundamentals/developer-apps) asociada a un [Project](/es/resources/fundamentals/developer-apps) para la autenticación. Los endpoints de X API v1.1 pueden usar credenciales de Apps o de Apps asociadas a una App.

<div id="response-data-format">
  #### Formato de datos de la respuesta
</div>

Una diferencia importante entre las versiones de endpoints estándar v1.1 y X API v2 es cómo se seleccionan los campos en el payload.

En los endpoints estándar, muchos campos de la respuesta se incluyen de forma predeterminada, con opciones para usar parámetros que especifiquen campos adicionales.

X API v2, sin embargo, solo entrega de forma predeterminada los campos `id` y `text` de la Publicación. Los campos y objetos adicionales requieren el uso de los parámetros [fields](/es/x-api/fundamentals/fields) y [expansions](/es/x-api/fundamentals/expansions). Los campos expandidos se devuelven en un objeto `includes` dentro de la respuesta, que se puede relacionar con el objeto de la Publicación principal mediante la coincidencia de ids.

Para obtener más información sobre el uso de fields y expansions, consulta la [guía sobre cómo usar fields y expansions](/es/x-api/fundamentals/data-dictionary). Una [guía de migración de formato de datos](/es/x-api/fundamentals/fields) también asigna los campos estándar de v1.1 a los campos más recientes de v2.

Además, X API v2 introduce nuevos diseños JSON para objetos, incluidos los objetos de Publicación y de [user](/es/x-api/fundamentals/data-dictionary#user):

* Los endpoints estándar devuelven objetos de Publicación en un array `statuses`, mientras que X API v2 usa un array `data`.
* Los Tweets retuiteados y citados en X API v2 sustituyen la terminología "statuses".
* Nueva terminología como `like` reemplaza términos como `favorites` y `favourites`.
* Los atributos sin valores (por ejemplo, `null`) no se incluyen en los payloads de X API v2.

El objeto de Publicación en X API v2 incluye nuevos campos como:

* `conversation_id`
* Dos nuevos campos de [annotations](/es/x-api/fundamentals/post-annotations) (`context` y `entities`)
* Nuevos campos de [metrics](/es/x-api/fundamentals/metrics)
* Campo `reply_setting` que indica quién puede responder a una Publicación determinada

<div id="request-parameters">
  #### Parámetros de la solicitud
</div>

Los siguientes parámetros de solicitud estándar de v1.1 tienen equivalentes en X API v2:

| Estándar | X API v2 |
| :------- | :------- |
| `id`     | `ids`    |

Algunos parámetros estándar de v1.1 **no** están admitidos en X API v2:

| Estándar               | Comentario                                                                                                                                             |
| :--------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |
| `tweet_mode`           | Reemplazado por la funcionalidad de campos y expansions.                                                                                               |
| `trim_user`            | Reemplazado por campos y expansions. Usa la expansión `author_id` y `user.fields` para los datos de usuario.                                           |
| `include_my_retweet`   | Proporciona el ID de la Publicación de origen para Publicaciones retuiteadas por el usuario autenticado.                                               |
| `include_entities`     | Usa campos y expansions para controlar las entidades en la carga útil.                                                                                 |
| `include_ext_alt_text` | Agrega el campo `ext_alt_text` en la entidad de medios si hay texto alternativo presente.                                                              |
| `include_card_uri`     | Agrega `card_uri` cuando se adjunta una tarjeta de anuncios.                                                                                           |
| `map`                  | Devuelve el ID de la Publicación y el mensaje de error para Publicaciones no disponibles en X API v2, en lugar de campos establecidos en null en v1.1. |

<div id="code-examples">
  ### Ejemplos de código
</div>

Los siguientes ejemplos muestran endpoints estándar de v1.1 y sus equivalentes en v2. Reemplaza las credenciales por tus tokens reales. Para los endpoints de v2, el token debe pertenecer a una [developer App](/es/resources/fundamentals/developer-apps/overview) dentro de un [Project](/es/resources/fundamentals/developer-apps/overview).

Los cuerpos de respuesta de v1.1 diferirán de los de v2. Con v2, puedes solicitar distintos campos con los parámetros [fields](/es/x-api/fundamentals/fields) y [expansions](/es/x-api/fundamentals/expansions).

**Búsqueda de múltiples Publicaciones: v1.1 `GET statuses/lookup` → v2 `GET /tweets`**

<CodeGroup dropdown>
  ```bash cURL (v1.1) theme={null}
  curl --request GET \
    --url 'https://api.x.com/1.1/statuses/lookup.json?id=1460323737035677698%2C1460323743339741184' \
    --header 'Authorization: Bearer $ACCESS_TOKEN'
  ```

  ```bash cURL (v2) theme={null}
  curl --request GET \
    --url 'https://api.x.com/2/tweets?ids=1460323737035677698%2C1460323743339741184&tweet.fields=created_at&expansions=author_id&user.fields=created_at' \
    --header 'Authorization: Bearer $ACCESS_TOKEN'
  ```

  ```python Python (v2) theme={null}
  import requests

  bearer_token = "YOUR_BEARER_TOKEN"
  url = "https://api.x.com/2/tweets"

  params = {
      "ids": "1460323737035677698,1460323743339741184",
      "tweet.fields": "created_at",
      "expansions": "author_id",
      "user.fields": "created_at"
  }

  headers = {"Authorization": f"Bearer {bearer_token}"}
  response = requests.get(url, headers=headers, params=params)

  print(response.json())
  ```

  ```python Python SDK theme={null}
  from xdk import Client

  client = Client(bearer_token="YOUR_BEARER_TOKEN")

  # Obtiene varias Publicaciones por id con los parámetros fields y expansions
  response = client.posts.get_posts(
      ids=["1460323737035677698", "1460323743339741184"],
      tweet_fields=["created_at"],
      expansions=["author_id"],
      user_fields=["created_at"]
  )

  for post in response.data:
      print(f"Publicación: {post.text}")
      print(f"Creada el: {post.created_at}")
  ```

  ```javascript JavaScript SDK theme={null}
  import { Client } from "@xdevplatform/xdk";

  const client = new Client({ bearerToken: "YOUR_BEARER_TOKEN" });

  // Obtiene varias Publicaciones por id con los parámetros fields y expansions
  const response = await client.posts.getPosts({
    ids: ["1460323737035677698", "1460323743339741184"],
    tweetFields: ["created_at"],
    expansions: ["author_id"],
    userFields: ["created_at"],
  });

  response.data?.forEach((post) => {
    console.log(`Publicación: ${post.text}`);
    console.log(`Creada el: ${post.created_at}`);
  });
  ```
</CodeGroup>

**Búsqueda de una sola Publicación: v1.1 `GET statuses/show/:id` → v2 `GET /tweets/:id`**

<CodeGroup dropdown>
  ```bash cURL (v1.1) theme={null}
  curl --request GET \
    --url 'https://api.x.com/1.1/statuses/show.json?id=1460323737035677698' \
    --header 'Authorization: Bearer $ACCESS_TOKEN'
  ```

  ```bash cURL (v2) theme={null}
  curl --request GET \
    --url 'https://api.x.com/2/tweets/1460323737035677698?tweet.fields=created_at&expansions=author_id&user.fields=created_at' \
    --header 'Authorization: Bearer $ACCESS_TOKEN'
  ```

  ```python Python (v2) theme={null}
  import requests

  bearer_token = "YOUR_BEARER_TOKEN"
  url = "https://api.x.com/2/tweets/1460323737035677698"

  params = {
      "tweet.fields": "created_at",
      "expansions": "author_id",
      "user.fields": "created_at"
  }

  headers = {"Authorization": f"Bearer {bearer_token}"}
  response = requests.get(url, headers=headers, params=params)

  print(response.json())
  ```

  ```python Python SDK theme={null}
  from xdk import Client

  client = Client(bearer_token="YOUR_BEARER_TOKEN")

  # Obtener una sola Publicación por ID
  response = client.posts.get(
      "1460323737035677698",
      tweet_fields=["created_at"],
      expansions=["author_id"],
      user_fields=["created_at"]
  )

  print(f"Publicación: {response.data.text}")
  print(f"Creada el: {response.data.created_at}")
  ```

  ```javascript JavaScript SDK theme={null}
  import { Client } from "@xdevplatform/xdk";

  const client = new Client({ bearerToken: "YOUR_BEARER_TOKEN" });

  // Obtener una sola Publicación por ID
  const response = await client.posts.get("1460323737035677698", {
    tweetFields: ["created_at"],
    expansions: ["author_id"],
    userFields: ["created_at"],
  });

  console.log(`Publicación: ${response.data?.text}`);
  console.log(`Creada el: ${response.data?.created_at}`);
  ```
</CodeGroup>
