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).
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:
| Dato | De dónde sale |
|---|---|
RUC | El RUC del contribuyente que vas a consultar. |
Usuario SOL | Tu usuario de SUNAT Operaciones en Línea (principal o secundario). |
Clave SOL | La clave de ese mismo usuario SOL. |
Client ID | Se 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.
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)
| Paso | Endpoint | Qué hace |
|---|---|---|
| 1. Periodos | GET /v1/sire/{ventas|compras}/periodos | Lista los periodos tributarios (meses) que SUNAT tiene habilitados para tu cuenta. |
| 2. Ticket | POST /v1/sire/{ventas|compras}/ticket | Le 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. Propuesta | POST /v1/sire/{ventas|compras}/propuesta | Consulta 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. Detalle | GET /v1/sire/{ventas|compras}/detalle | Lee 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.
/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)
| Nombre | Requerido | Descripción |
|---|---|---|
periodo | Sí | 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)
| Nombre | Requerido | Descripción |
|---|---|---|
num_ticket | Sí | 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)
| Nombre | Requerido | Descripción |
|---|---|---|
periodo | Sí | Formato AAAAMM, el mismo que usaste en el paso 2. |
pagina | Opcional | Por defecto 1. |
por_pagina | Opcional | Por 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:
| Campo | Ventas (RVIE) | Compras (RCE) |
|---|---|---|
| Contraparte | cliente | proveedor |
| Base imponible | bi_gravada | bi_gravado |
tipo_operacion | Presente | No aplica (no viene en la respuesta) |
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: 03/09/2026