User-to-user transfer
Transfer balance instantly between Colurs user wallets.
All endpoints require authentication with Authorization: Bearer [TOKEN] and x-api-key.
Overview
Transfer types
| Type | Description |
|---|---|
| Standard Send | Transfer by recipient username. Full validations (KYC, balance, limits). |
| Fast Send | Transfer by user ID. Option to estimate costs beforehand. Channels with or without fees. |
| Multiple send | Estimate costs to send to multiple recipients at once. |
Standard send
Create a transfer by specifying the recipient username. The system validates KYC, sufficient balance, and limits (for COP).
Flow
Validate recipient
Recipient is identified by to_user (username). Must exist and be active.
Create transfer
POST /send/ with amount, currency, and optional description.
Internal process
(amount + fees) is debited from sender, amount is credited to recipient, balance limit is updated when applicable, and a notification is sent.
Estimate transfer (preview)
Authorizations
x-api-key and Authorization: Bearer <token> headers are required.Endpoint
POSThttps://dev.backend.colurs.co/send/estimate/user/Required Headers
Content-Type: application/jsonAccept: application/jsonx-api-key: [API_KEY]Authorization: Bearer [ACCESS_TOKEN]Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| amount | string | Amount | |
| currency | string | COP, USD | |
| to_user | string | Email or 10-digit phone | |
| send_channel | string | COLURS | |
| ip | string | Client IP | |
| latitude | string | Latitude | |
| longitude | string | Longitude | |
| is_for_quote | boolean | false |
Create transfer to Colurs user
Authorizations
x-api-key and Authorization: Bearer <token> headers are required.Endpoint
POSThttps://dev.backend.colurs.co/send/user/Required Headers
Content-Type: application/jsonAccept: application/jsonx-api-key: [API_KEY]Authorization: Bearer [ACCESS_TOKEN]Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| amount | string | Amount | |
| currency | string | COP, USD | |
| to_user | string | Recipient username | |
| send_channel | string | COLURS | |
| ip | string | IP | |
| latitude | string | Latitude | |
| longitude | string | Longitude | |
| is_for_quote | boolean | false |
Response
{
"to_user": "+573001234567",
"from_user": "+573009876543",
"created": true,
"pk": 12345,
"date": "2026-02-03T10:00:00Z",
"amount": 50000.00
}Possible Errors
| Code | Error | Description |
|---|---|---|
| 403 | User blocked / no KYC | User blocked for transfers or without KYC verification |
| 404 | Profile does not exist | Source or destination profile does not exist |
| 400 | BALANCE_INSUFFICIENT | Insufficient balance |
| 400 | LIMIT_BALANCE | Recipient exceeds balance limit |
| 400 | USER_DOES_NOT_SAME | Self-transfer attempt |
| 400 | AMOUNT_NOT_ZERO | Amount must be greater than 0 |
| 400 | OPERATION_INVALID | Operation not allowed |
| 400 | UNABLE_TO_CREATE_SEND | Failed to create transfer |
Last users sent to
Last users sent to
Authorizations
x-api-key and Authorization: Bearer <token> headers are required.Endpoint
GEThttps://dev.backend.colurs.co/send/last_users_sended/Required Headers
Content-Type: application/jsonAccept: application/jsonx-api-key: [API_KEY]Authorization: Bearer [ACCESS_TOKEN]Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| limit | number | Ej. 5 | |
| type_send | string | Ej. colurs |
Response
{
"to_user": "+573001234567",
"from_user": "+573009876543",
"created": true,
"pk": 12345,
"date": "2026-02-03T10:00:00Z",
"amount": 50000.00
}Send to bank account (withdrawal)
Estimate: POST /send/estimate/user/ with send_channel: βDALEβ, amount, currency, ip, latitude, longitude, is_for_quote: false. Execute: POST /create/third_party_withdraw/ (see Bank withdrawals).
Send USD (deposit)
Start: POST /usd/owner/payment - Body: deposit_option, currency (USD), amount, ip, latitude, longitude. Confirm: POST /usd/user/deposit - Body: check_id, account_id, withdraw_id. List accounts: GET /usd/user/account.
List transfers
Authorizations
x-api-key and Authorization: Bearer <token> headers are required.Endpoint
GEThttps://dev.backend.colurs.co/send/Required Headers
Content-Type: application/jsonAccept: application/jsonx-api-key: [API_KEY]Authorization: Bearer [ACCESS_TOKEN]Response
Transfer list (format according to ListSend serializer).Fast Send
Transfer by user ID with option to estimate costs before execution. Supports channels with and without fees.
Transfer channels
| Channel | Description |
|---|---|
| COLURS | Transfer between Colurs users. No fee (fee = 0). |
| DALE | Transfer with applicable fees. For COP, may include GMF (financial transaction tax). |
Estimate Fast Send
Authorizations
x-api-key and Authorization: Bearer <token> headers are required.Endpoint
POSThttps://dev.backend.colurs.co/send/estimate/user/Required Headers
Content-Type: application/jsonAccept: application/jsonx-api-key: [API_KEY]Authorization: Bearer [ACCESS_TOKEN]Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| amount | decimal | Amount to send | |
| currency | string | COP, USD | |
| to_user | int | Recipient user ID (optional) | |
| send_channel | string | COLURS or DALE | |
| is_for_quote | boolean | true for quote only, false to execute later |
cURL Example
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
}'Response
{
"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"}
}For **COLURS** channel: fee_amount and fee_iva_amount are 0, payed_amount = amount. For COP in other channels, gmf_amount may apply.
Execute Fast Send
Authorizations
x-api-key and Authorization: Bearer <token> headers are required.Endpoint
POSThttps://dev.backend.colurs.co/send/user/Required Headers
Content-Type: application/jsonAccept: application/jsonx-api-key: [API_KEY]Authorization: Bearer [ACCESS_TOKEN]Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| to_user | int | Recipient user ID | |
| amount | decimal | Amount to send | |
| currency | string | Currency code | |
| send_channel | string | COLURS or DALE | |
| ip | string | Client IP | |
| latitude | string | Latitude GPS | |
| longitude | string | Longitude GPS | |
| description | string | Transfer description |
cURL Example
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"
}'Response
{
"message": "OK",
"data": {
"id": 12345,
"currency": "COP",
"fee_amount": 1000.00,
"fee_iva_amount": 190.00,
"amount": 50000.00,
"payed_amount": 51190.00
}
}Possible Errors
| Code | Error | Description |
|---|---|---|
| 400 | BalanceInsufficient | Insufficient balance |
| 404 | ToUserNotExist / ProfileDoesNotExist | Recipient does not exist |
| 400 | ToUserDoesNotAllowBlank | to_user is required on execution |
| 404 | - | Fee or configuration not found |
If channel is **COLURS**, balance transfers instantly and recipient receives a push notification.
Multiple send (estimate)
Estimate multiple send
Authorizations
x-api-key and Authorization: Bearer <token> headers are required.Endpoint
POSThttps://dev.backend.colurs.co/send/estimate/multiple-user/Required Headers
Content-Type: application/jsonAccept: application/jsonx-api-key: [API_KEY]Authorization: Bearer [ACCESS_TOKEN]Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| profiles | array | List of objects: profile_id, amount, send_channel | |
| currency | string | Common currency for all sends | |
| is_for_quote | boolean | Whether it is quote-only |
Response
Object with estimated total breakdown (amount, fee_amount, fee_iva_amount, payed_amount according to multiple-send logic).Multiple send (payout to bank accounts)
Executes money transfer to multiple bank accounts in one request. Each item in profiles indicates recipient (by profile_id or third_party_bank_id), amount, and channel (e.g. associated bank account). Use POST /send/estimate/multiple-user/ first to quote, then this endpoint to execute.
Payout to multiple accounts (multiple-user)
Authorizations
x-api-key and Authorization: Bearer <token> headers are required.Endpoint
POSThttps://dev.backend.colurs.co/send/multiple-user/Required Headers
Content-Type: application/jsonAccept: application/jsonx-api-key: [API_KEY]Authorization: Bearer [ACCESS_TOKEN]Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| currency | string | Common currency for all sends (COP, USD, MXN) | |
| profiles | array | List of objects: profile_id, amount, send_channel and, for bank payout, third_party_bank_id | |
| ip | string | Client IP | |
| latitude | string | GPS latitude | |
| longitude | string | GPS longitude | |
| is_for_quote | boolean | true = quote only, false = execute payout |
Response
{
"result": {
"message":
"OK"}
}profiles must include send_channel (bank code) and third_party_bank_id (account ID created in [Bank withdrawals](/en/pagos/retiros-bancarios)). Use is_for_quote: true to get breakdown without execution.