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) |
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)
| Nombre | Requerido | Descripción |
|---|---|---|
accion | Sí | periodos, ticket, estado_ticket o descargar. |
ruc | Sí | RUC del contribuyente. |
usuario_sol | Sí | Usuario SOL. |
clave_sol | Sí | Clave SOL. |
client_id | Sí | Credencial de API SUNAT. |
client_secret | Sí | Credencial de API SUNAT. |
Si falta cualquiera de los 5 datos, responde success: false indicando cuál.
Acciones
accion | Campos adicionales | Respuesta | Descuenta cuota |
|---|---|---|---|
periodos | — | {"success": true, "lista": [ ... ]} | Sí |
ticket | periodo (AAAAMM, ej. 202501) | {"success": true, "ticket": {"numTicket": "..."}} | Sí |
estado_ticket | perIni, perFin (AAAAMM), numTicket; opcionales page (1) y perPage (20) | {"success": true, "estado_ticket": { ... }} — cuerpo completo de SUNAT | No |
descargar | nomArchivoReporte, 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"
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