Перейти к содержимому
PortunaPortunaPortunaДокументацияTestnet

Снятие делегации

Снятие делегации возвращает депозитный адрес в обычный: код делегата с него снимается.

GET/v1/revocations

Снятия делегации, новые первыми. Фильтры можно сочетать.

ИмяГдеТипОписание
limitqueryintegerСколько строк на странице. От 1 до 200. По умолчанию 50.
cursorquerystringnext_cursor прошлой страницы; для первой страницы не нужен.
statusquerystringТолько снятия с этим статусом. Одно из: queued, processing, revoked, failed, rejected.
chain_idqueryChainIDТолько эта сеть.
accountqueryAddressТолько снятия с этого депозитного адреса.
КодОписание
200Страница снятий. Возвращает поля ниже.
400invalid_query — параметр запроса не подходит; какой — в message.
401unauthorized — нет API-ключа, он неизвестен или отозван.
403partner_disabled — аккаунт партнёра отключён.
ПолеТипОписание
items обязательномассив Revocation
next_cursor обязательноNextCursorКурсор следующей страницы; на последней — null.
Окно терминала
curl "https://api-testnet.portuna.io/v1/revocations?account=0x2c7536E3605D9C16a7a3D7b1898e529396a65c23" \
-H "Authorization: Bearer $PORTUNA_API_KEY"
200 OK
{
"items": [
{
"id": "5e9b1c27-3f6d-4a08-8c2e-71d4a0b9f356",
"external_id": "revoke-2c75",
"chain_id": 11155111,
"account": "0x2c7536E3605D9C16a7a3D7b1898e529396a65c23",
"status": "revoked",
"attempts": 1,
"tx_hash": "0x452b10b75c363823e1fa24b25d89bdaf2c7e3237deacc5260991627ee49954e3",
"gas": 28800,
"gas_cost": "34560000000000",
"created_at": "2026-10-12T10:00:00Z",
"updated_at": "2026-10-12T10:00:37Z"
}
],
"next_cursor": null
}

POST/v1/revocations

Возвращает депозитный адрес в обычный: адрес подписывает авторизацию на нулевой адрес, а газ-кошелёк отправляет её транзакцией самому себе. Газ — с газ-кошелька партнёра, без комиссии. Снятие ждёт, пока уйдут sweep этого адреса, запрошенные раньше. Подписывайте с nonce адреса на момент отправки: если раньше снятия в сеть уйдёт sweep с авторизацией, nonce вырастет на 1. Итог приходит событием вебхука revocation.revoked, revocation.failed или revocation.rejected и виден в GET /v1/revocations/{id}. Чтобы потом снова сметать с адреса, нужна новая авторизация на делегат.

ПолеТипОписание
external_idstringВаш id снятия, уникальный в аккаунте: запрос с уже занятым external_id возвращает то снятие, а не создаёт новое, поэтому повторять запрос безопасно. До 128 символов.
chain_id обязательноChainIDИдентификатор сети (EIP-155): 11155111 Sepolia и 97 BSC testnet с тестовым ключом, 1 Ethereum и 56 BSC с боевым.
account обязательноAddressДепозитный адрес.
authorization обязательноAuthorizationАвторизация депозитного адреса с address = 0x0000000000000000000000000000000000000000.
authorization.chain_id обязательноinteger (int64)Сеть запроса; 0 (любая сеть) не принимается.
authorization.address обязательноAddressДелегат горячего кошелька из POST /v1/hot-wallets; для снятия делегации — нулевой адрес.
authorization.nonce обязательноinteger (int64)Текущий nonce депозитного адреса.
authorization.y_parity обязательноintegerЧётность y подписи. Одно из: 0, 1.
authorization.r обязательноstringr подписи, 0x-hex до 32 байт. Формат: ^0x[0-9a-fA-F]{1,64}$.
authorization.s обязательноstrings подписи, 0x-hex до 32 байт, в нижней половине порядка кривой (EIP-2). Формат: ^0x[0-9a-fA-F]{1,64}$.
КодОписание
200Снятие с этим external_id уже есть. Возвращается оно в текущем состоянии, нового снятия не создаётся. Возвращает Revocation.
202Снятие в очереди. Возвращает Revocation.
400invalid_json — тело не JSON, больше 64 КиБ или в нём неизвестные поля.
401unauthorized — нет API-ключа, он неизвестен или отозван.
403partner_disabled — аккаунт партнёра отключён.
422unknown_chain, invalid_external_id, invalid_address или invalid_authorization (в том числе когда нет authorization); что не так — в message.
Окно терминала
curl -X POST "https://api-testnet.portuna.io/v1/revocations" \
-H "Authorization: Bearer $PORTUNA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"external_id": "revoke-2c75",
"chain_id": 11155111,
"account": "0x2c7536E3605D9C16a7a3D7b1898e529396a65c23",
"authorization": {
"chain_id": 11155111,
"address": "0x0000000000000000000000000000000000000000",
"nonce": 1,
"y_parity": 1,
"r": "0x04bec751666b1f63d7f4572d81a38642d47517b63b84f6b94a0a494a198c315d",
"s": "0x2a3cc8c27acdae37a0eb652d394ff698ad3910adbfa4d7a393c49a6d4099cabb"
}
}'
202 Accepted
{
"id": "5e9b1c27-3f6d-4a08-8c2e-71d4a0b9f356",
"external_id": "revoke-2c75",
"chain_id": 11155111,
"account": "0x2c7536E3605D9C16a7a3D7b1898e529396a65c23",
"status": "queued",
"attempts": 0,
"created_at": "2026-10-12T10:00:00Z",
"updated_at": "2026-10-12T10:00:00Z"
}

GET/v1/revocations/{id}

ИмяГдеТипОписание
id обязательноpathstring (uuid)id снятия.
КодОписание
200Снятие. Возвращает Revocation.
401unauthorized — нет API-ключа, он неизвестен или отозван.
403partner_disabled — аккаунт партнёра отключён.
404not_found — такого объекта у партнёра нет.
Окно терминала
curl "https://api-testnet.portuna.io/v1/revocations/5e9b1c27-3f6d-4a08-8c2e-71d4a0b9f356" \
-H "Authorization: Bearer $PORTUNA_API_KEY"
200 OK
{
"id": "5e9b1c27-3f6d-4a08-8c2e-71d4a0b9f356",
"external_id": "revoke-2c75",
"chain_id": 11155111,
"account": "0x2c7536E3605D9C16a7a3D7b1898e529396a65c23",
"status": "revoked",
"attempts": 1,
"tx_hash": "0x452b10b75c363823e1fa24b25d89bdaf2c7e3237deacc5260991627ee49954e3",
"gas": 28800,
"gas_cost": "34560000000000",
"created_at": "2026-10-12T10:00:00Z",
"updated_at": "2026-10-12T10:00:37Z"
}