API
Всё, что видно на этих страницах, можно получить запросом без токена. Токен бота нужен, чтобы управлять своими нодами и получать события.Быстрый старт
Базовый адрес вашего пула плюс путь (в примере он в переменной MTPOOL_URL). Ответы в JSON, время в формате RFC 3339, длительности в секундах. Страницы обновляются раз в 30 секунд, чаще опрашивать API нет смысла. Заголовок ETag экономит трафик: пришлите его в If-None-Match и получите 304, если ничего не изменилось.
curl -s "$MTPOOL_URL/api/v1/nodes" | jq '.[] | {id, state}' Публичные данные
Токен не нужен/api/v1/nodes /api/v1/nodes/{id} /api/v1/nodes/{id}/history /api/v1/domains /api/v1/links /api/v1/links/{id}/qr.svg /api/v1/bans ?limit&before /api/v1/stats/clients ?range /api/v1/stats/series ?range /api/v1/stats/summary ?range /api/v1/openapi.json /install.sh /releases/{name} Токен для бота
Выдаётся владельцем в панелиПередавайте токен в заголовке Authorization: Bearer. Бот видит только ноды своего владельца и не может менять настройки пула.
curl -s -X POST "$MTPOOL_URL/api/v1/me/nodes/ID/recheck" \ -H "Authorization: Bearer $MTPOOL_BOT_TOKEN"
/api/v1/me /api/v1/me/nodes /api/v1/me/nodes/{id}/recheck /api/v1/me/nodes/{id}/retire /api/v1/me/webhooks /api/v1/me/webhooks /api/v1/me/webhooks/{id} /api/v1/me/webhooks/{id}/deliveries ?limit&before /api/v1/me/webhooks/{id}/test Вебхуки
Пул сам сообщит о событииСобытия: node.registered, node.quarantined, node.recovered, node.banned, node.dead, node.pruned, ban.lifted, master.changed.
Каждая доставка подписана: заголовок X-MTPooL-Signature имеет вид t=<время>,v1=<подпись>. Подпись это HMAC-SHA256 от строки <время>.<тело> на секрете вебхука. Проверьте её, прежде чем верить событию.
import hmac, hashlib
def verify(secret: bytes, body: bytes, header: str) -> bool:
parts = dict(p.split("=", 1) for p in header.split(","))
signed = parts["t"].encode() + b"." + body
expected = hmac.new(secret, signed, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, parts["v1"]) Ошибки
Ошибки приходят как application/problem+json. Поле code стабильно, на него можно опираться в коде. Ломающие изменения появляются только в новой версии пути.
{
"type": "about:blank",
"title": "Not found",
"status": 404,
"code": "not_found",
"detail": "No node with this id."
}