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

# Aprobar Validación KYC

> Aprobar manualmente una validación KYC — en la API KYC de gu1 para flujos de verificación de identidad, con ejemplos para approve validation.

## Descripción General

Este endpoint permite aprobar manualmente una validación KYC. Cuando apruebas:

* **Sincronización automática con el proveedor**: El sistema primero sincroniza con el proveedor KYC para obtener el estado más reciente
* **Validación de estado**: Solo puedes aprobar si el estado del proveedor es `in_review` (el usuario completó la verificación y requiere revisión manual del equipo de compliance)
* El estado de la validación cambia a `approved`
* La validación se marca como verificada con timestamp
* La razón de aprobación se guarda en metadata y logs de auditoría
* Con **`doubleCheckRenaper`**: **no** se vuelve a ejecutar RENAPER ni se re-aplica el cruce; se reutilizan `metadata.responseDoubleChecks.renaper` y `warnings` ya calculados en `in_review`. La decisión es humana tras revisar esos datos en la UI.

<Warning>
  La aprobación manual solo debe usarse cuando has realizado verificación adicional o tienes razones suficientes para anular el proceso automatizado. La razón de aprobación es obligatoria para cumplimiento de auditoría.
</Warning>

## Cuándo Usar Esto

* **Verificación adicional completada**: Has realizado revisión manual de documentos o datos biométricos
* **Excepción de negocio**: Tienes razones comerciales para aprobar a pesar de problemas menores
* **Anulación de evaluación de riesgo**: Tu equipo de riesgo ha aprobado la validación
* **Retraso del proveedor**: El proveedor de verificación está tardando demasiado pero tu revisión interna está completa

## Request

### Endpoint

```
POST https://api.gu1.ai/api/kyc/validations/{id}/approve
```

### Parámetros de Ruta

<ParamField path="id" type="string" required>
  El ID de validación a aprobar
</ParamField>

### Headers

```json theme={null}
{
  "Authorization": "Bearer YOUR_API_KEY",
  "Content-Type": "application/json"
}
```

### Parámetros del Body

<ParamField body="reason" type="string" required>
  Razón para aprobar manualmente la validación (mínimo 5 caracteres)

  **Tipo**: `string` (longitud mínima: 5)

  **Ejemplo**: `"Revisión manual completada exitosamente - todos los documentos verificados"`
</ParamField>

## Respuesta

### Respuesta Exitosa (200 OK)

Devuelve el objeto de validación actualizado con estado `approved`:

```json theme={null}
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "entityId": "123e4567-e89b-12d3-a456-426614174000",
  "organizationId": "org_abc123",
  "validationSessionId": "session_xyz789",
  "status": "approved",
  "provider": "kyc_provider",
  "providerSessionUrl": "https://verify.example.com/session_xyz789",
  "isCurrent": true,
  "verifiedAt": "2025-01-27T10:30:00Z",
  "metadata": {
    "manuallyApprovedBy": "user_123",
    "manuallyApprovedAt": "2025-01-27T10:30:00Z",
    "approvalReason": "Revisión manual completada exitosamente - todos los documentos verificados"
  },
  "createdAt": "2025-01-15T10:30:00Z",
  "updatedAt": "2025-01-27T10:30:00Z"
}
```

## Ejemplo de Request

