Перейти к основному содержимому

Быстрый старт

Цель: первый успешный ответ 200 от публичного эндпоинта, затем — один подписанный запрос.

Шаг 1. Ключи​

  1. Откройте Настройки в панели Cobrex.
  2. Создайте или скопируйте секрет API (используется для HMAC-подписи).
  3. Запишите ваш User ID (u-…) и при работе с мерчантом — Merchant ID (m-…).

Шаг 2. Публичный запрос без подписи​

Список сетей и активов не требует заголовков авторизации:

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

Ожидаемый ответ: массив объектов с полями network, asset, лимитами и комиссиями. Если это работает, DNS и TLS в порядке.

Шаг 3. Подписанный запрос​

Любой «защищённый» метод нуждается в заголовках:

ЗаголовокНазначение
x-uid или x-midКто инициирует запрос: пользователь или мерчант
x-timestampТекущее время в секундах (Unix time)
x-signatureHMAC-SHA256 от канонической строки (см. ниже)

Каноническая строка для подписи:

  1. Возьмите полный URL запроса (схема, хост, путь и query-строка как в реальном запросе).
  2. Добавьте перевод строки \n.
  3. Добавьте то же значение, что пойдёт в x-timestamp (в секундах).
  4. Если есть тело (обычно POST/PUT/PATCH с JSON): перевод строки \n и сырое тело байт-в-байт как отправляете на сервер (после сериализации JSON).

Для GET без тела после timestamp ничего не добавляйте (без третьей строки и без лишнего \n в конце).

Вычислите:

x-signature = HMAC-SHA256( каноническая_строка , api_secret )

в виде hex-строки (нижний регистр hex — как в примерах ниже).

Мини-пример на JavaScript (Node.js)​

Установка зависимости не обязательна: используйте встроенный crypto.

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); // секунды, не миллисекунды

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

// Далее подставьте signature и timestampSec в заголовки x-signature и x-timestamp

Для POST с телом:

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}`;

Подробности, краевые случаи и проверка webhooks — на странице Авторизация и подпись.

Шаг 4. Проверьте ответ​

  • 2xx — запрос обработан (для многих методов успех это 200).
  • 4xx — ошибка клиента (подпись, формат, права, не найдено).
  • 5xx — ошибка на стороне сервиса; имеет смысл повтор с backoff.

Дальше: общие методы (GET /accounts, балансы) или сценарии платежей / выплат.