Volver a Documentacion

Guía de Órdenes FX

Guía completa para ejecutar órdenes de cambio de divisas a través de la API de ARi.


Descripción General

Use la API de Órdenes FX para intercambiar fondos entre diferentes monedas. Para transferencias en la misma moneda, consulte la Guía de Transferencias.

Tipo de Operación Caso de Uso Endpoint API
Órdenes FX Intercambio entre diferentes monedas /api/v1/fxorder

Inicio Rápido

Requisitos Previos

Antes de ejecutar cualquier orden FX, asegúrese de tener:

  1. Credenciales API - Obtenga su clave de suscripción desde el Portal de Desarrolladores
  2. Wallet con Fondos - Asegúrese de que su wallet de origen tenga saldo suficiente
  3. IBANs de Cuenta - Números de cuenta de origen y destino

Flujos FX Soportados

ARi soporta todos los escenarios de cambio de divisas, incluyendo FX de extremo a extremo desde cuentas externas.

Flujo Origen Destino Descripción
FX Extremo a Extremo IBAN Externo IBAN Externo Corredor FX completo
FX Wallet + Pago Wallet ARi IBAN Externo Wallet prefinanciado a externo
FX Interno Wallet ARi Wallet ARi Entre wallets ARi
+---------------------------------------------------------------+
|                    FLUJOS FX SOPORTADOS                       |
+---------------------------------------------------------------+

  Flujo 1: FX EXTREMO A EXTREMO (Externo → Externo)
  ┌──────────────────┐      ┌──────────┐      ┌──────────────────┐
  │   IBAN Externo   │ ──>  │   ARi    │ ──>  │   IBAN Externo   │
  │   Moneda A       │      │  Wallet  │      │    Moneda B      │
  │  (Cliente paga)  │      │   (FX)   │      │   (ARi paga)     │
  └──────────────────┘      └──────────┘      └──────────────────┘

  Flujo 2: FX WALLET + PAGO (Wallet ARi → Externo)
  ┌──────────────────┐         ┌──────────────────┐
  │   Wallet ARi     │ ──FX──> │   IBAN Externo   │
  │   Moneda A       │         │    Moneda B      │
  │  (Prefinanciado) │         │   (ARi paga)     │
  └──────────────────┘         └──────────────────┘

  Flujo 3: FX INTERNO (Wallet ARi → Wallet ARi)
  ┌──────────────────┐         ┌──────────────────┐
  │   Wallet ARi     │ ──FX──> │   Wallet ARi     │
  │   Moneda A       │         │    Moneda B      │
  │  (Prefinanciado) │         │    (Recibe)      │
  └──────────────────┘         └──────────────────┘

+---------------------------------------------------------------+

Escenario 1: FX con Bloqueo de Tasa

Use el bloqueo de tasa cuando necesite garantizar el tipo de cambio para su orden.

Paso 1: Obtener Tipo de Cambio (Bloquear Tasa)

Solicite el tipo de cambio actual y bloquéelo por 60 segundos.

         +--------------------+
         | OBTENER TIPO CAMBIO|
         +--------------------+
                   |
                   v
+------------------------------------------+
| POST /api/v1/fxorder/getQuote            |
| Body: {                                  |
|   "source_currency": "CRC",              |
|   "destination_currency": "USD",         |
|   "amount": 512750,                      |
|   "lock_rate": true                      |
| }                                        |
+------------------------------------------+
                   |
                   v
+------------------------------------------+
| Respuesta:                               |
| {                                        |
|   "quote_id": "fxq_abc123...",           |
|   "rate": "512.750000",                  |
|   "expires_at": "2026-02-03T10:35:00Z",  |
|   "converted_amount": "1000.00"          |
| }                                        |
+------------------------------------------+

Opciones de Bloqueo de Tasa:

Opción Comportamiento
lock_rate: false Obtener tasa informativa (puede cambiar antes de la orden)
lock_rate: true Bloquear tasa por 60 segundos, recibir quote_id

Paso 2: Ejecutar Orden FX

Envíe su orden de cambio de divisas. Use el quote_id del Paso 1 para garantizar su tasa bloqueada.

         +--------------------+
         | EJECUTAR ORDEN FX  |
         +--------------------+
                   |
                   v
+------------------------------------------+
| POST /api/v1/fxorder/createOrder         |
| Headers:                                 |
|   Idempotency-Key: unique-request-id     |
|                                          |
| Body: {                                  |
|   "origin": {                            |
|     "iban": "CR27409819882707497149"  |
|   },                                     |
|   "destination": {                       |
|     "iban": "CR11409860774530115159"  |
|   },                                     |
|   "parameters": {                        |
|     "amount": "512750",                  |
|     "origin_currency": "CRC",            |
|     "destination_currency": "USD",       |
|     "quote_id": "fxq_abc123...",         |
|     "description": "Cambio de CRC a USD" |
|   }                                      |
| }                                        |
+------------------------------------------+
                   |
                   v
