api · Documentación
Iniciar sesión

SIRE — Registro de Ventas (RVIE) y Compras (RCE)

Descarga la propuesta que SUNAT ya arma automáticamente a partir de tus comprobantes electrónicos: el RVIE (Registro de Ventas e Ingresos Electrónico) y el RCE (Registro de Compras Electrónico), ambos parte del sistema SIRE. Es la misma información que verías entrando tú mismo a SUNAT Operaciones en Línea (SOL) y generando el reporte — esta API automatiza esos mismos pasos y te devuelve el resultado ya en JSON, curado a los campos que de verdad se usan (no las ~50-80 columnas crudas que expone SUNAT).

Habla directo con la API oficial de SUNAT (api-sire.sunat.gob.pe), no con ningún intermediario. Por eso el login es distinto al resto de esta API: SIRE exige la Clave SOL del propio RUC consultado (OAuth2 grant_type=password) — no existe una cuenta SOL general de respaldo como sí la hay para DNI/RUC/CDR. Cada cliente debe registrar sus propias 5 credenciales antes de poder usar SIRE (ver siguiente sección).

1. Antes de empezar: 5 credenciales obligatorias

SIRE necesita los 5 datos juntos — no son credenciales independientes, son un solo login OAuth2 armado con datos de dos orígenes distintos:

DatoDe dónde sale
RUCEl RUC del contribuyente que vas a consultar.
Usuario SOLTu usuario de SUNAT Operaciones en Línea (principal o secundario).
Clave SOLLa clave de ese mismo usuario SOL.
Client IDSe generan dentro de SOL, en Empresas → Credenciales de API SUNAT, creando una credencial para la URI "MIGE RCE y RVIE - SIRE".
Client Secret

Como cliente de esta API, cargas los 5 datos tú mismo en mblapirest.com/api/mi-cuenta → pestaña "Credenciales SUNAT". Si nos administras la cuenta de otro cliente, el mismo formulario existe en el panel admin, en /clientes/{id}/editar.

Sin estos 5 datos completos, cualquiera de los 4 endpoints de abajo responde success: false con el mensaje "No hay credenciales SOL configuradas..." o similar — no hay fallback silencioso a otra cuenta.

2. El flujo tiene 4 pasos (siempre en este orden)

PasoEndpointQué hace
1. PeriodosGET /v1/sire/{ventas|compras}/periodosLista los periodos tributarios (meses) que SUNAT tiene habilitados para tu cuenta.
2. TicketPOST /v1/sire/{ventas|compras}/ticketLe pide a SUNAT que empiece a generar el reporte de un periodo. SUNAT lo procesa de forma asíncrona y devuelve un num_ticket para hacerle seguimiento.
3. PropuestaPOST /v1/sire/{ventas|compras}/propuestaConsulta si el ticket ya terminó; si sí, descarga el archivo, lo procesa y lo guarda en tu cuenta. Si SUNAT todavía lo está generando, responde listo: false — hay que reintentar en unos minutos.
4. DetalleGET /v1/sire/{ventas|compras}/detalleLee lo ya guardado en el paso 3 y te lo devuelve paginado en JSON. Se puede llamar todas las veces que quieras, no vuelve a golpear a SUNAT.

Sustituye {ventas|compras} por ventas (RVIE) o compras (RCE) según el registro que necesites — la forma de los 4 endpoints es idéntica para ambos, solo cambian algunos campos del detalle curado (ver sección 4). Un cliente puede tener contratado solo uno de los dos servicios, o ambos, de forma independiente.

¿Prefieres probarlo sin escribir código? El panel admin tiene un asistente visual paso a paso en Probar API Desk (/probar/sire) que hace exactamente este flujo por ti, contra la API real.

3. Los 4 endpoints en detalle

Paso 1 — Periodos disponibles

GET/v1/sire/ventas/periodos (o /v1/sire/compras/periodos)

No recibe parámetros. La respuesta se cachea por cuenta durante el mes en curso, así que llamarlo varias veces el mismo mes no vuelve a consultar a SUNAT.

curl https://mblapirest.com/api/v1/sire/ventas/periodos \
  -H "Authorization: Bearer TU_API_TOKEN"
{
  "success": true,
  "data": [ /* periodos tal como los devuelve SUNAT */ ]
}

Paso 2 — Solicitar ticket

POST/v1/sire/ventas/ticket (o /v1/sire/compras/ticket)

NombreRequeridoDescripción
periodoSíFormato AAAAMM (p. ej. 202501 para enero 2025). SIRE no existe antes de 2023.

Si ya pediste un ticket para ese mismo periodo hoy (hace menos de 1 hora), se reutiliza el mismo num_ticket en vez de pedirle otro a SUNAT.

curl -X POST https://mblapirest.com/api/v1/sire/ventas/ticket \
  -H "Authorization: Bearer TU_API_TOKEN" \
  -d "periodo=202501"
{
  "success": true,
  "num_ticket": "20260101..."
}

Paso 3 — Consultar y descargar la propuesta

POST/v1/sire/ventas/propuesta (o /v1/sire/compras/propuesta)

NombreRequeridoDescripción
num_ticketSíEl ticket obtenido en el paso 2.
curl -X POST https://mblapirest.com/api/v1/sire/ventas/propuesta \
  -H "Authorization: Bearer TU_API_TOKEN" \
  -d "num_ticket=20260101..."

