Skip to content

Interfaz de línea de comandos ​

El SDK incluye un CLI verifactu que expone las mismas primitivas que la librería en formato apto para scripts de shell, jobs cron y operaciones puntuales. Se instala como bin script en el paquete, así que tras bun add verifactu-sdk queda disponible vía tu runner preferido:

bash
bunx verifactu --help
npx verifactu --help

Subcomandos ​

verifactu send       Envía un fichero JSON de facturas a la AEAT
verifactu query      Consulta paginada contra la AEAT (sólo modo verifactu)
verifactu qr         Renderiza el QR fiscal obligatorio para una factura
verifactu validate   Valida un fichero JSON contra los schemas + las 23 reglas

Cada subcomando lee su entrada principal desde un fichero JSON. El fichero debe respetar las formas públicas Invoice / CancelInvoiceInput (consulta la referencia API). Usa verifactu validate para revisar un fichero antes de enviarlo.

verifactu send ​

Envía una o más facturas.

bash
bunx verifactu send invoices.json \
  --env pre \
  --mode verifactu \
  --cert ./cert.pfx \
  --pass "$CERT_PASS" \
  --nif B12345678 \
  --representative B99999999

Opciones:

FlagDescripción
--env pre|prodEntorno. Por defecto pre.
--mode verifactu|on-requestModo de remisión. Por defecto verifactu.
--cert <ruta>Ruta a un certificado .pfx. Obligatorio.
--pass <password>Passphrase del certificado. Lee $VERIFACTU_PASS si se omite.
--nif <NIF>NIF del obligado. Obligatorio.
--representative <NIF>NIF del representante (opcional).
--with-sealUsa el pool de URLs de sello electrónico.
--dry-runEjecuta el validador local, imprime el sobre, no envía.

Códigos de salida:

  • 0 — todos los registros aceptados (Correcto).
  • 1 — aceptación parcial (ParcialmenteCorrecto).
  • 2 — rechazo de envelope (Incorrecto).
  • 3 — fallo de validación local.

verifactu query ​

Consulta paginada de registros ya enviados. Disponible sólo en modo verifactu.

bash
bunx verifactu query --year 2026 --period 05 --env pre --cert ./cert.pfx

Opciones:

FlagDescripción
--year YYYYEjercicio. Obligatorio.
--period MMPeriodo (01-12). Obligatorio.
--series PATTERNFiltro opcional por serie.
--counterpart NIFFiltro opcional por NIF de la contraparte.
--ext-ref REFFiltro opcional por referencia externa.
--jsonEmite JSON crudo en lugar de una tabla.

verifactu qr ​

Renderiza el QR fiscal obligatorio.

bash
bunx verifactu qr invoice.json --out qr.png --size 35

Opciones:

FlagDescripción
--out <ruta>Fichero de salida. Formato inferido por extensión (.png, .svg).
--size <mm>Lado del cuadrado del QR en milímetros (30-40 permitidos). Por defecto 35.
--mode verifactu|on-requestSelecciona la familia de URLs base de la AEAT.
--env pre|prodEntorno para la URL base.
--language es|en|...Parámetro de query Idioma opcional.

verifactu validate ​

Ejecuta el validador local (Zod + 23 reglas) contra un fichero JSON sin contactar con la AEAT.

bash
bunx verifactu validate invoices.json

Devuelve código de salida 0 en éxito, 3 ante cualquier incidencia de nivel rechazo. Usa --admissible-fails para fallar también ante advertencias sólo admisibles (útil en CI).

Formato de entrada JSON ​

El fichero JSON puede contener una sola factura (objeto) o un array de facturas. La forma encaja con Invoice de verifactu-sdk — consulta la referencia API. Ejemplo mínimo:

json
{
  "invoiceId": {
    "issuerNif": "B12345678",
    "seriesNumber": "A/2026/0001",
    "issueDate": "2026-05-20"
  },
  "invoiceType": "F1",
  "issuerName": "My Company SL",
  "description": "Servicios de consultoría",
  "recipients": [{ "nif": "12345678Z", "legalName": "Customer SL" }],
  "breakdown": [
    {
      "tax": "01",
      "regimeKey": "01",
      "operationQualification": "S1",
      "taxRate": "21",
      "taxBase": "100.00",
      "taxAmount": "21.00"
    }
  ],
  "totalTaxAmount": "21.00",
  "totalAmount": "121.00",
  "generatedAt": "2026-05-20T10:00:00+02:00",
  "billingSystem": {
    "producerName": "My Company SL",
    "nif": "B12345678",
    "systemId": "JC",
    "systemName": "My App",
    "version": "1.0.0",
    "installationNumber": "0001",
    "onlyVerifactu": "S",
    "multipleTaxpayer": "N",
    "hasMultipleTaxpayers": "N"
  },
  "chainLink": { "first": true },
  "hash": ""
}

Puedes dejar hash vacío — send lo recomputa antes del envío. Lo mismo aplica a chainLink.previousHash: el SDK lo rellena desde el estado local de la cadena.

Variables de entorno ​

VariablePropósito
VERIFACTU_PASSPassphrase usado cuando se omite --pass.
VERIFACTU_DEBUGDefine a 1 para imprimir el sobre SOAP y la respuesta a stderr.
VERIFACTU_E2EActiva la suite e2e opt-in. Consulta Pruebas.

Ver también ​

  • Inicio rápido — las mismas operaciones expuestas vía librería.
  • Pruebas — ejecutar la suite e2e contra pre-producción de la AEAT.

Released under the MIT license.