Эта страница переведена автоматически. Оригинал на английском языке является каноническим. Читать на английском →
Перейти к основному содержимому

Торговля через API

Это руководство предназначено для тех, кто интегрирует с Hypercall маркетмейкера, систему котирования или сервис исполнения.

Производственный API

Базовый URL REST: https://api.hypercall.xyz

URL WebSocket: wss://api.hypercall.xyz/ws

Статус тестнета: тестнет временно отключён, пока Hypercall не получит дополнительный объём тестовых HYPE. Новым маркетмейкерским интеграциям следует использовать производственную среду, если Hypercall не предоставил вам выделенное окружение.

Потоки по списку допуска

Стриминг индикативных котировок от поставщиков котировок пока недоступен для всех. Hypercall может включить его для одобренных интеграций, но при стандартном подключении маркетмейкера следует использовать рыночные данные через REST и аутентифицированные WebSocket-каналы заявок, исполнений и портфеля.

Чек-лист подключения​

  • Торговый кошелёк: EVM-кошелёк с поддержкой подписи типизированных данных EIP-712.
  • Пополнение: пополнение в USDC в производственной среде на app.hypercall.xyz.
  • Доступ: свяжитесь с Hypercall, если вам нужны маркетмейкерские лимиты или стриминг индикативных котировок.
  • Окружение: производственные URL REST и WebSocket, указанные выше. Не рассчитывайте на доступность тестнета.
  • Сверка: храните у себя собственные клиентские ID заявок, nonce, заявки, исполнения и снимки позиций.

Варианты интеграции​

TypeScript SDK​

Установите официальный пакет TypeScript: он включает типизированные REST-клиенты, валидацию запросов во время выполнения и вспомогательные функции для подписи EIP-712:

npm install @hypercallxyz/sdk

Чтение рыночных данных, запросы по аккаунту, подписанные операции записи, обработка ошибок и точки входа пакета описаны в руководстве по TypeScript SDK. Сейчас TypeScript SDK покрывает REST и подпись. Для потоковых обновлений подключайтесь к WebSocket API напрямую.

Rust-крейты​

Hypercall публикует открытые Rust-крейты для поддерживаемых интеграций в репозитории github.com/hypercall-public/hypercall-rust. На crates.io их нет. Подключайте их как git-зависимости и фиксируйте тег или коммит.

КрейтНазначение
hypercall-clientREST-клиент, WebSocket-клиент, вспомогательные функции подписи EIP-712, локальная подпись и подпись через AWS KMS
hypercall-sdk-typesПубличные DTO запросов и ответов, общие с клиентом
hypercall-ws-protocolПубличные типы сообщений WebSocket
hypercall-hyperliquidНеобязательный вспомогательный крейт для интеграций, которые также хеджируются на Hyperliquid
hypercall-liquidatorЭталонный клиент ликвидации для Standard Margin. Для обычного маркетмейкинга не требуется

По возможности используйте крейты. В них уже зашиты актуальный домен подписи, структура запросов, правила маршрутизации и правила форматирования строк, в которых легко ошибиться при ручной реализации.

REST и WebSocket напрямую​

Если вы не используете Rust, ориентируйтесь на страницы API Reference, Аутентификация и подпись и WebSocket API как на первоисточник.

1. Получение списка рынков​

Начните с загрузки активных рынков и спецификаций инструментов:

curl https://api.hypercall.xyz/markets
curl "https://api.hypercall.xyz/instrument-specs?currency=BTC"
curl "https://api.hypercall.xyz/options-summary?currency=BTC"

Назначение эндпоинтов:

  • GET /markets: список базовых активов и групп по датам экспирации.
  • GET /instrument-specs?currency=BTC: спецификации торгуемых опционов.
  • GET /options-summary?currency=BTC: сводка по цепочке опционов: лучший бид, лучший аск, марк-цена и поля с греками.

2. Настройка подписи​

Операции записи требуют подписи EIP-712.

  • ID сети в производственной среде: 999
  • Имя домена: Hypercall
  • Версия домена: 1
  • Проверяющий контракт: 0x0000000000000000000000000000000000000000

Маркетмейкерам, как правило, следует использовать кошелёк агента:

  1. Кошелёк владельца одобряет агента через POST /approve-agent.
  2. Кошелёк агента подписывает заявки и отмены от имени кошелька владельца.
  3. Кошелёк владельца остаётся идентификатором портфеля, пополнений и риска.

Точные структуры и названия полей приведены на странице Аутентификация и подпись.

3. Котирование пакетными заявками​

Для маркетмейкерских котировок используйте POST /bulk_order с route: "book_only".

curl -X POST https://api.hypercall.xyz/bulk_order \
-H "Content-Type: application/json" \
-d '{
"orders": [
{
"wallet": "0x...",
"symbol": "BTC-20260131-100000-C",
"price": "100.0",
"size": "0.1",
"side": "Buy",
"tif": "gtc",
"route": "book_only",
"client_id": "mm-bid-1",
"mmp_enabled": true,
"nonce": 1791273600000,
"signature": "0x..."
},
{
"wallet": "0x...",
"symbol": "BTC-20260131-100000-C",
"price": "101.0",
"size": "0.1",
"side": "Sell",
"tif": "gtc",
"route": "book_only",
"client_id": "mm-ask-1",
"mmp_enabled": true,
"nonce": 1791273600001,
"signature": "0x..."
}
]
}'

