> ## Documentation Index
> Fetch the complete documentation index at: https://x-preview-mintlify-d5730eee.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Apps

> Crea y configura apps de desarrollador de X para obtener credenciales de la API, establecer permisos de OAuth 1.0a y OAuth 2.0, administrar URLs de callback y rotar claves.

Las apps son contenedores para tus credenciales de la API. Cada app tiene sus propias claves, tokens y configuraciones.

***

## Credenciales de la app

Cuando creas una app, puedes generar estas credenciales:

| Credencial                | Caso de uso                                                                                |
| :------------------------ | :----------------------------------------------------------------------------------------- |
| **API Key y Secret**      | Autenticación con OAuth 1.0a. Se usan para firmar solicitudes o generar tokens de usuario. |
| **Access Token y Secret** | Realizar solicitudes en nombre de tu propia cuenta (OAuth 1.0a).                           |
| **Client ID y Secret**    | Autenticación con OAuth 2.0. Se usan para el flujo de authorization code.                  |
| **Bearer Token**          | Autenticación app-only para endpoints de datos públicos.                                   |

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

***

## Crear una app

<Steps>
  <Step title="Abre la Developer Console">
    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 un caso de uso para tu app.
  </Step>

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

  <Step title="Almacénalas de forma segura">
    Guarda las credenciales inmediatamente: solo se muestran una vez.
  </Step>
</Steps>

***

## Permisos de la app (OAuth 1.0a)

Las apps de OAuth 1.0a tienen tres niveles de permisos:

<Tabs>
  <Tab title="Solo lectura">
    * Ver posts, usuarios y datos públicos
    * No se puede publicar, dar like ni modificar nada
    * No se puede acceder a los Mensajes Directos
  </Tab>

  <Tab title="Lectura y escritura">
    * Todos los permisos de lectura
    * Publicar y eliminar posts
    * Seguir/dejar de seguir usuarios
    * Dar like y republicar
    * No se puede acceder a los Mensajes Directos
  </Tab>

  <Tab title="Lectura, escritura y DMs">
    * 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 alcance actualizado.
</Note>

***

## Tipos de app de OAuth 2.0

Al configurar OAuth 2.0, selecciona el tipo de tu app:

| Tipo                    | Cliente      | 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úblico      | Apps móviles o de escritorio que no pueden proteger secretos                     |
| **Single Page App**     | Público      | Apps JavaScript basadas en navegador                                             |

Los **clientes confidenciales** reciben un Client Secret. Los **clientes públicos** usan solo PKCE.

***

## URLs de callback

Las URLs de callback (URIs de redirección) son obligatorias para los flujos de OAuth. Después de que un usuario autoriza tu app, es redirigido a tu URL de callback con un código de autorización.

### Requisitos

* Agrega las URLs de callback a la lista de permitidas de tu app en la Developer Console
* Las URLs deben coincidir exactamente (incluidas las barras finales)
* Máximo **10 URLs de callback** por app
* Usa `https://` en producción
* Para desarrollo local, usa `http://127.0.0.1` (no `localhost`)

### Protocolos no permitidos

Estos protocolos no se pueden usar: `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>

***

## Mejores prácticas

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

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

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

  <Card title="Monitorea el uso" icon="chart-simple">
    Revisa la Developer Console con regularidad para rastrear el uso de la API.
  </Card>
</CardGroup>

***

## Etiquetas de cuenta automatizada

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

1. Ve a la **Configuración** de tu cuenta bot
2. Selecciona **Tu cuenta** → **Automatización**
3. Vincula tu cuenta administradora

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

***

## Solución de problemas

<Accordion title="Error: Callback URL no aprobada">
  Asegúrate de que tu URL de callback sea exactamente igual a la registrada en la Developer Console, incluido el protocolo y las barras finales. Codifica la URL en HTTP 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 un aviso del equipo de la plataforma X. Usa el [formulario de ayuda de la plataforma](https://help.x.com/forms/platform) para apelar.
</Accordion>