+------------------------------------------+
| Respuesta (Inmediata):                   |
| {                                        |
|   "reference_code": "FXT-20260203-123456"|
|   "status": "filled",                    |
|   "rate": "512.750000",                  |
|   "converted_amount": "1000.00"          |
| }                                        |
+------------------------------------------+

Flujo Completo de Orden FX

+-------------------------------------------------------------------+
|                 ORDEN FX CON BLOQUEO DE TASA                      |
+-------------------------------------------------------------------+
|                                                                   |
|  [Tu App]                                                         |
|      |                                                            |
|      | 1. Solicitar cotización con lock_rate=true                 |
|      |    POST /api/v1/fxorder/getQuote                           |
|      v                                                            |
|  [API ARi]                                                        |
|      |                                                            |
|      | 2. Retorna tasa bloqueada (válida 60 seg)                  |
|      |    quote_id + rate + expires_at                            |
|      v                                                            |
|  [Tu App]                                                         |
|      |                                                            |
|      | 3. Usuario confirma orden                                  |
|      |                                                            |
|      | 4. Enviar orden con quote_id                               |
|      |    POST /api/v1/fxorder/createOrder                        |
|      v                                                            |
|  [API ARi]                                                        |
|      |                                                            |
|      | 5. Valida cotización (no expirada, no usada)               |
|      | 6. Ejecuta a tasa garantizada                              |
|      | 7. Retorna orden completada                                |
|      v                                                            |
|  [Tu App]                                                         |
|      |                                                            |
|      | 8. Mostrar confirmación al usuario                         |
|                                                                   |
+-------------------------------------------------------------------+

Escenario 2: FX Sin Bloqueo de Tasa

Para ejecución inmediata a tasa de mercado actual (sin bloqueo de cotización):

+------------------------------------------+
| POST /api/v1/fxorder/createOrder         |
| Headers:                                 |
|   Idempotency-Key: unique-request-id     |
|                                          |
| Body: {                                  |
|   "origin": {                            |
|     "iban": "CR27409819882707497149"  |
|   },                                     |
|   "destination": {                       |
|     "iban": "CR11409860774530115159"  |
|   },                                     |
|   "parameters": {                        |
|     "amount": "256375",                  |
|     "origin_currency": "CRC",            |
|     "destination_currency": "USD",       |
|     "description": "Cambio rapido CRC a USD" |
|   }                                      |
| }                                        |
+------------------------------------------+

Nota: Sin un quote_id, se aplica la tasa de mercado actual al momento de ejecución.


Escenario 3: FX Extremo a Extremo

Cambie divisas desde una cuenta bancaria externa y envíe a otra cuenta bancaria externa. Este es el corredor FX principal.

+------------------------------------------+
| POST /api/v1/fxorder/createOrder         |
| Headers:                                 |
|   Idempotency-Key: unique-request-id     |
|                                          |
| Body: {                                  |
|   "origin": {                            |
|     "iban": "CR27015100019876543210", |
|     "iban_holder": "Mario Herrera"       |
|   },                                     |
|   "destination": {                       |
|     "iban": "CR67010700012345678901", |
|     "iban_holder": "Mario Herrera"       |
|   },                                     |
|   "parameters": {                        |
|     "amount": "512750",                  |
|     "origin_currency": "CRC",            |
|     "destination_currency": "USD",       |
|     "quote_id": "fxq_abc123...",         |
|     "description": "FX extremo a extremo"|
|   }                                      |
| }                                        |
+------------------------------------------+

Escenario 4: FX con Pago Externo

Cambie divisas desde un wallet ARi prefinanciado y envíe a una cuenta bancaria externa.

+------------------------------------------+
| POST /api/v1/fxorder/createOrder         |
| Headers:                                 |
|   Idempotency-Key: unique-request-id     |
|                                          |
| Body: {                                  |
|   "origin": {                            |
|     "iban": "CR27409819882707497149"  |
|   },                                     |
|   "destination": {                       |
|     "iban": "CR67010700012345678901", |
|     "iban_holder": "Mario Herrera"       |
|   },                                     |
|   "parameters": {                        |
|     "amount": "512750",                  |
|     "origin_currency": "CRC",            |
|     "destination_currency": "USD",       |
|     "quote_id": "fxq_abc123...",         |
|     "description": "Pago FX"             |
|   }                                      |
| }                                        |
+------------------------------------------+

Pares de Monedas Soportados