Важные правила:

  • price и size передаются строками как в подписываемых данных, так и в теле JSON.
  • Форматирование строк должно совпадать в точности между подписью и телом JSON.
  • Пакетная заявка ограничена 50 заявками на один запрос.
  • Пакетный маршрут работает только через книгу заявок. route может быть book_only или отсутствовать. route: "best_execution" в пакетных заявках отклоняется, для него используйте POST /order. route: "rfq_only" сейчас отклоняется на всех эндпоинтах заявок.
  • Nonce задаётся меткой времени в миллисекундах. Nonce, выходящий за пределы диапазона от двух дней до серверного времени до одного дня после него, отклоняется. См. Управление nonce.
  • Большинство торговых отказов возвращается с HTTP 200 и status: "REJECTED". Всегда проверяйте каждый результат.

4. Обновление котировок​

Используйте PUT /bulk_order, чтобы одним запросом отменить существующие котировочные заявки и выставить замену.

curl -X PUT https://api.hypercall.xyz/bulk_order \
-H "Content-Type: application/json" \
-d '{
"replacements": [
{
"wallet": "0x...",
"order_id": 12345,
"symbol": "BTC-20260131-100000-C",
"price": "99.5",
"size": "0.1",
"side": "Buy",
"tif": "gtc",
"client_id": "mm-bid-1",
"mmp_enabled": true,
"nonce": 1791273600002,
"signature": "0x..."
}
]
}'

Заявки на замену не содержат поля route и подписываются как ReplaceOrder, где к полям заявки добавляется orderId старой заявки. См. Аутентификация и подпись.

PUT /bulk_order отменяет старый пакет до создания нового. Результаты возвращаются по каждой замене в порядке следования в запросе. Если отмена не прошла, соответствующая заявка на замену не создаётся.

Для одиночной замены, чувствительной к задержкам, используйте PUT /order.

5. Подписка на обновления​

Подключитесь к производственному WebSocket:

const ws = new WebSocket("wss://api.hypercall.xyz/ws");

ws.onopen = () => {
ws.send(JSON.stringify({ type: "Authenticate", wallet: "0xYourWallet" }));
ws.send(JSON.stringify({ type: "Subscribe", channel: "order_updates" }));
ws.send(JSON.stringify({ type: "Subscribe", channel: "fills" }));
ws.send(JSON.stringify({ type: "Subscribe", channel: "portfolio" }));
};

Назначение каналов:

  • order_updates: изменения статуса заявок, включая PARTIALLY_FILLED. Поле filled_size содержит накопленный исполненный объём по заявке.
  • fills: отдельные исполнения и объём каждого из них.
  • portfolio: обновления состояния аккаунта.
  • orderbook, trades, options_chain и index_prices: публичные рыночные данные.

Форматы каналов и поведение при проверке соединения описаны на странице WebSocket API.

6. Сверка состояния​

Запускайте цикл сверки, даже если WebSocket-соединение работает стабильно.

СостояниеРезервный RESTКанал WebSocket
ЗаявкиGET /orders?wallet=...order_updates
ИсполненияGET /fills?wallet=...fills
ПортфельGET /portfolio?wallet=...portfolio
РынкиGET /markets, GET /instrument-specsmarket_updates, options_chain

Рекомендуемый цикл:

  1. Загрузите рынки при старте.
  2. Загрузите открытые заявки и последние исполнения до начала котирования.
  3. Подпишитесь на обновления WebSocket.
  4. Котируйте с детерминированными клиентскими ID.
  5. Периодически опрашивайте REST, чтобы восстанавливаться после разрывов соединения или пропущенных сообщений.
  6. Прекращайте котирование при неопределённом состоянии, пока данные REST и WebSocket снова не совпадут.

7. Ограничения запуска​

Mainnet Alpha намеренно запущен с ограничениями.

  • Маржа: доступны и Standard Margin, и Portfolio Margin. Любой аккаунт может перейти на Portfolio Margin, как только его аккаунт HyperCore переведён в unified-режим.
  • Короткие позиции по опционам: шорты по опционам в Standard Margin разрешены с учётом маржинальных требований и лимитов вашего уровня. Проверьте standard_margin_shorts_enabled через GET /risk/limits?wallet=....
  • Перпы: заявки по перпам используют отдельный домен подписи и эндпоинт. См. Аутентификация и подпись.
  • Индикативный стриминг: потоки поставщиков котировок доступны только по списку допуска и пока не являются общедоступным способом интеграции.
  • Инструменты ликвидации: публичный крейт ликвидатора предназначен для процессов ликвидации в Standard Margin, а не для обычного маркетмейкинга.
  • Тестнет: недоступен, пока Hypercall не получит дополнительный объём тестовых HYPE.

Частые проблемы​

Ошибка проверки подписи​

  • Убедитесь, что price и size переданы строками JSON.
  • Убедитесь, что подписанные строки в точности совпадают с отправленными.
  • Используйте ID сети 999 для производственной среды.
  • Используйте новый nonce для каждой подписанной операции записи.
  • Убедитесь, что подписант является самим кошельком или одобренным агентом.

Недостаточно маржи​

  • Проверьте GET /portfolio?wallet=....
  • Внесите обеспечение или уменьшите объём котировок.
  • Убедитесь, что у вашего кошелька есть уровень доступа, необходимый для котируемой стратегии.

Продажа отклонена из-за уровня доступа или покрытия​

  • Проверьте GET /risk/limits?wallet=.... На некоторых уровнях разрешены только продажи, покрытые исполненной длинной позицией.
  • Свяжитесь с Hypercall, если вашему кошельку нужен другой уровень.

Исполнения не приходят по WebSocket​

  • Отправьте сообщение Authenticate перед подпиской на аутентифицированные каналы.
  • Подпишитесь на fills, а не только на order_updates.
  • После переподключения запросите данные через GET /fills?wallet=....

Дальнейшие шаги​