Developers
Documentación de la API
Una API que devuelve el mismo desglose de comisiones que el sitio, línea por línea, sin margen oculto. Esta página describe las convenciones compartidas por todos los endpoints y establece con precisión qué está abierto hoy.
Qué está abierto hoy
El endpoint 1 está realmente expuesto y es invocable: cotización. Los demás 5 se publican como contrato, para que puedas construir antes de que se abran, y cada uno lleva una insignia explícita.
Documentamos con antelación porque ayuda a una integración. Hacerte creer que está conectado no lo haría: cada endpoint declara su estado, y las respuestas de ejemplo para endpoints abiertos son respuestas realmente obtenidas, no maquetas.
URL base y versionado
Conviven dos bases: la que responde hoy y la API versionada que vendrá con las claves emitidas.
- Hoy
- /api Live
- API versionada
- /api/v1 Published contract, not open
La versión vive en la ruta, no en una cabecera: una URL tiene que sobrevivir a ser pegada en un ticket. Un cambio que rompe — un campo eliminado, un tipo cambiado, semántica diferente — abre una nueva versión; la anterior se sigue sirviendo durante al menos seis meses, con su fecha de fin anunciada en el changelog. Añadir un campo no rompe: tu cliente debe ignorar los campos que no conoce.
Convenciones
Se mantienen en todos los endpoints, abiertos o próximos. La mayoría existen por una razón: no perder nunca un céntimo en tránsito.
Los importes son cadenas o enteros de unidades menores
Nunca un flotante. En JSON, 0.1 + 0.2 no es 0.3, y un importe grande pierde unidades menores en la serialización. Por tanto, los importes en unidades principales se envían como cadenas, y los importes internos como enteros de unidades menores con su número de decimales.
{
"net": "912.28",
"currency": "EUR",
"currencyDecimals": 2
}Los decimales dependen de la moneda
El euro tiene dos decimales, el franco CFA y el dong vietnamita no tienen ninguno. No codifiques «× 100»: lee currencyDecimals, o el campo decimals de los datos de referencia.
{ "amount": "125000", "currency": "XOF", "currencyDecimals": 0 }Los importes de criptoactivos están en unidades base
El depósito se devuelve con su número de decimales: 8 para bitcoin, 6 para USDT, 18 para ether. El mismo ticker puede existir con diferentes decimales según la red: confía en el campo, no en tu memoria.
{ "deposit": { "amount": "1000.000000", "ticker": "USDT", "decimals": 6 } }Marcas de tiempo
Las fechas son ISO 8601 UTC. Una excepción deliberada: rateAsOf es una marca de tiempo Unix en milisegundos, porque alimenta un cálculo de antigüedad, no una visualización. Lleva la fecha de los DATOS de mercado, no de tu solicitud: esa distinción es lo que hace detectable un precio obsoleto.
{ "rateAsOf": 1788356981608, "rateSource": "coingecko" }Los identificadores son estables
Un identificador de activo, rail o país nunca cambia y nunca se reasigna. Un rail cerrado conserva el suyo, con su fase y motivo: tu integración puede ver por qué desapareció de tus opciones, en lugar de encontrar un hueco.
Los mensajes dirigidos a personas son bilingües
Un motivo de rechazo se devuelve en francés e inglés en el mismo objeto. Muestras el que coincida con tu usuario, sin tabla de traducción que mantener por tu parte.
{ "reason": { "fr": "…", "en": "…" } }Primera llamada
No se necesita clave para cotizar. Esta llamada funciona tal cual.
curl -sS -X POST https://fiatside.com/api/quote \
-H 'Content-Type: application/json' \
-d '{
"assetId": "usdt",
"railId": "sepa_instant",
"networkId": "tron",
"direction": "sell",
"amount": "1000"
}'{
"deposit": { "amount": "1000.000000", "ticker": "USDT", "decimals": 6 },
"gross": "921.68",
"net": "912.28",
"currency": "EUR",
"currencyDecimals": 2,
"midRate": "0.92168430",
"effectiveRate": "0.91228000",
"totalCostBps": 102,
"lines": [
{ "code": "network", "amount": "1.11", "basis": "Cout reseau tron, preleve en USDT" },
{ "code": "spread", "amount": "8.29", "basis": "0.90 % du montant converti" }
],
"settlement": { "p50Minutes": 1, "p95Minutes": 12 },
"lockSeconds": 1800,
"rateAsOf": 1788356981608,
"rateSource": "mock",
"limitError": null
}El campo rateSource indica de dónde procede el precio. El valor «mock» es la fuente de desarrollo determinista, que no puede arrancar en producción: el proceso se niega a iniciarse en lugar de cotizar precios congelados.
Secciones
- AutenticaciónCómo está protegido el endpoint de cotización hoy, cómo se emitirán las claves y las reglas para manejar una clave de producción.
- CotizacionesEl endpoint de cotización, su desglose de comisiones línea por línea, cómo se devuelven los límites de la vía de pago en la respuesta y cuánto tiempo permanece bloqueada la tasa una vez que se crea una orden.
- ÓrdenesCreación de una orden, clave de idempotencia, dirección de depósito, memo obligatorio en algunas redes y lectura de transiciones de estado.
- Datos de referenciaCatálogos de vías de pago, activos y países, el esquema de campos de beneficiario que le permite generar su formulario de pago y la paginación por cursor.
- WebhooksEventos emitidos, firma HMAC-SHA256 sobre el cuerpo sin procesar, ventana de reproducción, programa de reintentos y por qué la verificación debe ejecutarse en tiempo constante.
- ErroresCada código de error con su estado HTTP, qué significa exactamente, qué hacer al respecto en el lado de la integración y cuáles vale la pena reintentar.
Lo que la API no hará
Los límites de una API son tan útiles de conocer como sus capacidades.
- Sin pagos a terceros. El nombre del beneficiario debe coincidir con la identidad verificada del titular de la orden, y los rails de pago ahora comprueban el nombre contra la cuenta.
- Sin creación de cuenta ni verificación de identidad a través de la API. Esos pasos ocurren en un flujo donde el usuario ve lo que acepta.
- Sin clave en un parámetro de URL. Las URL terminan en registros, cabeceras de referente e historiales: una clave pasada así es una clave que revocar.
- Sin almacenamiento en caché de una cotización por nuestra parte. La respuesta lleva Cache-Control: no-store, y tu integración no debe sortearlo: una cotización en caché es un precio obsoleto presentado como firme.
- Sin endpoint de compra de criptoactivos. El servicio funciona en una dirección, de activo digital a moneda de curso legal.