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

# Apps

> Crea y configura apps para acceder a X API

Las apps son contenedores para tus credenciales de API. Cada app tiene sus propias claves, tokens y configuración.

***

<div id="app-credentials">
  ## Credenciales de la App
</div>

Cuando creas una App, puedes generar estas credenciales:

| Credencial                | Caso de uso                                                                            |
| :------------------------ | :------------------------------------------------------------------------------------- |
| **API Key & Secret**      | Autenticar con OAuth 1.0a. Se usa para firmar solicitudes o generar tokens de usuario. |
| **Access Token & Secret** | Realizar solicitudes en nombre de tu propia cuenta (OAuth 1.0a).                       |
| **Client ID & Secret**    | Autenticar con OAuth 2.0. Se usa para el flujo de código de autorización.              |
| **Bearer Token**          | Autenticación solo de la App para endpoints de datos públicos.                         |

<Tip>
  Elige **OAuth 2.0** para proyectos nuevos. Ofrece scopes granulares y es obligatorio para endpoints de contexto de usuario de X API v2.
</Tip>

***

<div id="creating-an-app">
  ## Creación de una App
</div>

<Steps>
  <Step title="Abre la Consola de desarrollador">
    Ve a [console.x.com](https://console.x.com) e inicia sesión.
  </Step>

  <Step title="Haz clic en Create App">
    Ingresa un nombre, una descripción y el caso de uso de tu App.
  </Step>

  <Step title="Genera credenciales">
    Después de crearla, genera las claves y tokens que necesitas.
  </Step>

  <Step title="Almacena de forma segura">
    Guarda estas credenciales de inmediato; solo se mostrarán una vez.
  </Step>
</Steps>

***

<div id="app-permissions-oauth-10a">
  ## Permisos de la App (OAuth 1.0a)
</div>

Las Apps OAuth 1.0a tienen tres niveles de permisos:

<Tabs>
  <Tab title="Solo lectura">
    * Ver publicaciones, usuarios y datos públicos
    * No permite publicar, indicar que algo te guste ni modificar nada
    * No permite acceder a los Mensajes Directos
  </Tab>

  <Tab title="Lectura y escritura">
    * Todos los permisos de lectura
    * Publicar y eliminar publicaciones
    * Seguir y dejar de seguir usuarios
    * Indicar que algo te guste y volver a publicar
    * No permite acceder a los Mensajes Directos
  </Tab>

  <Tab title="Lectura, escritura y MDs">
    * Todos los permisos de lectura y escritura
    * Enviar y leer Mensajes Directos
  </Tab>
</Tabs>

<Note>
  Cambiar los permisos requiere que los usuarios vuelvan a autorizar tu App para obtener nuevos tokens con el ámbito actualizado.
</Note>

***

<div id="oauth-20-app-types">
  ## Tipos de apps OAuth 2.0
</div>

Al configurar OAuth 2.0, selecciona tu tipo de app:

| Type                    | Client       | Caso de uso                                                                      |
| :---------------------- | :----------- | :------------------------------------------------------------------------------- |
| **Web App**             | Confidencial | Aplicaciones del lado del servidor que pueden almacenar secretos de forma segura |
| **Automated App / Bot** | Confidencial | Bots y servicios automatizados que se ejecutan en servidores                     |
| **Native App**          | Pública      | Apps móviles o de escritorio que no pueden proteger secretos de forma segura     |
| **Single Page App**     | Pública      | Apps JavaScript basadas en el navegador                                          |

Los **clientes confidenciales** reciben un Client Secret. Los **clientes públicos** utilizan únicamente PKCE.

***

<div id="callback-urls">
  ## URLs de callback
</div>

Las URLs de callback (URIs de redirección) son obligatorias para los flujos de OAuth. Cuando un usuario autoriza tu App, se le redirige a tu URL de callback con un código de autorización.

<div id="requirements">
  ### Requisitos
</div>

* Agrega URL de callback a la lista de permitidos de tu App en la Consola de desarrollador
* Las URL deben coincidir exactamente (incluida la barra diagonal final)
* Máximo de **10 URL de callback** por App
* Usa `https://` en producción
* Para desarrollo local, usa `http://127.0.0.1` (no `localhost`)

<div id="disallowed-protocols">
  ### Protocolos no permitidos
</div>

No se permite el uso de estos protocolos: `javascript`, `data`, `file`, `ftp`, `mailto`, `telnet` y otros esquemas no estándar.

<Accordion title="Lista completa de protocolos no permitidos">
  `vbscript`, `javascript`, `vbs`, `data`, `mocha`, `keyword`, `livescript`, `ftp`, `file`, `gopher`, `acrobat`, `callto`, `daap`, `itpc`, `itms`, `firefoxurl`, `hcp`, `ldap`, `mailto`, `mmst`, `mmsu`, `msbd`, `rtsp`, `mso-offdap`, `snews`, `news`, `nntp`, `outlook`, `stssync`, `rlogin`, `telnet`, `tn3270`, `shell`, `sip`
</Accordion>

***

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

<CardGroup cols={2}>
  <Card title="Usa Apps separadas" icon="layer-group">
    Crea Apps diferentes para desarrollo, preproducción y producción.
  </Card>

  <Card title="Rota las credenciales" icon="arrows-rotate">
    Regenera las claves periódicamente y si sospechas que se han visto comprometidas.
  </Card>

  <Card title="Permisos mínimos" icon="shield-check">
    Solicita únicamente los permisos que tu App realmente necesita.
  </Card>

  <Card title="Supervisa el uso" icon="chart-simple">
    Revisa con regularidad la Consola de desarrollador para supervisar el uso de la API.
  </Card>
</CardGroup>

***

<div id="automated-account-labels">
  ## Etiquetas de cuentas automatizadas
</div>

Si tu App ejecuta una cuenta bot, puedes etiquetarla como automatizada:

1. Ve a **Settings** en tu cuenta bot
2. Selecciona **Your account** → **Automation**
3. Vincula la cuenta que la administra

Esto genera confianza con los usuarios y distingue tu bot del spam.

***

<div id="troubleshooting">
  ## Solución de problemas
</div>

<Accordion title="Error de URL de callback no aprobada">
  Asegúrate de que tu URL de callback coincida exactamente con la registrada en la Consola de desarrollador, incluido el protocolo y cualquier barra diagonal final. Aplica codificación URL a la dirección cuando la pases como parámetro de consulta.

  ```json theme={null}
  {
    "errors": [{
      "code": 415,
      "message": "Callback URL not approved for this client application."
    }]
  }
  ```
</Accordion>

<Accordion title="App suspendida">
  Si tu App aparece como suspendida, revisa tu correo electrónico para ver si recibiste una notificación del equipo de la plataforma de X. Usa el [Formulario de ayuda de la plataforma](https://help.x.com/forms/platform) para apelar.
</Accordion>
