Envío entre usuarios
Transfiere saldo de forma instantánea entre wallets de usuarios Colurs.
Todos los endpoints requieren autenticación con Authorization: Bearer [TOKEN] y x-api-key.
Visión General
Tipos de envío
| Tipo | Descripción |
|---|---|
| Send clásico | Envío por username del destinatario. Validaciones completas (KYC, balance, límites). |
| Fast Send | Envío por ID de usuario. Opción de estimar costos antes. Canales con o sin comisión. |
| Envío múltiple | Estimar costos para enviar a varios destinatarios a la vez. |
Send clásico
Crear un envío indicando el username del destinatario. El sistema valida KYC, balance suficiente y límites (para COP).
Flujo
Validar destinatario
El destinatario se identifica por to_user (username). Debe existir y estar activo.
Crear envío
POST /send/ con monto, moneda y descripción opcional.
Proceso interno
Se descuenta (monto + fees) del remitente, se acredita el monto al destinatario, se actualiza límite de balance si aplica y se envía notificación.
Estimar envío (preview)
Autorización
x-api-key y Authorization: Bearer <token>.Endpoint
POSThttps://dev.backend.colurs.co/send/estimate/user/Headers Requeridos
Content-Type: application/jsonAccept: application/jsonx-api-key: [API_KEY]Authorization: Bearer [ACCESS_TOKEN]Request Body
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
| amount | string | Monto | |
| currency | string | COP, USD | |
| to_user | string | Email o teléfono 10 dígitos | |
| send_channel | string | COLURS | |
| ip | string | IP del cliente | |
| latitude | string | Latitud | |
| longitude | string | Longitud | |
| is_for_quote | boolean | false |
Crear envío a usuario Colurs
Autorización
x-api-key y Authorization: Bearer <token>.Endpoint
POSThttps://dev.backend.colurs.co/send/user/Headers Requeridos
Content-Type: application/jsonAccept: application/jsonx-api-key: [API_KEY]Authorization: Bearer [ACCESS_TOKEN]Request Body
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
| amount | string | Monto | |
| currency | string | COP, USD | |
| to_user | string | Username destinatario | |
| send_channel | string | COLURS | |
| ip | string | IP | |
| latitude | string | Latitud | |
| longitude | string | Longitud | |
| is_for_quote | boolean | false |
Respuesta
{
"to_user": "+573001234567",
"from_user": "+573009876543",
"created": true,
"pk": 12345,
"date": "2026-02-03T10:00:00Z",
"amount": 50000.00
}Errores Posibles
| Código | Error | Descripción |
|---|---|---|
| 403 | Usuario bloqueado / sin KYC | Usuario bloqueado para envíos o sin validación KYC |
| 404 | Perfil no existe | Perfil origen o destino no existe |
| 400 | BALANCE_INSUFFICIENT | Saldo insuficiente |
| 400 | LIMIT_BALANCE | Destinatario excede límite de balance |
| 400 | USER_DOES_NOT_SAME | Intento de auto-envío |
| 400 | AMOUNT_NOT_ZERO | Monto debe ser mayor a 0 |
| 400 | OPERATION_INVALID | Operación no permitida |
| 400 | UNABLE_TO_CREATE_SEND | Error al crear envío |
Últimos usuarios a los que se envió
Últimos usuarios a los que se envió
Autorización
x-api-key y Authorization: Bearer <token>.Endpoint
GEThttps://dev.backend.colurs.co/send/last_users_sended/Headers Requeridos
Content-Type: application/jsonAccept: application/jsonx-api-key: [API_KEY]Authorization: Bearer [ACCESS_TOKEN]Request Body
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
| limit | number | Ej. 5 | |
| type_send | string | Ej. colurs |
Respuesta
{
"to_user": "+573001234567",
"from_user": "+573009876543",
"created": true,
"pk": 12345,
"date": "2026-02-03T10:00:00Z",
"amount": 50000.00
}Enviar a cuenta bancaria (retiro)
Estimar: POST /send/estimate/user/ con send_channel: “DALE”, amount, currency, ip, latitude, longitude, is_for_quote: false. Ejecutar: POST /create/third_party_withdraw/ (ver Retiros Bancarios).
Enviar USD (depósito)
Iniciar: POST /usd/owner/payment — Body: deposit_option, currency (USD), amount, ip, latitude, longitude. Confirmar: POST /usd/user/deposit — Body: check_id, account_id, withdraw_id. Listar cuentas: GET /usd/user/account.
Listar envíos
Autorización
x-api-key y Authorization: Bearer <token>.Endpoint
GEThttps://dev.backend.colurs.co/send/Headers Requeridos
Content-Type: application/jsonAccept: application/jsonx-api-key: [API_KEY]Authorization: Bearer [ACCESS_TOKEN]Respuesta
Lista de envíos (formato según serializer ListSend).Fast Send (envío rápido)
Envío por ID de usuario con opción de estimar costos antes de ejecutar. Soporta canales con y sin comisión.
Canales de envío
| Canal | Descripción |
|---|---|
| COLURS | Envío entre usuarios Colurs. Sin comisión (fee = 0). |
| DALE | Envío con comisiones aplicadas. Para COP puede incluir GMF (Gravamen a los Movimientos Financieros). |
Estimar Fast Send
Autorización
x-api-key y Authorization: Bearer <token>.Endpoint
POSThttps://dev.backend.colurs.co/send/estimate/user/Headers Requeridos
Content-Type: application/jsonAccept: application/jsonx-api-key: [API_KEY]Authorization: Bearer [ACCESS_TOKEN]Request Body
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
| amount | decimal | Monto a enviar | |
| currency | string | COP, USD | |
| to_user | int | ID del usuario destinatario (opcional) | |
| send_channel | string | COLURS o DALE | |
| is_for_quote | boolean | true solo cotización, false para ejecutar después |
Ejemplo cURL
curl -X POST "https://dev.backend.colurs.co/send/estimate/user/" \
-H "Authorization: Bearer [TOKEN]" \
-H "x-api-key: [API_KEY]" \
-H "Content-Type: application/json" \
-d '{
"amount": 50000,
"currency": "COP",
"send_channel": "COLURS",
"is_for_quote": true
}'Respuesta
{
"result": {
"amount": 50000.00,
"fee_amount": 1000.00,
"fee_iva_amount": 190.00,
"payed_amount": 51190.00,
"gmf_amount": 200.00,
"full_name":
"Juan Pérez"}
}Para canal **COLURS**: fee_amount y fee_iva_amount son 0, payed_amount = amount. Para COP en otros canales puede incluirse gmf_amount.
Ejecutar Fast Send
Autorización
x-api-key y Authorization: Bearer <token>.Endpoint
POSThttps://dev.backend.colurs.co/send/user/Headers Requeridos
Content-Type: application/jsonAccept: application/jsonx-api-key: [API_KEY]Authorization: Bearer [ACCESS_TOKEN]Request Body
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
| to_user | int | ID del usuario destinatario | |
| amount | decimal | Monto a enviar | |
| currency | string | Código de moneda | |
| send_channel | string | COLURS o DALE | |
| ip | string | IP del cliente | |
| latitude | string | Latitud GPS | |
| longitude | string | Longitud GPS | |
| description | string | Descripción del envío |
Ejemplo cURL
curl -X POST "https://dev.backend.colurs.co/send/user/" \
-H "Authorization: Bearer [TOKEN]" \
-H "x-api-key: [API_KEY]" \
-H "Content-Type: application/json" \
-d '{
"to_user": 42,
"amount": 50000,
"currency": "COP",
"send_channel": "COLURS",
"ip": "192.168.1.1"
}'Respuesta
{
"message": "OK",
"data": {
"id": 12345,
"currency": "COP",
"fee_amount": 1000.00,
"fee_iva_amount": 190.00,
"amount": 50000.00,
"payed_amount": 51190.00
}
}Errores Posibles
| Código | Error | Descripción |
|---|---|---|
| 400 | BalanceInsufficient | Saldo insuficiente |
| 404 | ToUserNotExist / ProfileDoesNotExist | Destinatario no existe |
| 400 | ToUserDoesNotAllowBlank | to_user requerido en ejecución |
| 404 | - | Fee o configuración no encontrada |
Si el canal es **COLURS**, el saldo se transfiere al instante y el destinatario recibe una notificación push.
Envío múltiple (estimación)
Estimar envío múltiple
Autorización
x-api-key y Authorization: Bearer <token>.Endpoint
POSThttps://dev.backend.colurs.co/send/estimate/multiple-user/Headers Requeridos
Content-Type: application/jsonAccept: application/jsonx-api-key: [API_KEY]Authorization: Bearer [ACCESS_TOKEN]Request Body
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
| profiles | array | Lista de objetos: profile_id, amount, send_channel | |
| currency | string | Moneda común para todos los envíos | |
| is_for_quote | boolean | Si es solo cotización |
Respuesta
Objeto con el desglose total estimado (amount, fee_amount, fee_iva_amount, payed_amount según la lógica de múltiple send).Envío múltiple (dispersar a cuentas bancarias)
Ejecuta el envío de dinero a múltiples cuentas bancarias en una sola petición. Cada elemento en profiles indica el destinatario (por profile_id o por third_party_bank_id), el monto y el canal (ej. cuenta bancaria asociada). Usa primero POST /send/estimate/multiple-user/ para cotizar y luego este endpoint para ejecutar.
Dispersar a múltiples cuentas (multiple-user)
Autorización
x-api-key y Authorization: Bearer <token>.Endpoint
POSThttps://dev.backend.colurs.co/send/multiple-user/Headers Requeridos
Content-Type: application/jsonAccept: application/jsonx-api-key: [API_KEY]Authorization: Bearer [ACCESS_TOKEN]Request Body
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
| currency | string | Moneda común para todos los envíos (COP, USD, MXN) | |
| profiles | array | Lista de objetos: profile_id, amount, send_channel y, para dispersión a banco, third_party_bank_id | |
| ip | string | IP del cliente | |
| latitude | string | Latitud GPS | |
| longitude | string | Longitud GPS | |
| is_for_quote | boolean | true = solo cotización, false = ejecutar dispersión |
Respuesta
{
"result": {
"message":
"OK"}
}profiles debe incluir send_channel (código del banco) y third_party_bank_id (ID de la cuenta creada en [Retiros Bancarios](/es/pagos/retiros-bancarios)). Usa is_for_quote: true para obtener el desglose sin ejecutar.