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

# Widget de Inscripción

> El tipo de widget ENROLLMENT: guía a un usuario por la configuración de la cuenta justo después de OAuth, eligiendo qué pasos verá — verificación de identidad, fuentes de fondos y PIN.

El tipo de widget `ENROLLMENT` guía a un usuario por la configuración de su cuenta inmediatamente después de autorizar tu aplicación. Tiene la misma estructura que los demás tipos de widget — el usuario es redirigido directamente a una tarea después de autorizar — con una diferencia: **tú eliges qué pasos de configuración verá el usuario.**

A diferencia de los tipos de payout y pay-in, este widget no mueve dinero. No hay monto a confirmar ni transacción que aprobar.

<Note>
  `ENROLLMENT` está disponible actualmente solo en **staging**. La compatibilidad con producción está en camino; hasta entonces, un token de producción con `transactionType: "ENROLLMENT"` será rechazado.
</Note>

<Info>
  **Requisitos previos**

  * Una aplicación de widget con la configuración de OAuth lista. Consulta [Configurar App Widget](/developers/configure-app-widget). Cualquier tipo de aplicación puede ejecutar este widget, incluyendo una app de `OAuth Integration` solo de permisos.
  * El usuario debe haber otorgado los alcances (scopes) de tu aplicación. Los scopes se verifican para la aplicación en su conjunto, no por paso. Si falta alguno, el widget envía al usuario a la pantalla de consentimiento de OAuth antes del primer paso, igual que los otros tipos de widget. Ningún paso se omite o falla por causa de un scope.
  * Un usuario de OAuth y un token de acceso, igual que en los otros tipos de widget.
</Info>

## Elegir los pasos

Pasa un arreglo ordenado `steps` en el token de transacción preaprobada junto con `transactionType: "ENROLLMENT"`:

```javascript theme={null}
import jwt from 'jsonwebtoken';

const generatedToken = jwt.sign(
  {
    apiKey: '', // Your apiKey
    transactionType: 'ENROLLMENT',
    externalId: '', // Your unique identifier for the user
    steps: ['KYC', 'FUNDING_SOURCE', 'PIN'],
    jti: uuidv4(),
  },
  secret, // Your apiSecret
  { expiresIn: '1 day' }
);
```

`amount` no es obligatorio para este tipo de widget. Todo lo demás sobre el token permanece igual — consulta [Configura tu servidor](/developers/setting-up-your-server).

### Pasos compatibles

| Paso             | Lo que hace el usuario                                                                                                                                           |
| :--------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `KYC`            | Completa la verificación de identidad personal, escalando a captura de documentos si es necesario. Consulta [Verificar por Widget](/verify-customers-by-widget). |
| `FUNDING_SOURCE` | Vincula una o más fuentes de fondos — una cuenta bancaria vía Plaid, una tarjeta bancaria o PayPal.                                                              |
| `PIN`            | Configura su PIN de transacción de Fluz.                                                                                                                         |

<Note>
  Este widget ejecuta solo verificación de identidad **personal**. La verificación de negocio (KYB) no es uno de sus pasos — usa el tipo de widget KYB dedicado para eso. Consulta [Registro de negocios](/docs/business-registration).
</Note>

### Orden

Los pasos se ejecutan en el orden en que los listes. Fluz no los reordena, y no hay combinaciones inválidas — ninguno de los tres pasos es un prerrequisito de otro, por lo que `["PIN", "FUNDING_SOURCE", "KYC"]` es tan válido como `["KYC", "FUNDING_SOURCE", "PIN"]`.

Enumera los pasos en el orden que tenga sentido para tu producto.

## Comportamiento de omisión

Un paso que el usuario ya haya cumplido se omite silenciosamente — nunca ve su pantalla.

| Paso             | Se omite cuando                                   |
| :--------------- | :------------------------------------------------ |
| `KYC`            | El usuario ya aprobó la verificación de identidad |
| `PIN`            | El usuario ya tiene un PIN configurado            |
| `FUNDING_SOURCE` | **Nunca**                                         |

El paso de fuente de fondos nunca se omite, porque un usuario que ya tiene una fuente puede querer agregar otra. Siempre se muestra, y el usuario decide cuándo continuar.

Si cada paso que solicitaste ya está cumplido, el widget se completa de inmediato sin mostrar una pantalla de paso.

<Info>
  Debido a que `FUNDING_SOURCE` nunca se omite automáticamente, una lista `steps` que lo incluya siempre mostrará al menos una pantalla. Si quieres que el resultado "nada que hacer, completar de inmediato" sea alcanzable, solicita solo `KYC` y `PIN`.
</Info>

## El paso de fuente de fondos

Este paso es deliberadamente abierto. El usuario puede agregar tantas fuentes de fondos como desee en una sola visita — la pantalla enumera lo que ha agregado hasta el momento y tiene un control explícito de **Continuar**, así que avanzar es su decisión en lugar de algo que ocurra automáticamente tras el primer enlace exitoso.

Un usuario que no quiera agregar nada puede continuar sin añadir una fuente.

Los cambios de fuente de fondos aún no emiten un webhook. Hay un evento dedicado en progreso. Hasta que esté disponible, lee las fuentes de fondos del usuario con la consulta `getWallet` después de que el flujo se complete. Consulta [Fuentes de fondos](/features/funding-sources).

## Finalización

Cuando el último paso se resuelve, el widget muestra una pantalla de finalización. Si proporcionaste un `callbackUrl`, incluye un botón de regreso a tu aplicación; de lo contrario ofrece un control **Listo** que cierra el widget.

<Warning>
  No infieras éxito por el cierre del widget — un usuario puede descartarlo en cualquier momento. Confía en los callbacks `onSuccess` y `onError`, y en los webhooks de los pasos individuales: los eventos de verificación de identidad se disparan independientemente del widget. Consulta [Webhooks](/fluz-dashboard/webhooks).
</Warning>

## Tokens rechazados

La reclamación `steps` se valida cuando la sesión se abre. Todos estos casos rechazan la sesión en lugar de degradarla a un flujo parcial:

| Problema                                                            | Resultado                                                                               |
| :------------------------------------------------------------------ | :-------------------------------------------------------------------------------------- |
| `steps` ausente por completo                                        | Error de parámetro faltante                                                             |
| `steps` no es un arreglo, o está vacío                              | Error de parámetro inválido                                                             |
| `steps` contiene un valor que no es `KYC`, `FUNDING_SOURCE` o `PIN` | Error de parámetro inválido que nombra el valor no compatible y enumera los compatibles |
| `steps` lista el mismo paso dos veces                               | Error de parámetro inválido que nombra el duplicado                                     |

El usuario ve una pantalla genérica de "enlace de widget inválido" — la razón específica no se le muestra, ya que un token mal formado es un problema de integración y no algo sobre lo que pueda actuar. Revisa tu generador de tokens y consulta el detalle del error entregado a tu callback `onError`.

## Próximos pasos

<CardGroup cols={2}>
  <Card title="Configura tu servidor" icon="server" href="/developers/setting-up-your-server">
    Genera el token de transacción preaprobada en tu lenguaje.
  </Card>

  <Card title="Incorpora el widget" icon="code" href="/developers/adding-the-js-widget-to-your-page">
    Script tag, llamada a init, callbacks.
  </Card>

  <Card title="Verificar por widget" icon="circle-check-big" href="/verify-customers-by-widget">
    Lo que experimenta el usuario durante el paso de KYC.
  </Card>

  <Card title="Fuentes de fondos" icon="coins" href="/features/funding-sources">
    Lo que puedes hacer con una fuente cuando ya está vinculada.
  </Card>
</CardGroup>
