Ctrl K
Actualizado: Markdown Abrir en Claude Abrir en ChatGPT

Referencia de comandos del CLI

Consulta cada comando del CLI ecuafact con sus opciones, las variables de entorno que acepta y los códigos de salida para tus scripts.

Importante

Ambiente de pruebas: sin validez fiscal. Los ejemplos que emiten usan el entorno sandbox.

Opciones globales#

Valen en cualquier comando.

Opción Descripción
-e, --entorno <entorno> sandbox, produccion u otro configurado.
-p, --perfil <perfil> Perfil de configuración. Por defecto, el activo.
-o, --salida <formato> tabla, json o csv. Por defecto, tabla en la terminal y JSON si rediriges la salida.
--campos <lista> Campos a mostrar, separados por coma. Admite rutas con punto (estado,claveAcceso).
-q, --silencioso Muestra solo el resultado y los errores.
--confirmar produccion Confirma sin preguntar una operación que escribe en producción.
--version Muestra la versión del CLI.
-h, --help Muestra la ayuda del comando.

Emisión#

ecuafact emitir#

Emite uno o varios comprobantes. Alias: emit.

ecuafact emitir <entradas...> [opciones]
Opción Descripción
<entradas...> Archivos .json (objeto o array) o .jsonl, carpetas, o - para la entrada estándar.
-w, --esperar Espera el resultado del SRI. Por defecto, el valor de la clave esperar.
--espera-maxima <segundos> Tiempo máximo de espera, de 5 a 3600. Por defecto, 180.
--descargar <tipos> Descarga ride, xml o ride,xml al autorizarse. Implica --esperar.
-d, --destino <carpeta> Carpeta de las descargas. Por defecto, la clave carpetaDescargas (la carpeta actual).
--plantilla <archivo> Plantilla para leer CSV o Excel (Emitir desde CSV o Excel).
--patron <patrones> En carpetas, archivos a leer separados por ;. Por defecto, *.json;*.jsonl;*.ndjson.
-r, --recursivo En carpetas, incluye las subcarpetas.
--dry-run, --simular Valida y muestra lo que enviaría, sin enviar nada.
--continuar-con-errores Envía los válidos aunque otros tengan errores.
--reporte <archivo> Guarda el resultado de cada comprobante en un .csv o .json.
--mover-procesados <carpeta> Mueve ahí los archivos enviados bien.
--mover-errores <carpeta> Mueve ahí los archivos con errores, junto a su .error.json.
--concurrencia <n> Envíos simultáneos, de 1 a 10. Por defecto, la clave concurrencia (3).
--sin-verificar-cupo No compara el lote con el cupo antes de enviar.
ecuafact emitir factura.json --esperar --descargar ride --entorno sandbox
ecuafact emitir ./pendientes -r --reporte resultado.csv --entorno sandbox

ecuafact validar#

Valida comprobantes sin enviarlos. Alias: validate.

ecuafact validar <entradas...> [--en-linea] [--plantilla <archivo>] [--patron <patrones>] [-r]

--en-linea comprueba además con la API que tu RUC y el tipo de comprobante estén habilitados.

ecuafact nuevo#

Crea un comprobante de ejemplo. Alias: new.

ecuafact nuevo <tipo> [-f, --archivo <archivo>] [--sobrescribir]

<tipo> acepta factura, liquidacion, nota-credito (o nc), nota-debito (o nd), guia, retencion o el código, de 01 a 07.

ecuafact lote#

Consulta y reanuda las emisiones anteriores. Alias: batch.

Comando Descripción
lote listar [--limite <n>] Lista los lotes, del más reciente al más antiguo. Por defecto, 20. Alias: ls.
lote estado <lote> Muestra el estado de cada comprobante del lote.
lote reanudar <lote> [--esperar] [--espera-maxima <segundos>] [--descargar <tipos>] [-d <carpeta>] Reenvía los pendientes sin duplicar. Se ejecuta en el entorno del lote; --descargar implica --esperar. Alias: resume.
lote borrar <lote> Borra el registro del lote. No afecta a los comprobantes.

ecuafact vigilar#

Emite cada archivo que aparece en una carpeta. Alias: watch. Guía: Vigilar una carpeta.

