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

# Creando Usuarios

> Guía paso a paso para crear y gestionar usuarios

## Visión General

Antes de que los usuarios puedan realizar transacciones ramp, deben ser registrados en KillB con información KYC apropiada. Esta guía cubre la creación de usuarios individuales (PERSON) y empresariales (COMPANY).

<Info>
  Todos los usuarios comienzan en nivel KYC **L0** o **L1** y pueden actualizarse enviando documentación adicional.
</Info>

## Prerrequisitos

* Token de acceso válido de `/api/v2/auth/login`
* Información del usuario para enviar
* Detalles de ID del gobierno

## Creando un Usuario Persona

### Ejemplo Básico

```bash theme={null}
POST /api/v2/users
```

<CodeGroup>
  ```json Solicitud theme={null}
  {
    "type": "PERSON",
    "externalId": "user-12345",
    "data": {
      "firstName": "Juan",
      "lastName": "García",
      "email": "juan.garcia@example.com",
      "phone": "+573001234567",
      "dateOfBirth": "1990-05-15",
      "address": {
        "street1": "Calle 123 #45-67",
        "city": "Bogotá",
        "state": "Cundinamarca",
        "zipCode": "110111",
        "countryCode": "CO"
      },
      "document": {
        "type": "NUIP",
        "number": "1234567890",
        "issuedCountryCode": "CO"
      }
    }
  }
  ```

  ```javascript Node.js theme={null}
  const createUser = async (userData) => {
    const response = await fetch('https://sandbox.killb.app/api/v2/users', {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${accessToken}`,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        type: 'PERSON',
        externalId: userData.id,
        data: {
          firstName: userData.firstName,
          lastName: userData.lastName,
          email: userData.email,
          phone: userData.phone,
          dateOfBirth: userData.dateOfBirth,
          address: {
            street1: userData.address.street,
            city: userData.address.city,
            state: userData.address.state,
            zipCode: userData.address.zipCode,
            countryCode: userData.address.country
          },
          document: {
            type: userData.document.type,
            number: userData.document.number,
            issuedCountryCode: userData.document.country
          }
        }
      })
    });
    
    const user = await response.json();
    return user;
  };
  ```
</CodeGroup>

## Validación

Valida datos antes del envío:

```javascript theme={null}
const validateUserData = (data) => {
  const errors = [];
  
  // Formato de email
  if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(data.email)) {
    errors.push('Formato de email inválido');
  }
  
  // Formato de teléfono (E.164)
  if (!/^\+[1-9]\d{10,14}$/.test(data.phone)) {
    errors.push('Teléfono debe estar en formato: +[código país][número]');
  }
  
  // Fecha de nacimiento (18+ años)
  const dob = new Date(data.dateOfBirth);
  const age = (Date.now() - dob.getTime()) / (365.25 * 24 * 60 * 60 * 1000);
  if (age < 18) {
    errors.push('Usuario debe tener 18 años o más');
  }
  
  return errors;
};
```

## Próximos Pasos Después de Creación

<Steps>
  <Step title="Almacenar ID del Usuario">
    Guarda el `id` retornado en tu base de datos mapeado a tu `externalId`
  </Step>

  <Step title="Verificar Estado KYC">
    Monitorea el campo `status`
  </Step>

  <Step title="Iniciar/Continuar Verificación">
    Si el `status` es `PENDING`, redirige al usuario a `complianceUrl` para completar la verificación
  </Step>

  <Step title="Crear Cuentas">
    Agrega cuentas bancarias o billeteras para este usuario
  </Step>
</Steps>

<CardGroup cols={2}>
  <Card title="Subir Documentos" icon="upload" href="/es/guides/users/upload-documents">
    Enviar imágenes de ID y documentos de prueba
  </Card>

  <Card title="Gestionar Usuarios" icon="users-gear" href="/es/guides/users/manage-users">
    Consultar, actualizar y eliminar usuarios
  </Card>

  <Card title="Referencia API" icon="code" href="/api-reference/endpoint/users-create">
    Documentación completa de la API de Usuarios
  </Card>
</CardGroup>
