Anular Boleta
Anula una boleta electrónica, o una nota de crédito o débito de boleta, mediante un Resumen Diario (RC) con estado de baja. Facturalo envía el resumen a SUNAT en la misma petición y consulta su ticket de inmediato.
POSThttps://api.facturalo.pe/api/v3/documentos/anular
La respuesta es síncrona. Si SUNAT todavía no terminó de procesar el ticket, recibes
estado: EN_PROCESO; confirma el resultado final con GET /documentos/{id}.Parámetros del body
Campo
Descripción
documentoobjectrequerido
Datos del comprobante a anular.
tipoComprobantestringrequerido
03 para boleta, o 07 / 08 para una nota de crédito o débito de boleta.seriestringrequerido
Serie de la boleta.Ej:
B001correlativostringrequerido
Número correlativo (máximo 8 dígitos).Ej:
1motivostringrequerido
Razón de la anulación.Ej:
Error en los datos del clienteCómo leer la respuesta
| data.estado | sunat.procesada | Qué significa |
|---|---|---|
ANULADA | true | SUNAT aceptó la baja (sunat.codigo = "0"). Se envía el webhook documento.anulado. |
EN_PROCESO | false | SUNAT recibió la baja pero aún no terminó de procesar el ticket (sunat.codigo = null). El documento ya figura como anulado en Facturalo; confirma el resultado con GET /documentos/{id}. |
RECHAZADA | true | SUNAT rechazó la baja; el documento sigue vigente. El motivo está en sunat.codigo y sunat.mensaje. |
NO_ENVIADA | false | No se pudo enviar la baja a SUNAT; el documento sigue vigente. Vuelve a intentarlo. |
| Campo | Descripción |
|---|---|
sunat.ticket | Ticket que SUNAT asignó al resumen. |
sunat.nombreArchivo | Nombre del resumen enviado (RUC-tipo-fecha-número). |
sunat.hash | Hash del XML firmado del resumen. |
sunat.procesada | true cuando SUNAT ya devolvió el resultado final del ticket. |
Cuando SUNAT recibe la baja (ANULADA o EN_PROCESO), el documento queda anulado en Facturalo, GET /documentos/{id} lo devuelve con el bloque anulacion y se envía el evento documento.anulado a los webhooks suscritos.
Language
Credentials
Header
Authorization
Ejemplos con el SDK oficial en Node, PHP y Python
API Request
$ npm install @facturalo-pe/node
import { FacturaloClient } from "@facturalo-pe/node";
const facturalo = new FacturaloClient({ token: process.env.FACTURALO_TOKEN! });
const result = await facturalo.documentos.anular({
tipoComprobante: "03",
serie: "B001",
correlativo: "1",
motivo: "Error en los datos del cliente"
});
console.log(result.estado, result.sunat.ticket);SDK oficial @facturalo-pe/node · guía en /sdks
Response
Elige un ejemplo de respuesta:
application/json
200Anulada
{
"success": true,
"message": "El Resumen diario RC-20261030-1, ha sido aceptado",
"data": {
"estado": "ANULADA",
"documento": {
"id": "83ad82a0-680e-11f1-8e35-2d93ac0f2c84",
"tipo": "BOLETA",
"serie": "B001",
"correlativo": "00000001"
},
"sunat": {
"codigo": "0",
"mensaje": "El Resumen diario RC-20261030-1, ha sido aceptado",
"notas": [],
"ticket": "1781234567890",
"hash": "kq1tB7d0n3Wf0yV2oQe9cM4sXaY=",
"nombreArchivo": "20601476551-RC-20261030-1",
"procesada": true
}
}
}