<CodeGroup>
  ```javascript Node.js theme={null}
  const validationId = '550e8400-e29b-41d4-a716-446655440000';

  const response = await fetch(
    `https://api.gu1.ai/api/kyc/validations/${validationId}/approve`,
    {
      method: 'POST',
      headers: {
        'Authorization': 'Bearer YOUR_API_KEY',
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        reason: 'Revisión manual completada exitosamente - todos los documentos verificados'
      })
    }
  );

  const approved = await response.json();
  console.log('Validación aprobada:', approved.status);
  ```

  ```python Python theme={null}
  import requests

  validation_id = '550e8400-e29b-41d4-a716-446655440000'

  response = requests.post(
      f'https://api.gu1.ai/api/kyc/validations/{validation_id}/approve',
      headers={
          'Authorization': 'Bearer YOUR_API_KEY',
          'Content-Type': 'application/json',
      },
      json={
          'reason': 'Revisión manual completada exitosamente - todos los documentos verificados'
      }
  )

  approved = response.json()
  print('Validación aprobada:', approved['status'])
  ```

  ```curl cURL theme={null}
  curl -X POST https://api.gu1.ai/api/kyc/validations/550e8400-e29b-41d4-a716-446655440000/approve \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "reason": "Revisión manual completada exitosamente - todos los documentos verificados"
    }'
  ```
</CodeGroup>

## Respuestas de Error

### Validación No Encontrada (404)

```json theme={null}
{
  "error": "NOT_FOUND",
  "message": "Validation not found"
}
```

### Estado Inválido (400)

La validación solo puede aprobarse si el estado del proveedor es `in_review` (el usuario completó la verificación y requiere revisión manual del equipo de compliance):

```json theme={null}
{
  "error": "INVALID_STATUS",
  "message": "Cannot manually approve. Current status is \"approved\". Manual approval is only allowed when status is \"in_review\" (validation requires manual review from compliance team)."
}
```

**¿Qué significa esto?**

* Si el proveedor ya aprobó (`approved`) o rechazó (`rejected`) la validación, no puedes anular esa decisión
* Si la validación está `cancelled`, no puedes aprobarla
* Si está `expired` o `abandoned`, tampoco se puede aprobar manualmente
* Si está `in_progress`, el usuario aún está llenando el formulario de verificación
* **Solo puedes aprobar** cuando el proveedor reporta que la validación está `in_review` (el usuario completó todos los pasos de verificación y requiere revisión manual del equipo de compliance)

### Razón Inválida (400)

La razón debe tener al menos 5 caracteres:

```json theme={null}
{
  "error": "VALIDATION_ERROR",
  "message": "Reason must be at least 5 characters"
}
```

## Notas Importantes

<AccordionGroup>
  <Accordion title="Sincronización Automática Antes de Aprobar">
    Antes de aprobar, el sistema sincroniza automáticamente con el proveedor KYC para obtener los datos de verificación más recientes. Esto asegura que tomes decisiones basadas en la información más actualizada.
  </Accordion>

  <Accordion title="Protección de Estados">
    No puedes aprobar validaciones que ya están `approved`, `rejected` o `cancelled`. Estos estados están protegidos para mantener la integridad de los datos.
  </Accordion>

  <Accordion title="Registro de Auditoría">
    La razón de aprobación se guarda tanto en los metadata de la validación como en los logs de auditoría. Esto es crítico para el cumplimiento y requisitos regulatorios.
  </Accordion>

  <Accordion title="Solo para Validaciones En Revisión">
    La aprobación manual solo está permitida cuando el proveedor reporta la validación como `in_review` (en revisión). Esto previene aprobar validaciones que:

    * El proveedor ya ha rechazado o completado
    * Aún no tienen datos de verificación completos (estado `pending` o `in_progress`)
    * El usuario aún está llenando el formulario (estado `in_progress`)
  </Accordion>

  <Accordion title="Timestamp de Verificación">
    Cuando se aprueba, la validación recibe un timestamp `verifiedAt` y se convierte en la validación actual para la entidad.
  </Accordion>
</AccordionGroup>

## Mejores Prácticas

* **Siempre proporciona razones detalladas**: Incluye detalles específicos sobre por qué la aprobación manual es necesaria
* **Documenta tu proceso**: Mantén documentación interna para los criterios de aprobación manual
* **Revisa datos frescos**: La sincronización automática asegura que veas los documentos y resultados biométricos más recientes
* **Usa con moderación**: La aprobación manual debe ser la excepción, no la regla
* **Capacita a tu equipo**: Asegúrate de que el personal entienda cuándo la aprobación manual es apropiada

## Próximos Pasos

<CardGroup cols={2}>
  <Card title="Rechazar Validación" icon="xmark" href="/es/use-cases/kyc/reject-validation">
    Rechazar manualmente una validación
  </Card>

  <Card title="Consultar Estado de Verificación" icon="magnifying-glass" href="/es/use-cases/kyc/check-status">
    Consultar resultados de validación
  </Card>
</CardGroup>
