🇪🇸 EspañolIntercambioExchange Internacional (FX)

Exchange Internacional (FX)

Realiza conversiones de divisa internacional entre USD y COP.

Todos los endpoints requieren autenticación con Authorization: Bearer [TOKEN] y x-api-key.


Visión General

¿Qué es Exchange?

El módulo Exchange en Colurs permite:

  • Obtener cotizaciones FX entre pares de monedas
  • Ejecutar movimientos transfronterizos con dispersión automática a cuentas bancarias
  • Calcular tasas de cambio con comisiones personalizadas por usuario

Comportamiento

  • Síncrono: Creación y consulta de cotizaciones (respuesta inmediata)
  • Asíncrono: Ejecución de movimientos transfronterizos (confirmación cuando el movimiento cambia de estado)

Monedas Soportadas

Pares disponibles

El sistema soporta varios pares de monedas en formato origen/destino (ej: usd/cop, cop/usd).

Moneda OrigenMonedas Destino
USDCOP
COPUSD

Restricciones

  • Monto mínimo: 50 USD o equivalente en la moneda origen
  • Horarios: Por defecto solo en horario hábil (lunes–viernes). Con off_market: true se permite operar 24/7

Flujo General

Obtener cotización FX

Solicita una cotización con POST /v2/exchange/quotes/. Válida 3 minutos.

(Opcional) Previsualizar

Consulta el detalle con GET /v2/exchange/quotes/{quote_uuid}/ o .../preview/.

Obtener cuenta bancaria

Usa GET /list_third_party_banks/?country=CO (o el país correspondiente) para el destino.

Iniciar movimiento

Ejecuta con POST /v2/exchange/initiate/ usando la cotización y la cuenta bancaria.

Recibir confirmación

El sistema notifica cuando el movimiento está completed y se realiza la dispersión automática.


Cotizaciones

Solicitar cotización FX

Autorización

Se requieren el header x-api-key y Authorization: Bearer <token>.

Endpoint

POST/v2/exchange/quotes/

Headers Requeridos

Content-Type: application/jsonAccept: application/jsonx-api-key: [API_KEY]Authorization: Bearer [ACCESS_TOKEN]

Request Body

CampoTipoRequeridoDescripción
currency_pairstringPar de monedas (ej: usd/cop)
source_amountdecimalMonto en moneda origen (uno de source_amount o destination_amount)
destination_amountdecimalMonto en moneda destino
typestringstatic_quote (default) o rolling_quote
off_marketbooleanPermitir operación 24/7 (default: false)

Respuesta

response.json
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"currency_pair": "usd/cop",
"source_currency": "usd",
"destination_currency": "cop",
"source_amount": 100.00,
"destination_amount": 407731.25,
"fx_rate": 4077.3125,
"status": "pending",
"is_valid": true,
"valid_until": "2026-02-03T10:03:00Z",
"created_at": 
"2026-02-03T10:00:00Z"}

Errores Posibles

CódigoErrorDescripción
400Bad RequestMonto mínimo no cumplido ($50 USD o equivalente)
400Bad RequestAmbos source_amount y destination_amount enviados
400Bad RequestMercado cerrado (fuera de horario y off_market=false)
502Bad GatewayError al procesar la cotización
⏱️
La cotización expira en 3 minutos. Solo la más reciente del par puede usarse para iniciar un movimiento.

Obtener cotización por UUID

Autorización

Se requieren el header x-api-key y Authorization: Bearer <token>.

Endpoint

GET/v2/exchange/quotes/{quote_uuid}/

Headers Requeridos

Content-Type: application/jsonAccept: application/jsonx-api-key: [API_KEY]Authorization: Bearer [ACCESS_TOKEN]

Respuesta

response.json
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"currency_pair": "usd/cop",
"source_amount": 100.00,
"destination_amount": 407731.25,
"status": "pending",
"is_valid": true,
"valid_until": 
"2026-02-03T10:03:00Z"}

Errores Posibles

CódigoErrorDescripción
404Not FoundCotización no encontrada

Listar cotizaciones

Autorización

Se requieren el header x-api-key y Authorization: Bearer <token>.

Endpoint

GET/v2/exchange/quotes/list/

Headers Requeridos

Content-Type: application/jsonAccept: application/jsonx-api-key: [API_KEY]Authorization: Bearer [ACCESS_TOKEN]

Respuesta

response.json
[
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "currency_pair": "usd/cop",
  "source_amount": 100.00,
  "destination_amount": 407731.25,
  "status": 
"pending"}
]

Última cotización válida

Autorización

Se requieren el header x-api-key y Authorization: Bearer <token>.

Endpoint

GET/v2/exchange/quotes/last/

Headers Requeridos

Content-Type: application/jsonAccept: application/jsonx-api-key: [API_KEY]Authorization: Bearer [ACCESS_TOKEN]

Respuesta

response.json
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"currency_pair": "usd/cop",
"source_amount": 100.00,
"destination_amount": 407731.25,
"is_valid": true
}

Pares de monedas disponibles

Autorización

Se requieren el header x-api-key y Authorization: Bearer <token>.

Endpoint

GET/v2/exchange/currency-pairs/

Headers Requeridos

Content-Type: application/jsonAccept: application/jsonx-api-key: [API_KEY]Authorization: Bearer [ACCESS_TOKEN]

Respuesta

response.json
{
"currency_pairs": [
  "usd/cop", "usd/mxn", "usd/pen", "usd/clp",
  "cop/usd", "cop/mxn", "cop/pen", "cop/clp",
  "mxn/cop", "mxn/usd", "mxn/pen", "mxn/clp",
  "pen/usd", "pen/mxn", "pen/cop", "pen/clp",
  "clp/usd", "clp/mxn", "clp/pen", 
"clp/cop"]
}

Movimientos Transfronterizos

Iniciar movimiento

Autorización

Se requieren el header x-api-key y Authorization: Bearer <token>.

Endpoint

POST/v2/exchange/initiate/

Headers Requeridos

Content-Type: application/jsonAccept: application/jsonx-api-key: [API_KEY]Authorization: Bearer [ACCESS_TOKEN]

Request Body

CampoTipoRequeridoDescripción
quote_idUUIDUUID de la cotización válida
source_account_idstringID de cuenta origen
destination_account_idstringID de cuenta destino
bank_account_idintID de cuenta bancaria del usuario (ThirdPartyBankAccount)
destination_descriptionstringDescripción del movimiento
external_idstringID externo para tracking

Respuesta

response.json
{
"sale_crypto_id": "123",
"quote_id": 
"456"}

Errores Posibles

CódigoErrorDescripción
400Bad RequestLa cotización ha expirado o ya fue utilizada
404Not FoundCotización no encontrada
502Bad GatewayError al procesar el movimiento

Ejecutar dispersión manual

Autorización

Se requieren el header x-api-key y Authorization: Bearer <token>.

Endpoint

POST/v2/exchange/execute/

Headers Requeridos

Content-Type: application/jsonAccept: application/jsonx-api-key: [API_KEY]Authorization: Bearer [ACCESS_TOKEN]
🔧
Uso interno o casos especiales. El flujo estándar realiza la dispersión automática al completarse el movimiento.

Estados del Movimiento

EstadoDescripción
initiatedMovimiento iniciado
processingEn proceso
completedCompletado → se crea dispersión automática
rejectedRechazado
failedFallido
returnedDevuelto
canceledCancelado