Pular para o conteúdo principal

Início rápido

Objetivo: primeiro um 200 OK num endpoint público e depois um pedido assinado.

Passo 1. Chaves (~30 s)​

  1. Abra Definições do painel Cobrex.
  2. Crie ou copie o segredo API (usado na assinatura HMAC).
  3. 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çalhoFunção
x-uid ou x-midQuem chama: utilizador ou comerciante
x-timestampHora atual em segundos (Unix)
x-signatureHMAC-SHA256 da cadeia canónica (abaixo)

Cadeia canónica a assinar:

  1. URL completa do pedido (esquema, anfitrião, caminho e query como enviado).
  2. Nova linha \n.
  3. O mesmo valor que envia em x-timestamp (em segundos).
  4. Se houver corpo (p. ex. POST/PUT/PATCH com JSON): \n e o corpo em bruto byte a byte (após JSON.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.