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:

  1. Entre con el usuario principal de la empresa, o con uno secundario que tenga esa opción.
  2. Vaya a Empresas → Comprobantes de pago → Consulta de Validez de Comprobantes de Pago → API SUNAT.
  3. 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_found poco 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_UNAVAILABLE o SUNAT_FORMAT_CHANGED. Los dos primeros traen la cabecera Retry-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.