Qué hace VerifactuCloud
Todo lo que aparece en esta lista está construido y en marcha contra la AEAT. Lo que todavía no existe está más abajo, en la hoja de ruta.
-
Registro de alta por cada factura
Construimos el registro de facturación con los campos que exige la Orden HAC/1177/2024 y lo remitimos al servicio de la Agencia Tributaria.
-
Cadena de huellas SHA-256
Cada registro se encadena con la huella del anterior. Si un registro se altera, la cadena deja de cuadrar y se nota.
-
Código QR conforme
Generamos el código QR que debe aparecer impreso en la factura, con la URL de cotejo de la Agencia Tributaria.
-
Anulaciones
Los registros de anulación están implementados: una factura anulada se comunica a la AEAT, no se borra. Todavía no hemos tenido que enviar ninguno, y lo decimos en la página de estado en lugar de dejar que lo supongas.
-
Recuperación del estado de la cadena
Si pierdes tu estado local, recuperamos el último registro desde la AEAT y la cadena continúa sin romperse.
-
Integración por API
REST sobre JSON. Tu sistema llama a nuestra API al emitir la factura; no hay que instalar nada en tus servidores.
Cómo funciona
-
Conectas tu sistema
Llamas a nuestra API cuando emites una factura, con los datos que ya tienes.
-
Nosotros hacemos el registro
Construimos el registro de alta, calculamos la huella, la encadenamos con la anterior y lo remitimos a la Agencia Tributaria.
-
Recibes el QR al instante
El QR vuelve en la misma respuesta, porque lo necesitas para imprimir la factura y no depende de la AEAT. El resultado de la remisión llega después: te damos una URL donde consultarlo cuando la Agencia Tributaria lo haya resuelto.
La API, tal y como responde hoy
Dos llamadas. Envías la factura y el QR vuelve en la misma respuesta; el resultado de la remisión se consulta después, cuando la AEAT lo haya resuelto.
Ejemplos del servicio tal y como responde hoy. Los valores son ilustrativos; los nombres de campo, los códigos de estado y la forma de la respuesta son los que devuelve el servicio.
1. Envías la factura
Responde 202, no 201: la factura queda aceptada para su presentación, no presentada. El QR se deriva de la propia factura y no depende de la AEAT, por eso vuelve ya — lo necesitas para imprimirla.
POST /v1/invoices
Authorization: Bearer <tu-clave>
Content-Type: application/json
{
"numSerie": "2026/0001",
"fechaExpedicion": "19-08-2026",
"descripcion": "Servicios de consultoria",
"base": "1000.00",
"tipoImpositivo": "21",
"cuota": "210.00",
"total": "1210.00",
"destinatarioNIF": "B00000000",
"destinatarioNombre": "Cliente Ejemplo S.L."
}
202 Accepted
{
"id": 1042,
"state": "queued",
"message": "accepted for filing; it will be submitted to AEAT with the next envio",
"self": "/v1/invoices/1042",
"qr": "https://.../VerifactuVisor?nif=...&numserie=...&fecha=...&importe=...",
"qrImage": "/v1/invoices/1042/qr.png"
}
En esta forma la factura entera viaja como operación sujeta y no exenta. Por eso «tipoImpositivo»: «0» significa «sujeta al IVA español, al tipo cero», y no «sin IVA español». Para una operación exenta o no sujeta hay que usar la forma por líneas.
2. Consultas el resultado
La URL que viene en «self» es donde se lee el desenlace. El CSV aparece cuando la AEAT ha registrado la factura, no antes.
GET /v1/invoices/1042
{
"id": 1042,
"numSerie": "2026/0001",
"state": "filed",
"attempts": 1,
"huella": "9F86D081884C7D65...",
"csv": "A-XXXXXXXXXXXXXXX",
"timestampPresentacion": "2026-08-19T09:00:00+02:00",
"estadoRegistro": "Correcto",
"qrImage": "/v1/invoices/1042/qr.png"
}
Cuando la factura mezcla tipos
Si la factura lleva varios tipos de IVA, se envía «lines» en lugar de «base», «tipoImpositivo», «cuota» y «total». Las dos formas se excluyen: enviar las dos a la vez es un error. Los totales se derivan de las líneas, así que no se mandan.
POST /v1/invoices
Authorization: Bearer <tu-clave>
Content-Type: application/json
{
"numSerie": "2026/0002",
"fechaExpedicion": "19-08-2026",
"descripcion": "Suministros y servicios",
"destinatarioNIF": "B00000000",
"destinatarioNombre": "Cliente Ejemplo S.L.",
"lines": [
{ "descripcion": "Consultoria", "base": "100.00",
"tipoImpositivo": "21", "cuota": "21.00", "total": "121.00" },
{ "descripcion": "Libros", "base": "50.00",
"tipoImpositivo": "4", "cuota": "2.00", "total": "52.00" }
]
}
La AEAT no recibe tus líneas. El registro lleva un desglose fiscal de doce entradas como máximo, sin descripción, ni cantidad, ni precio unitario: las líneas con el mismo tratamiento se suman en una entrada, y de ahí salen los totales de la factura.
Reintentar es seguro
La clave de una factura es tu NIF, el «numSerie» y la «fechaExpedicion». Si repites el mismo envío mientras el primero sigue en curso, la respuesta trae el mismo «id» y «duplicate»: true, en lugar de encolar un segundo registro. Un reintento tras un tiempo de espera agotado no duplica nada.
Los cuatro estados
queued- Aceptada, todavía no presentada. Incluye una factura que la AEAT rechazó y que se reenviará corregida.
sending- Va en el envío que se está transmitiendo ahora mismo.
filed- La AEAT la registró. El CSV está disponible.
unknown- Hubo un intento y no sabemos cómo acabó. El registro puede estar ya en la AEAT, así que no se reenvía: se resuelve con una consulta.
El cuarto estado existe porque un reenvío a ciegas puede duplicar un registro en un libro que no se deshace. Preferimos decirte que no lo sabemos a arriesgarnos a duplicarlo.
Hoja de ruta
Esto todavía no existe. Lo listamos para que sepas hacia dónde va el producto, no para venderlo como disponible.
-
Sin fecha: no la anunciamos hasta tenerla
Facturas rectificativas
Hoy, una factura equivocada se corrige comunicando un registro de anulación. La factura rectificativa —lo que la práctica contable espera— todavía no está construida. Si tu caso la necesita, dínoslo antes de integrar nada.
Por ahora la hoja de ruta es esta. Si añadimos algo, aparecerá aquí antes de estar disponible, no después.
Hablemos
Estamos en producción y damos de alta clientes. Cuéntanos con qué facturas, qué volumen manejas y cómo quieres integrarlo, y te decimos qué encaja y qué no. Si vas a integrar la API tú mismo, puedes darte de alta directamente en el panel de partners.
- Consultas generales, técnicas y de integración hola@verifactucloud.com