# Vito — the economy, transactions and public API

> Vito — an account-scoped currency that follows a member across servers, a searchable ledger, and a 9-endpoint REST API with 5 scopes and an npm SDK.

- Canonical: https://discordtools.blog/blog/vetox-vito-reference
- Published: 2026-10-05
- Author: The Index desk
- Facts checked: 2026-08-30
- Sources:
  - docs.vetox.io — Vito (https://docs.vetox.io/en/members/vito) — checked 2026-08-30
  - docs.vetox.io — Vito API (https://docs.vetox.io/en/members/vito-api) — checked 2026-08-30
  - docs.vetox.io — Vito transactions (https://docs.vetox.io/en/account/vito-transactions) — checked 2026-08-30
  - @vetox-bot/vito on npm (https://www.npmjs.com/package/@vetox-bot/vito) — checked 2026-08-30
  - UnbelievaBoat API documentation (https://api-docs.unbelievaboat.com/reference/reference) — checked 2026-08-30
  - Dank Memer — rules (https://dankmemer.lol/rules) — checked 2026-08-30
  - Pokétwo (https://poketwo.net/) — checked 2026-08-30
  - sesh — API manual (https://sesh.fyi/manual/api/) — checked 2026-08-30
  - Points — API reference (https://points.bot/docs/api) — checked 2026-08-30
  - GBBOT — API and webhooks (https://gbbot.com.br/docs/api) — checked 2026-08-30
  - Kiai — API and kiai.js reference (https://www.kiai.app/) — checked 2026-08-30
  - Cakey Bot — premium (https://cakey.bot/premium) — checked 2026-08-30
- Publication: The Index, an independent site not affiliated with Discord Inc.

---
## What it is

Vito is a single balance attached to a Discord **account**, not a server, so it follows the member
everywhere. Two recurring faucets, one one-off, plus peer transfers and third-party credits. Spent on
cosmetics and player-versus-player stakes. Every outbound movement carries a settlement fee that is
**destroyed rather than collected**, and a REST API lets outside developers move it.

## The problem it solves

Server-scoped currencies reset every time a member joins a new community. Effort in one server buys
nothing in the next, which makes the currency a per-server loyalty token rather than money.

There is a second problem, and it is the one most bot economies do not acknowledge. **A bot-run
economy that pays a treasury has an incentive to inflate.** If the operator takes a cut of
transaction volume, the operator wants more volume, and the design decisions follow the incentive
rather than the players.

And on the developer side: someone running a Discord-adjacent shop, game or service wants to charge
users in a currency they already hold, without building a payment stack, a wallet and a fraud model.
The alternatives are a real-money processor with the compliance weight that carries, or an in-house
currency nobody has a balance in.

## How it works

**Every movement writes a ledger row** carrying both parties, the direction, the amount, the reason,
the timestamp, and the balance immediately after. That last column is the reconciliation mechanism: a
skipped value means something moved that is not listed.

**Transfers are atomic.** The debit and the credit are wrapped in a database transaction, and both
the in-app and API paths are protected by a durable idempotency anchor against at-least-once message
redelivery. No partial failure can lose Vito.

**The fee is a burn, not revenue.** The sender is debited the full amount, the receiver is credited
the amount after fee, and the difference is simply the difference — it is never added to any account.
The platform holds no treasury and takes no cut, so it has no stake in transaction volume. Amounts of
5 Vito or less are fee-free entirely, and credits **into** an account are always fee-free.

**A four-digit wallet PIN protects every spend**, stored as a one-way hash over a keyed digest.
Three wrong attempts lock the wallet atomically and send an email. Reset is a six-digit emailed code,
valid ten minutes, resendable every 90 seconds, with five attempts before it is voided.

**The PIN is never typed in Discord.** This is a security design decision rather than a UI one, and
it produces one unambiguous rule for members: **anyone asking for your PIN inside Discord is
committing fraud.** A rule with no exceptions is a rule people can actually follow.

### The API

Nine versioned endpoints under `/public/vito/v1/*`, authenticated with a project key and authorised
by **five named scopes**.

**Money-moving calls do not settle from the API call itself.** A charge creates a pending
confirmation and returns a URL; nothing moves until the user approves it with their wallet PIN on
`vetox.io`. The confirmation window is ten minutes.

The consequence is worth stating plainly: **a leaked deduct key cannot take anything.** The seller
never handles the buyer's PIN and cannot debit an account silently.

When a charge names an originating guild, that guild's own bot DMs the buyer a product card with a
link button to the PIN page. A closed DM never blocks the purchase, because the buyer already has the
URL from the API response.

Credits are the exception. Crediting a user from the project owner's own balance is synchronous, has
no PIN step, and settles inside the same call — there is nothing to protect the user from when
someone is giving them money.

## What is configurable

Nothing per server. The economy is global.

### Faucets

| Source                   | Amount                                                                  |
| ------------------------ | ----------------------------------------------------------------------- |
| Daily reward             | 5–7 base, × the membership multiplier × an escalating streak multiplier |
| Daily-reward cycle bonus | Flat **+10** on the seventh claim of a cycle                            |
| Bot-listing vote         | 2–3 base, × the membership multiplier                                   |
| Profile completeness     | One-time flat **250**, deliberately not multiplied                      |
| Peer transfer            | Whatever the sender sends, minus the fee                                |
| Third-party credit       | Fee-free, funded from the merchant's own balance                        |

### Sinks

| Item                                         | Price                                        |
| -------------------------------------------- | -------------------------------------------- |
| Solid name colour                            | 1,000                                        |
| Two-stop gradient name                       | 4,000                                        |
| Three-stop gradient name                     | 7,000                                        |
| Custom colour — single, gradient, three-stop | 2,000 / 5,000 / 9,000                        |
| Fonts                                        | Free by default, then 2,500–12,000           |
| Profile backgrounds                          | 0–500, across 31 items                       |
| Rank backgrounds                             | 42–140, across 46 items                      |
| Cosmetic badges                              | 800 common, 1,500 rare, across **360 items** |
| Prize Match stake                            | Agreed between the two players               |

Colours are owned **per surface** — the same swatch on the name, the profile XP bar and the rank XP
bar is three separate purchases. Everything Vito buys is cosmetic. Nothing in the shop confers an
advantage over another member, which is the constraint that keeps an earned currency from becoming a
pay-to-win one.

### Fees and transfer limits

| Membership | Settlement fee | Daily transfers |
| ---------- | -------------- | --------------- |
| Normal     | 7%             | 20              |
| Silver     | 7%             | 40              |
| Gold       | 7%             | 60              |
| Platinum   | **6%**         | 80              |
| Diamond    | **5%**         | 100             |

### The ledger

`/dashboard/vito-transactions` is a paginated table with **server-side search across the whole
ledger**, not just the visible page. A single typed term is matched against the note, an exact
amount with commas stripped, a transaction ID, a Discord ID against both parties, and counterparty
names resolved through a separate lookup.

Name resolution is capped at 200 candidate accounts, because a common given name prefix-matches
thousands and every one would land in the query.

### API project settings

| Setting                    | Default and bound                              |
| -------------------------- | ---------------------------------------------- |
| Scopes                     | Any subset of the five                         |
| Webhook callback URLs      | Up to **5**, HTTPS only, 256 characters each   |
| IP allowlist               | Up to 20 entries; empty means unrestricted     |
| Allowed guild IDs          | Up to 100; empty means unrestricted            |
| Max amount per transaction | 1,000,000 by default                           |
| Max daily volume           | 10,000,000 by default                          |
| Rate-limit tier            | Derived from the owner's membership, see below |

**The five scopes:** `balance:read`, `transfer:create`, `deduct:create`, `credit:create`,
`transactions:read`.

**The nine endpoints:**

| Method | Path                     | Scope               |
| ------ | ------------------------ | ------------------- |
| GET    | `/v1/auth/verify`        | Any                 |
| POST   | `/v1/auth/rotate-key`    | Any                 |
| GET    | `/v1/balance/:discordId` | `balance:read`      |
| POST   | `/v1/deduct`             | `deduct:create`     |
| POST   | `/v1/add`                | `credit:create`     |
| POST   | `/v1/transfer`           | `transfer:create`   |
| GET    | `/v1/transactions`       | `transactions:read` |
| GET    | `/v1/transactions/:id`   | `transactions:read` |
| GET    | `/v1/webhooks/events`    | `transactions:read` |

**Webhooks:** five event types — confirmation completed, failed, expired, cancelled, and credit
completed. Delivery uses a transactional outbox, so a committed state change always has a durable
pending delivery row. Signatures are HMAC-SHA256 with a timestamp, five retries with exponential
backoff, and a 300-second default replay tolerance.

**Rotation is graceful.** Both the API key and the webhook signing secret rotate with a 24-hour
dual-credential window. During a secret rotation the API emits a **second signature** signed with the
previous secret, so a verifier that accepts any valid signature never sees a failed delivery.

**Idempotency** is anchored in durable storage rather than a cache, keyed per project, with a
24-hour window. A stale in-flight reservation self-heals after a two-minute lease; a genuine
duplicate returns a distinct conflict code rather than silently double-charging.

**An official Node SDK, `@vetox-bot/vito`,** wraps all nine endpoints plus webhook signature
verification with a constant-time compare.

## Tier availability

Gated on **Membership**, not on Server Premium.

| Capability                                              | Normal  | Silver  | Gold  | Platinum   | Diamond    |
| ------------------------------------------------------- | ------- | ------- | ----- | ---------- | ---------- |
| Holding and earning Vito                                | Yes     | Yes     | Yes   | Yes        | Yes        |
| Earning multiplier                                      | 1.0×    | 1.25×   | 1.5×  | 2.0×       | 3.0×       |
| Settlement fee                                          | 7%      | 7%      | 7%    | 6%         | 5%         |
| Daily transfers                                         | 20      | 40      | 60    | 80         | 100        |
| **The cosmetic shop — all 360 badges and every colour** | **Yes** | Yes     | Yes   | Yes        | Yes        |
| **API access**                                          | —       | **Yes** | Yes   | Yes        | Yes        |
| API rate limit, per minute                              | —       | 180     | 180   | **600**    | **600**    |
| API rate limit, per hour                                | —       | 5,000   | 5,000 | **15,000** | **15,000** |

Nothing in the shop is tier-locked. A free account can buy anything a Diamond account can; it takes
longer.

API access is gated at **Silver, $2.99 a month** — both for applying for a key and for making any
authenticated call. A single IP is capped at half the project's per-minute budget, floored at 30,
so one misbehaving client cannot consume a project's whole allowance.

## Commands

`/coins` with two subcommands — `balance` and `gift` — plus `/vito` for transfers.

A transfer initiated in Discord opens a confirmation, and the PIN is entered on the website. There is
no command that spends Vito without a confirmation step, by design.

## Dashboard surface

| Route                          | Purpose                                                   |
| ------------------------------ | --------------------------------------------------------- |
| `/dashboard/vito-transactions` | The searchable ledger                                     |
| `/dashboard/purchases`         | Purchase and payment-request history                      |
| `/confirm/vito/:token`         | The PIN confirmation page every API charge routes through |
| `/dashboard/membership`        | Where the multiplier, fee rate and API access are set     |

Public leaderboards cover the richest accounts, and the shop surfaces sit alongside the profile.

## Permissions required

None in Discord. Vito is account-scoped and grants nothing in any server.

For the API: a Silver membership or above, an approved project, accepted terms, and the right scope
on the key. Membership is re-checked on every authenticated call rather than only at provisioning, so
a lapsed subscription stops the key rather than leaving it live.

## What it connects to

- **[Membership](/blog/vetox-membership-reference)** sets the multiplier, the fee rate, the daily
  transfer allowance and the API rate limit. It is the single gate on the whole developer surface.
- **The daily reward** is the primary faucet, and the streak cycle is what makes it a habit rather
  than a claim.
- **Badges** are the largest sink at 360 items, and the showcase makes them visible.
- **Profiles** display the balance, the badges and the purchased cosmetics.
- **Games and Prize Matches** stake Vito player against player. There is no house, no random-outcome
  gambling against the platform, and no cut taken. Battle Pass draws on the same currency — see the
  [progression reference](/blog/vetox-leveling-reference).
- **Payment requests** connect the API back into Discord — the originating guild's bot delivers the
  product card.

The chain: `Daily reward → Vito → Badges and cosmetics`, and
`Vito → the API → third-party products → payment requests → back into Discord`.

## Who it is for

**Members active across several communities**, where a per-server currency would reset with every
new server.

**Developers building Discord-adjacent products** — a shop, a game, a service — who want to charge in
a currency users already hold. Silver at $2.99 a month is the entry price, and the confirmation model
means a customer never has to trust the seller with credentials.

**Server operators** get Vito for free as an engagement layer they do not administer. Prize Matches
and games stake it, and nobody has to configure an economy.

## Practical use cases

**A third-party shop that charges in Vito.** The shop calls deduct with a product card and a guild
ID. The buyer gets a DM from the server's own bot and a confirmation page. They enter their PIN on
`vetox.io`; the webhook fires; the shop fulfils. The shop never touched a credential.

**A game rewarding its players.** A credit call funded from the developer's own balance, synchronous,
no PIN, no fee. A leaderboard prize paid in currency the winner can spend on cosmetics anywhere.

**Reconciling a balance that looks wrong.** The ledger's balance-after column makes continuity
checkable by eye, and server-side search across the whole history finds a transaction by amount,
counterparty name, Discord ID or note.

**A developer scaling up.** Silver for the key, then Platinum when 180 requests a minute becomes the
constraint — which also drops the settlement fee from 7% to 6%.

## How it compares

Two separate comparisons, because Vito is two things.

### As an economy

| Product           | Scope                                               | Who is the house                                   | Sells currency for money?                                                            |
| ----------------- | --------------------------------------------------- | -------------------------------------------------- | ------------------------------------------------------------------------------------ |
| **Vito**          | **Cross-server, per account**                       | **Nobody** — the fee is burned                     | **No, in either direction, and no cut is taken**                                     |
| **UnbelievaBoat** | Per server                                          | **The bot** — slots at 2× with an 11.1% win chance | No; premium sells caps and cosmetics                                                 |
| **Dank Memer**    | Global per account, **two currencies**              | **The bot**, plus a documented transaction tax     | **Yes** — gems $6.99–$99.99, and subscriptions grant 2.5M–35M coins outright         |
| **OwO**           | Per account                                         | The bot                                            | No on the store                                                                      |
| **Mudae**         | Per server                                          | No house casino found                              | No — it sells **earn-rate multipliers** instead                                      |
| **Pokétwo**       | Two currencies                                      | None — player-run gambling is against its rules    | **Yes, and it is the business model** — shards from 500 for $5 up to 15,000 for $100 |
| **Points**        | Per server                                          | —                                                  | No — **25 free shop items against 200 premium**                                      |
| **Mimu**          | Server plus global currency                         | —                                                  | —                                                                                    |
| **Cakey Bot**     | **Per server** — work, beg, rob plus 1v1 mini-games | —                                                  | —                                                                                    |

**Dank Memer leads on depth of economy simulation** — market, trading, farms, fishing, pets, two
currencies — and **Pokétwo on a single game done extremely well.** Both are better games than
anything built on a cross-server wallet, and neither is trying to be a wallet.

Two facts about the category are worth a reader knowing, and both come from the vendors' own pages.
**Two products publish rules forbidding players from doing exactly what the vendor does** — Dank
Memer bans trading its currency for real money, Pokétwo bans trading items for external currencies,
and both sell currency themselves. And **Dank Memer is the only observed case of a platform taking a
cut of player-to-player value and then selling exemption from it**, with a no-tax perk on its paid
tier.

Vito's shape is the inverse of both: no currency sale in either direction, no house, and the fee
destroyed rather than collected. A cross-server user wallet has **no equivalent in this set** — every
economy examined is per-server. The nearest analogue found anywhere in the research is GBBOT's
GBCoin, a global cross-server currency, and it is free. That scope is worth carrying: economy
searches in this research were framed around per-server currency, so this is a claim about the
products examined rather than about the market.

### As a developer API

**At least twelve competitors publish an API**, and the count rose on every pass. "Vetox has an API
and others don't" is a dead claim, and so is "nobody else has scopes or an SDK". The full
cross-vendor inventory is in
[which Discord bots publish a developer API](/blog/discord-bot-api-comparison).

|                      | **Vito**                    | Kiai | sesh                                               | RoWifi                          | Bloxlink               | Statbot                                    | Xenon                            | Lurkr             | Tatsu  | Amari                           | UnbelievaBoat      | Points        | GBBOT                                            |
| -------------------- | --------------------------- | --- | -------------------------------------------------- | ------------------------------- | ---------------------- | ------------------------------------------ | -------------------------------- | ----------------- | ------ | ------------------------------- | ------------------ | ------------- | ------------------------------------------------ |
| Endpoints            | **9**                       | Scoped | ~10                                                | 7                               | 3                      | Grouped                                    | 4                                | 6                 | 9      | 6                               | **19**             | 8             | ~30                                              |
| **Scopes**           | **5 named**                 | **5 named permissions, bitfield** | None — guild-bound token                           | None                            | None — per-server keys | None — keys tied to one guild              | None                             | Per-server grants | None   | None                            | None               | None          | None                                             |
| Rate limit published | Yes                         | Yes | **300/min read, 60/min write**                     | **5/sec**                       | No                     | Exists, not published                      | **None, no headers**             | **1,500/min**     | 60/min | 60/min                          | 20/s               | —             | —                                                |
| **Webhooks**         | **Yes, signature-verified** | No | **Yes — 19 events, HMAC-SHA256, delivery history** | No                              | No                     | No                                         | No                               | No                | No     | No                              | No                 | No            | **9 events, HMAC-SHA256, idempotency and retry** |
| **SDK**              | **Published npm package**   | **Official npm SDK** | No                                                 | No                              | No                     | No                                         | No                               | No                | No     | No                              | Official JS client | No            | No                                               |
| Self-serve keys      | Yes                         | Yes | Yes                                                | Yes                             | Yes                    | Yes                                        | **No — granted to two partners** | Yes               | Yes    | **Google Form, up to 24 hours** | Yes                | Yes           | **No key or OAuth support yet**                  |
| Price of access      | **Silver, $2.99**           | Free tier documented | **$24.99/mo**                                      | Free tier appears to include it | Not stated             | **Requires all five upgrades — $14.95/mo** | Partner-only                     | Free              | Free   | Free                            | Free               | Premium-gated | —                                                |

**RoWifi and Lurkr lead on API quality, on different axes.** RoWifi is versioned with a published
deprecation ladder, publishes its rate limit, has write endpoints with real effects outside Discord,
and puts a **consent gate on reverse lookup** — a better privacy posture than its larger competitor's.
Lurkr offers 1,500 requests a minute, full CRUD, per-server grants defaulting to deny, key expiry,
and an OpenAPI spec with a Swagger UI. **sesh leads on webhooks** with nineteen event types and
queryable delivery history, and it costs $24.99 a month. **UnbelievaBoat has the most endpoints in
the games domain at nineteen**, with an OpenAPI spec and an official JS client.

**Kiai reached nearly the same authorisation design from a different direction**, and it deserves
naming rather than eliding. It publishes five named permissions as a bitfield — Levels, Multipliers,
Export, Denylist and Rewards — with a per-endpoint scope table, per-server authorisation, published
rate limits and an official npm SDK. Anyone writing that scopes and an SDK together are unique to one
product has not checked.

Most of the rest substitute a **single guild-bound token** for scopes — sesh, Statbot, Bloxlink and
RoWifi all bind the credential to a guild — and an npm sweep across every vendor in this research
found **exactly two vendor-maintained SDKs among the competitors**, `kiai.js` and `unb-api`.

What is genuinely different about the Vito API is narrower and more useful: it is **an API on a
platform that also runs the moderation, tickets and levelling**, so an integration reaches the whole
server rather than one bot's data — and the **user-side PIN confirmation**, which has no analogue in
this set because no other API here moves an end user's balance on a third party's authority in the
first place.