Аутентификация

Чтение данных рынков публично. Торговые эндпоинты требуют API-ключи и подпись HMAC-SHA256 на каждом запросе. Ключи выводятся один раз из подписи кошелька и используются повторно.

Без хранения средств

Ваш приватный ключ никогда не покидает ваше устройство. API-секрет лишь подписывает запросы — он не может двигать средства. Ордера авторизуются подписью вашего кошелька и сеттлятся в блокчейне.

Получите API-ключи#

Подпишите сообщение кошельком и обменяйте его на тройку ключей: apiKey, secret, passphrase. Храните их безопасно (например, в переменных окружения) — секрет показывается один раз.

POST/clob/auth/derive-api-key
import { TradingClient } from "@market/sdk";

// 1) Sign this exact message with your wallet (e.g. via viem/ethers):
const signature = await wallet.signMessage({ message });

// 2) Exchange the signature for credentials:
const creds = await TradingClient.deriveApiKey(
  "https://globet.market/clob",
  "0xYourWallet",
  signature
);
// => { apiKey, secret, passphrase }

Подпись запросов#

Каждый авторизованный запрос несёт пять заголовков. Подпись — это HMAC-SHA256 (hex) от канонического сообщения из таймстампа, метода, пути и тела запроса.

ЗаголовокЗначениеОписание
poly_addressreqstringАдрес вашего кошелька (0x…).
poly_api_keyreqstringПолученный API-ключ.
poly_passphrasereqstringПолученная passphrase.
poly_timestampreqstringUnix-секунды. Должно быть в пределах ±30с от времени сервера.
poly_signaturereqstringHMAC-SHA256 hex от канонического сообщения (ниже).

Каноническое сообщение

Подписываемая строка — это timestamp + METHOD + path + body без разделителей. path — только путь URL (без хоста и query). body — точная отправляемая JSON-строка (пусто для GET).
Подпись вручную
import { createHmac } from "crypto";

function signedHeaders(opts: {
  secret: string; apiKey: string; passphrase: string; address: string;
  method: string; path: string; body?: string;
}) {
  const timestamp = Math.floor(Date.now() / 1000).toString();
  const message = timestamp + opts.method.toUpperCase() + opts.path + (opts.body ?? "");
  const signature = createHmac("sha256", opts.secret).update(message).digest("hex");
  return {
    poly_address: opts.address,
    poly_api_key: opts.apiKey,
    poly_passphrase: opts.passphrase,
    poly_timestamp: timestamp,
    poly_signature: signature,
  };
}

Полный подписанный запрос#

Список ваших открытых ордеров с ручной подписью:

import requests

headers = signed_headers(
    secret, api_key, passphrase, address,
    method="GET", path="/orders",
)
r = requests.get("https://globet.market/clob/orders", headers=headers)
print(r.json())

Рассинхрон времени

Если получаете ошибки 401, проверьте часы. Таймстамп должен быть в пределах ±30 секунд от сервера. Время сервера: GET /clob/time.