/v1.
Отримання доступу
Доступ надається окремо для кожного проєкту. Потрібні всі чотири умови:Активна підписка, Silver або вище
Схвалена заявка розробника
Прийняті умови для розробників API
Scopes, потрібні вашому проєкту
Scopes
Автентифікація
Надсилайте секретний ключ як Bearer-токен:- Список дозволених IP — обмежує виклики конкретними IP-адресами серверів
- Ліміти частоти — стелі на проєкт, що зростають разом із рівнем підписки власника
Ключі, ротація та зберігання
- Тримайте ключ лише на сервері — хто ним володіє, може списувати кошти ваших користувачів
- Робіть ротацію на вкладці API-ключів. Попередній ключ працює ще 24 години — пільговий період, щоб викотити оновлення без простою
- Секрет підпису вебхуків ротується окремо, з власним 24-годинним перекриттям
- У разі витоку негайно зробіть ротацію
Офіційний SDK для Node.js
Офіційний пакет@vetox-bot/vito обгортає всі девʼять ендпоїнтів і перевірку вебхуків. Він бере на себе заголовок Idempotency-Key, повторні спроби зі зростаючою затримкою, тайм-аути та класифікацію помилок.
Встановлення
fetch і node:crypto — та постачається одразу в ESM і CommonJS з повними визначеннями TypeScript.
Ініціалізація
apiKey, SDK прочитає VITO_API_KEY з оточення. Формат ключа перевіряється під час створення клієнта, тож некоректний ключ впаде одразу, а не після мережевого обходу й відповіді 401.
Параметри клієнта
Доступні методи
data — вам ніколи не доводиться самотужки розбирати success чи data. Усі методи приймають також параметри на конкретний виклик: { timeoutMs, maxRetries, signal, headers }, а методи запису додатково — { idempotencyKey }.Приклади використання
Перевірка ключа під час запуску
Читання балансу
Списання з користувача (продаж товару)
Нарахування користувачеві
Перебір транзакцій
Ідемпотентність і повторні спроби
SDK надсилає заголовокIdempotency-Key при кожному записі (deduct, credit, transfer). Якщо ви його не передали, SDK формує ключ один раз на виклик і повторює точно той самий ключ при кожній повторній спробі, тож повтор не може провести операцію двічі.
Передавайте власний ключ, коли та сама логічна операція може повторитися з нового процесу — обробника завдань, повторної доставки з черги або планового прогону:
auth.rotateKey() виключено навмисно — повтор там випустить другий ключ і знецінить той, що повернула перша спроба.Перевірка вебхуків через SDK
constructEvent перевіряє пʼятихвилинне вікно повторів, порівнює за сталий час із кожним підписом h1 у заголовку — тож автоматично працює під час 24-годинного перекриття при ротації — далі розбирає корисне навантаження й повертає типізовану подію.
В обробнику маршруту Next.js (App Router) використовуйте варіант, що сам читає сире тіло:
event.eventId, перш ніж виконувати будь-який побічний ефект.Обробка помилок
Усе, що кидає SDK, успадковується відVitoError і несе code, status, type, requestId та retryable.
Скасування виклику
VitoConnectionError з кодом VITO_SDK_ABORTED.
Списання з користувача
Ваш застосунок викликає POST /v1/deduct
guildId і даними товару.Vito повертає confirmUrl
Користувач підтверджує PIN-кодом
vetox.io.Vito проводить розрахунок і сповіщає
Ваш застосунок перевіряє й завершує
Параметри запиту — /v1/deduct
Нарахування користувачеві
POST /v1/add нараховує Vito користувачеві з вашого власного балансу — для нагород або повернень. Ті самі поля, що й у /deduct, окрім guildId і product.
credit:create і достатній баланс, інакше виклик поверне 402 VITO_INSUFFICIENT_OWNER_FUNDS.Комісії
Кожне списання надходить вам за вирахуванням комісії платформи — за тією ж шкалою, що й перекази Vito всередині застосунку, залежно від вашого рівня підписки:/v1/add не обкладаються нею ніколи.Вебхуки
Додайте одну або кількаhttps-адрес зворотного виклику на вкладці налаштувань. Vito надсилає підписаний POST, щойно підтвердження досягає кінцевого стану.
Перевірка підпису
Кожна доставка містить заголовокX-Vito-Signature:
X-Vito-Event-Id як ключ дедуплікації, бо повторна спроба надсилає той самий ідентифікатор:
<ts>:<rawBody> вашим секретом підпису і порівняйте за сталий час.
Події
Пʼять типів подій з однаковою структурою корисного навантаження. Полеdata.status містить результат.
Коди помилок
Кожна відповідь загорнута в конверт. Успіх несеdata, помилка — error, і ніколи обидва разом:
Ліміти частоти
Idempotency-Key, щоб безпечно уникати дублів при повторних спробах.Ендпоїнти
Обмеження
- Підтвердження спливають через 10 хвилин — вважайте непідтверджені запити покинутими
amountмає бути додатним цілим числомmetadataобмежена 10 ключами- Ліміти на транзакцію і на день задає команда Vetox; вони показані лише для читання на вкладці налаштувань
Чек-лист безпеки
Тримайте секрети на сервері
Тримайте секрети на сервері
Перевіряйте кожен вебхук
Перевіряйте кожен вебхук
Проводьте розрахунок лише за completed
Проводьте розрахунок лише за completed
/deduct — списання остаточне лише за confirmation.completed.Мінімум привілеїв
Мінімум привілеїв
Усунення несправностей
Кожен виклик повертає «не авторизовано»
Кожен виклик повертає «не авторизовано»
Я загубив ключ
Я загубив ключ
Підписи вебхуків не проходять після ротації
Підписи вебхуків не проходять після ротації
Списання ніколи не завершується
Списання ніколи не завершується
Вебхуки не надходять
Вебхуки не надходять
Надійшло менше Vito, ніж я списав
Надійшло менше Vito, ніж я списав
402 VITO_INSUFFICIENT_OWNER_FUNDS
402 VITO_INSUFFICIENT_OWNER_FUNDS
/v1/add фінансується з вашого власного балансу, а не створюється з нічого. Поповніть його.