Documentación
API de validación VERI*FACTU
Valida tus XML de suministro desde cualquier lenguaje o entorno — si puede hacer una petición HTTPS, puede usar esta API. Sin registro ni certificado. Retención cero: el XML se procesa en memoria y no se almacena.
Endpoint
POST https://verifactu.tools/api/v1/validate
Envía el XML como cuerpo crudo (Content-Type: application/xml) o como fichero en el campo xml de un formulario multipart. Si envías un sobre SOAP completo (lo que guardan los logs de tu SIF), lo detectamos y validamos el contenido del Body automáticamente.
Ejemplos
curl (Linux, macOS, Windows 10+):
curl -X POST https://verifactu.tools/api/v1/validate \ -H "Content-Type: application/xml" \ --data-binary @suministro.xml
PowerShell:
Invoke-RestMethod -Method Post -Uri "https://verifactu.tools/api/v1/validate" ` -ContentType "application/xml" -InFile "suministro.xml"
PHP:
$respuesta = file_get_contents('https://verifactu.tools/api/v1/validate', false,
stream_context_create(['http' => [
'method' => 'POST',
'header' => 'Content-Type: application/xml',
'content' => file_get_contents('suministro.xml'),
]]));
Respuesta
{
"ok": true,
"avisos": [],
"capas": {
"esquema": { "estado": "ok", "errores": [] },
"cadena": { "estado": "roturas", "registros": 2, "roturas": [
{ "posicion": 1, "tipo": "huella_incorrecta",
"detalle": "La huella declarada (F7B94CFD…) no coincide con la calculada…" } ] },
"reglas": { "estado": "hallazgos", "hallazgos": [
{ "posicion": 0, "codigo_aeat": "1142", "regla": "L2-15.7-CUOTA",
"mensaje": "Línea 1: CuotaRepercutida 25.00 no cuadra con 105.00 × 10% …" } ] }
},
"duracion_ms": 6.1
}
Las tres capas
| Capa | Qué valida | Estados |
|---|---|---|
esquema | XSD oficial de la AEAT (con línea y mensaje por error) | ok · errores |
cadena | Huellas SHA-256 y encadenamiento de la serie completa | ok · roturas · no_evaluada |
reglas | Reglas de negocio del doc. de validaciones v1.2.2 (importes ±10,00 €, destinatarios, regímenes, recargos…), con su codigo_aeat enlazable a /errores | ok · hallazgos · no_evaluada |
Límites y alcance
- Máximo 5 MB por petición · 60 peticiones/minuto por IP. ¿Necesitas más? Escríbenos.
- Cubrimos todo lo verificable en local. Lo que depende del entorno de la AEAT (censo, certificados, duplicados ya registrados) solo puede comprobarlo la sede — no fingimos un "todo bien".
- Errores HTTP:
413tamaño excedido ·422cuerpo vacío ·429límite de peticiones.
¿Quieres esto dentro de tu CI, con el mock de la AEAT y el informe de conformidad?
La suite entra en beta este otoño (20 equipos, precio fundador 150 €/año) — apúntate.
La suite entra en beta este otoño (20 equipos, precio fundador 150 €/año) — apúntate.