Usuarios

Endpoints para registro, consulta y gestión de usuarios.


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

CampoTipoRequeridoDescripción
usernamestringDebe ser email válido para PANEL/API
emailstringCorreo electrónico (se convierte a minúsculas)
passwordstringContraseña (max 100 chars)
phonestringNúmero de teléfono sin código país
country_codestringCódigo de país (ej: 57 para Colombia)
first_namestringNombre (max 100 chars)
last_namestringApellido (max 100 chars)

Tipos de Persona

ValorTipoDescripción
1NATURALPersona natural
2JURIDICALPersona 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:

CampoDescripción
document_type_legalTipo de documento del representante
document_number_legalNúmero de documento del representante
name_legalNombre del representante
last_name_legalApellido del representante
date_birth_legalFecha de nacimiento del representante
gender_legalGé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

201 CREATED
{
  "id": 123,
  "username": "usuario@ejemplo.com",
  "email": "usuario@ejemplo.com",
  "first_name": "Juan",
  "last_name": "Pérez"
}

Errores

CódigoErrorDescripción
400InvalidReferrerCódigo de referido inválido
400ProfileAlreadyReferredEl perfil ya tiene un referido asignado
404ReferalCodeNotExistEl código de referido no existe
400TypePersonRequiredTipo de persona requerido
400InfoBusinessDoesNotExistInformación de negocio no existe
400IntegrationExceptionError 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ámetroTipoDescripción
litebooleanRetorna versión reducida del perfil

Respuesta

GET /user/
{
  "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

CampoTipoDescripción
idintID único del perfil
uuidstringUUID universal
usernamestringNombre de usuario (email)
emailstringCorreo electrónico
first_namestringNombre
last_namestringApellido
phonestringTeléfono
country_codestringCódigo de país
phone_verifiedboolean¿Teléfono verificado?
email_verifiedboolean¿Email verificado?
type_personstringNATURAL o JURIDICAL
levelintNivel de validación (0-5)
has_pinboolean¿Tiene PIN configurado?
has_otpboolean¿Tiene 2FA habilitado?
is_merchantboolean¿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

Editar datos personales
{
  "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

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

200 OK
{
  "message": "Profile edited successfully"
}

O para configuraciones específicas:

200 OK
{
  "result": "ok"
}

Errores

CódigoErrorDescripción
404UNABLE_TO_GET_PROFILEPerfil no encontrado
400UserToEditExistEl usuario a editar ya existe
400UserByEmailEmail ya en uso por otro usuario
400UserByPhoneExistTelé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-password

Headers

Authorization: Bearer [ACCESS_TOKEN]
Content-Type: application/json
x-api-key: [API_KEY]

Request

request.json
{
  "old_password": "ContraseñaActual123",
  "new_password": "NuevaContraseña456!",
  "new_password_confirmation": "NuevaContraseña456!"
}
CampoTipoRequeridoDescripción
old_passwordstringContraseña actual
new_passwordstringNueva contraseña
new_password_confirmationstringConfirmación de nueva contraseña

Validaciones

  • ✅ La contraseña actual debe ser correcta
  • new_password debe ser igual a new_password_confirmation
  • ✅ Rate limiting implementado para prevenir ataques de fuerza bruta

Respuesta

200 OK
{
  "message": "Password updates successfully."
}

Errores

CódigoErrorDescripción
429PasswordInTimeoutDemasiados intentos, espera antes de reintentar
400PasswordNotMatchContraseñ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

request.json
{
  "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.

NivelEstadoDescripción
0🔴 Sin validarUsuario recién creado
1🟡 PendienteDocumentos enviados, en revisión
2🟠 Con erroresDocumentos rechazados
5🟢 ValidadoVerificació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.