Início rápido
Objetivo: primeiro um 200 OK num endpoint público e depois um pedido assinado.
Passo 1. Chaves (~30 s)
- Abra Definições do painel Cobrex.
- Crie ou copie o segredo API (usado na assinatura HMAC).
- Anote o User ID (
u-…) e, em fluxos de comerciante, o Merchant ID (m-…).
Passo 2. Pedido público sem assinatura (~30 s)
A lista de redes e ativos não exige cabeçalhos de autorização:
GET https://api.cobrex.com/public/assets
Accept: application/json
Resposta esperada: um array de objetos com network, asset, limites e taxas. Se funcionar, DNS e TLS estão corretos.
Passo 3. Pedido assinado (~60 s)
Endpoints protegidos precisam destes cabeçalhos:
| Cabeçalho | Função |
|---|---|
x-uid ou x-mid | Quem chama: utilizador ou comerciante |
x-timestamp | Hora atual em segundos (Unix) |
x-signature | HMAC-SHA256 da cadeia canónica (abaixo) |
Cadeia canónica a assinar:
- URL completa do pedido (esquema, anfitrião, caminho e query como enviado).
- Nova linha
\n. - O mesmo valor que envia em
x-timestamp(em segundos). - Se houver corpo (p. ex.
POST/PUT/PATCHcom JSON):\ne o corpo em bruto byte a byte (apósJSON.stringify).
Em GET sem corpo, pare após o passo 3 — sem terceira linha nem \n no fim.
Calcule:
x-signature = HMAC-SHA256( cadeia_canónica , api_secret )
em hex (minúsculas é comum).
JavaScript mínimo (Node.js)
Sem dependências — use o crypto nativo:
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, não milissegundos
const canonical = `${baseUrl}\n${timestampSec}`;
const signature = crypto.createHmac('sha256', apiSecret).update(canonical).digest('hex');
// Envie signature e timestampSec em x-signature e x-timestamp
Para POST com corpo:
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}`;
Mais detalhe, casos limite e webhooks: Autenticação e assinatura.
Passo 4. Interprete a resposta
- 2xx — sucesso (muitos endpoints devolvem 200).
- 4xx — erro do cliente (assinatura, formato, permissões, não encontrado).
- 5xx — erro do servidor; reintente com backoff.
A seguir: endpoints gerais (GET /accounts, saldos) ou pagamentos / saques.