Autenticación
Solo M2M. Este portal documenta integraciones de socio a socio (machine-to-machine). Los flujos de autenticación de cliente final viven en otro lugar.
La API M2M de ARi utiliza claves de suscripción de APIM para autenticación. Cada solicitud lleva un encabezado Ocp-Apim-Subscription-Key. No hay tokens Bearer JWT ni flujos OAuth en la superficie de socios.
Inicio rápido
curl -X POST "https://sandbox-api.ariari.xyz/api/v1/fxorder/getQuote" \
-H "Ocp-Apim-Subscription-Key: $SU_CLAVE_DE_SUSCRIPCION" \
-H "Content-Type: application/json" \
-d '{
"origin_currency": "USD",
"destination_currency": "CRC",
"origin_amount": 1000,
"lock_rate": false
}'Una respuesta 200 significa que su clave de suscripción es válida y que el alcance solicitado (fxorder.read para getQuote) está concedido.
Encabezados requeridos
| Encabezado | Requerido | Propósito |
|---|---|---|
Ocp-Apim-Subscription-Key |
Sí | Su clave de suscripción APIM. Aprovisionada en el portal de desarrolladores. |
Content-Type |
Sí (en POST/PUT) | Siempre application/json. |
Idempotency-Key |
Sí (en endpoints de creación) | UUID v4 generado por el cliente. Vea Idempotencia. |
X-Correlation-Id |
Recomendado | ID de traza suministrado por el cliente para depuración de extremo a extremo. UUID v4. |
Alcances por endpoint
Cada endpoint requiere uno o más alcances. Su clave de suscripción es aprovisionada con un conjunto de alcances determinado por ARi según los productos contratados. Llamar a un endpoint fuera de los alcances concedidos retorna 403 Forbidden con un cuerpo RFC 7807 problem+json.
Convención de nombres de alcance: <dominio>.<acción>. División lectura/escritura.
| Dominio | Alcance de lectura | Alcance de escritura | Ejemplos |
|---|---|---|---|
| Órdenes FX | fxorder.read |
fxorder.write |
getQuote, getStatus, getHistory (lectura); createOrder (escritura) |
| Transferencias | transfer.read |
transfer.write |
getStatus, getHistory (lectura); createTransfer (escritura) |
| Cuentas externas | external_account.read |
external_account.write |
Listar, registrar, verificar |
| Saldos | balance.read |
— | Solo lectura |
| Webhooks | webhook.read |
webhook.write |
Configurar suscripciones, ver historial de entregas |
| Clientes (M2M) | customer.read |
customer.write |
Búsqueda, registro, actualización |
| Broker | broker.read |
broker.write |
Custodia, catálogo de valores, órdenes de broker |
Si un alcance que usted espera no está concedido, contacte a su gerente de cuenta de ARi — el aprovisionamiento de alcances es una acción manual de ARi, no autoservicio.
Convenciones de formato de cable
La API M2M aplica estas convenciones en cada solicitud y respuesta. Los SDK de socios se generan a partir de la especificación OpenAPI; estas reglas se reflejan en la especificación pero se documentan aquí para lectores humanos.
| Convención | Detalle |
|---|---|
| Nombres de campo | snake_case (p. ej. origin_currency, quote_id, created_at) |
| Marcas de tiempo | ISO 8601 UTC con precisión de milisegundos (p. ej. 2026-04-28T10:30:00.000Z) |
| Montos decimales | Codificados como cadena con precisión explícita (p. ej. "1000.00", "512.750000"). Nunca floats. |
| Códigos de moneda | ISO 4217 mayúsculas de 3 letras (USD, CRC, EUR) |
| Códigos de referencia | Formato PREFIJO-AAAAMMDD-NNNNNN (p. ej. FXT-20260428-000123). Generados por el servidor. |
| Valores de estado | Enums UPPER_SNAKE_CASE (p. ej. PENDING_NEW, FILLED, REJECTED) |
| UUIDs | v4 en minúsculas (p. ej. 550e8400-e29b-41d4-a716-446655440000) |
Por qué decimales codificados como cadena. La representación en punto flotante introduce pérdida de precisión para montos monetarios. Un socio que deserialice 1000.10 como Number en JavaScript y lo reserialice puede perder centavos. Siempre parsee montos como cadenas; use una biblioteca Decimal de su lado para aritmética.
Límites de tasa
Cada suscripción tiene una cuota por minuto aplicada en APIM con una ventana de renovación de 60 segundos. Los límites dependen de la superficie de API y el entorno, no del nivel de suscripción. Los socios con contratos empresariales pueden negociar cuotas superiores — contacte a su gerente de cuenta de ARi.
| Superficie de API | Sandbox | Producción | Notas |
|---|---|---|---|
| APIs de socios estándar (transferencias, fx-orders, trading, webhooks, clientes, saldos, broker, monex) | 120 / min | 300 / min | Por clave de suscripción |
APIs de operador restringidas (rutas /admin/*) |
20 / min | 60 / min | Por clave de suscripción; también requiere el rol JWT de operador |
| APIs públicas (market-data) | 60 / min | 60 / min | Por IP cliente, sin clave de suscripción |
| Server-Sent Events (events) | 120 / min | 60 / min | Operaciones de conexión / reconexión a /events/stream |
El límite de SSE aplica a operaciones de flujo (conexión / reconexión), no a los eventos que circulan en un flujo abierto. Es intencionalmente más estricto en producción para proteger contra tormentas de reconexión — haga back off antes de restablecer un flujo.
Exceder el límite retorna 429 Too Many Requests con encabezado Retry-After (segundos a esperar). Trate 429 como transitorio; haga back off y reintente. Comportamiento de cliente recomendado:
- En
429→ duermaRetry-Aftersegundos (o 1 segundo si el encabezado está ausente), luego reintente la solicitud original con el mismoIdempotency-Key. - Reintente hasta 3 veces. Si el 4° intento también retorna
429, eleve el error a su operador — su suscripción está sobrecargada de manera sostenida. - Agregue jitter (50–100 ms aleatorios) a los reintentos para que múltiples clientes no se sincronicen.
IDs de correlación
X-Correlation-Id es opcional pero fuertemente recomendado. Establézcalo a un UUID v4 que su cliente genera para la solicitud original. ARi lo propaga a través de cada servicio interno involucrado en el manejo de la llamada y lo emite en respuestas de error (campo trace_id en RFC 7807 problem+json). Cuando contacte soporte sobre una solicitud que falla, incluya el ID de correlación — es la ruta más rápida a una resolución.
Si usted no suministra uno, ARi genera uno automáticamente y lo retorna en trace_id de la respuesta. Aun así, debería registrar este valor del lado cliente.
Respuestas de error
Todos los errores usan RFC 7807 problem+json. Campos requeridos:
| Campo | Descripción |
|---|---|
type |
URI que identifica la clase de error (actualmente siempre about:blank) |
title |
Frase de motivo HTTP (p. ej. Bad Request) |
status |
Código de estado HTTP (entero) |
detail |
Explicación legible específica de esta ocurrencia |
trace_id |
ID de correlación para búsqueda en bitácora |
Campos opcionales cuando aplica:
| Campo | Descripción |
|---|---|
instance |
Ruta de la solicitud |
errors |
Errores de validación a nivel de campo (objeto con clave por ruta de campo punteada) |
error_code |
Código estable legible por máquina (DB-FX-412, GW-STC-007, etc.) |
Vea el Catálogo de errores completo para la lista exhaustiva de valores error_code.
Rotación de claves
Las claves de suscripción se rotan en cadencia trimestral. ARi notifica a los socios 30 días antes de la rotación; la nueva clave se aprovisiona junto con la existente durante una ventana de superposición de 7 días.
Para rotar:
- ARi aprovisiona la nueva clave y notifica al socio.
- El socio despliega la nueva clave en su flota de producción.
- Ambas claves funcionan durante la superposición de 7 días.
- Después de 7 días, la clave antigua es revocada. El uso continuado de la clave antigua retorna
401 Unauthorized.
Si usted sospecha que su clave fue comprometida, contacte soporte de ARi inmediatamente — la rotación de emergencia puede acortar la ventana de superposición a unas pocas horas. Nunca incruste la clave de suscripción en código del lado cliente, aplicaciones móviles, o repositorios accesibles públicamente.
Lo que este portal NO cubre
La autenticación de cliente final (CIAM, OAuth, flujos MFA) está fuera de alcance. Si su integración requiere identidad de cliente final (p. ej. está construyendo una aplicación dirigida al cliente que llama a ARi en nombre de un usuario autenticado), eso es una superficie diferente — contacte a su gerente de cuenta de ARi para la documentación de la API de cliente final.
Vea también
- Idempotencia — semántica de Idempotency-Key + matriz de decisión de reintentos
- Sandbox — credenciales y escenarios de prueba
- Paginación — convenciones para endpoints de colección
- Errores — catálogo completo de errores
- Webhooks — suscripciones a eventos salientes + verificación HMAC