Ir al contenido
Facturalo

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.

POSThttps://api.facturalo.pe/api/v3/documentos/validar

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: true si cumple las reglas; false si SUNAT lo rechazaría.
  • data.errores[]: cada error con codigo (código SUNAT), mensaje (descripción oficial) y detalle (nodo y valor del XML que lo causa).
  • data.observaciones[]: códigos 4000+. SUNAT acepta el comprobante y las registra como observación.
  • data.totales y data.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 como RECHAZADA con 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

Authorization

Token de la empresa · HTTP directo

Fetch Request
$ # Node 18+ fetch
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);
HTTP directo · funciona con cualquier cliente HTTP
Response

Elige un ejemplo de respuesta:

application/json
200· Cumple las reglas
{
  "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."
  }
}