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.
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.
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'),
]]));
{
"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
}
| 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 |
413 tamaño excedido · 422 cuerpo vacío · 429 límite de peticiones.