> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fluz.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Referencia de autenticación

> Las formas exactas de solicitud/respuesta para emitir tokens de acceso de usuario con tu clave de API.

Para la visión conceptual, consulta [Autenticación](/concepts/authentication). Esta página documenta el contrato GraphQL exacto para emitir tokens en el grafo transaccional:

| Environment | Endpoint                                                         |
| ----------- | ---------------------------------------------------------------- |
| Staging     | `https://transactional-graph.staging.fluzapp.com/api/v1/graphql` |
| Production  | `https://transactional-graph.fluzapp.com/api/v1/graphql`         |

## `generateUserAccessToken`

Emite un token de acceso de usuario con la **clave de API** de tu aplicación. La clave de API se envía en el encabezado `Authorization: Basic <API_KEY>` — nunca se pasa como argumento de GraphQL. El token se emite para un par `userId` / `accountId` (mostrado junto a tu clave de API en la Consola de Desarrollador) y lleva los alcances que solicites.

### Solicitud

```http theme={null}
POST /api/v1/graphql HTTP/1.1
Host: transactional-graph.staging.fluzapp.com
Authorization: Basic <API_KEY>
Content-Type: application/json

{
  "query": "mutation ($userId: UUID!, $accountId: UUID!, $scopes: [ScopeType!]!) { generateUserAccessToken(userId: $userId, accountId: $accountId, scopes: $scopes) { token scopes } }",
  "variables": {
    "userId": "<USER_ID>",
    "accountId": "<ACCOUNT_ID>",
    "scopes": ["LIST_OFFERS", "PURCHASE_GIFTCARD"]
  }
}
```

Un argumento opcional `seatId: UUID` selecciona el asiento utilizado para transacciones; de forma predeterminada es el asiento creado más recientemente. Consulta la referencia completa de argumentos en [generateUserAccessToken](/api-reference/mutations/generate-user-access-token).

### Respuesta

```json theme={null}
{
  "data": {
    "generateUserAccessToken": {
      "token": "eyJhbGciOi...",
      "scopes": ["LIST_OFFERS", "PURCHASE_GIFTCARD"]
    }
  }
}
```

Adjunta el `token` devuelto como `Authorization: Bearer <token>` en solicitudes posteriores. Los tokens son JWT de corta duración — emite uno nuevo cuando expire (consulta [Reemplazar un token de acceso expirado](/get-started/refresh-expired-access-token)).

### Requisitos

* El usuario debe haber otorgado a tu aplicación los alcances solicitados; los alcances desconocidos o no otorgados hacen que la mutación falle.
* `PCI_COMPLIANCE` no se puede solicitar al generar un token — se concede a nivel de aplicación a los desarrolladores con cumplimiento PCI.

## Descubrir `userId` / `accountId`

También autorizado por `Basic <API_KEY>`:

* [`getApplicationUsers`](/api-reference/queries/get-application-users) — los usuarios que han otorgado alcances a tu aplicación, con sus cuentas.
* [`getAccountsByUserId`](/api-reference/queries/get-accounts-by-user-id) — todas las cuentas para un usuario dado.
* [`getApplicationScopes`](/api-reference/queries/get-application-scopes) — los alcances disponibles para tu aplicación.

## Cuentas de clientes (plataformas OAuth)

Si estás creando una plataforma que opera sobre cuentas de clientes, primero el cliente autoriza tu app mediante el flujo de concesión OAuth, y tu servidor intercambia el código resultante en el endpoint de intercambio de tokens — consulta [el flujo de concesión OAuth](/client-facing-o-auth-grant-flow) y [Crear una plataforma](/build-a-platform).

## Alcances

Consulta la tabla de alcances en [Autenticación](/concepts/authentication#scopes). Los alcances desconocidos hacen que la mutación falle.
