Estado de comprobantes
Para qué sirve
Dice si SUNAT tiene cada comprobante de un lote: facturas, boletas y notas de su empresa, también las boletas declaradas por resumen diario. Sirve sobre todo cuando un resumen queda en duda, porque su ticket ya no se puede consultar o porque SUNAT contesta que ya estaba registrado: con la respuesta se decide si el comprobante está declarado o hay que volver a enviarlo.
Las credenciales
Usa la consulta de validez de SUNAT, que pide una aplicación propia de su empresa. Se registra una sola vez, en SOL:
- Entre con el usuario principal de la empresa, o con uno secundario que tenga esa opción.
- Vaya a Empresas → Comprobantes de pago → Consulta de Validez de Comprobantes de Pago → API SUNAT.
- Escriba un nombre y una URL para la aplicación y pulse Registrar. SUNAT le da un ID y una CLAVE.
No sirven las credenciales de la aplicación del SIRE (las de «Gestión Credenciales de API SUNAT»): SUNAT las rechaza para esta consulta. Tampoco hace falta la clave SOL.
La consulta
curl -X POST https://cpe.sistemerp.com/v1/documents/status \
-H "X-API-Key: <su API key>" \
-H "Content-Type: application/json" \
-d '{
"credentials": {
"ruc": "20999999991",
"client_id": "11111111-2222-3333-4444-555555555555",
"client_secret": "<su CLAVE>"
},
"documents": [
{
"document_type": "03",
"issue_date": "2026-09-24",
"number": 1234,
"series": "B001",
"total": 25.0
},
{
"document_type": "07",
"issue_date": "2026-09-23",
"number": 12,
"series": "BC01",
"total": 4.0
},
{
"document_type": "03",
"issue_date": "2026-09-24",
"number": 1299,
"series": "B001",
"total": 10.0
}
]
}'
{
"ruc": "20999999991",
"checked_at": "2026-09-26T02:30:00Z",
"documents": [
{
"document_type": "03",
"number": 1234,
"series": "B001",
"status": "accepted",
"sunat_code": "1"
},
{
"document_type": "07",
"number": 12,
"series": "BC01",
"status": "accepted",
"sunat_code": "1"
},
{
"document_type": "03",
"number": 1299,
"series": "B001",
"status": "not_found",
"sunat_code": "0"
}
]
}
Cada campo está en la referencia. Van hasta 50 comprobantes por petición, y la respuesta los devuelve en el mismo orden.
Fecha e importe exactos
SUNAT solo reconoce el comprobante con su fecha de emisión y su importe total exactos, en positivo también en las notas de crédito. Con otro importe u otra fecha contesta como si no existiera.
Qué significa cada estado
status |
Qué significa | Qué hacer |
|---|---|---|
accepted |
SUNAT lo tiene y es válido | Está declarado: no lo vuelva a enviar |
annulled |
SUNAT lo tiene comunicado de baja | Nada: la baja ya consta |
not_found |
SUNAT no lo tiene con esa fecha y ese importe. Puede no estar declarado o estarlo con otros datos: SUNAT no distingue | No lo reenvíe por un solo not_found: revise los datos y vuelva a consultar más tarde |
unknown |
No se pudo saber | Mire error: su code dice por qué y retryable, si repetir sirve |
Cuándo consultar
- Un comprobante declarado por resumen diario suele verse el mismo día en que se envía el resumen, aunque su sistema todavía no haya consultado el ticket.
- Si sale
not_foundpoco después de enviarlo, vuelva a consultar al día siguiente antes de reenviarlo.
Errores
Un fallo con un comprobante lo deja en unknown sin tumbar el lote: su campo error dice el motivo.
error.code |
Qué pasó | ¿Reintentar? |
|---|---|---|
SUNAT_UNAVAILABLE |
SUNAT no respondió, o tardó tanto que no dio tiempo a consultarlo | Sí, más tarde |
RATE_LIMITED |
Se alcanzó el tope de consultas por minuto | Sí, pasado un minuto |
INVALID_REQUEST |
SUNAT no aceptó los datos de ese comprobante, o lo tiene como de imprenta | No: revise los datos |
SUNAT_FORMAT_CHANGED |
SUNAT respondió algo que el servicio no sabe leer; Pytronia recibe el aviso | No |
La petición entera falla solo en estos casos:
- SUNAT rechaza las credenciales:
SUNAT_CREDENTIALS_REJECTED. No reintente: revise la aplicación en SOL. - No se supo el estado de ninguno:
RATE_LIMITED,SUNAT_UNAVAILABLEoSUNAT_FORMAT_CHANGED. Los dos primeros traen la cabeceraRetry-After: reintente pasados esos segundos.
Una petición dura unos segundos; si SUNAT va lento, a los 20 segundos no se empieza ninguna consulta más.
Todos los códigos, en Errores y reintentos; los topes, en Límites.