ecuafact vigilar <carpeta> [opciones]
ecuafact vigilar instalar <carpeta> --nombre <nombre> [opciones]
ecuafact vigilar estado --nombre <nombre> [--lineas <n>]
ecuafact vigilar desinstalar --nombre <nombre>
Opción Descripción
--plantilla, --patron Igual que en emitir.
-w, --esperar Espera el resultado del SRI antes de mover el archivo.
--descargar <tipos>, -d, --destino <carpeta> Igual que en emitir; --descargar implica --esperar.
--intervalo <segundos> Cada cuánto revisa la carpeta, de 2 a 3600. Por defecto, 10.
--una-vez Revisa una vez y termina. El código de salida dice si algún archivo falló.
--nombre <nombre> Nombre del servicio (instalar, estado, desinstalar).
--usuario En Linux y macOS, usa un servicio de tu usuario, sin sudo.
--restringir-carpeta Al instalar, deja la carpeta solo para administradores y tu usuario.
--permitir-carpeta-compartida Al instalar, acepta una carpeta en la que puede escribir cualquier usuario del equipo, que así podría emitir con tu API Key. No es recomendable.
--lineas <n> En estado, las últimas líneas del registro del servicio. Por defecto, 15.

Alias de los subcomandos: install, status y uninstall.

ecuafact plantilla#

Plantillas para emitir desde CSV o Excel. Alias: template.

Comando Descripción
plantilla nueva factura [-d <carpeta>] [--sobrescribir] Crea una plantilla y un CSV de ejemplo. Alias: new.
plantilla probar <archivo> --plantilla <archivo> [--limite <n>] Muestra los comprobantes que saldrían del archivo, sin enviarlos. Por defecto, 3.

Consulta#

Comando Descripción
estado <idOperacion> Muestra el seguimiento de una operación (Seguimiento). Alias: status.
comprobantes listar [--desde] [--hasta] [--tipo] [--buscar] [--pagina <n>] [--tamano <n>] [--todas] Lista los comprobantes emitidos, del más reciente al más antiguo. Por defecto, los últimos 30 días, página 1 y 20 filas (máximo 100). --todas recorre todas las páginas. Alias: ls.
descargar [claveAcceso...] [--tipo ride,xml] [-d <carpeta>] [--sobrescribir] Descarga el RIDE y el XML de comprobantes autorizados, como <claveAcceso>.pdf y <claveAcceso>.xml. Por defecto, solo el RIDE. Alias: download.
descargar --desde <fecha> --hasta <fecha> [--tipo-comprobante <01-07>] Sin claves, descarga todos los autorizados del período.
correo reenviar <claveAcceso> --a <correos> Reenvía el comprobante por correo, hasta 20 direcciones separadas por coma.
cuenta Muestra tu integración y sus contribuyentes. Alias: contexto.
consumo Muestra tu cupo de documentos. Alias: cupo.
perfil-emisor ver Muestra los datos del emisor que salen en el RIDE (Perfil del emisor).
perfil-emisor editar [--nombre-comercial] [--direccion-matriz] [--correo] [--telefono] [--ciudad] [--provincia] Cambia solo los datos que indicas.
perfil-emisor logo <archivo> Cambia el logo del RIDE.

--ruc <ruc> elige el contribuyente en comprobantes, descargar y perfil-emisor; acepta el RUC de 13 dígitos o la identificación de 10. Por defecto, el de tu perfil o el único habilitado.

ecuafact perfil-emisor editar --correo facturacion@ejemplo.com --telefono 042345678 --entorno sandbox
ecuafact descargar --desde 2026-10-01 --hasta 2026-10-31 --tipo ride,xml -d ./octubre --entorno sandbox

Consultas al SRI#

Comando Descripción
ruc consultar <identificacion> Muestra los datos de un contribuyente.
ruc buscar --apellidos <texto> [--nombres <texto>] [--clase <clase>] [--max <n>] Busca contribuyentes por nombre. --clase acepta PersonaNatural (por defecto), Sociedad o SociedadPublica; --max, de 1 a 30 (por defecto, 10).
identificacion validar <numero> Valida una cédula, un RUC o un pasaporte. Alias del grupo: cedula.
clave decodificar <claveAcceso> Descompone una clave de acceso.
establecimientos <ruc> [--filtro <filtro>] Lista los establecimientos de un RUC. --filtro acepta Todos (por defecto), SoloActivos, SoloCerrados, SoloMatriz o SoloSucursales.
catalogos [nombre] Muestra un catálogo del SRI: tipos-identificacion, formas-pago, tipos-comprobante, tipos-impuesto, tarifas-iva o tarifas-ice. Sin nombre, los lista.

Webhooks#

Estos comandos prueban tu endpoint de webhooks y no llaman a la API. Los dos leen el secreto del destino de la variable ECUAFACT_WEBHOOK_SECRET, o de la entrada estándar con --secreto-desde-stdin.

