Libros electrónicos

SIRE — RVIE (ventas) y RCE (compras)

Descarga la propuesta que arma SUNAT, concíliala contra tus registros, acéptala y registra el preliminar. Todo por API, con el mismo token que usas para emitir.

¿Qué es SIRE? Los libros electrónicos de SUNAT: RVIE (Registro de Ventas) y RCE (Registro de Compras). Bajas la propuesta que arma SUNAT, la concilias, la aceptas y la registras.

Autenticación (todas las llamadas): Authorization: Bearer <api_token>. NO se envía user_id ni el certificado .pfx. SIRE no tiene beta (producción con credenciales reales). periodo = AAAAMM.

Ciclo de vida (igual en ambos libros)

0. Autenticación (token) · 1. Consultar periodos · 2. Propuesta (generar→ticket→consultar/descargar→conciliar)
3. (Opcional) Ajustar propuesta · 4. Aceptar · 5. Registrar preliminar · 6. Descargas/cierre · 7. Ajustes posteriores · 8. Eliminar

Respuesta de la consulta (cada registro): trae los campos etiquetados al mismo nivel (no anidados) y columnas = la fila cruda completa de SUNAT (por si necesitas algún campo extra).
Campos: origen, ruc, razon_social, periodo, car, fecha_emision, fecha_vencimiento, tipo_comprobante, serie, numero, contraparte_tipo_doc, contraparte_num_doc, contraparte_razon_social, base_imponible_gravada, igv, importe_total, moneda, tipo_cambio, en_facturador, columnas (en ventas además valor_exportacion). La contraparte = proveedor en compras / cliente en ventas.

VENTAS — RVIE (tipo: "sale")

1. Ver periodos

POST /api/sire/periodos
Authorization: Bearer TU_API_TOKEN

{ "tipo": "sale" }

Parámetros: tipo="sale" (obligatorio).

2. Generar propuesta (→ ticket)

POST /api/sire/ticket
Authorization: Bearer TU_API_TOKEN

{ "tipo": "sale", "periodo": "202605" }

Parámetros: tipo="sale", periodo AAAAMM. Devuelve numTicket.

3. Consultar ticket (descarga + conciliación)

POST /api/sire/consulta
Authorization: Bearer TU_API_TOKEN

{ "tipo": "sale", "periodo": "202605", "ticket": "0000000123", "page": 1 }

Parámetros: tipo, periodo, ticket (el numTicket del paso 2), page (opcional). status_code: 01 en proceso · 06 terminado.

4. Aceptar propuesta SÍNCRONO

POST /api/sire/aceptar
Authorization: Bearer TU_API_TOKEN

{ "periodo": "202605", "tipo": "sale" }

Parámetros: periodo, tipo="sale". En ventas responde directo (no ticket).

5. Registrar preliminar

POST /api/sire/registrar
Authorization: Bearer TU_API_TOKEN

{ "periodo": "202605", "tipo": "sale" }

6. Cierre / descargas

POST /api/sire/exportar-preliminar
Authorization: Bearer TU_API_TOKEN

{ "periodo": "202605" }

Devuelve numTicket → bájalo con /api/sire/consulta.

POST /api/sire/descargar-registro
Authorization: Bearer TU_API_TOKEN

{ "periodo": "202605", "tipo": "sale" }
POST /api/sire/constancia
Authorization: Bearer TU_API_TOKEN

{ "nom_archivo": "LE20100176450...014040002OIM2.pdf" }

Parámetros: nom_archivo (lo da SUNAT al registrar). Devuelve PDF base64.

Conciliación / historial

POST /api/sire/conciliacion
Authorization: Bearer TU_API_TOKEN

{ "tipo": "sale", "periodo": "202605" }
POST /api/sire/historial
Authorization: Bearer TU_API_TOKEN

{}

Reportes / descargas (genérico)

POST /api/sire/descarga
Authorization: Bearer TU_API_TOKEN

{ "periodo": "202605", "tipo": "sale", "cod_proceso": "23" }

Parámetros: periodo, tipo="sale", cod_proceso (elige el reporte; ej. 23 = registro). Devuelve numTicket.

Carga masiva (TUS)

POST /api/sire/carga-masiva (multipart/form-data)
Authorization: Bearer TU_API_TOKEN

archivo=@LE20100176450_202605.zip
periodo=202605
tipo=sale
cod_proceso=1
nom_txt=LE20100176450...014040002OIM2.txt

Parámetros: archivo (.zip con el .txt SUNAT) o archivo_base64, periodo, tipo="sale", cod_proceso, nom_txt.

cod_proceso VENTAS: 1=Importar CP propuesta · 3=Reemplazo · 4=Importar CP preliminar · 6=Ajustes posteriores · 7=Ajustes periodos anteriores.

Edición individual — operaciones VENTAS

POST /api/sire/edicion
Authorization: Bearer TU_API_TOKEN

{ "op": "rvie_tipocambio_individual", "periodo": "202605", "tipo": "sale",
  "body": { "codCar": "...27 dígitos...", "codMoneda": "02", "mtoTipoCambio": "3.85" } }
