Конечная точка exchange
Конечная точка exchange используется для взаимодействия с цепочкой Hyperliquid и торговли на ней. См. Python SDK для кода генерации подписей для этих запросов.
Актив
Многие запросы принимают актив в качестве входного параметра. Для бессрочных контрактов (перпов) это индекс в поле universe, возвращаемом ответом meta. Для спотовых активов используйте 10000 + index, где index — соответствующий индекс в spotMeta.universe. Например, при отправке ордера на PURR/USDC следует использовать актив 10000, поскольку его индекс актива в спотовых метаданных равен 0.
Субаккаунты и хранилища
Субаккаунты и хранилища не имеют приватных ключей. Для выполнения действий от имени субаккаунта или хранилища подписывание должно выполняться мастер-аккаунтом, а поле vaultAddress должно быть установлено на адрес субаккаунта или хранилища. Это демонстрируется в примере basic_vault.py из Python SDK.
Expires After
Некоторые действия поддерживают необязательное поле expiresAfter — метку времени в миллисекундах, после которой действие будет отклонено. Действия, подписываемые пользователем, такие как Core USDC transfer, не поддерживают поле expiresAfter. Обратите внимание, что действия, отменённые из-за устаревшего поля expiresAfter, расходуют 5-кратный обычный лимит запросов, основанный на адресах.
Подробнее о том, как включать это поле при подписывании, см. в Python SDK.
Разместить ордер
POST https://api.hyperliquid.xyz/exchange
Полные примеры работы с полями запроса ордера см. в Python SDK.
Для лимитных ордеров TIF (time-in-force) задаёт поведение ордера при первом попадании в стакан.
ALO (add liquidity only, т.е. «post only») будет отменён вместо немедленного исполнения.
IOC (immediate or cancel) — неисполненная часть будет отменена вместо размещения в стакане.
GTC (good til canceled) — ордера не имеют особого поведения.
Client Order ID (cloid) — необязательная 128-битная hex-строка, например 0x1234567890abcdef1234567890abcdef
Заголовки
| Название | Тип | Описание |
|---|---|---|
| Content-Type* | String | "application/json" |
Тело запроса
| Название | Тип | Описание | |||||
|---|---|---|---|---|---|---|---|
| action* | Object | { "type": "order", "a": Number, "b": Boolean, "p": String, "s": String, "r": Boolean, "t": { "limit": { "tif": "Alo" |
"Ioc" | "Gtc" } или "trigger": { "isMarket": Boolean, "triggerPx": String, "tpsl": "tp" |
"sl" } }, "c": Cloid (необязательно) }], "grouping": "na" |
"normalTpsl" | "positionTpsl", "builder": Optional({"b": "address", "f": Number, "s": Optional([{"b": "address", "s": Number}])}) } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах | |||||
| signature* | Object | ||||||
| vaultAddress | String | Если торговля ведётся от имени хранилища или субаккаунта — его адрес onchain в 42-символьном шестнадцатеричном формате; например, 0x0000000000000000000000000000000000000000 | |||||
| expiresAfter | Number | Метка времени в миллисекундах |
{% tabs %}
{
"status":"ok",
"response":{
"type":"order",
"data":{
"statuses":[
{
"resting":{
"oid":77738308
}
}
]
}
}
}
{% endtab %}
{% tab title="200: OK Ответ с ошибкой" %}
{
"status":"ok",
"response":{
"type":"order",
"data":{
"statuses":[
{
"error":"Order must have minimum value of $10."
}
]
}
}
}
{% endtab %}
{% tab title="200: OK Успешный ответ (исполнен)" %}
{
"status":"ok",
"response":{
"type":"order",
"data":{
"statuses":[
{
"filled":{
"totalSz":"0.02",
"avgPx":"1891.4",
"oid":77747314
}
}
]
}
}
}
{% endtab %}
Отмена ордера(ов)
POST https://api.hyperliquid.xyz/exchange
Заголовки
| Название | Тип | Описание |
|---|---|---|
| Content-Type* | String | "application/json" |
Тело запроса
| Название | Тип | Описание |
|---|---|---|
| action* | Object | { "type": "cancel", "cancels": [ { "a": Number, "o": Number } ], "f": Boolean // fast } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах |
| signature* | Object | |
| vaultAddress | String | Если торговля ведётся от имени хранилища или субаккаунта — его адрес в 42-символьном шестнадцатеричном формате; например, 0x0000000000000000000000000000000000000000 |
| expiresAfter | Number | Метка времени в миллисекундах |
{% tabs %}
{
"status":"ok",
"response":{
"type":"cancel",
"data":{
"statuses":[
"success"
]
}
}
}
{% endtab %}
{% tab title="200: OK Ответ с ошибкой" %}
{
"status":"ok",
"response":{
"type":"cancel",
"data":{
"statuses":[
{
"error":"Order was never placed, already canceled, or filled."
}
]
}
}
}
{% endtab %}
Действия cancel и cancelByCloid включают необязательный флаг fast, кодируемый как f в действии. Ордера с f: true отклоняются, если они ссылаются на триггерные ордера. Сейчас fast не имеет другого эффекта. В будущем обновлении сети действия отмены будут приоритизированы в мемпуле тогда и только тогда, когда fast = true.
Обратите внимание, что f должен быть пропущен, если он равен false, т.е. действия, захешированные с f: false, будут отклонены.
Отмена ордера(ов) по cloid
POST https://api.hyperliquid.xyz/exchange
Заголовки
| Название | Тип | Описание |
|---|---|---|
| Content-Type* | String | "application/json" |
Тело запроса
| Название | Тип | Описание |
|---|---|---|
| action* | Object | { "type": "cancelByCloid", "cancels": [ { "asset": Number, "cloid": String } ], "f": Boolean // fast } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах |
| signature* | Object | |
| vaultAddress | String | Если торговля ведётся от имени хранилища или субаккаунта — его адрес в 42-символьном шестнадцатеричном формате; например, 0x0000000000000000000000000000000000000000 |
| expiresAfter | Number | Метка времени в миллисекундах |
{% tabs %}
{% endtab %}
{% tab title="200: OK Ответ с ошибкой" %}
{% endtab %}
Запланированная отмена (dead man's switch)
POST https://api.hyperliquid.xyz/exchange
Заголовки
| Название | Тип | Описание |
|---|---|---|
| Content-Type* | String | "application/json" |
Тело запроса
| Название | Тип | Описание |
|---|---|---|
| action* | Object | { "type": "scheduleCancel", "time": number (необязательно) } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах |
| signature* | Object | |
| vaultAddress | String | Если торговля ведётся от имени хранилища или субаккаунта — его адрес в 42-символьном шестнадцатеричном формате; например, 0x0000000000000000000000000000000000000000 |
| expiresAfter | Number | Метка времени в миллисекундах |
Планирует операцию отмены всех ордеров на будущее время. Если time не указано, запланированная операция отмены будет удалена. Время должно быть минимум на 5 секунд позже текущего. Когда наступит время, все открытые ордера будут отменены, а счётчик триггеров увеличится. Максимальное число триггеров в сутки — 10. Счётчик триггеров сбрасывается в 00:00 UTC.
Изменить ордер
POST https://api.hyperliquid.xyz/exchange
Заголовки
| Название | Тип | Описание |
|---|---|---|
| Content-Type* | String | "application/json" |
Тело запроса
| Название | Тип | Описание | ||||
|---|---|---|---|---|---|---|
| action* | Object | { "type": "modify", "oid": Number |
Cloid, "order": { "a": Number, "b": Boolean, "p": String, "s": String, "r": Boolean, "t": { "limit": { "tif": "Alo" |
"Ioc" | "Gtc" } или "trigger": { "isMarket": Boolean, "triggerPx": String, "tpsl": "tp" |
"sl" } }, "c": Cloid (необязательно) }, "a": Boolean // always_place } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах | ||||
| signature* | Object | |||||
| vaultAddress | String | Если торговля ведётся от имени хранилища или субаккаунта — его адрес onchain в 42-символьном шестнадцатеричном формате; например, 0x0000000000000000000000000000000000000000 | ||||
| expiresAfter | Number | Метка времени в миллисекундах |
{% tabs %}
{% endtab %}
{% tab title="200: OK Ответ с ошибкой" %}
{% endtab %}
Как одиночные, так и пакетные действия изменения включают необязательный флаг always_place, кодируемый как a в действии. При always_place = true новый ордер будет размещён независимо от того, была ли успешной отмена. При always_place = false новый ордер должен быть не триггерным и должен иметь TIF = ALO либо быть неисполнимым ордером с TIF = GTC. В последнем случае TIF нового ордера переопределяется на ALO.
Обратите внимание, что a должен быть пропущен, если он равен false, т.е. действия, захешированные с a: false, будут отклонены.
Изменить несколько ордеров
POST https://api.hyperliquid.xyz/exchange
Заголовки
| Название | Тип | Описание |
|---|---|---|
| Content-Type* | String | "application/json" |
Тело запроса
| Название | Тип | Описание | ||||
|---|---|---|---|---|---|---|
| action* | Object | { "type": "batchModify", "modifies": [{ "oid": Number |
Cloid, "order": { "a": Number, "b": Boolean, "p": String, "s": String, "r": Boolean, "t": { "limit": { "tif": "Alo" |
"Ioc" | "Gtc" } или "trigger": { "isMarket": Boolean, "triggerPx": String, "tpsl": "tp" |
"sl" } }, "c": Cloid (необязательно) } }], "a": Boolean // always_place } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах | ||||
| signature* | Object | |||||
| vaultAddress | String | Если торговля ведётся от имени хранилища или субаккаунта — его адрес onchain в 42-символьном шестнадцатеричном формате; например, 0x0000000000000000000000000000000000000000 | ||||
| expiresAfter | Number | Метка времени в миллисекундах |
Обновить кредитное плечо
POST https://api.hyperliquid.xyz/exchange
Обновляет кросс- или изолированное кредитное плечо по монете.
Заголовки
| Название | Тип | Описание |
|---|---|---|
| Content-Type* | String | "application/json" |
Тело запроса
| Название | Тип | Описание |
|---|---|---|
| action* | Object | { "type": "updateLeverage", "asset": индекс монеты, "isCross": true или false при обновлении кросс-плеча, "leverage": целое число, задающее новое кредитное плечо, с учётом ограничений по плечу для этой монеты } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах |
| signature* | Object | |
| vaultAddress | String | Если торговля ведётся от имени хранилища или субаккаунта — его адрес onchain в 42-символьном шестнадцатеричном формате; например, 0x0000000000000000000000000000000000000000 |
| expiresAfter | Number | Метка времени в миллисекундах |
{% tabs %}
{'status': 'ok', 'response': {'type': 'default'}}
{% endtab %}
Обновить изолированную маржу
POST https://api.hyperliquid.xyz/exchange
Добавить или удалить маржу из изолированной позиции.
Обратите внимание, что для установки целевого кредитного плеча вместо изменения маржи на значение в USDC существует альтернативное действие {"type": "topUpIsolatedOnlyMargin", "asset": <asset>, "leverage": <float string>}
Заголовки
| Название | Тип | Описание |
|---|---|---|
| Content-Type* | String | "application/json" |
Тело запроса
| Название | Тип | Описание |
|---|---|---|
| action* | Object | { "type": "updateIsolatedMargin", "asset": индекс монеты, "isBuy": true, (этот параметр не будет иметь эффекта, пока не будет введён режим хеджирования), "ntli": целое число, задающее сумму для добавления или удаления с 6 десятичными знаками; например, 1000000 для 1 usd, } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах |
| signature* | Object | |
| vaultAddress | String | Если торговля ведётся от имени хранилища или субаккаунта — его адрес onchain в 42-символьном шестнадцатеричном формате; например, 0x0000000000000000000000000000000000000000 |
| expiresAfter | Number | Метка времени в миллисекундах |
{% tabs %}
{'status': 'ok', 'response': {'type': 'default'}}
{% endtab %}
Send Asset
POST https://api.hyperliquid.xyz/exchange
Этот обобщённый метод используется для перевода токенов между различными перп-DEX'ами, спотовым балансом, пользователями и/или субаккаунтами. Используйте "" для указания перп-DEX по умолчанию (USDC) и "spot" для указания спота. Только токен обеспечения может быть переведён в перп-DEX или из него.
Заголовки
| Название | Значение |
|---|---|
| Content-Type* | application/json |
Тело
| Название | Тип | Описание |
|---|---|---|
| action* | Object | { "type": "sendAsset", "hyperliquidChain": "Mainnet" (в тестовой сети используйте вместо этого "Testnet"), "signatureChainId": id цепочки, используемой при подписывании, в шестнадцатеричном формате; например, "0xa4b1" для Arbitrum, "destination": адрес в 42-символьном шестнадцатеричном формате; например, 0x0000000000000000000000000000000000000000, "sourceDex": название перп-DEX, с которого выполняется перевод, "destinationDex": название перп-DEX, на который выполняется перевод, "token": tokenName:tokenId; например, "PURR:0xc4bf3f870c0e9465323c0b6ed28096c2", "amount": количество токена для отправки в виде строки; например, "0.01", "fromSubAccount": адрес в 42-символьном шестнадцатеричном формате или пустая строка, если не из субаккаунта, "nonce": текущая метка времени в миллисекундах в виде Number, должна совпадать с nonce } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах; она должна совпадать с nonce в объекте action выше |
| signature* | Object |
Ответ
{% tabs %}
{'status': 'ok', 'response': {'type': 'default'}}
{% endtab %}
Agent Send Asset
POST https://api.hyperliquid.xyz/exchange
Аналогично send asset, но может быть подписано агентом. Адрес назначения должен совпадать с адресом источника. Используйте "" для указания перп-DEX по умолчанию (USDC) и "spot" для указания спота. Только токен обеспечения может быть переведён в перп-DEX или из него.
Заголовки
| Название | Значение |
|---|---|
| Content-Type* | application/json |
Тело
| Название | Тип | Описание |
|---|---|---|
| action* | Object | { "type": "agentSendAsset", "destination": адрес в 42-символьном шестнадцатеричном формате; например, 0x0000000000000000000000000000000000000000, "sourceDex": название перп-DEX, с которого выполняется перевод, "destinationDex": название перп-DEX, на который выполняется перевод, "token": tokenName:tokenId; например, "PURR:0xc4bf3f870c0e9465323c0b6ed28096c2", "amount": количество токена для отправки в виде строки; например, "0.01", "fromSubAccount": адрес в 42-символьном шестнадцатеричном формате или пустая строка, если не из субаккаунта, "nonce": текущая метка времени в миллисекундах в виде Number, должна совпадать с nonce } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах; она должна совпадать с nonce в объекте action выше |
| signature* | Object |
Ответ
{% tabs %}
{'status': 'ok', 'response': {'type': 'default'}}
{% endtab %}
Отправка в EVM с данными
POST https://api.hyperliquid.xyz/exchange
Специализированное действие для перевода из Core в EVM, включающее дополнительную полезную нагрузку данных. Подробнее см. в HyperCore <> HyperEVM transfers. При его использовании на связанном контракте вместо transfer будет вызван coreReceiveWithData. ВАЖНО: ответственность за то, чтобы токен был надлежащим образом связан, а связанный контракт поддерживал следующий интерфейс, несёт вызывающая сторона:
interface ICoreReceiveWithData {
function coreReceiveWithData(
address from,
bytes32 destinationRecipient,
uint32 destinationChainId,
uint256 amount,
uint64 nonce,
bytes calldata data
) external;
}
Заголовки
| Название | Значение |
|---|---|
| Content-Type* | application/json |
Тело
| Название | Тип | Описание | |
|---|---|---|---|
| action* | Object | { "type": "sendToEvmWithData", "hyperliquidChain": "Mainnet" (в тестовой сети используйте вместо этого "Testnet"), "signatureChainId": id цепочки, используемой при подписывании, в шестнадцатеричном формате; например, "0xa4b1" для Arbitrum, "token": tokenName:tokenId; например, "PURR:0xc4bf3f870c0e9465323c0b6ed28096c2", "amount": количество токена для отправки в виде строки; например, "0.01", "sourceDex": название перп-DEX, с которого выполняется перевод, "destinationRecipient": адрес в формате addressEncoding, "addressEncoding": "hex" |
"base58", "destinationChainId": число, "gasLimit": число, "data": bytes, "nonce": текущая метка времени в миллисекундах в виде Number, должна совпадать с nonce } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах; она должна совпадать с nonce в объекте action выше | |
| signature* | Object |
Ответ
{% tabs %}
{'status': 'ok', 'response': {'type': 'default'}}
{% endtab %}
Перевод USDC в Core
POST https://api.hyperliquid.xyz/exchange
Отправить usd на другой адрес. Этот перевод не затрагивает EVM-мост. Формат подписи удобочитаем для кошельковых интерфейсов.
Заголовки
| Название | Тип | Описание |
|---|---|---|
| Content-Type* | String | "application/json" |
Тело запроса
| Название | Тип | Описание |
|---|---|---|
| action* | Object | { "type": "usdSend", "hyperliquidChain": "Mainnet" (в тестовой сети используйте вместо этого "Testnet"), "destination": адрес в 42-символьном шестнадцатеричном формате; например, 0x0000000000000000000000000000000000000000, "amount": количество usd для отправки в виде строки; например, "1" для 1 usd, "time": текущая метка времени в миллисекундах в виде Number, должна совпадать с nonce } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах |
| signature* | Object |
{% tabs %}
{'status': 'ok', 'response': {'type': 'default'}}
{% endtab %}
Спотовый перевод в Core
POST https://api.hyperliquid.xyz/exchange
Отправить спотовые активы на другой адрес. Этот перевод не затрагивает EVM-мост. Формат подписи удобочитаем для кошельковых интерфейсов.
Заголовки
| Название | Тип | Описание |
|---|---|---|
| Content-Type* | String | "application/json" |
Тело запроса
| Название | Тип | Описание |
|---|---|---|
| action* | Object | { "type": "spotSend", "hyperliquidChain": "Mainnet" (в тестовой сети используйте вместо этого "Testnet"), "destination": адрес в 42-символьном шестнадцатеричном формате; например, 0x0000000000000000000000000000000000000000, "amount": количество токена для отправки в виде строки; например, "0.01", "time": текущая метка времени в миллисекундах в виде Number, должна совпадать с nonce } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах |
| signature* | Object |
{% tabs %}
{'status': 'ok', 'response': {'type': 'default'}}
{% endtab %}
Example sign typed data for generating the signature:
{
"types": {
"HyperliquidTransaction:SpotSend": [
{
"name": "hyperliquidChain",
"type": "string"
},
{
"name": "destination",
"type": "string"
},
{
"name": "token",
"type": "string"
},
{
"name": "amount",
"type": "string"
},
{
"name": "time",
"type": "uint64"
}
]
},
"primaryType": "HyperliquidTransaction:SpotSend",
"domain": {
"name": "HyperliquidSignTransaction",
"version": "1",
"chainId": 42161,
"verifyingContract": "0x0000000000000000000000000000000000000000"
},
"message": {
"destination": "0x0000000000000000000000000000000000000000",
"token": "PURR:0xc1fb593aeffbeb02f85e0308e9956a90",
"amount": "0.1",
"time": 1716531066415,
"hyperliquidChain": "Mainnet"
}
}
Инициировать запрос на вывод
POST https://api.hyperliquid.xyz/exchange
Этот метод используется для запуска процесса вывода. После выполнения этого запроса валидаторы L1 подпишут и отправят запрос на вывод в контракт моста. На момент написания комиссия за вывод составляет $1, а завершение вывода занимает примерно 5 минут.
Заголовки
| Название | Тип | Описание |
|---|---|---|
| Content-Type* | String | "application/json" |
Тело запроса
| Название | Тип | Описание |
|---|---|---|
| action* | Object | { "hyperliquidChain": "Mainnet" (в тестовой сети используйте вместо этого "Testnet"), "amount": количество usd для отправки в виде строки; например, "1" для 1 usd, "time": текущая метка времени в миллисекундах в виде Number, должна совпадать с nonce, "destination": адрес в 42-символьном шестнадцатеричном формате; например, 0x0000000000000000000000000000000000000000 } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах; она должна совпадать с nonce в объекте action выше |
| signature* | Object |
{% tabs %}
{'status': 'ok', 'response': {'type': 'default'}}
{% endtab %}
Перевод со спотового аккаунта на перп-аккаунт (и наоборот)
POST https://api.hyperliquid.xyz/exchange
Этот метод используется для перевода USDC со спотового кошелька пользователя на перп-кошелёк и наоборот.
Заголовки
| Название | Значение |
|---|---|
| Content-Type* | "application/json" |
Тело
| Название | Тип | Описание |
|---|---|---|
| action* | Object | { "type": "usdClassTransfer", "hyperliquidChain": "Mainnet" (в тестовой сети используйте вместо этого "Testnet"), "amount": количество usd для перевода в виде строки; например, "1" для 1 usd. Если вы хотите использовать это действие для субаккаунта, можно указать subaccount: адрес после amount, например, "1" subaccount:0x0000000000000000000000000000000000000000, "toPerp": true, если (спот -> перп), иначе false, "nonce": текущая метка времени в миллисекундах в виде Number, должна совпадать с nonce во внешнем теле запроса } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах; она должна совпадать с nonce в объекте action выше |
| signature* | Object |
Ответ
{% tabs %}
{'status': 'ok', 'response': {'type': 'default'}}
{% endtab %}
Внести в стейкинг
POST https://api.hyperliquid.xyz/exchange
Этот метод используется для перевода нативного токена со спотового аккаунта пользователя в стейкинг для делегирования валидаторам.
Заголовки
| Название | Значение |
|---|---|
| Content-Type* | application/json |
Тело
| Название | Тип | Описание |
|---|---|---|
| action* | Object | { "type": "cDeposit", "hyperliquidChain": "Mainnet" (в тестовой сети используйте вместо этого "Testnet"), "wei": количество wei для перевода в виде числа, "nonce": текущая метка времени в миллисекундах в виде Number, должна совпадать с nonce во внешнем теле запроса } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах; она должна совпадать с nonce в объекте action выше |
| signature* | Object |
Ответ
{% tabs %}
{'status': 'ok', 'response': {'type': 'default'}}
{% endtab %}
Внести в стейкинг (агент)
POST https://api.hyperliquid.xyz/exchange
Аналогично внесению в стейкинг, но может быть подписано агентом.
Заголовки
| Название | Значение |
|---|---|
| Content-Type* | application/json |
Тело
| Название | Тип | Описание |
|---|---|---|
| action* | Object | { "type": "cDeposit2", "wei": количество wei для перевода в виде числа } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах |
| signature* | Object | |
| expiresAfter | Number | Метка времени в миллисекундах |
Ответ
{% tabs %}
{'status': 'ok', 'response': {'type': 'default'}}
{% endtab %}
Вывести из стейкинга
POST https://api.hyperliquid.xyz/exchange
Этот метод используется для перевода нативного токена из стейкинга на спотовый аккаунт пользователя. Обратите внимание, что переводы из стейкинга на спотовый аккаунт проходят через 7-дневную очередь вывода из стейкинга.
Заголовки
| Название | Значение |
|---|---|
| Content-Type* | application/json |
Тело
| Название | Тип | Описание |
|---|---|---|
| action* | Object | { "type": "cWithdraw", "hyperliquidChain": "Mainnet" (в тестовой сети используйте вместо этого "Testnet"), "wei": количество wei для перевода в виде числа, "nonce": текущая метка времени в миллисекундах в виде Number, должна совпадать с nonce во внешнем теле запроса } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах; она должна совпадать с nonce в объекте action выше |
| signature* | Object |
Ответ
{% tabs %}
{'status': 'ok', 'response': {'type': 'default'}}
{% endtab %}
Делегировать или вывести стейк у валидатора
POST https://api.hyperliquid.xyz/exchange
Делегировать нативные токены валидатору или вывести их. Обратите внимание, что делегирование конкретному валидатору имеет срок блокировки 1 день.
Заголовки
| Название | Значение |
|---|---|
| Content-Type* | application/json |
Тело
| Название | Тип | Описание |
|---|---|---|
| action* | Object | { "type": "tokenDelegate", "hyperliquidChain": "Mainnet" (в тестовой сети используйте вместо этого "Testnet"), "validator": адрес в 42-символьном шестнадцатеричном формате; например, 0x0000000000000000000000000000000000000000, "wei": число, "nonce": текущая метка времени в миллисекундах в виде Number, должна совпадать с nonce во внешнем теле запроса } |
| nonce* | number | Рекомендуется использовать текущую метку времени в миллисекундах |
| signature* | Object |
Ответ
{% tabs %}
{'status': 'ok', 'response': {'type': 'default'}}
{% endtab %}
Ввод или вывод средств из хранилища
POST https://api.hyperliquid.xyz/exchange
Добавить или удалить средства из хранилища.
Заголовки
| Название | Значение |
|---|---|
| Content-Type* | application/json |
Тело
| Название | Тип | Описание |
|---|---|---|
| action* | Object | { "type": "vaultTransfer", "vaultAddress": адрес в 42-символьном шестнадцатеричном формате; например, 0x0000000000000000000000000000000000000000, "usd": число } |
| nonce* | number | Рекомендуется использовать текущую метку времени в миллисекундах |
| signature* | Object | |
| expiresAfter | Number | Метка времени в миллисекундах |
Ответ
{% tabs %}
{'status': 'ok', 'response': {'type': 'default'}}
{% endtab %}
Ввод или вывод средств из backstop-ликвидатора HIP-3 DEX
POST https://api.hyperliquid.xyz/exchange
Добавить или удалить средства с адреса backstop-ликвидатора HIP-3. ntl — целое число в единицах 1e-6 котируемого актива. Сумма должна быть кратна 1000 котируемого актива (т.е. ntl % 1000000000 == 0).
Вывести можно только основную сумму, но не pnl.
Заголовки
| Название | Значение |
|---|---|
| Content-Type* | application/json |
Тело
| Название | Тип | Описание |
|---|---|---|
| action* | Object | { "type": "hip3LiquidatorTransfer", "dex": string (например, "xyz"), "ntl": число, } |
| nonce* | number | Рекомендуется использовать текущую метку времени в миллисекундах |
| signature* | Object | |
| expiresAfter | Number | Метка времени в миллисекундах |
Ответ
{% tabs %}
{'status': 'ok', 'response': {'type': 'default'}}
{% endtab %}
Одобрить API-кошелёк
POST https://api.hyperliquid.xyz/exchange
Одобряет API-кошелёк (иногда также называемый Agent Wallet). Подробнее см. здесь.
Заголовки
| Название | Значение |
|---|---|
| Content-Type* | application/json |
Тело
| Название | Тип | Описание |
|---|---|---|
| action* | Object | { "hyperliquidChain": "Mainnet" (в тестовой сети используйте вместо этого "Testnet"), "agentAddress": адрес в 42-символьном шестнадцатеричном формате; например, 0x0000000000000000000000000000000000000000, "agentName": необязательное имя для API-кошелька. Аккаунт может иметь 1 неодобренный по имени кошелёк без имени и до 3 именованных. Дополнительно разрешены 2 именованных агента на каждый субаккаунт. Пользовательский срок действия можно задать, добавив "nonce": текущая метка времени в миллисекундах в виде Number, должна совпадать с nonce во внешнем теле запроса } |
| nonce* | number | Рекомендуется использовать текущую метку времени в миллисекундах |
| signature* | Object |
Ответ
{% tabs %}
{'status': 'ok', 'response': {'type': 'default'}}
{% endtab %}
Одобрить комиссию билдера
POST https://api.hyperliquid.xyz/exchange
Одобрить максимальную ставку комиссии для билдера.
Заголовки
| Название | Значение |
|---|---|
| Content-Type* | application/json |
Тело
| Название | Тип | Описание |
|---|---|---|
| action* | Object | { "hyperliquidChain": "Mainnet" (в тестовой сети используйте вместо этого "Testnet"), "maxFeeRate": максимально допустимая ставка комиссии билдера в виде строки с процентами; например, "0.001%", "builder": адрес в 42-символьном шестнадцатеричном формате; например, 0x0000000000000000000000000000000000000000, "nonce": текущая метка времени в миллисекундах в виде Number, должна совпадать с nonce во внешнем теле запроса } |
| nonce* | number | Рекомендуется использовать текущую метку времени в миллисекундах |
| signature* | Object |
Ответ
{% tabs %}
{'status': 'ok', 'response': {'type': 'default'}}
{% endtab %}
Разместить TWAP-ордер
POST https://api.hyperliquid.xyz/exchange
Заголовки
| Название | Тип | Описание |
|---|---|---|
| Content-Type* | String | "application/json" |
Тело запроса
| Название | Тип | Описание |
|---|---|---|
| action* | Object | { "type": "twapOrder", "a": Number, "b": Boolean, "s": String, "r": Boolean, "m": Number, "t": Boolean } } m — минуты |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах |
| signature* | Object | |
| vaultAddress | String | Если торговля ведётся от имени хранилища или субаккаунта — его адрес onchain в 42-символьном шестнадцатеричном формате; например, 0x0000000000000000000000000000000000000000 |
| expiresAfter | Number | Метка времени в миллисекундах |
{% tabs %}
{
"status":"ok",
"response":{
"type":"twapOrder",
"data":{
"status": {
"running":{
"twapId":77738308
}
}
}
}
}
{% endtab %}
{% tab title="200: OK Ответ с ошибкой" %}
{
"status":"ok",
"response":{
"type":"twapOrder",
"data":{
"status": {
"error":"Invalid TWAP duration: 1 min(s)"
}
}
}
}
{% endtab %}
Отменить TWAP-ордер
POST https://api.hyperliquid.xyz/exchange
Заголовки
| Название | Тип | Описание |
|---|---|---|
| Content-Type* | String | "application/json" |
Тело запроса
| Название | Тип | Описание |
|---|---|---|
| action* | Object | { "type": "twapCancel", "a": Number, "t": Number } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах |
| signature* | Object | |
| vaultAddress | String | Если торговля ведётся от имени хранилища или субаккаунта — его адрес в 42-символьном шестнадцатеричном формате; например, 0x0000000000000000000000000000000000000000 |
| expiresAfter | Number | Метка времени в миллисекундах |
{% tabs %}
{
"status":"ok",
"response":{
"type":"twapCancel",
"data":{
"status": "success"
}
}
}
{% endtab %}
{% tab title="200: OK Ответ с ошибкой" %}
{
"status":"ok",
"response":{
"type":"twapCancel",
"data":{
"status": {
"error": "TWAP was never placed, already canceled, or filled."
}
}
}
}
{% endtab %}
Разместить трейлинг-стоп ордер
POST https://api.hyperliquid.xyz/exchange
Заголовки
| Название | Тип | Описание |
|---|---|---|
| Content-Type* | String | "application/json" |
Тело запроса
| Название | Тип | Описание | |
|---|---|---|---|
| action* | Object | { "type": "trailingStop", "asset": Number, "isBuy": Boolean, "sz": String, "reduceOnly": Boolean, "retracement": {"pct": в виде строки с процентами; например, "1.234%"} или {"px": String}, "activationPx": String |
null } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах | |
| signature* | Object | ||
| vaultAddress | String | Если торговля ведётся от имени хранилища или субаккаунта — его адрес в 42-символьном шестнадцатеричном формате; например, 0x0000000000000000000000000000000000000000 | |
| expiresAfter | Number | Метка времени в миллисекундах |
{% tabs %}
{
"status":"ok",
"response":{
"type":"trailingStop",
"data":{
"oid":77738308
}
}
}
{% endtab %}
Резервирование дополнительных действий
POST https://api.hyperliquid.xyz/exchange
Вместо увеличения основанных на адресе лимитов запросов путём торговли, это действие позволяет резервировать дополнительные действия за 0.0005 USDC за запрос. Стоимость списывается с перп-баланса.
destination может быть задан, чтобы оплатить за другого пользователя L1. Пользователь назначения должен уже существовать. Это поле пропускается при хешировании, если оно не задано.
Заголовки
| Название | Тип | Описание |
|---|---|---|
| Content-Type* | String | "application/json" |
Тело запроса
| Название | Тип | Описание | |
|---|---|---|---|
| action* | Object | { "type": "reserveRequestWeight", "weight": Number, "destination": Address |
null } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах | |
| signature* | Object | ||
| expiresAfter | Number | Метка времени в миллисекундах |
{% tabs %}
{'status': 'ok', 'response': {'type': 'default'}}
{% endtab %}
Аннулировать ожидающий nonce (noop)
POST https://api.hyperliquid.xyz/exchange
Это действие ничего не делает (no operation), но приводит к отметке nonce как использованного. Это может быть более эффективным способом отменить ордера в обработке, чем действие отмены.
Заголовки
| Название | Тип | Описание |
|---|---|---|
| Content-Type* | String | "application/json" |
Тело запроса
| Название | Тип | Описание |
|---|---|---|
| action* | Object | { "type": "noop" } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах |
| signature* | Object | |
| expiresAfter | Number | Метка времени в миллисекундах |
{% tabs %}
{'status': 'ok', 'response': {'type': 'default'}}
{% endtab %}
Включить абстракцию HIP-3 DEX
POST https://api.hyperliquid.xyz/exchange
ПРИМЕЧАНИЕ: устарело. Предпочтительнее использовать userSetAbstraction.
Если установлено, действия с перпами HIP-3 будут автоматически переводить обеспечение с перп-баланса USDC, управляемого валидаторами, для HIP-3 DEX'ов, где USDC является токеном обеспечения, а иначе со спота. Когда абстракция HIP-3 DEX активна, обеспечение при высвобождении из позиций или открытых ордеров возвращается в тот же источник (перп-баланс USDC, управляемый валидаторами, или спотовый баланс).
Заголовки
| Название | Тип | Описание |
|---|---|---|
| Content-Type* | String | "application/json" |
Тело запроса
| Название | Тип | Описание |
|---|---|---|
| action* | Object | { "type": "userDexAbstraction", "hyperliquidChain": "Mainnet" (в тестовой сети используйте вместо этого "Testnet"), "signatureChainId": id цепочки, используемой при подписывании, в шестнадцатеричном формате; например, "0xa4b1" для Arbitrum, "user": адрес в 42-символьном шестнадцатеричном формате. Может быть субаккаунтом пользователя, "enabled": boolean, "nonce": текущая метка времени в миллисекундах в виде Number, должна совпадать с nonce } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах |
| signature* | Object |
{% tabs %}
{'status': 'ok', 'response': {'type': 'default'}}
{% endtab %}
Включить абстракцию HIP-3 DEX (агент)
ПРИМЕЧАНИЕ: устарело. Предпочтительнее использовать agentSetAbstraction.
Тот же эффект, что и у UserDexAbstraction выше, но работает только при установке значения с null на true.
Заголовки
| Название | Тип | Описание |
|---|---|---|
| Content-Type* | String | "application/json" |
Тело запроса
| Название | Тип | Описание |
|---|---|---|
| action* | Object | { "type": "agentEnableDexAbstraction" } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах |
| signature* | Object |
{% tabs %}
{'status': 'ok', 'response': {'type': 'default'}}
{% endtab %}
Установить пользовательскую абстракцию
POST https://api.hyperliquid.xyz/exchange
Заголовки
| Название | Тип | Описание |
|---|---|---|
| Content-Type* | String | "application/json" |
Тело запроса
| Название | Тип | Описание |
|---|---|---|
| action* | Object | { "type": "userSetAbstraction", "hyperliquidChain": "Mainnet" (в тестовой сети используйте вместо этого "Testnet"), "signatureChainId": id цепочки, используемой при подписывании, в шестнадцатеричном формате; например, "0xa4b1" для Arbitrum, "user": адрес в 42-символьном шестнадцатеричном формате. Может быть субаккаунтом пользователя, "abstraction": одна из строк ["disabled", "unifiedAccount", "portfolioMargin"], "nonce": текущая метка времени в миллисекундах в виде Number, должна совпадать с nonce } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах |
| signature* | Object |
{% tabs %}
{'status': 'ok', 'response': {'type': 'default'}}
{% endtab %}
Установить пользовательскую абстракцию (агент)
POST https://api.hyperliquid.xyz/exchange
Заголовки
| Название | Тип | Описание |
|---|---|---|
| Content-Type* | String | "application/json" |
Тело запроса
| Название | Тип | Описание |
|---|---|---|
| action* | Object | { "type": "agentSetAbstraction", "abstraction": одна из строк ["i", "u", "p"], где "i" — "disabled", "u" — "unifiedAccount", а "p" — "portfolioMargin" } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах |
| signature* | Object |
{% tabs %}
{'status': 'ok', 'response': {'type': 'default'}}
{% endtab %}
Разделить исход (split outcome)
Разделяет X котируемых токенов на X долей Yes и X долей No.
POST https://api.hyperliquid.xyz/exchange
Заголовки
| Название | Тип | Описание |
|---|---|---|
| Content-Type* | String | "application/json" |
Тело запроса
| Название | Тип | Описание |
|---|---|---|
| action* | Object | { "type": "userOutcome", "splitOutcome": { "outcome": Number, amount: String (например, "123.0") } } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах |
| signature* | Object |
{% tabs %}
{'status': 'ok', 'response': {'type': 'default'}}
{% endtab %}
Объединить исход (merge outcome)
Объединяет X долей Yes и X долей No в X котируемых токенов.
POST https://api.hyperliquid.xyz/exchange
Заголовки
| Название | Тип | Описание |
|---|---|---|
| Content-Type* | String | "application/json" |
Тело запроса
| Название | Тип | Описание | |
|---|---|---|---|
| action* | Object | { "type": "userOutcome", "mergeOutcome": { "outcome": Number, amount: String |
null (null означает максимум) } } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах | |
| signature* | Object |
{% tabs %}
{'status': 'ok', 'response': {'type': 'default'}}
{% endtab %}
Объединить вопрос (merge question)
Объединяет X долей Yes из каждого исхода, связанного с одним вопросом, в X котируемых токенов.
POST https://api.hyperliquid.xyz/exchange
Заголовки
| Название | Тип | Описание |
|---|---|---|
| Content-Type* | String | "application/json" |
Тело запроса
| Название | Тип | Описание | |
|---|---|---|---|
| action* | Object | { "type": "userOutcome", "mergeQuestion": { "question": Number, amount: String |
null (null означает максимум) } } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах | |
| signature* | Object |
{% tabs %}
{'status': 'ok', 'response': {'type': 'default'}}
{% endtab %}
Отрицать исход (negate outcome)
Конвертирует X долей No из исхода, связанного с вопросом, в X долей Yes каждого другого исхода, связанного с этим вопросом.
POST https://api.hyperliquid.xyz/exchange
Заголовки
| Название | Тип | Описание |
|---|---|---|
| Content-Type* | String | "application/json" |
Тело запроса
| Название | Тип | Описание |
|---|---|---|
| action* | Object | { "type": "userOutcome", "negateOutcome": { "question": Number, "outcome": Number, amount: String } } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах |
| signature* | Object |
{% tabs %}
{'status': 'ok', 'response': {'type': 'default'}}
{% endtab %}
Голосование валидатора по безрисковой ставке для выровненного котируемого актива
POST https://api.hyperliquid.xyz/exchange
Заголовки
| Название | Тип | Описание |
|---|---|---|
| Content-Type* | String | "application/json" |
Тело запроса
| Название | Тип | Описание |
|---|---|---|
| action* | Object | { "type": "validatorL1Stream", "riskFreeRate": String // например, "0.04" для 4% } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах |
| signature* | Object |
{% tabs %}
{'status': 'ok', 'response': {'type': 'default'}}
{% endtab %}
Авторизовать роль AQAv2
POST https://api.hyperliquid.xyz/exchange
Заголовки
| Название | Тип | Описание |
|---|---|---|
| Content-Type* | String | "application/json" |
Тело запроса
| Название | Тип | Описание | |
|---|---|---|---|
| action* | Object | { "type": "authorizeAqav2Role", "token": number // например, 0 для USDC, "role": "technical" |
"treasury" } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах | |
| signature* | Object |
{% tabs %}
{'status': 'ok', 'response': {'type': 'default'}}
{% endtab %}
Получить вознаграждения
POST https://api.hyperliquid.xyz/exchange
Заголовки
| Название | Тип | Описание |
|---|---|---|
| Content-Type* | String | "application/json" |
Тело запроса
| Название | Тип | Описание |
|---|---|---|
| action* | Object | { "type": "claimRewards" } |
| nonce* | Number | Рекомендуется использовать текущую метку времени в миллисекундах |
| signature* | Object |
{% tabs %}
{'status': 'ok', 'response': {'type': 'default'}}
{% endtab %}