/v1 versioniert.
Zugang erhalten
Der Zugang wird pro Projekt vergeben. Du brauchst alle vier:Eine aktive Mitgliedschaft, Silver oder höher
Eine genehmigte Entwicklerbewerbung
Akzeptierte API-Entwicklerbedingungen
Die Scopes, die dein Projekt benötigt
Scopes
Authentifizierung
Sende deinen geheimen Schlüssel als Bearer-Token:- IP-Allowlist — Aufrufe auf bestimmte Server-IPs beschränken
- Rate-Limits — Obergrenzen pro Projekt, die mit der Mitgliedschaftsstufe des Inhabers steigen
Schlüssel, Rotation und Speicherung
- Halte ihn ausschließlich serverseitig — wer ihn besitzt, kann deine Nutzer belasten
- Rotiere im Tab „API Keys“. Der vorherige Schlüssel funktioniert weitere 24 Stunden als Karenzzeit, damit du ohne Ausfall deployen kannst
- Das Webhook-Signing-Secret rotiert separat, mit eigener 24-Stunden-Überlappung
- Bei einem Leak sofort rotieren
Offizielles Node.js-SDK
Das offizielle Paket@vetox-bot/vito kapselt alle neun Endpunkte sowie die Webhook-Prüfung. Es übernimmt den Idempotency-Key-Header, Retries mit exponentiellem Backoff, Timeouts und die Klassifizierung von Fehlern für dich.
Installation
fetch und node:crypto — und liefert ESM und CommonJS zusammen mit vollständigen TypeScript-Definitionen.
Initialisierung
apiKey weg, liest das SDK VITO_API_KEY aus der Umgebung. Das Schlüsselformat wird bereits beim Erzeugen geprüft, sodass ein fehlerhafter Schlüssel sofort scheitert, statt dich einen Roundtrip und ein 401 zu kosten.
Client-Optionen
Verfügbare Methoden
data-Feld — du entpackst success oder data nie selbst. Zusätzlich nimmt jede Methode Optionen pro Aufruf entgegen: { timeoutMs, maxRetries, signal, headers }, und die schreibenden Methoden zusätzlich { idempotencyKey }.Anwendungsbeispiele
Schlüssel beim Start prüfen
Guthaben lesen
Einen Nutzer belasten (Artikel verkaufen)
Einem Nutzer gutschreiben
Transaktionen durchblättern
Idempotenz und Retries
Das SDK sendet bei jeder Schreiboperation (deduct, credit, transfer) einen Idempotency-Key-Header. Übergibst du keinen, erzeugt es ihn einmal pro Aufruf und sendet exakt denselben Key bei jedem Retry erneut, sodass ein Retry den Vorgang niemals zweimal buchen kann.
Übergib einen eigenen Key, wenn derselbe logische Vorgang aus einem neuen Prozess wiederholt werden kann — Job-Runner, erneute Zustellung aus einer Queue oder ein geplanter Lauf:
auth.rotateKey() ist bewusst ausgenommen — ein Retry erzeugt dort einen zweiten Schlüssel und entwertet den, den der erste Versuch zurückgegeben hat.Webhooks mit dem SDK prüfen
constructEvent prüft das 5-Minuten-Replay-Fenster, vergleicht in konstanter Zeit gegen jede h1-Signatur im Header — funktioniert damit automatisch während der 24-stündigen Rotationsüberlappung — parst anschließend die Payload und gibt das typisierte Event zurück.
In einem Next.js-Route-Handler (App Router) nutzt du die Variante, die den Raw Body selbst liest:
event.eventId, bevor du irgendeinen Seiteneffekt ausführst.Fehlerbehandlung
Alles, was das SDK wirft, erbt vonVitoError und trägt code, status, type, requestId und retryable.
Einen Aufruf abbrechen
VitoConnectionError mit dem Code VITO_SDK_ABORTED.
Einen Nutzer belasten
Deine App ruft POST /v1/deduct auf
guildId und den Artikeldetails.Vito liefert eine confirmUrl
Der Nutzer bestätigt mit seiner PIN
vetox.io.Vito bucht und benachrichtigt
Deine App prüft und schließt ab
Request-Parameter — /v1/deduct
Einem Nutzer gutschreiben
POST /v1/add schreibt einem Nutzer Vito aus deinem eigenen Guthaben gut — für Belohnungen oder Erstattungen. Dieselben Felder wie /deduct, außer guildId und product.
credit:create und ausreichendes Guthaben, sonst antwortet der Aufruf mit 402 VITO_INSUFFICIENT_OWNER_FUNDS.Gebühren
Jede Belastung wird an dich ausgezahlt, abzüglich der Plattformgebühr — nach demselben Schema wie In-App-Vito-Transfers, basierend auf deiner Mitgliedschaftsstufe:/v1/add sind immer gebührenfrei.Webhooks
Trage im Tab „Settings“ eine oder mehrerehttps-Callback-URLs ein. Vito sendet ein signiertes POST, sobald eine Bestätigung einen Endzustand erreicht.
Signatur prüfen
Jede Auslieferung trägt einenX-Vito-Signature-Header:
X-Vito-Event-Id als Deduplizierungsschlüssel, denn ein Retry sendet dieselbe ID erneut:
<ts>:<rawBody> mit deinem Signing Secret neu und vergleiche in konstanter Zeit.
Events
Fünf Event-Typen, alle mit derselben Payload-Struktur.data.status trägt das Ergebnis.
Fehlercodes
Jede Antwort ist in einen Envelope verpackt. Ein Erfolg trägtdata, ein Fehler error — nie beides:
Rate-Limits
Idempotency-Key-Header, um Retries sicher zu deduplizieren.Endpunkte
Grenzwerte
- Bestätigungen verfallen nach 10 Minuten — behandle unbestätigte Anfragen als abgebrochen
amountmuss eine positive Ganzzahl seinmetadataist auf 10 Schlüssel begrenzt- Limits pro Transaktion und pro Tag legt das Vetox-Team fest; sie erscheinen schreibgeschützt im Tab „Settings“
Sicherheits-Checkliste
Secrets serverseitig halten
Secrets serverseitig halten
Jeden Webhook prüfen
Jeden Webhook prüfen
Nur bei completed abschließen
Nur bei completed abschließen
/deduct-Antwort hin ausliefern — die Belastung ist erst mit confirmation.completed endgültig.Least Privilege
Least Privilege
Fehlerbehebung
Jeder Aufruf liefert „nicht autorisiert“
Jeder Aufruf liefert „nicht autorisiert“
Ich habe meinen Schlüssel verloren
Ich habe meinen Schlüssel verloren
Webhook-Signaturen scheitern nach der Rotation
Webhook-Signaturen scheitern nach der Rotation
Eine Belastung wird nie abgeschlossen
Eine Belastung wird nie abgeschlossen
Es kommen keine Webhooks an
Es kommen keine Webhooks an
Es kam weniger Vito an, als ich belastet habe
Es kam weniger Vito an, als ich belastet habe
402 VITO_INSUFFICIENT_OWNER_FUNDS
402 VITO_INSUFFICIENT_OWNER_FUNDS
/v1/add wird aus deinem eigenen Guthaben finanziert, nicht aus dem Nichts erzeugt. Lade auf.