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

Торговля через 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, если вам нужны лимиты маркетмейкера, доступ к продаже опционов (writer access) или стриминг индикативных котировок.
  • Окружение: продакшн-URL REST и WebSocket выше. Не рассчитывайте на доступность тестнета.
  • Сверка: храните у себя собственные клиентские ID заявок, нонсы, заявки, исполнения и снимки позиций.

Пути интеграции

Rust-крейты

Hypercall публикует открытые Rust-крейты для поддерживаемой поверхности интеграции:

Открытый Rust-репозиторий: github.com/hypercall-public/hypercall-rust.

КрейтНазначение
hypercall-clientREST-клиент, 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

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

  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": 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-specsmarket_updates, options_chain

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

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

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