/v1.
Obtenir l’accès
L’accès est accordé par projet. Les quatre conditions sont requises :Un abonnement actif, Silver ou supérieur
Une demande de développeur approuvée
Les conditions développeur de l'API acceptées
Les scopes dont votre projet a besoin
Scopes
Authentification
Envoyez votre clé secrète comme jeton Bearer :- Liste d’IP autorisées — restreindre les appels à des IP de serveur précises
- Limites de débit — plafonds par projet qui augmentent avec le niveau d’abonnement du détenteur
Clés, rotation et stockage
- Gardez-la uniquement côté serveur — quiconque la détient peut débiter vos utilisateurs
- Effectuez la rotation depuis l’onglet des clés API. La clé précédente reste valable pendant un délai de grâce de 24 heures, ce qui permet de déployer sans interruption
- Le secret de signature des webhooks se renouvelle séparément, avec son propre chevauchement de 24 heures
- En cas de fuite, effectuez immédiatement une rotation
SDK Node.js officiel
Le paquet officiel@vetox-bot/vito encapsule les neuf endpoints ainsi que la vérification des webhooks. Il gère pour vous l’en-tête Idempotency-Key, les nouvelles tentatives avec temporisation croissante, les délais d’attente et la classification des erreurs.
Installation
fetch intégré et node:crypto — et est livré en ESM et en CommonJS, avec des définitions TypeScript complètes.
Initialisation
apiKey, le SDK lit VITO_API_KEY dans l’environnement. Le format de la clé est validé à la construction : une clé mal formée échoue immédiatement au lieu de vous coûter un aller-retour réseau et un 401.
Options du client
Méthodes disponibles
data déjà déballé — vous n’avez jamais à extraire success ni data vous-même. Toutes acceptent en plus des options par appel : { timeoutMs, maxRetries, signal, headers }, et les méthodes d’écriture acceptent également { idempotencyKey }.Exemples d’utilisation
Vérifier la clé au démarrage
Lire un solde
Débiter un utilisateur (vendre un article)
Créditer un utilisateur
Parcourir les transactions
Idempotence et nouvelles tentatives
Le SDK envoie un en-têteIdempotency-Key sur chaque écriture (deduct, credit, transfer). Si vous n’en fournissez pas, il la génère une seule fois par appel et rejoue exactement la même clé à chaque nouvelle tentative : une nouvelle tentative ne peut donc jamais régler l’opération deux fois.
Fournissez votre propre clé lorsque la même opération logique peut être relancée depuis un nouveau processus — un exécuteur de tâches, une relivraison de file d’attente ou un balayage planifié :
auth.rotateKey() est exclu délibérément — une nouvelle tentative y génère une seconde clé et invalide celle renvoyée par la première.Vérifier les webhooks avec le SDK
constructEvent contrôle la fenêtre de rejeu de 5 minutes, compare en temps constant avec chaque signature h1 de l’en-tête — il fonctionne donc automatiquement pendant le chevauchement de 24 heures d’une rotation — puis analyse la charge utile et renvoie l’événement typé.
Dans un gestionnaire de route Next.js (App Router), utilisez la variante qui lit elle-même le corps brut :
event.eventId avant d’exécuter le moindre effet de bord.Gestion des erreurs
Tout ce que lève le SDK hérite deVitoError et porte code, status, type, requestId et retryable.
Annuler un appel
VitoConnectionError avec le code VITO_SDK_ABORTED.
Débiter un utilisateur
Votre application appelle POST /v1/deduct
guildId d’origine et les détails de l’article.Vito renvoie une confirmUrl
L'utilisateur approuve avec son code PIN
vetox.io.Vito règle et notifie
Votre application vérifie et finalise
Paramètres de la requête — /v1/deduct
Créditer un utilisateur
POST /v1/add crédite des Vito à un utilisateur depuis votre propre solde — pour des récompenses ou des remboursements. Mêmes champs que /deduct, sauf guildId et product.
credit:create et un solde suffisant, sinon l’appel renvoie 402 VITO_INSUFFICIENT_OWNER_FUNDS.Frais
Chaque débit vous est reversé après déduction des frais de la plateforme — selon le même barème que les transferts Vito dans l’application, en fonction de votre niveau d’abonnement :/v1/add le sont toujours.Webhooks
Ajoutez une ou plusieurs URL de rappelhttps dans l’onglet des paramètres. Vito envoie un POST signé dès qu’une confirmation atteint un état final.
Vérifier la signature
Chaque livraison porte un en-têteX-Vito-Signature :
X-Vito-Event-Id comme clé de déduplication, car une nouvelle tentative renvoie le même identifiant :
<ts>:<rawBody> avec votre secret de signature et comparez en temps constant.
Événements
Cinq types d’événements, partageant tous la même structure de charge utile.data.status porte le résultat.
Codes d’erreur
Chaque réponse est encapsulée. Un succès portedata, un échec porte error, jamais les deux :
Limites de débit
Idempotency-Key pour dédupliquer les nouvelles tentatives en toute sécurité.Endpoints
Limites
- Les confirmations expirent au bout de 10 minutes — considérez les demandes non confirmées comme abandonnées
amountdoit être un entier positifmetadataest plafonné à 10 clés- Les plafonds par transaction et quotidiens sont fixés par l’équipe Vetox et affichés en lecture seule dans l’onglet des paramètres
Check-list de sécurité
Gardez les secrets côté serveur
Gardez les secrets côté serveur
Vérifiez chaque webhook
Vérifiez chaque webhook
Ne réglez que sur completed
Ne réglez que sur completed
/deduct — le débit n’est définitif qu’avec confirmation.completed.Moindre privilège
Moindre privilège
Dépannage
Tous les appels renvoient non autorisé
Tous les appels renvoient non autorisé
J'ai perdu ma clé
J'ai perdu ma clé
Les signatures de webhook échouent après une rotation
Les signatures de webhook échouent après une rotation
Un débit ne se finalise jamais
Un débit ne se finalise jamais
Aucun webhook n'arrive
Aucun webhook n'arrive
J'ai reçu moins de Vito que ce que j'ai débité
J'ai reçu moins de Vito que ce que j'ai débité
402 VITO_INSUFFICIENT_OWNER_FUNDS
402 VITO_INSUFFICIENT_OWNER_FUNDS
/v1/add est financé sur votre propre solde, il n’est pas créé à partir de rien. Rechargez.