Desde Hacia Descripción
USD CRC Dólar Estadounidense a Colón Costarricense
CRC USD Colón Costarricense a Dólar Estadounidense
USD EUR Dólar Estadounidense a Euro
EUR USD Euro a Dólar Estadounidense
EUR CRC Euro a Colón Costarricense
CRC EUR Colón Costarricense a Euro

Headers Requeridos

Header Requerido Descripción
Ocp-Apim-Subscription-Key Su clave de suscripción API
Idempotency-Key Sí (operaciones de creación) ID único para prevenir órdenes duplicadas
Content-Type application/json

Sobre las Claves de Idempotencia

El header Idempotency-Key previene órdenes duplicadas. Si reintenta una solicitud con la misma clave, recibirá la respuesta original en lugar de crear un duplicado.

Mejores prácticas:
- Use UUID v4 para cada orden única
- Guarde la clave hasta recibir una respuesta final
- Reintente con la MISMA clave si ocurren problemas de red

Escenarios Soportados

Escenario Órdenes FX Transferencias
IBAN Externo → IBAN Externo No
Wallet ARi → IBAN Externo
Wallet ARi → Wallet ARi
IBAN Externo → Wallet ARi

Estado de Orden

Formato del Código de Referencia

Cuando crea una orden FX, recibe un reference_code en el formato:

FXT-YYYYMMDD-NNNNNN
Componente Descripción Ejemplo
FXT Prefijo fijo FXT
YYYYMMDD Fecha de ejecución 20260203
NNNNNN Identificador de 6 dígitos 123456

Ejemplo: FXT-20260203-123456

Consultar Estado de Orden

Use el código de referencia para consultar el estado de la orden:

+------------------------------------------+
| POST /api/v1/fxorder/getStatus           |
| Body: {                                  |
|   "reference_code": "FXT-20260203-123456"|
| }                                        |
+------------------------------------------+
                  |
                  v
+------------------------------------------+
| Respuesta:                               |
| {                                        |
|   "reference_code": "FXT-20260203-123456"|
|   "status": "settled",                   |
|   "origin_currency": "CRC",              |
|   "destination_currency": "USD",         |
|   "amount": "512750.00",                 |
|   "rate": "512.750000",                  |
|   "converted_amount": "1000.00"          |
| }                                        |
+------------------------------------------+

Importante: Solo se acepta el formato FXT-YYYYMMDD-NNNNNN. Los IDs internos de orden no están expuestos.


Manejo de Errores

Errores Comunes

Error Causa Solución
Quote expired Bloqueo de tasa excedió 60 segundos Solicitar nueva cotización
Quote already used Quote ID ya fue consumido Solicitar nueva cotización
Insufficient balance Wallet origen sin fondos suficientes Financiar el wallet primero
Same currency Orden FX con monedas iguales Use /transfer en su lugar
Invalid account Cuenta no encontrada o formato inválido Verificar formato IBAN

Formato de Respuesta de Error

Todos los errores siguen RFC 7807 Problem Details:

{
  "type": "about:blank",
  "title": "Bad Request",
  "status": 400,
  "detail": "Las órdenes FX requieren diferentes monedas de origen y destino",
  "trace_id": "0HN4G6LJN5FT0:00000001"
}

Consejo: Guarde el trace_id al contactar soporte.


Ejemplos de Código

cURL: Orden FX con Bloqueo de Tasa

# Paso 1: Obtener cotización bloqueada
curl -X POST "https://api.ariari.xyz/api/v1/fxorder/getQuote" \
  -H "Ocp-Apim-Subscription-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "source_currency": "CRC",
    "destination_currency": "USD",
    "amount": 512750,
    "lock_rate": true
  }'

# Paso 2: Ejecutar orden con quote_id
curl -X POST "https://api.ariari.xyz/api/v1/fxorder/createOrder" \
  -H "Ocp-Apim-Subscription-Key: YOUR_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "origin": { "iban": "CR27409819882707497149" },
    "destination": { "iban": "CR11409860774530115159" },
    "parameters": {
      "amount": "512750",
      "origin_currency": "CRC",
      "destination_currency": "USD",
      "quote_id": "fxq_abc123..."
    }
  }'

Mejores Prácticas

  1. Siempre use bloqueo de tasa para órdenes FX cuando muestre tasas a usuarios
  2. Guarde las Idempotency-Keys hasta recibir una respuesta final
  3. Maneje expiración de cotización elegantemente - solicite nueva cotización si expira
  4. Valide formatos de cuenta antes de enviar (formato IBAN)
  5. Use webhooks para notificaciones de estado en operaciones asíncronas

Límites de Tasa

Nivel Solicitudes por Minuto
Estándar 60
Premium 120
Empresarial Personalizado

Siguientes Pasos