/v1.
Obtener acceso
El acceso se concede por proyecto. Necesitas los cuatro requisitos:Una Membresía activa, Silver o superior
Una solicitud de desarrollador aprobada
Los Términos para Desarrolladores de la API aceptados
Los scopes que tu proyecto necesita
Scopes
Autenticación
Envía tu clave secreta como token Bearer:- Lista de IP permitidas — restringe las llamadas a IP de servidor concretas
- Límites de tasa — topes por proyecto que escalan con el nivel de Membresía del titular
Claves, rotación y almacenamiento
- Guárdala solo en el servidor — cualquiera que la tenga puede cobrar a tus usuarios
- Rota desde la pestaña de claves API. La clave anterior sigue funcionando durante un periodo de gracia de 24 horas para que puedas desplegar sin cortes
- El secreto de firma de webhooks rota por separado, con su propio solapamiento de 24 horas
- Si se filtra, rota de inmediato
SDK oficial de Node.js
El paquete oficial@vetox-bot/vito envuelve los nueve endpoints y además la verificación de webhooks. Se encarga por ti de la cabecera Idempotency-Key, de los reintentos con espera creciente, de los tiempos de espera y de clasificar los errores.
Instalación
fetch integrado y node:crypto — y se distribuye en ESM y CommonJS con definiciones completas de TypeScript.
Inicialización
apiKey, el SDK lee VITO_API_KEY del entorno. El formato de la clave se valida al construir el cliente, así que una clave mal formada falla de inmediato en lugar de costarte una ida y vuelta y un 401.
Opciones del cliente
Métodos disponibles
data ya desenvuelto: nunca tienes que desempaquetar success ni data por tu cuenta. Además, todos aceptan opciones por llamada: { timeoutMs, maxRetries, signal, headers }, y los métodos de escritura aceptan también { idempotencyKey }.Ejemplos de uso
Comprobar la clave al arrancar
Leer un saldo
Cobrar a un usuario (vender un artículo)
Abonar Vito a un usuario
Recorrer las transacciones
Idempotencia y reintentos
El SDK envía una cabeceraIdempotency-Key en todas las escrituras (deduct, credit, transfer). Si no le pasas ninguna, la genera una sola vez por llamada y reenvía esa misma clave en cada reintento, de modo que un reintento nunca puede liquidar la operación dos veces.
Pasa tu propia clave cuando la misma operación lógica pueda reintentarse desde un proceso nuevo: un ejecutor de trabajos, una reentrega de una cola o una tarea programada:
auth.rotateKey() queda excluido a propósito: un reintento allí emite una segunda clave e invalida la que devolvió el primer intento.Verificar webhooks con el SDK
constructEvent comprueba la ventana de repetición de 5 minutos, compara en tiempo constante contra todas las firmas h1 de la cabecera — por lo que funciona automáticamente durante el solapamiento de 24 horas de la rotación — y después analiza el payload y devuelve el evento tipado.
En un manejador de ruta de Next.js (App Router), usa la variante que lee el cuerpo en bruto por sí misma:
event.eventId antes de ejecutar cualquier efecto secundario.Gestión de errores
Todo lo que lanza el SDK hereda deVitoError y lleva code, status, type, requestId y retryable.
Cancelar una llamada
VitoConnectionError con el código VITO_SDK_ABORTED.
Cobrar a un usuario
Tu app llama a POST /v1/deduct
guildId de origen y los detalles del artículo.Vito devuelve una confirmUrl
El usuario aprueba con su PIN
vetox.io.Vito liquida y notifica
Tu app verifica y completa
Parámetros de la petición — /v1/deduct
Abonar Vito a un usuario
POST /v1/add abona Vito a un usuario desde tu propio saldo, para recompensas o reembolsos. Los mismos campos que /deduct salvo guildId y product.
credit:create y saldo suficiente, o la llamada devuelve 402 VITO_INSUFFICIENT_OWNER_FUNDS.Comisiones
Cada cobro se te liquida menos la comisión de la plataforma, con el mismo esquema que las transferencias de Vito dentro de la app y según tu nivel de Membresía:/v1/add nunca la tienen.Webhooks
Añade una o varias URL de callbackhttps en la pestaña de ajustes. Vito entrega un POST firmado cada vez que una confirmación alcanza un estado final.
Verificar la firma
Cada entrega lleva una cabeceraX-Vito-Signature:
X-Vito-Event-Id como clave de deduplicación, ya que un reintento reenvía el mismo id:
<ts>:<rawBody> con tu secreto de firma y compara en tiempo constante.
Eventos
Cinco tipos de evento, todos con la misma forma de payload.data.status lleva el resultado.
Códigos de error
Toda respuesta va envuelta. Un éxito llevadata y un fallo lleva error, nunca ambos:
Límites de tasa
Idempotency-Key para deduplicar los reintentos con seguridad.Endpoints
Límites
- Las confirmaciones caducan a los 10 minutos — trata las no confirmadas como abandonadas
amountdebe ser un entero positivometadataestá limitado a 10 claves- Los topes por transacción y diarios los fija el equipo de Vetox y aparecen en modo lectura en la pestaña de ajustes
Lista de comprobación de seguridad
Mantén los secretos en el servidor
Mantén los secretos en el servidor
Verifica cada webhook
Verifica cada webhook
Liquida solo con completed
Liquida solo con completed
/deduct: el cobro no es firme hasta confirmation.completed.Mínimo privilegio
Mínimo privilegio
Resolución de problemas
Todas las llamadas devuelven no autorizado
Todas las llamadas devuelven no autorizado
He perdido mi clave
He perdido mi clave
Las firmas de webhook fallan tras rotar
Las firmas de webhook fallan tras rotar
Un cobro nunca se completa
Un cobro nunca se completa
No llega ningún webhook
No llega ningún webhook
Llegó menos Vito del que cobré
Llegó menos Vito del que cobré
402 VITO_INSUFFICIENT_OWNER_FUNDS
402 VITO_INSUFFICIENT_OWNER_FUNDS
/v1/add se financia con tu propio saldo, no se crea de la nada. Recarga.