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

Вебхук

Куда приходят события, алерты о низком балансе газ-кошелька и секрет подписи. Сами события — на странице События вебхука.

GET/v1/webhook

КодОписание
200Настройка вебхука. Возвращает Webhook.
401unauthorized — нет API-ключа, он неизвестен или отозван.
403partner_disabled — аккаунт партнёра отключён.
404not_found — вебхук не задан.
Окно терминала
curl "https://api-testnet.portuna.io/v1/webhook" \
-H "Authorization: Bearer $PORTUNA_API_KEY"
200 OK
{
"url": "https://processing.example/hooks/sweeps",
"secret": "whsec_q8Kx2mR4tY7uI0oP3aS6dF9gH1jK5lZ8xC2vB4nM7qW",
"low_balance": [
{
"chain_id": 11155111,
"threshold": "20000000000000000",
"low": false
}
]
}

PUT/v1/webhook

Задаёт адрес, куда приходят события, и алерты о низком балансе газ-кошелька. Только публичные адреса по https, редиректы не выполняются. В ответе — secret, которым подписываются доставки: он создаётся вместе с вебхуком и при смене URL не меняется. low_balance заменяет все алерты: сети без порога в нём остаются без алерта, а запрос без low_balance снимает их все.

ПолеТипОписание
url обязательноstring (uri)Куда приходят события. До 2048 символов.
low_balanceмассив objectАлерты о низком балансе газ-кошелька, не больше одного на сеть.
low_balance[].chain_id обязательноChainIDИдентификатор сети (EIP-155): 11155111 Sepolia и 97 BSC testnet с тестовым ключом, 1 Ethereum и 56 BSC с боевым.
low_balance[].threshold обязательноAmountАлерт, когда баланс газ-кошелька в этой сети опускается ниже этого порога, в wei; больше нуля.
КодОписание
200Вебхук задан. Возвращает Webhook.
400invalid_json — тело не JSON, больше 64 КиБ или в нём неизвестные поля.
401unauthorized — нет API-ключа, он неизвестен или отозван.
403partner_disabled — аккаунт партнёра отключён.
422invalid_url — адрес не публичный или не https; unknown_chain — сеть в low_balance не поддерживается или указана дважды; invalid_amount — порог не целое число больше нуля.
Окно терминала
curl -X PUT "https://api-testnet.portuna.io/v1/webhook" \
-H "Authorization: Bearer $PORTUNA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://processing.example/hooks/sweeps",
"low_balance": [
{
"chain_id": 11155111,
"threshold": "20000000000000000"
}
]
}'
200 OK
{
"url": "https://processing.example/hooks/sweeps",
"secret": "whsec_q8Kx2mR4tY7uI0oP3aS6dF9gH1jK5lZ8xC2vB4nM7qW",
"low_balance": [
{
"chain_id": 11155111,
"threshold": "20000000000000000",
"low": false
}
]
}

DELETE/v1/webhook

Удаляет вебхук и его алерты о низком балансе. Недоставленные события отбрасываются: в журнале доставки они становятся failed. Вебхук, заданный заново, получает новый секрет.

КодОписание
204Удалён.
401unauthorized — нет API-ключа, он неизвестен или отозван.
403partner_disabled — аккаунт партнёра отключён.
404not_found — вебхук не задан.
Окно терминала
curl -X DELETE "https://api-testnet.portuna.io/v1/webhook" \
-H "Authorization: Bearer $PORTUNA_API_KEY"

GET/v1/webhook/deliveries

События партнёра, новые первыми, и как прошла их доставка.

ИмяГдеТипОписание
limitqueryintegerСколько строк на странице. От 1 до 200. По умолчанию 50.
cursorquerystringnext_cursor прошлой страницы; для первой страницы не нужен.
КодОписание
200Страница событий. Возвращает поля ниже.
400invalid_query — параметр запроса не подходит; какой — в message.
401unauthorized — нет API-ключа, он неизвестен или отозван.
403partner_disabled — аккаунт партнёра отключён.
ПолеТипОписание
items обязательномассив WebhookDelivery
next_cursor обязательноNextCursorКурсор следующей страницы; на последней — null.
Окно терминала
curl "https://api-testnet.portuna.io/v1/webhook/deliveries?limit=2" \
-H "Authorization: Bearer $PORTUNA_API_KEY"
200 OK
{
"items": [
{
"id": "4b8e0d6a-2c1f-4e37-9a55-0f6d3b2e1c84",
"event": "webhook.test",
"status": "pending",
"attempts": 2,
"last_status_code": 502,
"last_error": "status 502",
"created_at": "2026-10-11T08:00:00Z",
"delivered_at": null,
"next_attempt_at": "2026-10-11T08:00:31Z"
},
{
"id": "9c41e7d2-58a3-4b0f-a6d1-2e7f3c9b8a05",
"event": "sweep.swept",
"status": "delivered",
"attempts": 1,
"last_status_code": 204,
"last_error": null,
"created_at": "2026-10-11T07:03:02Z",
"delivered_at": "2026-10-11T07:03:03Z",
"next_attempt_at": null
}
],
"next_cursor": "eyJ0IjoiMjAyNi0xMC0xMVQwNzowMzowMloiLCJpZCI6IjljNDFlN2QyIn0"
}

POST/v1/webhook/test

Ставит в очередь событие webhook.test. Оно подписывается и доставляется, как любое другое, и видно в журнале доставки.

КодОписание
202Событие в очереди. Возвращает поля ниже.
401unauthorized — нет API-ключа, он неизвестен или отозван.
403partner_disabled — аккаунт партнёра отключён.
404not_found — вебхук не задан.
ПолеТипОписание
id обязательноstring (uuid)id события — тот же, что в доставке и в журнале доставки.
Окно терминала
curl -X POST "https://api-testnet.portuna.io/v1/webhook/test" \
-H "Authorization: Bearer $PORTUNA_API_KEY"
202 Accepted
{
"id": "4b8e0d6a-2c1f-4e37-9a55-0f6d3b2e1c84"
}