Saltar al contenido principal

Inicio rápido

Objetivo: primero un 200 OK en un endpoint público y luego una petición firmada.

Paso 1. Claves (~30 s)​

  1. Abra Configuración del panel Cobrex.
  2. Cree o copie el secreto API (sirve para la firma HMAC).
  3. Anote su User ID (u-…) y, en flujos de comercio, Merchant ID (m-…).

Paso 2. Petición pública sin firma (~30 s)​

El listado de redes y activos no exige cabeceras de autorización:

GET https://api.cobrex.com/public/assets
Accept: application/json

Respuesta esperada: un array de objetos con network, asset, límites y comisiones. Si funciona, DNS y TLS están bien.

Paso 3. Petición firmada (~60 s)​

Los endpoints protegidos requieren estas cabeceras:

CabeceraFunción
x-uid o x-midQuién llama: usuario o comerciante
x-timestampHora actual en segundos (Unix)
x-signatureHMAC-SHA256 de la cadena canónica (abajo)

Cadena canónica a firmar:

  1. URL completa de la petición (esquema, host, ruta y consulta tal cual se envía).
  2. Salto de línea \n.
  3. El mismo valor que envía en x-timestamp (en segundos).
  4. Si hay cuerpo (p. ej. POST/PUT/PATCH con JSON): \n y el cuerpo en bruto byte a byte (tras JSON.stringify).

En GET sin cuerpo, pare después del paso 3 — sin tercera línea ni \n final.

Calcule:

x-signature = HMAC-SHA256( cadena_canónica , api_secret )

como cadena hex (hex en minúsculas es habitual).

JavaScript mínimo (Node.js)​

Sin dependencias extra — use el módulo crypto integrado:

const crypto = require('crypto');

const apiSecret = process.env.COBREX_API_SECRET;
const baseUrl = 'https://api.cobrex.com/accounts';

const timestampSec = Math.floor(Date.now() / 1000); // segundos, no milisegundos

const canonical = `${baseUrl}\n${timestampSec}`;
const signature = crypto.createHmac('sha256', apiSecret).update(canonical).digest('hex');

// Envíe signature y timestampSec en x-signature y x-timestamp

Para POST con cuerpo:

const bodyRaw = JSON.stringify({ asset: ['USDT', 'TRX'], network: 'TRON', client: 'demo' });
const url = 'https://api.cobrex.com/wallet';
const canonical = `${url}\n${timestampSec}\n${bodyRaw}`;

Más detalle, casos límite y verificación de webhooks: Autenticación y firma.

Paso 4. Interprete la respuesta​

  • 2xx — éxito (muchos endpoints devuelven 200).
  • 4xx — error del cliente (firma, formato, permisos, no encontrado).
  • 5xx — error del servidor; reintente con backoff.

Siguiente: endpoints generales (GET /accounts, saldos) o pagos / retiros.