Торговля через API
Это руководство предназначено для тех, кто интегрирует с Hypercall маркетмейкера, систему котирования или сервис исполнения.
Базовый 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-client | REST-клиент, 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
Маркетмейкерам, как правило, следует использовать кошелёк агента:
- Кошелёк владельца одобряет агента через
POST /approve-agent. - Кошелёк агента подписывает заявки и отмены от имени кошелька владельца.
- Кошелёк владельца остаётся идентификатором портфеля, пополнений и риска.
Точные структуры и названия полей приведены на странице Аутентификация и подпись.
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-specs | market_updates, options_chain |
Рекомендуемый цикл:
- Загрузите рынки при старте.
- Загрузите открытые заявки и последние исполнения до начала котирования.
- Подпишитесь на обновления WebSocket.
- Котируйте с детерминированными клиентскими ID.
- Периодически опрашивайте REST, чтобы восстанавливаться после разрывов соединения или пропущенных сообщений.
- Прекращайте котирование при неопределённом состоянии, пока данные 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=....
Дальнейшие шаги
- Аутентификация: Аутентификация и подпись
- Протокол WebSocket: WebSocket API
- Лимиты запросов: Лимиты запросов
- Ошибки: Ошибки и причины отказов
- Справочник: API Reference