Торговля через 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, если вам нужны лимиты маркетмейкера, доступ к продаже опционов (writer access) или стриминг индикативных котировок.
- Окружение: продакшн-URL REST и WebSocket выше. Не рассчитывайте на доступность тестнета.
- Сверка: храните у себя собственные клиентские ID заявок, нонсы, заявки, исполнения и снимки позиций.
Пути интеграции
Rust-крейты
Hypercall публикует открытые Rust-крейты для поддерживаемой поверхности интеграции:
Открытый Rust-репозиторий: github.com/hypercall-public/hypercall-rust.
| Крейт | Назначение |
|---|---|
hypercall-client | REST-клиент, WebSocket-клиент, хелперы для подписи EIP-712, локальная подпись и подпись через AWS KMS |
hypercall-sdk-types | Публичные DTO запросов и ответов, используемые клиентом |
hypercall-ws-protocol | Публичные типы WebSocket-сообщений |
hypercall-hyperliquid | Опциональный вспомогательный крейт для 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.
- Chain ID продакшна:
999 - Имя домена:
Hypercall - Версия домена:
1 - Verifying contract:
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": 1001,
"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": 1002,
"signature": "0x..."
}
]
}'
Важные правила:
priceиsize— строки и в подписываемом пейлоаде, и в теле JSON.- Форматирование строк должно точно совпадать между подписью и телом JSON.
- Пакет ограничен 50 заявками на один запрос.
- Пакетный маршрут работает только с книгой заявок.
route: "best_execution"иroute: "rfq_only"— это пути для одиночных заявок, а не для пакетного котирования. - Большинство торговых отказов возвращаются с 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",
"route": "book_only",
"client_id": "mm-bid-1",
"nonce": 1003,
"signature": "0x..."
}
]
}'
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— изменения статусов заявок. Обновления по частичным исполнениям здесь намеренно не передаются.fills— источник истины по частичным исполнениям и совершённым сделкам.portfolio— обновления состояния аккаунта.orderbook,trades,options_chainиindex_prices— публичные рыночные данные.
Форматы каналов и поведение liveness см. в разделе 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 в общем порядке не включён.
- Доступ к продаже: короткая позиция по опционам требует одобренного доступа.
- Индикативный стриминг: стримы провайдеров котировок доступны по списку и пока не являются общедоступным путём интеграции.
- Инструменты ликвидации: публичный крейт ликвидатора предназначен для процессов ликвидации Standard Margin, а не для обычного маркетмейкинга.
- Тестнет: недоступен, пока Hypercall не получит больше тестнет-HYPE.
Частые проблемы
Signature verification failed
- Проверьте, что
priceиsize— JSON-строки. - Проверьте, что подписанные строки точно совпадают с отправленными.
- Используйте chain ID
999для продакшна. - Используйте свежий нонс для каждой подписанной операции записи.
- Убедитесь, что подписант — кошелёк или одобренный агент.
Недостаточно маржи
- Проверьте
GET /portfolio?wallet=.... - Добавьте обеспечение или уменьшите размер котировки.
- Убедитесь, что у вашего кошелька есть уровень доступа, требуемый для котируемой стратегии.
Продажа отклонена из-за доступа или покрытия
- Убедитесь, что продажа покрыта исполненной длинной позицией, или обратитесь к Hypercall за доступом к продаже опционов.
- Не считайте, что доступ к продаже включён для нового кошелька по умолчанию.
Нет исполнений по WebSocket
- Отправьте сообщение
Authenticateперед подпиской на аутентифицированные каналы. - Подпишитесь на
fills, а не только наorder_updates. - После переподключения используйте резервный запрос
GET /fills?wallet=....
Дальнейшие шаги
- Аутентификация: Аутентификация и подпись
- Протокол WebSocket: WebSocket API
- Лимиты запросов: Rate Limits
- Ошибки: Ошибки и причины отказов
- Справочник: API Reference