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

# Pruebas de flujos KYC

Fluz requiere que los usuarios estén verificados por KYC antes de poder realizar ciertas transacciones o desbloquear límites más altos. En el entorno de **staging** puedes ejecutar todo el flujo de verificación con identidades de prueba conocidas y confirmar que tu integración maneja cada resultado, sin usar la información de una persona real.

Para el contrato completo de la mutación y la referencia de respuestas, consulta [Verificación KYC de usuario](/user-kyc-verification).

<Note>
  **Solo staging**

  Las identidades en esta página existen únicamente en el endpoint de staging (`https://transactional-graph.staging.fluzapp.com/api/v1/graphql`). Son sintéticas y no se verificarán en producción. Nunca envíes el nombre, dirección, fecha de nacimiento o SSN reales de una persona a staging.
</Note>

<Info>
  **Antes de comenzar, necesitarás:** una cuenta de Fluz con **acceso de desarrollador** y una aplicación activa ([Prepara tus cuentas](/get-started/prepare-accounts)), y un **token de acceso de usuario** para el usuario que estás verificando ([Generar un token de acceso de usuario](/recipes/generate-user-access-token)). El token identifica a qué usuario de staging aplica la verificación.
</Info>

## Paso 1 — Crea un usuario de prueba (opcional)

Si aún no tienes un usuario de staging para verificar, crea uno con la mutación [`registerUser`](/user-registration), luego genera un token de acceso de usuario para él.

<Note>
  **Acceso restringido**

  `registerUser` requiere permiso especial de Fluz. Si tu aplicación no puede registrar usuarios, usa un usuario de staging existente. Contacta a tu gerente de cuenta o a [partnerships@fluz.app](mailto:partnerships@fluz.app) para habilitarlo.
</Note>

## Paso 2 — Usa la identidad de prueba aprobada

La siguiente identidad está configurada para devolver un resultado **APPROVED** en staging. Envíala exactamente como se muestra.

| Campo             | Valor                  |
| ----------------- | ---------------------- |
| First name        | John                   |
| Last name         | Smith                  |
| Street address    | 222333 Peachtree Place |
| City              | Atlanta                |
| State             | GA                     |
| ZIP / postal code | 30318                  |
| Date of birth     | 02/28/1975             |
| SSN               | 112-22-3333            |

<Note>
  La API solo consume los **últimos 4 dígitos** del SSN (`ssnLast4`). Para esta identidad es `3333`. La fecha de nacimiento se formatea como `MM/DD/YYYY`.
</Note>

## Paso 3 — Ejecuta la verificación

Llama a `verifyUserInformation` con la identidad aprobada. Reemplaza `<USER_ACCESS_TOKEN>` con el token del usuario que está siendo verificado.

<CodeGroup>
  ```curl cURL theme={null}
  curl -X POST https://transactional-graph.staging.fluzapp.com/api/v1/graphql \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer <USER_ACCESS_TOKEN>" \
    -d '{
      "query": "mutation VerifyUserInformation { verifyUserInformation(input: { firstName: \"John\", lastName: \"Smith\", streetLine1: \"222333 Peachtree Place\", streetLine2: \"\", city: \"Atlanta\", state: \"GA\", postalCode: \"30318\", country: \"United States\", dateOfBirth: \"02/28/1975\", ssnLast4: \"3333\" }) { status message } }"
    }'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    "https://transactional-graph.staging.fluzapp.com/api/v1/graphql",
    {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
        Authorization: `Bearer ${accessToken}`,
      },
      body: JSON.stringify({
        query: `
          mutation VerifyUserInformation($input: VerifyUserInformationInput!) {
            verifyUserInformation(input: $input) {
              status
              message
            }
          }
        `,
        variables: {
          input: {
            firstName: "John",
            lastName: "Smith",
            streetLine1: "222333 Peachtree Place",
            streetLine2: "",
            city: "Atlanta",
            state: "GA",
            postalCode: "30318",
            country: "United States",
            dateOfBirth: "02/28/1975",
            ssnLast4: "3333",
          },
        },
      }),
    }
  );

  const data = await response.json();
  console.log(data.data.verifyUserInformation);
  ```
</CodeGroup>

```json Approved response theme={null}
{
  "status": "APPROVED",
  "message": "User verification successful"
}
```

## Paso 4 — Simula los otros resultados

Usa la misma mutación para ejercitar el manejo de cada estado de verificación.

| Estado    | Cómo activarlo en staging                                                                                   |
| --------- | ----------------------------------------------------------------------------------------------------------- |
| APPROVED  | Envía la identidad de prueba aprobada anterior.                                                             |
| DECLINED  | Envía una identidad que no coincida con un registro de staging válido. Valores de prueba: `[TBD: confirm]`. |
| DUPLICATE | Vuelve a enviar datos de identidad que coincidan con un usuario de staging ya verificado.                   |
| ERROR     | Envía un cuarto intento de verificación para el mismo usuario: la verificación está limitada a 3 intentos.  |

<Warning>
  Los valores exactos de campos que fuerzan un resultado `DECLINED` en staging aún no se han publicado. Confírmalos con el equipo de la plataforma antes de depender de ellos en una suite de pruebas automatizadas.
</Warning>

## Respuestas de verificación

| Estado    | Mensaje                          | Descripción                                                                  |
| --------- | -------------------------------- | ---------------------------------------------------------------------------- |
| APPROVED  | User verification successful     | El usuario está verificado por KYC                                           |
| DECLINED  | Verification declined            | El usuario no está verificado por KYC                                        |
| DUPLICATE | Duplicate user verification      | El usuario está verificado por KYC pero los datos coinciden con otro usuario |
| ERROR     | Exceeded user verification limit | Los intentos de verificación superan el máximo de 3 intentos                 |

## Notas

* **Límite de tres intentos.** Un usuario puede ser enviado a verificación como máximo 3 veces antes de devolver `ERROR`. Planifica tus pruebas para no agotar los intentos en un usuario que aún necesitas.
* **Los tokens son por usuario.** El token de acceso determina qué usuario es verificado; asegúrate de que pertenezca al usuario de prueba cuya identidad estás enviando.

## Próximos pasos

<CardGroup cols={2}>
  <Card title="Comercios de prueba" icon="store" href="/test-merchants">
    Comercios de staging con ofertas previsibles para ejercitar compras de tarjetas de regalo.
  </Card>

  <Card title="Verificación KYC de usuario" icon="id-card" href="/user-kyc-verification">
    El contrato completo de la mutación: enlaces de verificación documental, estados y respuestas.
  </Card>
</CardGroup>
