Generar cadenas de autenticación (REST API)

Última actualización: 7 de octubre de 2026

Algunos endpoints REST permiten realizar operaciones sensibles, como enviar órdenes o solicitar el retiro de un activo digital. Estos endpoints privados solo pueden invocarse mediante solicitudes cifradas, y cada una debe incluir una cadena de autenticación (authent). authent se calcula a partir de los siguientes parámetros:

PostData

postData es una concatenación con "&" en el formato = y es específica de cada endpoint REST.

Ejemplo

Para usar el endpoint orderbook, elige el argumento symbol con el valor
fi_xbtusd_180615. postData queda definido entonces como symbol=fi_xbtusd_180615.

Actualización del flujo de autenticación para endpoints v3: A partir del 20 de febrero de 2024, y con el fin de alinearnos con las mejores prácticas y garantizar un mayor nivel de seguridad, actualizaremos el flujo de autenticación de nuestros endpoints /derivatives/* (v3). (más detalles a continuación)

Cambios en la generación de PostData:


- Antes del lanzamiento: los usuarios debían aplicar hash a los parámetros de la cadena de consulta antes de codificarlos en URL para generar Authent, p. ej., `greeting=hello world`.


- Después del lanzamiento: el proceso de autenticación requerirá aplicar hash al componente URI completo codificado en URL tal como aparece en la solicitud, p. ej., `greeting=hello%20world`. Este método refuerza la seguridad y se ajusta a las mejores prácticas.
Esta actualización es especialmente relevante para el endpoint v3 batchorder, que acepta un cuerpo JSON en sus parámetros de consulta.


Retrocompatibilidad y planes futuros:


Por el momento, este cambio es retrocompatible. La plataforma aceptará los dos métodos de generación de PostData descritos anteriormente. No obstante, tenemos previsto retirar el método antiguo (aplicar hash a los parámetros de la cadena de consulta decodificada) para mantener los más altos estándares de seguridad. Notificaremos con suficiente antelación antes de realizar dicho cambio y recomendamos encarecidamente a todos los usuarios que migren al nuevo método cuanto antes para garantizar la continuidad del servicio.

Nonce

nonce es un parámetro entero de incremento continuo. Un valor de nonce adecuado es la hora de tu sistema en
milisegundos (en formato de cadena). Nuestro sistema tolera nonces desordenados durante un breve periodo de tiempo. nonce no es obligatorio.

Ejemplo 1415957147987

Muchos problemas de autenticación están relacionados con un nonce incorrecto. Un nuevo par de claves API restablecerá el nonce automáticamente y resolverá estos problemas.

Ruta del endpoint

endpointPath es la extensión de URL del endpoint.

Ejemplo /api/v3/orderbook

Clave API Secreta

El api_secret se obtiene tal como se describe en la sección anterior.

Ejemplo

rttp4AzwRfYEdQ7R7X8Z/04Y4TZPa97pqCypi3xXxAqftygftnI6H9yGV+O
cUOOJeFtZkr8mVwbAndU3Kz4Q+eG

A partir de estos parámetros, authent debe calcularse de la siguiente manera:

  1. 1

    Concatena

    postData

    +

    nonce

    +

    endpointPath

  2. 2

    Aplica un hash al resultado del paso 1 con el algoritmo SHA-256

  3. 3

    Decodifica en Base64 tu api_secret

  4. 4

    Usa el resultado del paso 3 para aplicar hash al resultado del paso 2 con el algoritmo HMAC-SHA-512

  5. 5

    Codifica en Base64 el resultado del paso 4

Ejemplo

A continuación se muestra una implementación de authent en Java. Para ver ejemplos funcionales completos en distintos lenguajes de programación, consulta la sección Recursos adicionales. public static String getAuthent(String postData, String nonce, String endpointPath, String secretKeyBase64)
{
Mac mac512;
MessageDigest sha256;
try {
SecretKey secretKey = new SecretKeySpec 
(Base64.decode(secretKeyBase64.getBytes()), HMAC_SHA_512);
mac512 = Mac.getInstance(HMAC_SHA_512);
mac512.init(secretKey);
sha256 = MessageDigest.getInstance("SHA-256");
} catch (IOException e) {
...
} catch (InvalidKeyException e) {
...
} catch (NoSuchAlgorithmException e) {
...
} sha256.update(postData.getBytes());
sha256.update(nonce.getBytes());
sha256.update(endpointPath.getBytes());
mac512.update(sha256.digest());
return Base64.encodeBytes(mac512.doFinal()).trim();
}