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).
npm i -g @openfactura/cliopenfactura --version
# o sin instalarnpx @openfactura/cli --helpIniciar sesión
Sección titulada «Iniciar sesión»openfactura login --url https://openfactura.co# Clave de API (of_test_… u of_live_…): ← se teclea sin mostrarselogin verifica la clave y la guarda en ~/.config/openfactura/config.json con permisos 0600.
Otras formas:
echo "$CLAVE" | openfactura login --url https://openfactura.co # desde una tuberíaopenfactura login --profile produccion # otro perfilopenfactura logoutEn integración continua basta con variables de entorno:
export OPENFACTURA_URL=https://openfactura.coexport 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 |
Comandos
Sección titulada «Comandos»Todos aceptan --json (el JSON de la API en stdout), --url, --profile y --help.
openfactura whoami # actor, permisos, ambienteopenfactura emisor # datos fiscales, establecimientos, credenciales cargadas
openfactura clientes list --q "contribuyente"openfactura clientes add --file cliente.jsonopenfactura productos list --q licenciaopenfactura productos add --codigo LIC-001 --descripcion "Licencia anual" --precio 100 --tipo-item 2
openfactura catalogos CAT-013 --departamento 06
openfactura dte validar factura.jsonopenfactura dte emitir factura.json [--idempotency-key <clave>]openfactura dte list --tipo 01 --estado procesado --desde 2026-11-01 --hasta 2026-11-30openfactura dte get <codigo>openfactura dte json <codigo> -o dte.jsonopenfactura dte pdf <codigo> -o factura.pdfopenfactura dte invalidar <codigo> --tipo 2 --motivo "Operación rescindida"openfactura dte retorno <codigo> retorno.json
openfactura eventos operaciones-especiales simplificadas.jsonopenfactura eventos list --tipo retornoopenfactura eventos get|json|pdf <codigo>
openfactura contingencia transmitirEl archivo de dte emitir es el mismo cuerpo de POST /api/v1/dte (vea
Emitir documentos). - lee de la entrada estándar.
En scripts
Sección titulada «En scripts»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.