ecuafact webhooks probar#

Envía a tu endpoint un evento de ejemplo firmado y muestra lo que respondió. Alias: test. El evento lleva las mismas cabeceras de firma que una entrega real, Ecuafact-Signature y las de Standard Webhooks, así que sirve para probar tu endpoint con cualquiera de los dos esquemas.

Opción Descripción
--a <url> URL de tu endpoint.
--evento <evento> document.authorized (por defecto), document.rejected, document.failed u operation.requires_attention.
--motivo <motivo> En document.failed: entrega_no_posible (por defecto), emisor_no_vinculado, estructura_invalida, plan_agotado, resultado_desconocido o suscripcion_inactiva.
--clave-acceso <clave> Clave de acceso del cuerpo. Por defecto, una de ejemplo.
--id-operacion <id> idOperacion del cuerpo. Por defecto, uno nuevo en cada envío.
--firma-invalida Envía una firma incorrecta, para comprobar que tu endpoint la rechaza con un 401.
--secreto-desde-stdin Lee el secreto de la entrada estándar.
ecuafact webhooks probar --a http://localhost:5000/webhooks
ecuafact webhooks probar --a http://localhost:5000/webhooks --evento document.failed --motivo plan_agotado

ecuafact webhooks verificar#

Comprueba la firma de un webhook que ya recibiste. Alias: verify. Verifica la cabecera Ecuafact-Signature con --firma, o las tres cabeceras de Standard Webhooks con --webhook-id, --webhook-timestamp y --webhook-signature juntas; no se pueden combinar los dos esquemas en la misma llamada. El resultado indica en esquema cuál verificó.

Opción Descripción
--firma <valor> Valor de la cabecera Ecuafact-Signature (t=...,v1=...).
--webhook-id <id> Valor de la cabecera webhook-id.
--webhook-timestamp <segundos> Valor de la cabecera webhook-timestamp.
--webhook-signature <firma> Valor de la cabecera webhook-signature (v1,...).
--cuerpo <@archivo> Cuerpo crudo, desde un archivo o - para la entrada estándar.
--tolerancia <segundos> Diferencia admitida con la marca de tiempo. Por defecto, 300.
--ahora <segundos> Instante de comparación en segundos Unix, para revisar un evento antiguo. Por defecto, ahora.
--secreto-desde-stdin Lee el secreto de la entrada estándar.
ecuafact webhooks verificar --firma "t=1791385446,v1=a1ae..." --cuerpo @evento.json --ahora 1791385446
ecuafact webhooks verificar --webhook-id 9b2e4f7a-1c3d-4e5f-8a6b-7c8d9e0f1a2b --webhook-timestamp 1791385446 --webhook-signature "v1,6Ygt..." --cuerpo @evento.json --ahora 1791385446

Configuración#

ecuafact login#

Guarda la API Key del perfil y el entorno actuales. Sin opciones, la pide sin mostrarla.

ecuafact login [--desde-stdin] [--sin-verificar]
Opción Descripción
--desde-stdin Lee la API Key de la entrada estándar, para scripts.
--sin-verificar Guarda la API Key sin probarla contra la API.
ecuafact login --entorno sandbox
echo "$ECUAFACT_KEY_SANDBOX" | ecuafact login --desde-stdin --entorno sandbox

Otros comandos de configuración#

Comando Descripción
logout Borra la API Key guardada del perfil y el entorno.
sesion Muestra el perfil, el entorno y de dónde sale la API Key, sin mostrarla. Alias: whoami.
config ver Muestra la configuración efectiva y de dónde sale cada valor.
config obtener <clave>, poner <clave> <valor>, quitar <clave> Lee, guarda o borra una clave del perfil. Alias: get, set, unset.
config claves Lista las claves, su variable de entorno y su valor por defecto.
config ruta Muestra dónde está el archivo de configuración de tu usuario.
perfil usar <nombre>, listar, borrar <nombre> Activa (o crea), lista o borra perfiles. Alias de listar: ls.
entorno listar, agregar <nombre> --api <url> [--produccion], quitar <nombre> Gestiona entornos propios. --produccion hace que el entorno pida confirmación al escribir, como produccion.
doctor [--sin-ip-publica] Revisa la versión, la configuración, la conexión, la API Key, la IP, el cupo y los contribuyentes. Si la autenticación falla, consulta tu IP pública en api.ipify.org; --sin-ip-publica evita esa consulta.

Claves y variables de entorno#

