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

TipoDescripción
Send clásicoEnvío por username del destinatario. Validaciones completas (KYC, balance, límites).
Fast SendEnvío por ID de usuario. Opción de estimar costos antes. Canales con o sin comisión.
Envío múltipleEstimar 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

Se requieren el header 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

CampoTipoRequeridoDescripción
amountstringMonto
currencystringCOP, USD
to_userstringEmail o teléfono 10 dígitos
send_channelstringCOLURS
ipstringIP del cliente
latitudestringLatitud
longitudestringLongitud
is_for_quotebooleanfalse

Crear envío a usuario Colurs

Autorización

Se requieren el header 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

CampoTipoRequeridoDescripción
amountstringMonto
currencystringCOP, USD
to_userstringUsername destinatario
send_channelstringCOLURS
ipstringIP
latitudestringLatitud
longitudestringLongitud
is_for_quotebooleanfalse

Respuesta

response.json
{
"to_user": "+573001234567",
"from_user": "+573009876543",
"created": true,
"pk": 12345,
"date": "2026-02-03T10:00:00Z",
"amount": 50000.00
}

Errores Posibles

CódigoErrorDescripción
403Usuario bloqueado / sin KYCUsuario bloqueado para envíos o sin validación KYC
404Perfil no existePerfil origen o destino no existe
400BALANCE_INSUFFICIENTSaldo insuficiente
400LIMIT_BALANCEDestinatario excede límite de balance
400USER_DOES_NOT_SAMEIntento de auto-envío
400AMOUNT_NOT_ZEROMonto debe ser mayor a 0
400OPERATION_INVALIDOperación no permitida
400UNABLE_TO_CREATE_SENDError al crear envío
**Validaciones:** Usuario remitente activo, perfiles existentes, KYC completa, monto mayor a 0, balance suficiente, para COP límite de balance destinatario, no auto-envío.

Últimos usuarios a los que se envió

Últimos usuarios a los que se envió

Autorización

Se requieren el header 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

CampoTipoRequeridoDescripción
limitnumberEj. 5
type_sendstringEj. colurs

Respuesta

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

Se requieren el header 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

response.json
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

CanalDescripción
COLURSEnvío entre usuarios Colurs. Sin comisión (fee = 0).
DALEEnvío con comisiones aplicadas. Para COP puede incluir GMF (Gravamen a los Movimientos Financieros).

Estimar Fast Send

Autorización

Se requieren el header 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

CampoTipoRequeridoDescripción
amountdecimalMonto a enviar
currencystringCOP, USD
to_userintID del usuario destinatario (opcional)
send_channelstringCOLURS o DALE
is_for_quotebooleantrue 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

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

Se requieren el header 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

CampoTipoRequeridoDescripción
to_userintID del usuario destinatario
amountdecimalMonto a enviar
currencystringCódigo de moneda
send_channelstringCOLURS o DALE
ipstringIP del cliente
latitudestringLatitud GPS
longitudestringLongitud GPS
descriptionstringDescripció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

response.json
{
"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ódigoErrorDescripción
400BalanceInsufficientSaldo insuficiente
404ToUserNotExist / ProfileDoesNotExistDestinatario no existe
400ToUserDoesNotAllowBlankto_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

Se requieren el header 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

CampoTipoRequeridoDescripción
profilesarrayLista de objetos: profile_id, amount, send_channel
currencystringMoneda común para todos los envíos
is_for_quotebooleanSi es solo cotización

Respuesta

response.json
Objeto con el desglose total estimado (amount, fee_amount, fee_iva_amount, payed_amount según la lógica de múltiple send).
📊
Consulta los endpoints de **Balance** para verificar saldo antes de crear envíos. Para Send clásico en COP se valida además el límite de balance del destinatario.

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

Se requieren el header 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

CampoTipoRequeridoDescripción
currencystringMoneda común para todos los envíos (COP, USD, MXN)
profilesarrayLista de objetos: profile_id, amount, send_channel y, para dispersión a banco, third_party_bank_id
ipstringIP del cliente
latitudestringLatitud GPS
longitudestringLongitud GPS
is_for_quotebooleantrue = solo cotización, false = ejecutar dispersión

Respuesta

response.json
{
"result": {
  "message": 
"OK"}
}
⚠️
Para dispersar a **cuentas bancarias** cada item en 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.