Estados
Qué significa cada estado de un documento y cómo seguirlo.
| Estado | Significado | ¿Final? |
|---|---|---|
processing | Enviado a SUNAT, sin respuesta definitiva todavía. | No |
accepted | Aceptado por SUNAT (CDR código 0). | Sí |
accepted_with_observations | Aceptado con observaciones. Es válido; revisa sunat.description. | Sí |
rejected | SUNAT lo rechazó. El número queda usado; corrige y emite uno nuevo. | Sí |
error | No se pudo completar el envío (por ejemplo, SUNAT no respondió o las credenciales fallaron). Revisa sunat.errorMessage. | Puede reintentarse |
void_pending | Hay una anulación en curso. | No |
voided | Anulado (baja o resumen aceptado). | Sí |
Seguir un documento en processing
La API vuelve a consultar a SUNAT cada 15 segundos los documentos que quedaron en proceso con ticket. Para enterarte del resultado:
- Webhooks (recomendado): recibes
document.accepted,document.observed,document.rejectedodocument.failed. Ver Webhooks. - Consultar:
GET /documents/{id}devuelve el estado actual. - Forzar la consulta:
POST /documents/{id}/query-sunatconsulta el ticket en SUNAT en ese momento y devuelve el documento actualizado. Responde404si el documento no tiene ticket.
Reintentos automáticos
Si el envío falla porque SUNAT no responde o por un error de red (NETWORK_ERROR, SOAP_FAULT o códigos 01xx de disponibilidad), la API reenvía el mismo XML sola, hasta 5 veces, esperando 1, 2, 4, 8 y 16 minutos. Si sigue fallando, avisa por correo al email del workspace y el documento queda en error, y también recibes el webhook document.failed. Los errores de credenciales (0102, 0103) y los rechazos de contenido no se reintentan.
Reenviar un documento en error
POST /documents/{id}/resend vuelve a enviar a SUNAT el mismo XML firmado, con la misma serie y número. Responde 202 con el documento. Si el XML original no está disponible responde 409 FILES_NOT_AVAILABLE.
No reenvíes un documento rejected: SUNAT lo rechazará de nuevo. Emite uno nuevo con los datos corregidos.
Resultado de SUNAT
El bloque sunat de cada documento trae la respuesta:
responseCodeydescriptionvienen del CDR.errorCodeyerrorMessagedescriben el fallo cuando el estado esrejectedoerror.ticketexiste en envíos asíncronos (resúmenes, bajas y guías).
