Validar documento (sin emitir)
Valida una factura, boleta o nota con las reglas oficiales de validación de SUNAT antes de emitirla. Mismo body que POST /documentos/enviar. No emite, no firma, no usa el correlativo ni consume tu plan.
Envía el mismo JSON que usarías en POST /documentos/enviar. Facturalo arma el XML exactamente como lo enviaría y lo pasa por las reglas oficiales de validación CPE de SUNAT. Si encuentra errores, responde con el mismo código que devolvería SUNAT (por ejemplo 2800, 3103, 2040) y te dice cuáles son todos, no solo el primero.
Cómo leer la respuesta
data.valido:truesi cumple las reglas;falsesi SUNAT lo rechazaría.data.errores[]: cada error concodigo(código SUNAT),mensaje(descripción oficial) ydetalle(nodo y valor del XML que lo causa).data.observaciones[]: códigos 4000+. SUNAT acepta el comprobante y las registra como observación.data.totalesydata.items[]: gravada, IGV y total calculados por Facturalo con el mismo cálculo que al emitir. Sirven de vista previa.- La respuesta es HTTP 200 en ambos casos: la petición funcionó. Revisa
data.valido.
Qué no valida
Solo lo que SUNAT define en sus reglas de validación. No consulta el padrón de RUC (RUC inexistente o de baja), si el número ya fue usado en SUNAT (código 1033, ver Estados) ni el certificado o la habilitación del emisor. Esas comprobaciones las hace SUNAT al recibir el comprobante.
Cuándo usarlo
- Antes de emitir en producción (
sk_live_): un rechazo de SUNAT deja el comprobante registrado comoRECHAZADAcon ese número. - Al integrar: prueba todos tus casos (exonerada, gratuita, detracción, descuentos, notas) sin gastar correlativos.
- En demo (
sk_test_) funciona igual y no cuenta en tu uso.
Language
Credentials
Header
Token de la empresa · HTTP directo
const response = await fetch("https://api.facturalo.pe/api/v3/documentos/validar", {
method: "POST",
headers: {
"Authorization": "sk_test_…",
"Content-Type": "application/json"
},
body: JSON.stringify({
"webhook": false,
"documento": {
"sunatTransaccion": "0101",
"tipoComprobante": "01",
"serie": "F001",
"correlativo": "1",
"fechaEmision": "2026-06-13",
"moneda": "PEN",
"formaPago": "CONTADO",
"otrosCampos": [
{
"label": "Cajero",
"value": "Guillermo"
},
{
"label": "Método de pago",
"value": "Yape"
},
{
"label": "Mesa",
"value": "12"
}
],
"cliente": {
"tipoDocumento": "6",
"numeroDocumento": "20000000001",
"denominacion": "EMPRESA S.A.C.",
"direccion": "AV. LIMA 123 - LIMA - LIMA - LIMA",
"correo": "cliente@empresa.com"
},
"items": [
{
"unidadMedida": "NIU",
"descripcion": "SERVICIO DE CONSULTORÍA",
"cantidad": 2,
"precioUnitario": 590,
"tipoIgv": "10"
},
{
"unidadMedida": "NIU",
"descripcion": "LAPTOP DELL INSPIRON",
"cantidad": 1,
"precioUnitario": 3540,
"tipoIgv": "10"
}
]
}
})
});
const data = await response.json();
console.log(data);Elige un ejemplo de respuesta:
{
"success": true,
"message": "El comprobante F001-1 cumple las reglas de validación de SUNAT.",
"data": {
"valido": true,
"prediccion": "ACEPTADA",
"documento": {
"tipo": "01",
"serie": "F001",
"correlativo": "1"
},
"errores": [],
"observaciones": [],
"totales": {
"moneda": "PEN",
"gravada": 4000,
"igv": 720,
"total": 4720
},
"items": [
{
"descripcion": "SERVICIO DE CONSULTORÍA",
"cantidad": 2,
"precioUnitario": 590,
"tipoIgv": "10",
"subtotal": 1000,
"igv": 180,
"total": 1180
},
{
"descripcion": "LAPTOP DELL INSPIRON",
"cantidad": 1,
"precioUnitario": 3540,
"tipoIgv": "10",
"subtotal": 3000,
"igv": 540,
"total": 3540
}
],
"duracionMs": 21,
"alcance": "Reglas oficiales de validación CPE de SUNAT. No incluye padrón de RUC, número ya usado en SUNAT ni certificado."
}
}