Ir al contenido

CLI

@openfactura/cli (MIT) habla con Open Factura sólo por su API REST: no firma ni transmite por su cuenta y no necesita el certificado de Hacienda en su equipo. Requiere Node.js 20 o superior (también funciona con Bun).

Ventana de terminal
npm i -g @openfactura/cli
openfactura --version
# o sin instalar
npx @openfactura/cli --help
Ventana de terminal
openfactura login --url https://openfactura.co
# Clave de API (of_test_… u of_live_…): ← se teclea sin mostrarse

login verifica la clave y la guarda en ~/.config/openfactura/config.json con permisos 0600. Otras formas:

Ventana de terminal
echo "$CLAVE" | openfactura login --url https://openfactura.co # desde una tubería
openfactura login --profile produccion # otro perfil
openfactura logout

En integración continua basta con variables de entorno:

Ventana de terminal
export OPENFACTURA_URL=https://openfactura.co
export OPENFACTURA_API_KEY=of_test_...
openfactura whoami
Valor Prioridad
URL del servidor --url → OPENFACTURA_URL → perfil guardado → http://localhost:8788
Clave de API OPENFACTURA_API_KEY → perfil guardado
Perfil --profile → OPENFACTURA_PROFILE → default

Todos aceptan --json (el JSON de la API en stdout), --url, --profile y --help.

Ventana de terminal
openfactura whoami # actor, permisos, ambiente
openfactura emisor # datos fiscales, establecimientos, credenciales cargadas
openfactura clientes list --q "contribuyente"
openfactura clientes add --file cliente.json
openfactura productos list --q licencia
openfactura productos add --codigo LIC-001 --descripcion "Licencia anual" --precio 100 --tipo-item 2
openfactura catalogos CAT-013 --departamento 06
openfactura dte validar factura.json
openfactura dte emitir factura.json [--idempotency-key <clave>]
openfactura dte list --tipo 01 --estado procesado --desde 2026-11-01 --hasta 2026-11-30
openfactura dte get <codigo>
openfactura dte json <codigo> -o dte.json
openfactura dte pdf <codigo> -o factura.pdf
openfactura dte invalidar <codigo> --tipo 2 --motivo "Operación rescindida"
openfactura dte retorno <codigo> retorno.json
openfactura eventos operaciones-especiales simplificadas.json
openfactura eventos list --tipo retorno
openfactura eventos get|json|pdf <codigo>
openfactura contingencia transmitir

El archivo de dte emitir es el mismo cuerpo de POST /api/v1/dte (vea Emitir documentos). - lee de la entrada estándar.

Ventana de terminal
codigo=$(openfactura dte emitir factura.json --json | jq -r .codigoGeneracion)
openfactura dte pdf "$codigo" -o "facturas/$codigo.pdf"

Los errores van a stderr como Error [codigo]: mensaje; con --json, stderr recibe el JSON de error de la API.

Salida Significado
0 Todo bien
1 Error de la API o de validación (incluye errores de red)
2 Uso incorrecto: opción inválida, archivo ilegible, falta --yes
3 Sin autenticar: falta la clave, o es inválida, revocada o expiró
4 Límite de peticiones excedido

La CLI también incluye un servidor MCP por stdio: openfactura mcp.