Inicio rápido
Objetivo: primero un 200 OK en un endpoint público y luego una petición firmada.
Paso 1. Claves (~30 s)
- Abra Configuración del panel Cobrex.
- Cree o copie el secreto API (sirve para la firma HMAC).
- 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:
| Cabecera | Función |
|---|---|
x-uid o x-mid | Quién llama: usuario o comerciante |
x-timestamp | Hora actual en segundos (Unix) |
x-signature | HMAC-SHA256 de la cadena canónica (abajo) |
Cadena canónica a firmar:
- URL completa de la petición (esquema, host, ruta y consulta tal cual se envía).
- Salto de línea
\n. - El mismo valor que envía en
x-timestamp(en segundos). - Si hay cuerpo (p. ej.
POST/PUT/PATCHcon JSON):\ny el cuerpo en bruto byte a byte (trasJSON.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.