op (VENTAS)Qué hacebody (campos SUNAT)
rvie_tipocambio_individualEditar tipo de cambio de un CPcodCar, codMoneda, mtoTipoCambio
rvie_tipocambio_masivoTipo de cambio masivolista de CP con su tipo de cambio
rvie_eliminar_comprobante_propuestaEliminar CP de la propuestanumCDP, codCar, codTipoCDP
rvie_eliminar_comprobante_preliminarEliminar CP del preliminarcodCar, codTipoCDP, numCDP
rvie_eliminar_reemplazoEliminar el reemplazo—
rvie_exclusion_definitivaExclusión definitiva NC/facturascodCar, codSituacion
COMPRAS — RCE (tipo: "purchase")

1. Ver periodos

POST /api/sire/periodos
Authorization: Bearer TU_API_TOKEN

{ "tipo": "purchase" }

Parámetros: tipo="purchase" (obligatorio).

2. Generar propuesta (→ ticket)

POST /api/sire/ticket
Authorization: Bearer TU_API_TOKEN

{ "tipo": "purchase", "periodo": "202605" }

Parámetros: tipo="purchase", periodo AAAAMM. Devuelve numTicket.

3. Consultar ticket (descarga + conciliación)

POST /api/sire/consulta
Authorization: Bearer TU_API_TOKEN

{ "tipo": "purchase", "periodo": "202605", "ticket": "0000000123", "page": 1 }

Parámetros: tipo, periodo, ticket, page. status_code: 01 / 06.

4. Aceptar propuesta ASÍNCRONO

POST /api/sire/aceptar
Authorization: Bearer TU_API_TOKEN

{ "periodo": "202605", "tipo": "purchase" }

OJO compras: responde un numTicket → confírmalo con /api/sire/consulta (tipo "purchase") hasta status_code 06.

5. Registrar preliminar

POST /api/sire/registrar
Authorization: Bearer TU_API_TOKEN

{ "periodo": "202605", "tipo": "purchase" }

6. Cierre / descargas

POST /api/sire/exportar-preliminar
Authorization: Bearer TU_API_TOKEN

{ "periodo": "202605" }
POST /api/sire/descargar-registro
Authorization: Bearer TU_API_TOKEN

{ "periodo": "202605", "tipo": "purchase" }
POST /api/sire/constancia
Authorization: Bearer TU_API_TOKEN

{ "nom_archivo": "LE...pdf" }

Conciliación / historial

POST /api/sire/conciliacion
Authorization: Bearer TU_API_TOKEN

{ "tipo": "purchase", "periodo": "202605" }
POST /api/sire/historial
Authorization: Bearer TU_API_TOKEN

{}

Reportes / descargas (genérico)

POST /api/sire/descarga
Authorization: Bearer TU_API_TOKEN

{ "periodo": "202605", "tipo": "purchase", "cod_proceso": "23" }

Carga masiva (TUS)

POST /api/sire/carga-masiva (multipart/form-data)
Authorization: Bearer TU_API_TOKEN

archivo=@LE...zip
periodo=202605
tipo=purchase
cod_proceso=61
nom_txt=...

Parámetros: archivo / archivo_base64, periodo, tipo="purchase", cod_proceso, nom_txt.

cod_proceso COMPRAS: 4=Importar CP preliminar · 6=Ajustes posteriores · 54=Complementar propuesta · 55=Incluir/Excluir · 56=No domiciliados · 60=No dom. en ajustes · 61=Reemplazo · 87=Nuevos comprobantes de pago.

Edición individual — operaciones COMPRAS

POST /api/sire/edicion
Authorization: Bearer TU_API_TOKEN

{ "op": "rce_reintegro_credito_fiscal", "periodo": "202605", "tipo": "purchase",
  "body": { "...": "campos del FV0621" } }
op (COMPRAS)Qué hacebody (campos SUNAT)
rce_reintegro_credito_fiscalReintegro del crédito fiscaldatos FV0621
rce_credito_fiscal_especialCrédito fiscal especialdatos FV0621
rce_coeficiente_prorrataCoeficiente de prorratadatosFV621.factProrrata
rce_tipocambio_masivoTipo de cambio masivomtoTipoCambio
rce_eliminar_comprobante_propuestaEliminar CP de la propuestanumCDP, codCar, codTipoCDP
rce_eliminar_comprobante_preliminarEliminar CP del preliminarcodCar, codTipoCDP, numCDP
rce_consultar_fv0621Consultar FV0621— (GET por periodo)

SIRE opera siempre contra producción: SUNAT no ofrece un entorno de homologación para los libros electrónicos. Por eso conviene separar las operaciones antes de automatizar: las de lectura (propuesta, consulta, descargas, reportes) se pueden ejecutar sin consecuencias, mientras que las de escritura —aceptar, registrar el preliminar, reemplazar la propuesta o eliminar— tienen efecto fiscal real sobre tu registro.