Mientras SUNAT sigue procesando:

{ "success": true, "listo": false, "message": "El ticket aun esta en proceso en SUNAT, consulte mas tarde." }

Cuando ya terminó (aquí es cuando se guardan las filas en tu cuenta):

{ "success": true, "listo": true, "filas_procesadas": 134 }

Paso 4 — Leer el detalle

GET/v1/sire/ventas/detalle (o /v1/sire/compras/detalle)

NombreRequeridoDescripción
periodoSíFormato AAAAMM, el mismo que usaste en el paso 2.
paginaOpcionalPor defecto 1.
por_paginaOpcionalPor defecto 100, máximo 500.
curl "https://mblapirest.com/api/v1/sire/ventas/detalle?periodo=202501&pagina=1&por_pagina=100" \
  -H "Authorization: Bearer TU_API_TOKEN"
{
  "success": true,
  "periodo": "202501",
  "total": 134,
  "pagina": 1,
  "por_pagina": 100,
  "data": [
    {
      "car_sunat": "...",
      "tipo_comprobante": "01",
      "serie": "F001",
      "numero": "123",
      "numero_final": "123",
      "fecha_emision": "2025-01-15",
      "tipo_documento_identidad": "6",
      "numero_documento_identidad": "20123456789",
      "cliente": "EMPRESA EJEMPLO SAC",
      "moneda": "PEN",
      "total": 1180.00,
      "bi_gravada": 1000.00,
      "igv": 180.00,
      "tipo_operacion": "01",
      "tipo_de_nota": "",
      "estado_comprobante": "1"
    }
  ]
}

4. Diferencias entre Ventas y Compras en el detalle

Los campos son casi los mismos; solo tres cambian de nombre o de presencia según el tipo:

CampoVentas (RVIE)Compras (RCE)
Contraparteclienteproveedor
Base imponiblebi_gravadabi_gravado
tipo_operacionPresenteNo aplica (no viene en la respuesta)

5. Cuota de consultas

Cada paso que responde con datos descuenta una consulta de la cuota de tu plan (la misma bolsa que el resto de servicios, ver Autenticación). No se descuenta cuando SUNAT devuelve un error, ni cuando la respuesta del paso 3 es "el ticket sigue en proceso" — por eso puedes consultarlo cada diez segundos sin gastar cuota. Si ya agotaste tu plan, el endpoint responde success: false antes de molestar a SUNAT.

6. Pasarela con credenciales por petición

POST/v1/sire/ventas/sunat (o /v1/sire/compras/sunat)

Pensada para sistemas que consultan SIRE de varios contribuyentes con un solo token de API (por ejemplo un facturador). En vez de usar las credenciales guardadas en tu cuenta, los 5 datos de SIRE viajan en cada petición por HTTPS; no se guardan ni se registran. Tampoco usa las tablas de propuesta/detalle de tu cuenta: la respuesta es lo que devuelve SUNAT y quien llama guarda sus propios tickets y periodos.

Requiere el servicio sireventas o sirecompras habilitado, según el registro.

Campos comunes (todas las acciones)

NombreRequeridoDescripción
accionSíperiodos, ticket, estado_ticket o descargar.
rucSíRUC del contribuyente.
usuario_solSíUsuario SOL.
clave_solSíClave SOL.
client_idSíCredencial de API SUNAT.
client_secretSíCredencial de API SUNAT.

Si falta cualquiera de los 5 datos, responde success: false indicando cuál.

Acciones

accionCampos adicionalesRespuestaDescuenta cuota
periodos—{"success": true, "lista": [ ... ]}Sí
ticketperiodo (AAAAMM, ej. 202501){"success": true, "ticket": {"numTicket": "..."}}Sí
estado_ticketperIni, perFin (AAAAMM), numTicket; opcionales page (1) y perPage (20){"success": true, "estado_ticket": { ... }} — cuerpo completo de SUNATNo
descargarnomArchivoReporte, numTicket, perTributario (AAAAMM); opcionales codProceso y codTipoArchivoReporte{"success": true, "zip_base64": "..."}Sí
curl -X POST https://mblapirest.com/api/v1/sire/ventas/sunat \
  -H "Authorization: Bearer TU_API_TOKEN" \
  -d "accion=ticket" \
  -d "ruc=20123456789" \
  -d "usuario_sol=MODDATOS" \
  -d "clave_sol=TU_CLAVE_SOL" \
  -d "client_id=TU_CLIENT_ID" \
  -d "client_secret=TU_CLIENT_SECRET" \
  -d "periodo=202501"
El flujo es el mismo que el de los 4 pasos de arriba: pide el ticket, consulta estado_ticket hasta que SUNAT termine y baja el archivo con descargar. Los errores de SUNAT llegan con código 502 y el mensaje de SUNAT.

Referencia oficial

Basado en el "Manual de servicios Web Api SIRE Ventas/Compras" publicado por SUNAT. Los códigos de libro internos son 140000 (RVIE) y 080000 (RCE) — no se necesitan para usar esta API, SUNAT los infiere de la URL que se usa internamente.

Última actualización: 02/10/2026