Estados de documento
POST /comprobantes/emitir responde con data.documento.estado, uno de estos tres valores.
| Código | Nombre | Significa |
|---|---|---|
ACEPTADA | Aceptada | SUNAT aceptó el comprobante. Trae hash, cadenaQr, codigoBarras y los enlaces de descarga (data.enlaces.pdf/xml/cdr). |
EN_PROCESO | En proceso | Solo con webhook: true — el envío a SUNAT está en curso. Consulta data.enlaces.consulta o espera la notificación al webhook. |
RECHAZADA | Rechazada | SUNAT observó el comprobante — revisa data.sunat.mensaje para el motivo. No hay reintento automático. |
Flujo típico
Con webhook: false (el valor por defecto), POST /comprobantes/emitir es síncrono: la respuesta ya trae el estado final — ACEPTADA o RECHAZADA, sin pasos intermedios que consultar.
webhook: false — aceptada
{
"estado": "ACEPTADA",
"sunat": { "estado": "ACEPTADA", "codigo": "0", "mensaje": "La Factura numero F001-00000001 ha sido aceptada" }
}webhook: true — asíncrono
Con
webhook: true, la respuesta inmediata trae data.documento.estado: "EN_PROCESO" — consulta data.enlaces.consulta más tarde o espera la notificación en tu webhook para conocer el resultado final (ACEPTADA o RECHAZADA).webhook: true — en proceso
{
"documento": { "estado": "EN_PROCESO" },
"enlaces": { "consulta": "https://api.facto.com.pe/api/v1/comprobantes/{id}" }
}Un comprobante rechazado
Cuando SUNAT observa un comprobante, la solicitud HTTP igual responde 200 OK — el rechazo se refleja en data.estado: "RECHAZADA" y data.sunat.mensaje, no en el código HTTP. No hay reintento automático — corrige y crea un nuevo comprobante.
Comprobante rechazado por SUNAT
{
"estado": "RECHAZADA",
"documento": { "id": "9c948140-674e-11f1-85b5-d764057e10c4", "serie": "F001", "correlativo": "F001-00000001", "tipo": "FACTURA" },
"sunat": { "codigo": "2800", "mensaje": "El número de RUC del emisor no existe.", "notas": [] }
}Un comprobante ACEPTADA no se elimina: se anula con un endpoint dedicado — ver Anular factura o Anular boleta.