Venti CLI
El Venti CLI es un envoltorio liviano sobre la API REST de Venti que te permite operar desde la terminal. Hay un comando por recurso y una subacción por acción de la API: si conoces la API, ya sabes usar el CLI.
Está pensado para personas y agentes de IA: salida JSON por defecto, códigos de salida estables y un manifiesto de comandos consultable con venti schema.
Convención de comandosventi <recurso> <acción> [id] [--parámetros]Las acciones que obtienen o modifican un recurso (
retrieve,update,refund, etc.) reciben el<id>como primer argumento posicional. Las acciones de listado (list) no recibenid.
Instalación
npm install -g @ventipay/cli
# o
yarn global add @ventipay/cliRequiere Node.js 16+. Esto deja disponible el comando venti.
Autenticación
El CLI usa tu API Key, igual que la API y el SDK. Puedes obtenerla en el Dashboard, en modo live o test. La key se resuelve en este orden de prioridad:
- Flag
--api-key <key> - Variable de entorno
VENTIPAY_API_KEY(oVENTI_API_KEY) - Archivo de configuración local
# Opción A: variable de entorno
export VENTIPAY_API_KEY="key_test_..."
# Opción B: guardarla en el archivo de configuración
venti config set api_key key_test_...
El modo (live/test) está determinado por el prefijo de la keyNo necesitas configurarlo aparte: una key
key_test_...opera en modo test y unakey_live_...en modo live.
El archivo de configuración se guarda en ~/.ventipay/config.json con permisos 0600 (solo lectura/escritura para tu usuario).
Uso básico
# Crear un checkout
venti checkouts create --amount 1000 --currency CLP --metadata.order_id A-12
# Obtener un checkout, expandiendo el cliente
venti checkouts retrieve chk_KaIq81HaHvaPq91c8FaK1ua6R --expand customer
# Listar pagos con filtros
venti payments list --limit 10 --status paid
# Reembolsar un pago
venti payments refund pay_123 --amount 500
# Cancelar una suscripción
venti subscriptions end sub_123Usa venti --help para ver todos los recursos, venti <recurso> --help para ver las acciones de un recurso y venti <recurso> <acción> --help para ver la firma de una acción.
Parámetros
Los --parámetros corresponden a los query params (en lecturas) o body params (en escrituras) documentados en la API. Se construyen así:
| Forma | Resultado |
|---|---|
--key value o --key=value | { "key": "value" } |
--flag | { "flag": true } |
--key a --key b | { "key": ["a", "b"] } (repetición) |
--metadata.order_id A-12 | { "metadata": { "order_id": "A-12" } } (anidado) |
--items[0].sku abc --items[0].qty 2 | { "items": [{ "sku": "abc", "qty": 2 }] } |
--tags[] a --tags[] b | { "tags": ["a", "b"] } (append) |
Los valores se convierten automáticamente: true/false → booleano, null → null y los números → number. Usa --raw-strings para desactivar la conversión, o entrega el cuerpo completo como JSON:
# Cuerpo completo como JSON
venti checkouts create --data '{"amount":1000,"currency":"CLP"}'
# Desde un archivo
venti checkouts create --data @checkout.json
venti checkouts create --file checkout.json
# Desde stdin (de forma explícita con @-)
echo '{"amount":1000,"currency":"CLP"}' | venti checkouts create --data @-Los --parámetros individuales se aplican sobre el objeto base de --data/--file, así que puedes combinarlos.
El CLI nunca lee stdin de forma automáticaLa lectura de stdin es explícita (
--data @-o--file -) para que el CLI no se quede bloqueado esperando entrada en contextos no interactivos (CI, agentes, scripts).
Formatos de salida
Por defecto el CLI imprime JSON formateado a stdout. Los errores se imprimen como JSON a stderr.
| Flag | Efecto |
|---|---|
-o, --output <pretty|compact|table|raw> | Formato de salida (pretty por defecto) |
--compact | Alias de --output compact (JSON en una línea) |
--table | Alias de --output table (tabla legible) |
--no-color | Desactiva colores en la tabla (también respeta NO_COLOR) |
-q, --quiet | Imprime solo el campo id del resultado |
# Útil en scripts
ID=$(venti checkouts create --amount 1000 --currency CLP --quiet)
venti payments list --compact | jq '.data[].id'Salida en tabla
--table (o -o table) renderiza una tabla alineada y legible, ideal para revisar resultados en la terminal. Una lista se muestra como una fila por elemento; un recurso individual como una tabla de campo/valor. Los colores se agregan automáticamente en una terminal interactiva (booleanos, números, null) y siempre se desactivan cuando la salida se redirige (pipe), así que JSON sigue siendo la opción correcta para scripts y agentes.
venti payments list --limit 10 --tableid object status amount currency created metadata
──────── ─────── ──────── ────── ──────── ────────── ───────────────────
pay_1AbC payment paid 19990 CLP 1717200000 {"order_id":"A-12"}
pay_2XyZ payment pending 5000 CLP 1717210000 {}
3 rows · +1 more column (use --output json) · has_more: trueCuando hay muchas columnas, las que no caben en el ancho de la terminal se omiten (se indica cuántas) y los valores anidados se compactan. Para los datos completos, usa la salida JSON por defecto.
Paginación
Los endpoints de listado usan paginación por cursor: cada respuesta retorna hasta limit registros (1–200, por defecto 10) junto con un next_cursor y un previous_cursor.
La forma simple — --all sigue los cursores por ti y retorna una sola lista combinada, sin que tengas que pasar cursores entre llamadas:
venti payments list --all # todos los pagos, en una sola lista
venti payments list --all --status paid # los filtros aplican en todas las páginas
venti payments list --all --max 500 # se detiene tras 500 registros
venti payments list --all --table # combinable con cualquier formato
venti api get payments --all # también funciona en el comando api directoCon --all, el tamaño de página usa el máximo (200) salvo que definas --limit, y el has_more/next_cursor del resultado reflejan si quedan más registros (por ejemplo, cuando --max lo detiene antes).
Listas muy grandes
--allrealiza una solicitud por página hasta agotar el cursor. Para conjuntos muy grandes, acota con--maxo filtros, o pagina manualmente.
La forma manual — pasa los cursores tú mismo (los parámetros mapean directo a la API):
# Primera página
venti payments list --limit 50
# Página siguiente: usa el next_cursor de la respuesta anterior
venti payments list --limit 50 --starting_after <next_cursor>
# Página anterior: usa el previous_cursor
venti payments list --limit 50 --ending_before <previous_cursor>Idempotencia
Para reintentar operaciones de escritura de forma segura, pasa una idempotency key:
venti checkouts create --amount 1000 --currency CLP --idempotency-key "pedido-A-12"Acceso directo a la API
Para cualquier endpoint, incluso los que aún no estén mapeados como recurso:
venti api get balance
venti api get payments --limit 5
venti api post checkouts --amount 1000 --currency CLPEn GET los parámetros van como query; en el resto, como body.
Introspección (para agentes)
venti schema imprime el manifiesto completo de comandos en JSON: recursos, acciones, método HTTP, ruta, si requieren id y si envían body. Ideal para que un agente descubra las capacidades del CLI sin parsear texto de ayuda.
venti schema
venti schema --compact | jq '.resources[].name'
Diseñado para agentes de IASalida JSON por defecto, errores como JSON en
stderr, códigos de salida estables,--allpara paginar sin estado yventi schemapara introspección. Combinando esto, un agente puede operar la API de Venti de forma confiable.
Configuración
venti config set <clave> <valor> # claves: api_key, host, port, base_path, schema
venti config get <clave>
venti config list # enmascara la api_key
venti config unset <clave>
venti config path # ruta del archivo de configuraciónTambién puedes apuntar a otro host con --host / --base-path, o con las variables de entorno VENTIPAY_HOST / VENTIPAY_BASE_PATH.
Códigos de salida
El CLI usa códigos de salida estables para facilitar su orquestación desde scripts y agentes.
| Código | Significado |
|---|---|
0 | Éxito |
2 | Error desconocido / de red |
3 | Error de autenticación |
4 | Error de cobro (charge_error) |
5 | Recurso no encontrado |
6 | Solicitud inválida |
7 | Error de solicitud |
8 | Error de idempotencia |
9 | Límite de tasa excedido |
64 | Error de uso del CLI (argumentos inválidos) |
Listado de recursos
Usa venti <recurso> --help para ver la firma de cada acción.
Pagos
| Recurso | Acciones |
|---|---|
| checkouts | retrieve, list, create, refund, cancel |
| payments | retrieve, list, create, update, authorize, capture, refund, cancel |
| refunds | retrieve, list |
| payment_buttons | retrieve, list, create, update |
| coupons | retrieve, list, create, update |
Suscripciones
| Recurso | Acciones |
|---|---|
| subscriptions | retrieve, list, create, update, start, end, suspend, unsuspend |
| invoices | retrieve, list, create, update, finalize, markUncollectible, void, pay, send |
| plans | retrieve, list, create, update, subscribe |
| products | retrieve, list, create, update |
| tax_rates | retrieve, list, create, update |
Clientes
Métodos de pago
| Recurso | Acciones |
|---|---|
| payment_methods | retrieve, list, del |
| setup_intents | retrieve, list, create, update, del, cancel |
Préstamos
| Recurso | Acciones |
|---|---|
| loans | retrieve, list, create, authorize, refund |
| installments | retrieve, authorize |
Finanzas
| Recurso | Acciones |
|---|---|
| balance | retrieve, overview |
| balance_transactions | retrieve, list |
| payouts | retrieve, list |
| bank_accounts | retrieve, list, create, del |
Disputas
| Recurso | Acciones |
|---|---|
| disputes | retrieve, list, upload, confirm |
Eventos
| Recurso | Acciones |
|---|---|
| events | retrieve, list |
Webhooks
| Recurso | Acciones |
|---|---|
| webhooks | retrieve, list, create, del |
| webhook_attempts | list |
Otros
| Recurso | Acciones |
|---|---|
| banks | list |
| currencies | list |
disputes uploadEsta acción espera
multipart/form-data(subida de archivos), que el CLI aún no construye. Usaventi api post disputes/<id>/uploado el Dashboard para ese caso.
Updated about 14 hours ago
