Usuarios
Endpoints para registro, consulta y gestión de usuarios.
Navegación Rápida
- 📝 Registro de Usuario
- 👤 Consultar Perfil
- ✏️ Editar Perfil
- 🔐 Cambiar Contraseña
- 🔑 Recuperar Contraseña
Registro de Usuario
Crea una nueva cuenta de usuario en la plataforma.
Este endpoint solo requiere API Key, no necesita autenticación previa.
Endpoint
POST /user/Headers
Content-Type: application/json
Accept: application/json
x-api-key: [API_KEY]Request Body
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
username | string | ✅ | Debe ser email válido para PANEL/API |
email | string | ✅ | Correo electrónico (se convierte a minúsculas) |
password | string | ✅ | Contraseña (max 100 chars) |
phone | string | ✅ | Número de teléfono sin código país |
country_code | string | ❌ | Código de país (ej: 57 para Colombia) |
first_name | string | ❌ | Nombre (max 100 chars) |
last_name | string | ❌ | Apellido (max 100 chars) |
Tipos de Persona
| Valor | Tipo | Descripción |
|---|---|---|
1 | NATURAL | Persona natural |
2 | JURIDICAL | Persona jurídica (empresa) |
Para personas jurídicas (type_person=2): El campo
country_company_incorporation es obligatorio.
Campos para Persona Jurídica
Si type_person=2, puedes enviar datos del representante legal:
| Campo | Descripción |
|---|---|
document_type_legal | Tipo de documento del representante |
document_number_legal | Número de documento del representante |
name_legal | Nombre del representante |
last_name_legal | Apellido del representante |
date_birth_legal | Fecha de nacimiento del representante |
gender_legal | Género del representante |
Validaciones
El sistema valida que no existan duplicados antes de crear el usuario.
- ✅ Email único — No puede existir otro usuario con el mismo email
- ✅ Username único — No puede existir otro usuario con el mismo username
- ✅ Teléfono único — No puede existir otro usuario con el mismo teléfono
- ✅ Documento único — No puede existir otro usuario con el mismo documento
- ✅ Username = Email — Para plataformas PANEL y API, el username debe ser un email válido
Respuesta Exitosa
{
"id": 123,
"username": "usuario@ejemplo.com",
"email": "usuario@ejemplo.com",
"first_name": "Juan",
"last_name": "Pérez"
}Errores
| Código | Error | Descripción |
|---|---|---|
400 | InvalidReferrer | Código de referido inválido |
400 | ProfileAlreadyReferred | El perfil ya tiene un referido asignado |
404 | ReferalCodeNotExist | El código de referido no existe |
400 | TypePersonRequired | Tipo de persona requerido |
400 | InfoBusinessDoesNotExist | Información de negocio no existe |
400 | IntegrationException | Error en integración externa |
Consultar Perfil
Obtiene la información del perfil del usuario autenticado.
Endpoint
GET /user/Headers
Authorization: Bearer [ACCESS_TOKEN]
x-api-key: [API_KEY]Parámetros Query
| Parámetro | Tipo | Descripción |
|---|---|---|
lite | boolean | Retorna versión reducida del perfil |
Respuesta
{
"id": 123,
"uuid": "abc-123-def-456",
"username": "usuario@ejemplo.com",
"email": "usuario@ejemplo.com",
"first_name": "Juan",
"last_name": "Pérez",
"alias": "jperez",
"phone": "3001234567",
"country": "CO",
"country_code": "57",
"city": "Bogotá",
"address": "Calle 123 #45-67",
"document_type": "CC",
"document_number": "1234567890",
"phone_verified": true,
"email_verified": true,
"type_person": "NATURAL",
"level": 5,
"document_status": "APPROVED",
"has_pin": true,
"has_otp": false,
"roles": ["user"],
"last_login": "2024-01-15T10:30:00Z",
"platform": "API"
}Campos del Perfil
| Campo | Tipo | Descripción |
|---|---|---|
id | int | ID único del perfil |
uuid | string | UUID universal |
username | string | Nombre de usuario (email) |
email | string | Correo electrónico |
first_name | string | Nombre |
last_name | string | Apellido |
phone | string | Teléfono |
country_code | string | Código de país |
phone_verified | boolean | ¿Teléfono verificado? |
email_verified | boolean | ¿Email verificado? |
type_person | string | NATURAL o JURIDICAL |
level | int | Nivel de validación (0-5) |
has_pin | boolean | ¿Tiene PIN configurado? |
has_otp | boolean | ¿Tiene 2FA habilitado? |
is_merchant | boolean | ¿Es comerciante? |
Editar Perfil
Actualiza la información del perfil del usuario autenticado.
Endpoint
POST /edit_profile/Headers
Authorization: Bearer [ACCESS_TOKEN]
Content-Type: application/json
x-api-key: [API_KEY]Campos Editables
{
"first_name": "Juan Carlos",
"last_name": "Pérez García",
"alias": "jcperez",
"phone": "3009876543",
"gender": "M",
"date_birth": "1990-01-15",
"date_expiration": "2030-01-15",
"profile_picture": "https://ejemplo.com/foto.jpg"
}Aplicar Código de Referido
{
"referal_code": "ABC123"
}Al aplicar un código de referido válido, se actualizan automáticamente: -
max_transaction_quantity - payment_methods_configuration -
payment_methods_configuration_reload
Respuesta Exitosa
{
"message": "Profile edited successfully"
}O para configuraciones específicas:
{
"result": "ok"
}Errores
| Código | Error | Descripción |
|---|---|---|
404 | UNABLE_TO_GET_PROFILE | Perfil no encontrado |
400 | UserToEditExist | El usuario a editar ya existe |
400 | UserByEmail | Email ya en uso por otro usuario |
400 | UserByPhoneExist | Teléfono ya en uso por otro usuario |
Cambiar Contraseña
Actualiza la contraseña del usuario autenticado.
Por seguridad, se requiere la contraseña actual y confirmar la nueva contraseña.
Endpoint
PUT /profile/change-passwordHeaders
Authorization: Bearer [ACCESS_TOKEN]
Content-Type: application/json
x-api-key: [API_KEY]Request
{
"old_password": "ContraseñaActual123",
"new_password": "NuevaContraseña456!",
"new_password_confirmation": "NuevaContraseña456!"
}| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
old_password | string | ✅ | Contraseña actual |
new_password | string | ✅ | Nueva contraseña |
new_password_confirmation | string | ✅ | Confirmación de nueva contraseña |
Validaciones
- ✅ La contraseña actual debe ser correcta
- ✅
new_passworddebe ser igual anew_password_confirmation - ✅ Rate limiting implementado para prevenir ataques de fuerza bruta
Respuesta
{
"message": "Password updates successfully."
}Errores
| Código | Error | Descripción |
|---|---|---|
429 | PasswordInTimeout | Demasiados intentos, espera antes de reintentar |
400 | PasswordNotMatch | Contraseña actual incorrecta |
Recuperar Contraseña
Proceso para recuperar acceso cuando el usuario olvidó su contraseña.
Este endpoint solo requiere API Key, no necesita autenticación.
Endpoint - Solicitar Recuperación
POST /password_recovery_request/Headers
Content-Type: application/json
x-api-key: [API_KEY]Request
{
"email": "usuario@ejemplo.com"
}Flujo de Recuperación
Paso 1: Solicitar recuperación
El usuario envía su email al endpoint /password_recovery_request/.
Paso 2: Recibir código
El sistema envía un código de verificación al email del usuario.
Paso 3: Validar código
El usuario ingresa el código recibido para validar su identidad.
Paso 4: Establecer nueva contraseña
El usuario puede establecer una nueva contraseña.
Niveles de Validación
El sistema maneja diferentes niveles de verificación de identidad:
El nivel determina qué operaciones puede realizar el usuario.
| Nivel | Estado | Descripción |
|---|---|---|
0 | 🔴 Sin validar | Usuario recién creado |
1 | 🟡 Pendiente | Documentos enviados, en revisión |
2 | 🟠 Con errores | Documentos rechazados |
5 | 🟢 Validado | Verificación completa |
Nivel 0 - Sin validar
Usuario nuevo, solo puede ver su perfil. No puede realizar transacciones.
Nivel 1 - Pendiente
Documentos enviados, esperando aprobación del equipo de compliance.
Nivel 2 - Con errores
Documentos rechazados por alguna razón. El usuario debe reenviar documentación.
Nivel 5 - Completamente validado
Acceso completo a todas las funcionalidades de la plataforma.
Colaboradores
Si el usuario es un colaborador (no un perfil regular), la respuesta del GET /user/ retorna datos del ColaboratorSerializer en lugar del ProfileSerializer.
Los colaboradores son usuarios con roles especiales que pertenecen a una organización.