Cómo Integrar el SII con tu ERP vía API REST — Guía Técnica 2026
Guía técnica para integrar datos del SII (RCV, DTE, contribuyentes) con tu ERP usando API REST. Ejemplos de código, patrones de integración y mejores prácticas.

El problema real de conectar un ERP al SII
Todos los ERPs empresariales necesitan datos del SII. Sin ellos, la contabilidad queda desconectada de la realidad tributaria del negocio: los proveedores no están validados, las compras del RCV no coinciden con los registros internos y los documentos tributarios electrónicos recibidos no se aprueban ni rechazan dentro del plazo legal de ocho días.
La pregunta no es si integrar el SII con tu ERP, sino cómo hacerlo de una forma que sea confiable, mantenible y segura. Esta guía técnica cubre los tres patrones de integración más comunes, con ejemplos de código reales y decisiones de arquitectura que puedes llevar directo a producción.
Por qué tu ERP necesita datos del SII
Conciliación del Registro de Compras y Ventas (RCV)
El Registro de Compras y Ventas (RCV) es el documento oficial donde el SII consolida todos los documentos tributarios que afectan tu empresa. Cada factura que recibes de un proveedor aparece en tu RCV de compras. Cada factura o boleta que emites aparece en tu RCV de ventas.
Para una empresa que procesa decenas o cientos de documentos al mes, comparar el RCV del SII contra el libro de compras del ERP es una tarea crítica. Si hay diferencias, pueden significar documentos no contabilizados, IVA mal declarado o inconsistencias que el SII detectará en una fiscalización.
Sin automatización, este proceso es manual: exportar el RCV desde el portal del SII como CSV, importarlo al ERP, correr una conciliación y resolver las diferencias. Con un API REST, puedes programar este proceso para que ocurra automáticamente cada noche.
Validación de proveedores y clientes
Antes de crear un proveedor en el ERP, necesitas confirmar que su RUT es válido, que tiene inicio de actividades ante el SII y que su giro corresponde al servicio o producto que te proveerá. Si ingresas datos incorrectos, las facturas que recibes de ese proveedor pueden quedar sin sustento tributario.
La información del contribuyente disponible en el SII incluye razón social, giro o actividad económica, dirección registrada y fecha de inicio de actividades. Consultar estos datos en el momento de crear el proveedor en el ERP elimina un paso manual y reduce errores.
Seguimiento y aceptación de DTE
Los Documentos Tributarios Electrónicos (DTE) que recibes de tus proveedores deben ser aceptados o reclamados dentro de ocho días corridos desde su recepción. Si no actúas dentro de ese plazo, el SII considera que los aceptaste tácitamente. Si actúas fuera de plazo para reclamar, puedes perder ese derecho.
Un ERP integrado con el SII puede monitorear los DTE emitidos y generar alertas automáticas cuando un documento se acerca al vencimiento de la ventana de aceptación.
Para una explicación más detallada del funcionamiento del RCV, consulta nuestra guía completa del RCV.
Enfoques tradicionales y sus limitaciones
Descarga manual más importación CSV
Es el método más común en empresas medianas que aún no han automatizado. Un contador o asistente descarga el RCV mensual desde el portal del SII, lo exporta como CSV y lo importa al ERP. Funcionó durante años, pero tiene problemas evidentes: es lento, propenso a errores humanos, no permite actualizaciones en tiempo real y requiere intervención manual incluso para tareas rutinarias.
Web scraping del portal SII
Algunas empresas o proveedores de software intentaron automatizar la descarga mediante web scraping del portal del SII. El problema es que el SII no ofrece garantías de estabilidad en su interfaz web. Cualquier rediseño o cambio en el DOM rompe el scraper. Además, el SII puede bloquear IPs que generan muchas solicitudes automatizadas, lo que convierte esta solución en algo frágil para un entorno de producción.
SOAP/XML nativo del SII
El SII ofrece servicios web en formato SOAP para algunos de sus sistemas, como el registro de documentos tributarios. Sin embargo, estos servicios requieren certificados digitales, autenticación con semilla y token, y el manejo de XML verbose con múltiples capas de validación. La curva de implementación es alta y el mantenimiento es costoso. Para muchos equipos de desarrollo, el tiempo invertido en dominar el protocolo del SII supera el valor de lo que obtienen.
El propio SII reconoce la complejidad y ofrece la opción de trabajar con proveedores de sistemas de facturación electrónica certificados. Puedes revisar su guía oficial en sii.cl sobre las etapas para integrar la factura electrónica.
El enfoque moderno: API REST como capa intermedia
La arquitectura recomendada para 2026 usa una API REST como middleware entre tu ERP y el SII. El flujo es simple:
ERP (SAP, Odoo, Defontana, etc.)
|
| HTTP + JSON
v
BaseAPI REST API
|
| Autenticación + validación
v
Servicios del SII (RCV, Contribuyente, DTE)
Tu ERP nunca se comunica directamente con el SII. Solo hace llamadas HTTP estándar con JSON, que es el formato que cualquier lenguaje y cualquier ERP moderno maneja de forma nativa. La capa de autenticación, reintentos, normalización de datos y manejo de errores queda encapsulada en la API.
Las ventajas de este patrón son claras:
- Independencia de plataforma: el ERP puede estar en SAP Business One, Odoo, ERPNext, Softland, Defontana o Microsoft Dynamics. Todos hacen HTTP.
- Sin gestión de certificados: la API maneja la autenticación con el SII internamente.
- Datos normalizados: los datos llegan en JSON limpio, sin parsear XML.
- Actualizaciones transparentes: si el SII cambia algo, la API se actualiza sin que tengas que tocar tu ERP.
Puedes revisar todos los endpoints disponibles en BaseAPI.cl.
Patrón 1: Sincronización nocturna del RCV
El caso de uso más común es programar una tarea que se ejecute cada noche y sincronice el RCV del SII con el libro de compras del ERP. Así, al llegar la mañana, los contadores encuentran el libro ya conciliado.
// Sincronización nocturna del RCV de compras
async function syncRCV(rutEmpresa, claveSii, periodo) {
const compras = await fetch('https://api.baseapi.cl/sii/rcv/compras', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({ rut: rutEmpresa, clave_sii: claveSii, periodo })
});
if (!compras.ok) {
throw new Error(`Error consultando RCV: ${compras.status}`);
}
const data = await compras.json();
// Insertar o actualizar en la base de datos del ERP
for (const doc of data.documentos) {
await erpDb.upsert('compras', {
folio: doc.folio,
rut_proveedor: doc.rut_proveedor,
monto_neto: doc.monto_neto,
iva: doc.iva,
total: doc.total,
fecha: doc.fecha
});
}
return {
sincronizados: data.documentos.length,
periodo
};
}
// Programar con cron: cada día a las 2:00 AM
// cron.schedule('0 2 * * *', () => syncRCV(RUT, CLAVE, getPeriodoActual()));
El campo periodo corresponde al año y mes en formato AAAAMM. Para sincronizar el mes actual, puedes calcular el periodo dinámicamente con new Date().toISOString().slice(0, 7).replace('-', '').
El uso de upsert en lugar de insert es importante: si el mismo documento ya existe en el ERP, se actualiza en lugar de generar un duplicado. Esto hace la sincronización idempotente — puedes ejecutarla varias veces sin efecto secundario.
Puedes explorar todos los parámetros disponibles en el servicio de RCV de BaseAPI.
Patrón 2: Validar proveedor al momento de crearlo en el ERP
Cuando un comprador crea un nuevo proveedor en el ERP, puedes disparar automáticamente una consulta a la API para completar los datos desde el SII y validar que el RUT esté activo.
# Validacion de proveedor al momento de creacion en el ERP
import requests
def validar_proveedor(rut_proveedor: str) -> dict:
response = requests.post(
'https://api.baseapi.cl/sii/contribuyente',
headers={'Authorization': 'Bearer YOUR_API_KEY'},
json={'rut': rut_proveedor},
timeout=10
)
if response.status_code == 404:
return {'valido': False, 'error': 'RUT no encontrado en el SII'}
response.raise_for_status()
data = response.json()
return {
'valido': True,
'razon_social': data.get('razon_social'),
'giros': data.get('giros'),
'activo': data.get('inicio_actividades') is not None,
'inicio_actividades': data.get('inicio_actividades'),
'direccion': data.get('direccion')
}
# Uso en el flujo de creacion de proveedor
def crear_proveedor_erp(rut: str, nombre_ingresado: str):
info_sii = validar_proveedor(rut)
if not info_sii['valido']:
raise ValueError(f"RUT {rut} no es válido en el SII")
if not info_sii['activo']:
raise ValueError(f"El contribuyente {rut} no tiene inicio de actividades registrado")
# Completar datos automaticamente desde el SII
erp.proveedores.crear({
'rut': rut,
'razon_social': info_sii['razon_social'],
'giro': info_sii['giros'][0] if info_sii['giros'] else nombre_ingresado,
'validado_sii': True
})
Este patrón tiene un impacto directo en la calidad de datos del ERP. Si el RUT no existe o el contribuyente no tiene inicio de actividades, el sistema rechaza la creación del proveedor antes de que se ingrese información incorrecta.
Para entender cómo se construye y valida un RUT en Chile, revisa nuestra guía sobre validar RUT vía API.
Patrón 3: Monitoreo de DTE con ventana de aceptación de 8 días
Este es el patrón más crítico desde el punto de vista tributario. Cada DTE recibido tiene una ventana de ocho días para ser aceptado o reclamado. Un sistema de monitoreo automatizado asegura que ningún documento quede sin gestión.
// Monitor de DTE proximos a vencer la ventana de aceptacion
async function monitorearDTEPendientes(rutEmpresa, claveSii) {
const respuesta = await fetch('https://api.baseapi.cl/sii/dte-emitidos', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
rut: rutEmpresa,
clave_sii: claveSii,
tipo: 'recibidos',
estado: 'pendiente'
})
});
const data = await respuesta.json();
const hoy = new Date();
const alertas = [];
for (const dte of data.documentos) {
const fechaRecepcion = new Date(dte.fecha_recepcion_sii);
const diasTranscurridos = Math.floor(
(hoy - fechaRecepcion) / (1000 * 60 * 60 * 24)
);
const diasRestantes = 8 - diasTranscurridos;
if (diasRestantes <= 2 && diasRestantes > 0) {
alertas.push({
folio: dte.folio,
rut_emisor: dte.rut_emisor,
monto_total: dte.monto_total,
dias_restantes: diasRestantes,
urgencia: diasRestantes === 1 ? 'CRITICA' : 'ALTA'
});
}
}
// Enviar alertas al equipo de cuentas por pagar
if (alertas.length > 0) {
await notificarEquipo(alertas);
}
return alertas;
}
Este proceso puede ejecutarse dos veces al día para asegurar que ningún DTE urgente quede sin atención. En la práctica, integrarlo con el sistema de notificaciones del ERP (email, Slack, Teams) permite que el equipo de cuentas por pagar actúe sin tener que revisar manualmente el portal del SII.
Para entender en detalle los tipos de DTE y sus códigos, consulta la guía sobre tipos de DTE en Chile.
ERPs compatibles y consideraciones por plataforma
Esta arquitectura de integración via REST es compatible con cualquier ERP que permita ejecutar código personalizado o conectarse a fuentes de datos externas. Algunas consideraciones prácticas por plataforma:
SAP Business One: soporta integraciones via SAP Business One Service Layer (REST). Puedes implementar los patrones anteriores como jobs programados en el Service Layer o desde una capa de integración externa que escriba directamente en las tablas de SAP.
Odoo: la forma más limpia es crear un módulo personalizado que use la librería requests de Python para llamar a BaseAPI. Odoo permite programar acciones automatizadas (cron) desde la interfaz, lo que facilita la sincronización nocturna del RCV.
ERPNext: similar a Odoo, usa Python y tiene un sistema de cron integrado. Los scripts de servidor de ERPNext pueden hacer llamadas HTTP externas directamente.
Softland y Defontana: son plataformas chilenas con soporte nativo para algunos procesos del SII, pero sus APIs de integración son limitadas. La capa REST de BaseAPI puede alimentar reportes o bases de datos intermedias que luego se importan a estos sistemas.
Microsoft Dynamics 365: usa Power Automate o Azure Functions para las llamadas HTTP y escribe los resultados via Dataverse API. Es el patrón más común en empresas que ya tienen el stack de Microsoft.
Seguridad: manejo de credenciales y claves
La integración del SII requiere usar credenciales sensibles: el RUT de la empresa y su clave SII. Manejar estas credenciales correctamente es fundamental.
Nunca incluyas credenciales en el código fuente
Las credenciales del SII no deben aparecer hardcodeadas en ningún archivo de código. Usa variables de entorno en todos los entornos:
# .env (nunca subir al repositorio)
BASEAPI_KEY=bapi_live_xxxxxxxxxxxx
RUT_EMPRESA=76123456-7
CLAVE_SII=tu_clave_secreta
// Cargar desde variables de entorno
const config = {
apiKey: process.env.BASEAPI_KEY,
rut: process.env.RUT_EMPRESA,
claveSii: process.env.CLAVE_SII
};
Rotacion de API keys
Genera una API key específica para cada integración o entorno. Si una key se compromete, puedes revocarla sin afectar otras integraciones. Revisa nuestros planes y precios para entender los límites de uso por plan.
Principio de mínimo privilegio
Si tu ERP solo necesita consultar el RCV, no uses una key que también tenga acceso a los endpoints de DTE o contribuyente. Solicita solo los permisos que la integración realmente necesita.
Cifrado en tránsito y en reposo
Todas las llamadas a la API deben hacerse exclusivamente por HTTPS. Las credenciales almacenadas en bases de datos del ERP deben cifrarse. Si tu ERP guarda la clave SII para consultas automáticas, asegúrate de que esté cifrada con AES-256 o equivalente, no en texto plano.
Manejo de errores y patrones de reintento
Las APIs externas fallan. El SII tiene mantenciones programadas, especialmente los fines de semana. Tu integración debe ser resiliente a estos fallos.
Reintentos con backoff exponencial
async function fetchConReintentos(url, opciones, maxReintentos = 3) {
for (let intento = 0; intento < maxReintentos; intento++) {
try {
const respuesta = await fetch(url, opciones);
// No reintentar en errores de cliente (4xx)
if (respuesta.status >= 400 && respuesta.status < 500) {
throw new Error(`Error de cliente ${respuesta.status}: no reintentable`);
}
if (!respuesta.ok) {
throw new Error(`Error del servidor: ${respuesta.status}`);
}
return await respuesta.json();
} catch (error) {
if (intento === maxReintentos - 1) throw error;
// Espera exponencial: 1s, 2s, 4s
const espera = Math.pow(2, intento) * 1000;
console.warn(`Intento ${intento + 1} fallido. Reintentando en ${espera}ms...`);
await new Promise(resolve => setTimeout(resolve, espera));
}
}
}
Cola de trabajos para operaciones críticas
Para sincronizaciones críticas, considera usar una cola de trabajos (Bull, Celery, RabbitMQ según tu stack) en lugar de llamadas síncronas directas. Así, si la API falla a las 2 AM, el trabajo se reencola y se reintenta a las 3 AM sin intervención manual.
Logging estructurado
Registra cada llamada a la API con su resultado, tiempo de respuesta y parámetros (sin credenciales). Este log es invaluable cuando necesitas auditar por qué un documento no se sincronizó o cuando el SII requiere documentar qué consultas realizaste y cuándo.
const resultado = {
timestamp: new Date().toISOString(),
endpoint: '/sii/rcv/compras',
rut: rutEmpresa,
periodo,
documentos_sincronizados: data.documentos.length,
duracion_ms: Date.now() - inicio
};
console.log(JSON.stringify(resultado));
La alternativa: automatizar documentos tributarios completos
Si tu integración requiere no solo consultar datos sino también emitir documentos tributarios, el patrón cambia. Emitir facturas o boletas requiere certificación ante el SII, firma electrónica y flujos de envío distintos a los de consulta.
Para ese escenario, revisa nuestra guía sobre automatizar documentos tributarios, donde cubrimos el ciclo completo de emisión de DTE.
Conclusión
Integrar el SII con tu ERP vía API REST es la forma más robusta y mantenible de sincronizar datos tributarios en 2026. Los tres patrones cubiertos en esta guía — sincronización nocturna del RCV, validación de proveedores al crearlos y monitoreo de DTE con ventana de aceptación — resuelven los casos de uso más frecuentes en empresas medianas y grandes.
Los puntos clave para una integración exitosa:
- Usa una API REST como capa intermedia entre el ERP y el SII para evitar la complejidad del protocolo nativo.
- Implementa sincronizaciones idempotentes con upsert para que puedan ejecutarse varias veces sin efecto negativo.
- Maneja las credenciales con variables de entorno y cifrado en reposo, nunca en el código fuente.
- Implementa reintentos con backoff exponencial para que la integración sea resiliente a fallos temporales.
- Usa logging estructurado desde el primer día: es tu principal herramienta de diagnóstico cuando algo falla.
Si quieres empezar a probar los endpoints antes de implementar la integración completa, revisa los planes disponibles en BaseAPI — hay un entorno de pruebas donde puedes validar cada llamada sin afectar datos reales.
¿Tienes dudas sobre qué endpoint usar para tu caso de uso específico? Revisa la documentación de cada servicio disponible o contacta a nuestro equipo de integraciones.
Preguntas frecuentes
¿Qué ERPs son compatibles con esta integración?
Cualquier ERP que permita ejecutar código personalizado o llamadas HTTP es compatible: SAP Business One, Odoo, ERPNext, Softland, Defontana y Microsoft Dynamics 365, entre otros. La integración se implementa a nivel de código o scripts, no requiere plugins específicos del ERP.
¿Necesito las credenciales SII de mi empresa para usar la API?
Sí. Todos los endpoints de BaseAPI requieren el RUT y la clave SII del contribuyente para autenticar la consulta directamente con el SII. Además, necesitas tu API Key de BaseAPI para identificar tu cuenta.
¿Qué pasa si el SII tiene mantención programada?
El SII realiza mantenciones generalmente los domingos en la madrugada. Si programas tu sincronización nocturna para esas horas, la llamada puede fallar. Implementar reintentos con backoff exponencial y una cola de trabajos te permite manejar estos cortes sin intervención manual. Considera programar las sincronizaciones críticas para días de semana o verificar el calendario de mantenciones del SII.
¿Cuántas llamadas a la API puedo hacer por mes?
Depende del plan contratado. Cada endpoint tiene sus propios límites de uso. Puedes revisar los detalles en la página de planes y precios. Para integraciones de alto volumen con sincronizaciones nocturnas diarias, los planes empresariales incluyen cuotas adecuadas para esos casos de uso.
¿Es seguro enviar la clave SII a través de una API externa?
Sí, siempre que la comunicación sea sobre HTTPS con certificado válido. La clave SII viaja cifrada en tránsito y no se almacena en los servidores de BaseAPI entre llamadas. Desde el punto de vista de seguridad, es equivalente a ingresar la clave en el portal del SII. Para reducir el riesgo aún más, puedes rotar tu clave SII periódicamente y gestionar el acceso mediante usuarios secundarios del SII si tu empresa lo requiere.
¿Puedo probar la integración sin usar datos reales de producción?
Sí. BaseAPI ofrece un entorno de pruebas donde puedes validar tus llamadas con datos de ejemplo antes de conectar datos reales. Esto es especialmente útil durante el desarrollo de la integración, cuando aún estás ajustando los patrones de error y los flujos de reintento.
¿Listo para automatizar tu gestión tributaria?
Activa todos los endpoints gratis y descubre cómo integrar datos del SII en tu sistema.