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

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>;
};

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

Si ha estado utilizando los endpoints estándar de v1.1 [POST friendships/create](https://developer.x.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/post-friendships-create) y [POST friendships/destroy](https://developer.x.com/en/docs/twitter-api/v1/accounts-and-users/follow-search-get-users/api-reference/post-friendships-destroy), el objetivo de esta guía es ayudarle a comprender las similitudes y diferencias entre los endpoints estándar y los endpoints de X API v2 para gestionar seguimientos.

* **Similitudes**
  * Contexto de usuario OAuth 1.0a
* **Diferencias**
  * URLs de los endpoints
  * Requisitos de App y Project
  * Métodos HTTP
  * Parámetros de solicitud

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

**Método de autenticación OAuth 1.0a en contexto de usuario**

Ambas versiones de este endpoint admiten [OAuth 1.0a User Context](/es/resources/fundamentals/authentication#oauth-1-0a-2). Por lo tanto, si antes usabas uno de los endpoints estándar de v1.1 para administrar follows, puedes seguir utilizando el mismo método de autenticación si migras a la versión de X API v2.

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

**URLs de endpoints**

* Endpoints estándar v1.1:
  * POST [https://api.x.com/1.1/friendships/create.json](https://api.x.com/1.1/friendships/create.json)
    (seguir a un usuario)
  * POST [https://api.x.com/1.1/friendships/destroy.json](https://api.x.com/1.1/friendships/destroy.json)
    (dejar de seguir a un usuario)
* Endpoint de X API v2:
  * POST [https://api.x.com/2/users/:id/following](https://api.x.com/2/users/:id/following)
    (seguir a un usuario)
  * DELETE [https://api.x.com/2/users/:source\&#95;user\&#95;id/following/:target\&#95;user\&#95;id](https://api.x.com/2/users/:source\&#95;user\&#95;id/following/:target\&#95;user\&#95;id)
    (dejar de seguir a un usuario)

**Requisitos de App y Project**

Los endpoints de X API v2 requieren que utilices credenciales de una [developer App](/es/resources/fundamentals/developer-apps) que esté asociada a un [Project](/es/resources/fundamentals/developer-apps) al autenticar tus solicitudes. Todos los endpoints de X API v1.1 pueden usar credenciales de Apps o de Apps asociadas a un Project.

**Parámetros de la solicitud**

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

| Estándar v1.1   | X API v2                             |
| :-------------- | :----------------------------------- |
| Sin equivalente | id (POST), source\_user\_id (DELETE) |
| user\_id        | target\_user\_id                     |
| screen\_name    | Sin equivalente                      |

Ten en cuenta que los parámetros estándar v1.1 se pasan como parámetros de consulta, mientras que los parámetros de X API v2 se pasan como parámetros en el cuerpo (para el endpoint POST) o parámetros de ruta (para el endpoint DELETE).

Además, en v2, id y source\_user\_id no son obligatorios cuando se utilizan los endpoints estándar v1.1, ya que los tokens de acceso enviados con el contexto de usuario de OAuth 1.0a permitían inferir qué usuario estaba iniciando la acción de seguir o dejar de seguir.

***

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

<div id="follow-a-user-v2">
  ### Seguir a un usuario (v2)
</div>

<CodeGroup dropdown>
  ```bash cURL theme={null}
  curl -X POST "https://api.x.com/2/users/123456789/following" \
    -H "Authorization: OAuth ..." \
    -H "Content-Type: application/json" \
    -d '{"target_user_id": "2244994945"}'
  ```

  ```python Python theme={null}
  # Requiere autenticación OAuth 1.0a en contexto de usuario
  import requests
  from requests_oauthlib import OAuth1

  auth = OAuth1(
      "API_KEY", "API_SECRET",
      "ACCESS_TOKEN", "ACCESS_TOKEN_SECRET"
  )

  url = "https://api.x.com/2/users/123456789/following"
  response = requests.post(url, auth=auth, json={"target_user_id": "2244994945"})
  print(response.json())
  ```

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

  oauth1 = OAuth1(
      api_key="YOUR_API_KEY",
      api_secret="YOUR_API_SECRET",
      access_token="YOUR_ACCESS_TOKEN",
      access_token_secret="YOUR_ACCESS_TOKEN_SECRET"
  )

  client = Client(auth=oauth1)

  # Seguir a un usuario
  response = client.users.follow(
      source_user_id="123456789",
      target_user_id="2244994945"
  )
  print(f"Following: {response.data.following}")
  ```

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

  const oauth1 = new OAuth1({
    apiKey: "YOUR_API_KEY",
    apiSecret: "YOUR_API_SECRET",
    accessToken: "YOUR_ACCESS_TOKEN",
    accessTokenSecret: "YOUR_ACCESS_TOKEN_SECRET",
  });

  const client = new Client({ oauth1 });

  // Seguir a un usuario
  const response = await client.users.follow("123456789", {
    targetUserId: "2244994945",
  });
  console.log(`Following: ${response.data?.following}`);
  ```
</CodeGroup>

<div id="unfollow-a-user-v2">
  ### Dejar de seguir a un usuario (v2)
</div>

<CodeGroup dropdown>
  ```bash cURL theme={null}
  curl -X DELETE "https://api.x.com/2/users/123456789/following/2244994945" \
    -H "Authorization: OAuth ..."
  ```

  ```python Python theme={null}
  # Requiere autenticación en contexto de usuario con OAuth 1.0a
  import requests
  from requests_oauthlib import OAuth1

  auth = OAuth1(
      "API_KEY", "API_SECRET",
      "ACCESS_TOKEN", "ACCESS_TOKEN_SECRET"
  )

  url = "https://api.x.com/2/users/123456789/following/2244994945"
  response = requests.delete(url, auth=auth)
  print(response.json())
  ```

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

  oauth1 = OAuth1(
      api_key="YOUR_API_KEY",
      api_secret="YOUR_API_SECRET",
      access_token="YOUR_ACCESS_TOKEN",
      access_token_secret="YOUR_ACCESS_TOKEN_SECRET"
  )

  client = Client(auth=oauth1)

  # Dejar de seguir a un usuario
  response = client.users.unfollow(
      source_user_id="123456789",
      target_user_id="2244994945"
  )
  print(f"Following: {response.data.following}")
  ```

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

  const oauth1 = new OAuth1({
    apiKey: "YOUR_API_KEY",
    apiSecret: "YOUR_API_SECRET",
    accessToken: "YOUR_ACCESS_TOKEN",
    accessTokenSecret: "YOUR_ACCESS_TOKEN_SECRET",
  });

  const client = new Client({ oauth1 });

  // Dejar de seguir a un usuario
  const response = await client.users.unfollow("123456789", "2244994945");
  console.log(`Following: ${response.data?.following}`);
  ```
</CodeGroup>