Clave Variable de entorno Descripción
entorno ECUAFACT_ENTORNO Entorno por defecto. Por defecto, produccion.
ruc ECUAFACT_RUC RUC por defecto.
establecimiento ECUAFACT_ESTABLECIMIENTO Establecimiento por defecto.
puntoEmision ECUAFACT_PUNTO_EMISION Punto de emisión por defecto.
salida ECUAFACT_SALIDA Formato de salida: auto (por defecto: tabla en la terminal y JSON si rediriges), tabla, json o csv.
concurrencia ECUAFACT_CONCURRENCIA Envíos simultáneos. Por defecto, 3.
carpetaDescargas ECUAFACT_CARPETA_DESCARGAS Carpeta de las descargas.
esperar ECUAFACT_ESPERAR Con true, todos los emitir esperan el resultado del SRI.
descargar ECUAFACT_DESCARGAR Archivos a descargar al autorizarse en todos los emitir; también activa la espera.

Además, ECUAFACT_API_KEY define la API Key y tiene prioridad sobre la guardada, y ECUAFACT_PERFIL elige el perfil.

Precedencia y ecuafact.json#

Cada valor sale del primero que lo defina, en este orden:

  1. La opción del comando (--entorno, --salida, --perfil).
  2. La variable de entorno ECUAFACT_*.
  3. Un archivo ecuafact.json en la carpeta actual o en una superior.
  4. Tu perfil (config poner).
  5. El valor por defecto.

ecuafact.json fija la configuración de un proyecto y se puede guardar en tu repositorio, porque nunca lleva la API Key. Como tiene prioridad sobre tu perfil, si config poner parece no tener efecto, revisa si hay uno con ecuafact config ver.

{
  "perfil": "empresa-b",
  "entorno": "sandbox",
  "ruc": "0123456789001",
  "salida": "json"
}

Otros comandos#

Comando Descripción
api <metodo> <ruta> [--datos @archivo] [--idempotency-key <clave>] [--archivo-salida <archivo>] Llama a cualquier ruta de la API con tu API Key y muestra la respuesta tal cual. Para emitir, pasa una --idempotency-key estable (auto genera una nueva en cada llamada). --archivo-salida es necesario para PDF y XML.
schema [comando] Describe el CLI en JSON, para scripts y agentes de IA.
docs [tema] [--imprimir] Abre esta documentación en el navegador; con --imprimir, solo muestra la URL.
ayuda [tema] Muestra guías breves que funcionan sin conexión.

Códigos de salida#

Código Significado
0 El comando terminó bien.
1 Error general, de red o del servidor.
2 Uso incorrecto del comando.
3 Falló la autenticación, la IP o el permiso.
4 Error de validación.
5 El SRI rechazó el comprobante.
6 Se superó el límite de solicitudes o no hay cupo.
7 Resultado parcial: unos elementos salieron bien y otros no.
8 No encontrado o en conflicto.

En los comandos que procesan varios elementos, el código resume el lote. En emitir y lote reanudar es 0 si ningún comprobante falló, 7 si unos salieron bien y otros no, y el código del primer fallo si ninguno salió bien (por ejemplo, 5 si el SRI rechazó todos). El 0 incluye los comprobantes en enviado o en_proceso, que todavía no tienen el resultado del SRI, así que no los des por autorizados: usa --esperar o revisa el estado de cada uno con --reporte. vigilar --una-vez sigue el mismo criterio con los archivos de la carpeta, y descargar devuelve 7 si solo fallaron algunas descargas.

Cuando el CLI no se ejecuta en una terminal, por ejemplo desde un script, escribe el resultado en JSON por la salida estándar y los errores, también en JSON, por la salida de errores. Un error de la API se ve así:

{
  "error": "Credenciales invalidas.",
  "estadoHttp": 401,
  "codigo": "101",
  "idCorrelacion": "0HN7A2B3C4D5E:00000001",
  "codigoSalida": 3,
  "sugerencia": "Revisa la API Key ('ecuafact sesion') y que la IP publica de este equipo este registrada en el portal (Cuenta > IP permitidas). 'ecuafact doctor' muestra la IP detectada."
}
Campo Descripción
error Mensaje del error.
codigoSalida El mismo código con el que termina el comando.
sugerencia Qué hacer, cuando el CLI lo sabe.
estadoHttp, codigo Solo si el error vino de la API: el estado HTTP y el código del error.
errores Solo si la API devolvió detalle de validación.
idCorrelacion Solo si el error vino de la API. Inclúyelo si escribes a soporte.

Siguientes pasos#

No se pudo completar la operación. Recargar ✕