/v1.
Obter acesso
O acesso é concedido por projeto. Você precisa dos quatro requisitos:Uma Assinatura ativa, Silver ou superior
Uma solicitação de desenvolvedor aprovada
Os Termos de Desenvolvedor da API aceitos
Os scopes de que seu projeto precisa
Scopes
Autenticação
Envie sua chave secreta como token Bearer:- Lista de IPs permitidos — restringe as chamadas a IPs de servidor específicos
- Limites de taxa — tetos por projeto que aumentam conforme o nível de Assinatura do dono
Chaves, rotação e armazenamento
- Mantenha-a apenas no servidor — quem a tiver pode cobrar dos seus usuários
- Rotacione pela aba de chaves API. A chave anterior continua funcionando por um período de carência de 24 horas, para você implantar sem indisponibilidade
- O segredo de assinatura dos webhooks é rotacionado separadamente, com sua própria sobreposição de 24 horas
- Se vazar, rotacione imediatamente
SDK oficial para Node.js
O pacote oficial@vetox-bot/vito encapsula os nove endpoints e também a verificação de webhooks. Ele cuida por você do cabeçalho Idempotency-Key, das retentativas com backoff exponencial, dos timeouts e da classificação dos erros.
Instalação
fetch embutido e o node:crypto — e é distribuído em ESM e CommonJS, com definições TypeScript completas.
Inicialização
apiKey, o SDK lê VITO_API_KEY do ambiente. O formato da chave é validado na construção, então uma chave malformada falha na hora em vez de custar uma ida e volta na rede e um 401.
Opções do cliente
Métodos disponíveis
data já desembrulhado — você nunca precisa abrir success nem data na mão. Todos também aceitam opções por chamada: { timeoutMs, maxRetries, signal, headers }, e os métodos de escrita aceitam ainda { idempotencyKey }.Exemplos de uso
Conferir a chave na inicialização
Ler um saldo
Cobrar de um usuário (vender um item)
Creditar um usuário
Percorrer as transações
Idempotência e retentativas
O SDK envia um cabeçalhoIdempotency-Key em toda escrita (deduct, credit, transfer). Se você não fornecer um, ele gera a chave uma única vez por chamada e reenvia exatamente a mesma chave em cada retentativa, de modo que uma retentativa nunca consegue liquidar a operação duas vezes.
Forneça sua própria chave quando a mesma operação lógica puder ser repetida a partir de um novo processo — um executor de tarefas, uma reentrega de fila ou uma varredura agendada:
auth.rotateKey() fica de fora de propósito — uma retentativa ali emite uma segunda chave e invalida a que a primeira tentativa devolveu.Verificar webhooks com o SDK
constructEvent confere a janela de replay de 5 minutos, compara em tempo constante com todas as assinaturas h1 do cabeçalho — portanto funciona automaticamente durante a sobreposição de 24 horas de uma rotação — e então analisa o payload e devolve o evento tipado.
Em um route handler do Next.js (App Router), use a variante que lê o corpo bruto sozinha:
event.eventId antes de executar qualquer efeito colateral.Tratamento de erros
Tudo o que o SDK lança herda deVitoError e carrega code, status, type, requestId e retryable.
Cancelar uma chamada
VitoConnectionError com o código VITO_SDK_ABORTED.
Cobrar de um usuário
Seu app chama POST /v1/deduct
guildId de origem e os detalhes do item.O Vito retorna uma confirmUrl
O usuário aprova com o PIN dele
vetox.io.O Vito liquida e notifica
Seu app verifica e conclui
Parâmetros da requisição — /v1/deduct
Creditar um usuário
POST /v1/add credita Vito a um usuário a partir do seu próprio saldo — para recompensas ou estornos. Os mesmos campos do /deduct, exceto guildId e product.
credit:create e saldo suficiente, senão a chamada retorna 402 VITO_INSUFFICIENT_OWNER_FUNDS.Taxas
Toda cobrança é liquidada para você já descontada a taxa da plataforma — o mesmo esquema das transferências de Vito dentro do app, conforme o seu nível de Assinatura:/v1/add são sempre isentos.Webhooks
Adicione uma ou mais URLs de callbackhttps na aba de configurações. O Vito entrega um POST assinado sempre que uma confirmação chega a um estado final.
Verificar a assinatura
Cada entrega traz um cabeçalhoX-Vito-Signature:
X-Vito-Event-Id como chave de deduplicação, já que uma retentativa reenvia o mesmo id:
<ts>:<rawBody> com seu segredo de assinatura e compare em tempo constante.
Eventos
Cinco tipos de evento, todos com o mesmo formato de payload.data.status carrega o desfecho.
Códigos de erro
Toda resposta vem encapsulada. Um sucesso trazdata e uma falha traz error, nunca os dois:
Limites de taxa
Idempotency-Key para deduplicar retentativas com segurança.Endpoints
Limites
- Confirmações expiram após 10 minutos — trate as não confirmadas como abandonadas
amountprecisa ser um inteiro positivometadataé limitado a 10 chaves- Os tetos por transação e diários são definidos pela equipe Vetox e aparecem somente para leitura na aba de configurações
Checklist de segurança
Mantenha os segredos no servidor
Mantenha os segredos no servidor
Verifique todo webhook
Verifique todo webhook
Liquide apenas em completed
Liquide apenas em completed
/deduct — a cobrança só é definitiva em confirmation.completed.Privilégio mínimo
Privilégio mínimo
Solução de problemas
Toda chamada retorna não autorizado
Toda chamada retorna não autorizado
Perdi minha chave
Perdi minha chave
As assinaturas de webhook falham após rotacionar
As assinaturas de webhook falham após rotacionar
Uma cobrança nunca se conclui
Uma cobrança nunca se conclui
Não chega nenhum webhook
Não chega nenhum webhook
Chegou menos Vito do que eu cobrei
Chegou menos Vito do que eu cobrei
402 VITO_INSUFFICIENT_OWNER_FUNDS
402 VITO_INSUFFICIENT_OWNER_FUNDS
/v1/add é custeado pelo seu próprio saldo, não criado do nada. Recarregue.