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

# Guía de integración

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

Esta página presenta herramientas y conceptos clave para integrar en tu sistema los endpoints para gestionar Publicaciones.

***

<div id="helpful-tools">
  ## Herramientas útiles
</div>

Antes de profundizar en algunos conceptos clave que le ayudarán a integrar este endpoint, le recomendamos familiarizarse con:

<div id="postman">
  ### Postman
</div>

Postman es una excelente herramienta que puedes usar para probar un endpoint. Cada solicitud de Postman incluye todos los parámetros de ruta y de cuerpo para ayudarte a comprender rápidamente todo lo que tienes disponible. Para obtener más información sobre nuestras colecciones de Postman, visita nuestra página ["Uso de Postman"](/es/tutorials/postman-getting-started).

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

¿Te interesa configurar este endpoint con código en tu lenguaje de programación preferido? Tenemos varios ejemplos de código disponibles que puedes usar como punto de partida en nuestro [repositorio de GitHub](https://github.com/xdevplatform/Twitter-API-v2-sample-code).

<div id="third-party-libraries">
  ### Bibliotecas de terceros
</div>

Aprovecha una de las [bibliotecas de terceros](/es/x-api/tools-and-libraries/overview) de nuestras comunidades para ayudarte a empezar. Puedes encontrar una biblioteca que funcione con los endpoints de v2 buscando la etiqueta de versión adecuada.

<div id="key-concepts">
  ## Conceptos clave
</div>

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

Todos los endpoints de X API v2 requieren que autentiques tus solicitudes con un conjunto de credenciales, también conocidas como claves y tokens.

Estos endpoints en concreto requieren el uso de [OAuth 1.0a User Context](/es/resources/fundamentals/authentication), lo que significa que debes usar un conjunto de claves de API y tokens de acceso de usuario (Access Tokens) para realizar una solicitud correcta. Los Access Tokens deben estar asociados con el usuario en cuyo nombre estás realizando la solicitud. Si deseas generar un conjunto de Access Tokens para otro usuario, este debe autorizar o autenticar tu App utilizando el [flujo OAuth de 3 participantes (3-legged OAuth flow)](/es/resources/fundamentals/authentication#obtaining-access-tokens-using-3-legged-oauth-flow).

Ten en cuenta que OAuth 1.0a puede ser difícil de usar. Si no estás familiarizado con este método de autenticación, te recomendamos que uses una [biblioteca](/es/x-api/tools-and-libraries/overview), una herramienta como Postman o OAuth 2.0 para autenticar tus solicitudes.

[OAuth 2.0 Authorization Code with PKCE](/es/resources/fundamentals/authentication#oauth-2-0-authorization-code-flow-with-pkce-2) permite un mayor control sobre el alcance de una aplicación y sobre los flujos de autorización en varios dispositivos. OAuth 2.0 te permite elegir ámbitos específicos y granulares que te otorgan permisos específicos en nombre de un usuario.

Para habilitar OAuth 2.0 en tu App, debes activarlo en la configuración de autenticación de tu App, que se encuentra en la sección de configuración de la App en la Consola de desarrollador.

<div id="developer-console-projects-and-developer-apps">
  ### Consola de desarrollador, Proyectos y Apps de desarrollador
</div>

Para obtener un conjunto de credenciales de autenticación que sean compatibles con los endpoints de X API v2, debes tener una \[cuenta de desarrollador]/resources/fundamentals/developer-portal), configurar un [Proyecto](/es/resources/fundamentals/developer-apps) dentro de esa cuenta y haber creado una [App de desarrollador](/es/resources/fundamentals/developer-apps) dentro de ese Proyecto. Luego podrás encontrar tus claves y tokens dentro de tu App de desarrollador.

<div id="rate-limits">
  ### Límites de tasa
</div>

Cada día, muchos miles de desarrolladores realizan solicitudes a la X API. Para ayudar a gestionar el enorme volumen de estas solicitudes, se aplican [límites de tasa](https://developer.x.com/x-api/fundamentals/rate-limits) a cada endpoint que limitan la cantidad de solicitudes que puedes realizar en nombre de tu App o en nombre de un usuario autenticado.

Estos endpoints tienen límites de tasa a nivel de usuario, lo que significa que el usuario autenticado en cuyo nombre realizas la solicitud solo puede llamar al endpoint un número determinado de veces desde cualquier App de desarrollador. Hay un límite de tasa por usuario de 200 solicitudes cada 15 minutos para el método POST. El método DELETE tiene un límite de tasa de 50 solicitudes cada 15 minutos. Además, hay un límite de [300 solicitudes cada 3 horas](https://blog.x.com/developer/en_us/topics/tools/2018/new-developer-requirements-to-protect-our-platform), incluidas las Publicaciones creadas mediante manage Posts o manage Retweets.

<div id="source-labels">
  ### Etiquetas de origen
</div>

El nombre de tu App y la URL de tu sitio web se mostrarán como la [etiqueta de origen](https://help.x.com/en/using-twitter/how-to-tweet#source-labels) dentro de los metadatos de cualquier Publicación generada mediante programación por tu aplicación. Si cambias el caso de uso de tu App de X, asegúrate de actualizarlo en esta configuración para garantizar que sigues cumpliendo con los [Developer Terms](https://developer.x.com/content/developer-twitter/en/developer-terms/agreement-and-policy).

<div id="profile-settings">
  ### Configuración del perfil
</div>

Solo puedes agregar una ubicación a las Publicaciones si tienes la geo habilitada en la configuración de tu perfil. Si no tienes la geo habilitada, todavía puedes agregar un parámetro de ubicación en el cuerpo de tu solicitud, pero no se adjuntará a tu Publicación. Lo mismo ocurre al etiquetar usuarios en imágenes. Si el usuario al que estás etiquetando no tiene habilitado el etiquetado de fotos, su nombre no aparecerá en la lista de usuarios etiquetados aunque la Publicación se cree correctamente.

<div id="adding-media-to-a-post">
  ### Añadir contenido multimedia a una Publicación
</div>

Actualmente, no hay ninguna forma de cargar por completo contenido multimedia usando X API v2. Sin embargo, puedes adjuntar contenido multimedia previamente cargado a una Publicación. Puedes usar id de contenido multimedia que ya se hayan [cargado usando el endpoint de contenido multimedia de la v1](https://developer.x.com/en/docs/twitter-api/v1/media/upload-media/api-reference/post-media-upload) o [X Media Studio](https://media.x.com/en/articles/products/2018/media-studio). Estos id de contenido multimedia deben ser tuyos o de un usuario autenticado.

***

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

<div id="create-a-post">
  ### Crear una Publicación
</div>

<CodeGroup dropdown>
  ```bash cURL theme={null}
  curl -X POST "https://api.x.com/2/tweets" \
    -H "Authorization: OAuth ..." \
    -H "Content-Type: application/json" \
    -d '{"text": "Hello world!"}'
  ```

  ```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)

  # Crear una Publicación
  response = client.posts.create(text="Hello world!")
  print(f"Created Post: {response.data.id}")
  ```

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

  // Crear una Publicación
  const response = await client.posts.create({ text: "Hello world!" });
  console.log(`Created Post: ${response.data?.id}`);
  ```
</CodeGroup>

<div id="create-a-reply">
  ### Crear una respuesta
</div>

<CodeGroup dropdown>
  ```bash cURL theme={null}
  curl -X POST "https://api.x.com/2/tweets" \
    -H "Authorization: OAuth ..." \
    -H "Content-Type: application/json" \
    -d '{"text": "¡Esta es una respuesta!", "reply": {"in_reply_to_tweet_id": "1234567890"}}'
  ```

  ```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)

  # Crear una respuesta
  response = client.posts.create(
      text="¡Esta es una respuesta!",
      reply={"in_reply_to_tweet_id": "1234567890"}
  )
  print(f"Respuesta creada: {response.data.id}")
  ```

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

  // Crear una respuesta
  const response = await client.posts.create({
    text: "¡Esta es una respuesta!",
    reply: { inReplyToTweetId: "1234567890" },
  });
  console.log(`Respuesta creada: ${response.data?.id}`);
  ```
</CodeGroup>

<div id="delete-a-post">
  ### Eliminar una publicación
</div>

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

  ```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)

  # Eliminar una publicación
  response = client.posts.delete("1234567890")
  print(f"Deleted: {response.data.deleted}")
  ```

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

  // Eliminar una publicación
  const response = await client.posts.delete("1234567890");
  console.log(`Deleted: ${response.data?.deleted}`);
  ```
</CodeGroup>

**Próximos pasos**

[Referencia de la API](/es/x-api/posts/manage-tweets#manage-tweets-api-reference-index)
