Cómo Validar RUT en Chile con API — Guía para Desarrolladores 2026
Aprende a validar RUT en Chile y consultar datos del SII vía API REST. Ejemplos en JavaScript y Python, algoritmo módulo 11, tabla de campos y mejores prácticas de integración.

En Chile, el RUT (Rol Único Tributario) es el identificador fiscal universal de toda persona natural y empresa. Validarlo correctamente es una necesidad crítica para cualquier sistema que procese pagos, emita facturas, registre clientes o evalúe proveedores. Hacerlo manualmente a través del portal del SII no escala: es lento, propenso a errores y no se puede integrar en un flujo automatizado.
Esta guía explica cómo validar RUT en Chile de forma programática, consultar los datos del contribuyente directamente desde el SII vía API REST y construir integraciones confiables. Incluye ejemplos funcionales en JavaScript y Python, el algoritmo del dígito verificador, una tabla completa de campos de respuesta y las mejores prácticas de integración para producción.
Qué es el RUT y por qué validarlo programáticamente
El RUT es el identificador único asignado por el SII a toda persona o entidad con actividad económica en Chile. Tiene el formato XXXXXXXX-D, donde XXXXXXXX es un número secuencial y D es el dígito verificador (0-9 o K).
Validar un RUT implica dos cosas distintas, y es importante no confundirlas:
- Validación de formato y dígito verificador: Verificar que el número es estructuralmente correcto mediante el algoritmo módulo 11. Esto se puede hacer en el cliente, sin red.
- Verificación contra el SII: Consultar si el RUT está activo, qué actividades tiene, cuál es su situación tributaria y obtener datos como razón social, dirección y giros. Esto requiere conectarse a una fuente de datos autorizada.
La mayoría de las aplicaciones necesita ambas capas: el formato primero (validación rápida), y los datos del SII después (verificación real).
Casos de uso frecuentes en la industria
La consulta de RUT por API aparece en casi todos los sectores de la economía digital chilena.
Fintech y crédito:
Las plataformas de crédito consumen datos del SII durante el onboarding para verificar que el RUT existe, que el contribuyente está activo y para obtener la razón social legal. Un RUT con inicio de actividades y giros vigentes tiene un perfil de riesgo muy distinto al de uno sin actividad.
Facturación y emisión de DTE:
Antes de emitir una factura electrónica, una plataforma necesita confirmar que el RUT receptor es válido y que el nombre del receptor coincide con la razón social registrada en el SII. Sin esta verificación, se generan documentos con errores que el SII puede rechazar.
Compliance y prevención de fraude:
Empresas que operan en mercados regulados (seguros, corredoras, importadoras) validan la situación tributaria de sus contrapartes antes de firmar contratos o procesar pagos. Un contribuyente sin inicio de actividades o con situación irregular es una señal de alerta.
ERP y contabilidad:
Al crear un proveedor o cliente en un sistema ERP, consultar el RUT contra el SII permite autocompletar razón social, dirección, giros y región, eliminando digitación manual y errores.
Marketplaces B2B:
Las plataformas de comercio entre empresas verifican que sus vendedores tienen RUT activo y actividades económicas coherentes con los productos que ofrecen.
Métodos tradicionales vs API REST
Históricamente, acceder a datos de un contribuyente desde el SII de forma programática era un desafío técnico importante. Las soluciones artesanales resultaban frágiles, difíciles de mantener y operaban en zona gris desde el punto de vista de los términos del SII.
| Aspecto | Solución artesanal / manual | API REST especializada |
|---|---|---|
| Estabilidad | Se rompe con cambios del SII | Adaptada automáticamente |
| Velocidad | 5-15 segundos por consulta | 1-3 segundos por consulta |
| Formato de datos | HTML sin estructura | JSON estructurado |
| Mantenimiento | Alto (código frágil) | Ninguno (gestionado por proveedor) |
| Escalabilidad | Muy limitada | Alta, consultas en paralelo |
| Soporte técnico | Ninguno | Documentación y SLA |
| Integración | Compleja | Estándar REST, 30 minutos |
| Costo operativo | Alto (infraestructura + mantenimiento) | Por llamada o suscripción |
Las soluciones artesanales pueden funcionar para prototipos o uso muy esporádico. Para producción, la inestabilidad y el costo de mantenimiento las hacen inviables.
Cómo funciona el endpoint de contribuyente de BaseAPI
El endpoint de información del contribuyente de BaseAPI actúa como intermediario entre tu sistema y el SII. Cuando haces una solicitud, la API valida las credenciales del contribuyente, consulta los datos de la ficha tributaria y los devuelve en JSON estructurado y normalizado.
El flujo es el siguiente:
- Tu sistema envía una solicitud POST con el RUT, la clave SII y tu API Key de BaseAPI.
- BaseAPI valida las credenciales y consulta la información en el SII.
- Los datos del contribuyente se normalizan y estructuran.
- Se retorna un objeto JSON con todos los campos relevantes.
Este proceso toma entre 1 y 3 segundos y no requiere que implementes ni mantengas ninguna lógica de acceso al SII por tu cuenta.
Ejemplo de código en JavaScript (Node.js)
El siguiente ejemplo muestra una consulta completa al endpoint de contribuyente. Requiere una API Key válida de BaseAPI, disponible desde el panel de usuario.
// consultar-contribuyente.js
// Requiere Node.js 18+ para fetch nativo o node-fetch como dependencia
const API_KEY = process.env.BASEAPI_KEY; // Nunca hardcodees tu API Key
async function consultarContribuyente(rut, claveSII) {
const response = await fetch('https://api.baseapi.cl/sii/contribuyente', {
method: 'POST',
headers: {
'X-API-Key': API_KEY,
'Content-Type': 'application/json'
},
body: JSON.stringify({
rut: rut,
clave: claveSII
})
});
if (!response.ok) {
const error = await response.json();
throw new Error(`Error ${response.status}: ${error.message}`);
}
return await response.json();
}
// Uso
(async () => {
try {
const datos = await consultarContribuyente('76123456-7', 'mi_clave_sii');
console.log('Razón social:', datos.razonSocial);
console.log('Situación:', datos.situacionTributaria);
console.log('Giros:', datos.giros.map(g => g.descripcion).join(', '));
console.log('Dirección:', `${datos.direccion.calle} ${datos.direccion.numero}, ${datos.direccion.comuna}`);
} catch (err) {
console.error('Error al consultar contribuyente:', err.message);
}
})();
Para flujos de onboarding donde necesitas validar múltiples empresas, puedes paralelizar las consultas respetando el rate limit de tu plan:
// Consulta paralela con control de concurrencia
async function consultarLote(contribuyentes, concurrencia = 3) {
const resultados = [];
for (let i = 0; i < contribuyentes.length; i += concurrencia) {
const lote = contribuyentes.slice(i, i + concurrencia);
const respuestas = await Promise.all(
lote.map(c => consultarContribuyente(c.rut, c.clave))
);
resultados.push(...respuestas);
}
return resultados;
}
Datos que retorna la API
La respuesta del endpoint incluye los campos principales de la ficha tributaria del contribuyente en el SII.
| Campo | Tipo | Descripción | Ejemplo |
|---|---|---|---|
rut |
string | RUT formateado con dígito verificador | "76123456-7" |
razonSocial |
string | Nombre legal de la persona o empresa | "Distribuidora ABC S.A." |
situacionTributaria |
string | Estado actual ante el SII | "Activo" |
inicioActividades |
string | Fecha de inicio de actividades (ISO 8601) | "2018-04-15" |
regimenTributario |
string | Régimen al que está acogido | "Semi Integrado" |
giros |
array | Lista de actividades económicas registradas | ver abajo |
giros[].codigo |
string | Código de actividad del SII | "4620" |
giros[].descripcion |
string | Descripción del giro | "Comercio al por mayor de alimentos" |
giros[].tipo |
string | Clasificación del giro | "principal" |
direccion.calle |
string | Nombre de la calle | "Av. Providencia" |
direccion.numero |
string | Numero de la propiedad | "1234" |
direccion.departamento |
string | Oficina o departamento (si aplica) | "Of. 501" |
direccion.comuna |
string | Comuna | "Providencia" |
direccion.region |
string | Region | "Metropolitana" |
email |
string | Email registrado ante el SII (si disponible) | "contacto@empresa.cl" |
telefono |
string | Telefono registrado (si disponible) | "+56221234567" |
Una respuesta típica en JSON tiene esta estructura:
{
"rut": "76123456-7",
"razonSocial": "Distribuidora ABC SpA",
"situacionTributaria": "Activo",
"inicioActividades": "2018-04-15",
"regimenTributario": "Semi Integrado",
"giros": [
{
"codigo": "4620",
"descripcion": "Comercio al por mayor de alimentos, bebidas y tabaco",
"tipo": "principal"
},
{
"codigo": "5210",
"descripcion": "Almacenamiento y deposito",
"tipo": "secundario"
}
],
"direccion": {
"calle": "Av. Miraflores",
"numero": "222",
"departamento": null,
"comuna": "Santiago",
"region": "Metropolitana"
},
"email": "contacto@distribuidoraabc.cl",
"telefono": null
}
Ejemplo de código en Python
Para equipos que trabajan con Python, el ejemplo equivalente usando la librería requests:
# consultar_contribuyente.py
import os
import requests
from typing import Optional
API_KEY = os.environ.get("BASEAPI_KEY")
BASE_URL = "https://api.baseapi.cl/sii"
def consultar_contribuyente(rut: str, clave_sii: str) -> dict:
"""
Consulta los datos de un contribuyente en el SII via BaseAPI.
Args:
rut: RUT en formato con dígito verificador (ej: '76123456-7')
clave_sii: Clave tributaria del contribuyente en el SII
Returns:
Diccionario con los datos del contribuyente
Raises:
requests.HTTPError: Si la API retorna un error HTTP
ValueError: Si el RUT tiene formato invalido
"""
if not API_KEY:
raise EnvironmentError("La variable BASEAPI_KEY no esta configurada")
response = requests.post(
f"{BASE_URL}/contribuyente",
headers={
"X-API-Key": API_KEY,
"Content-Type": "application/json"
},
json={
"rut": rut,
"clave": clave_sii
},
timeout=15
)
response.raise_for_status()
return response.json()
def validar_formato_rut(rut: str) -> bool:
"""
Valida el formato y digito verificador de un RUT chileno.
No requiere conexion de red: calculo local con algoritmo modulo 11.
"""
rut = rut.replace(".", "").replace("-", "").upper().strip()
if len(rut) < 2:
return False
cuerpo, dv = rut[:-1], rut[-1]
if not cuerpo.isdigit():
return False
suma = 0
multiplo = 2
for digito in reversed(cuerpo):
suma += int(digito) * multiplo
multiplo = multiplo % 7 + 1
resultado = 11 - (suma % 11)
if resultado == 11:
dv_calculado = "0"
elif resultado == 10:
dv_calculado = "K"
else:
dv_calculado = str(resultado)
return dv == dv_calculado
# Ejemplo de uso
if __name__ == "__main__":
rut_a_validar = "76123456-7"
# Primero: validacion local del formato
if not validar_formato_rut(rut_a_validar):
print(f"RUT {rut_a_validar} tiene formato invalido")
else:
# Segundo: consulta al SII para datos reales
try:
datos = consultar_contribuyente(rut_a_validar, "mi_clave_sii")
print(f"Razon social: {datos['razonSocial']}")
print(f"Situacion: {datos['situacionTributaria']}")
print(f"Giros: {[g['descripcion'] for g in datos['giros']]}")
except requests.HTTPError as e:
print(f"Error al consultar el SII: {e}")
Validación del dígito verificador del RUT (algoritmo módulo 11)
Antes de hacer una llamada a la API, conviene validar localmente que el RUT tiene un dígito verificador correcto. Esto evita llamadas innecesarias y mejora la experiencia del usuario con feedback inmediato.
El algoritmo módulo 11 funciona así:
- Se toma el cuerpo del RUT (sin el dígito verificador).
- Se multiplica cada dígito, de derecha a izquierda, por la secuencia
2, 3, 4, 5, 6, 7, 2, 3, 4... - Se suman todos los productos.
- Se divide la suma por 11 y se toma el resto.
- El dígito verificador es
11 - resto. Si el resultado es 11, el DV es0. Si es 10, el DV esK.
La implementación en JavaScript para validación en frontend o backend:
// validar-rut.js
// Funciona en browser y Node.js sin dependencias
function validarRUT(rut) {
// Normalizar: eliminar puntos, guion, espacios y convertir a mayusculas
const rutLimpio = rut
.toString()
.replace(/\./g, '')
.replace(/-/g, '')
.replace(/\s/g, '')
.toUpperCase();
if (rutLimpio.length < 2) return false;
const cuerpo = rutLimpio.slice(0, -1);
const dv = rutLimpio.slice(-1);
if (!/^\d+$/.test(cuerpo)) return false;
let suma = 0;
let multiplo = 2;
for (let i = cuerpo.length - 1; i >= 0; i--) {
suma += parseInt(cuerpo[i]) * multiplo;
multiplo = (multiplo % 7) + 1;
}
const resultado = 11 - (suma % 11);
let dvCalculado;
if (resultado === 11) dvCalculado = '0';
else if (resultado === 10) dvCalculado = 'K';
else dvCalculado = String(resultado);
return dv === dvCalculado;
}
// Pruebas
console.log(validarRUT('76.123.456-7')); // true
console.log(validarRUT('12345678-9')); // depende del cuerpo
console.log(validarRUT('11111111-1')); // false (dv incorrecto)
console.log(validarRUT('5.126.663-3')); // true
Esta validación es instantánea y no requiere red. Usala como primera capa de verificación antes de cualquier llamada a la API.
Mejores prácticas de integración
Una integración con la API de contribuyente que funciona bien en producción sigue estos principios:
1. Valida el formato antes de llamar a la API
Usa el algoritmo módulo 11 en el cliente o en el backend antes de hacer la solicitud HTTP. Reduce latencia percibida y evita consultas inútiles.
2. Guarda las credenciales en variables de entorno
Nunca incluyas tu API Key ni la clave SII directamente en el código fuente. Usa process.env.BASEAPI_KEY en Node.js o os.environ en Python.
// Correcto
const API_KEY = process.env.BASEAPI_KEY;
// Incorrecto: nunca hagas esto
const API_KEY = 'sk-live-abc123...';
3. Implementa caché para RUTs consultados recientemente
Los datos del contribuyente no cambian con frecuencia. Cachear respuestas durante 24-48 horas reduce llamadas, mejora latencia y protege tu cuota de uso.
const cache = new Map();
const CACHE_TTL = 24 * 60 * 60 * 1000; // 24 horas en ms
async function consultarConCache(rut, clave) {
const ahora = Date.now();
const cached = cache.get(rut);
if (cached && ahora - cached.timestamp < CACHE_TTL) {
return cached.datos;
}
const datos = await consultarContribuyente(rut, clave);
cache.set(rut, { datos, timestamp: ahora });
return datos;
}
4. Maneja los errores con mensajes claros para el usuario
La API puede retornar errores por credenciales incorrectas, RUT no encontrado o problemas temporales del SII. Distingue cada caso y muestra mensajes apropiados.
5. Configura un timeout razonable
El SII puede tardar en responder en horarios de alta demanda. Configura un timeout de 15-20 segundos y muestra un estado de carga en la interfaz mientras esperas.
6. Registra las consultas para auditoría
En aplicaciones financieras y de compliance, guarda un log de cada consulta con timestamp, RUT consultado y resultado. Esto es útil para auditorías y para depurar problemas.
7. Considera el rate limit de tu plan
Cada plan de BaseAPI tiene un límite de solicitudes por período. Para flujos de alta demanda (onboarding masivo, validación de carteras), usa consultas en lote con control de concurrencia.
Preguntas Frecuentes
¿Validar el dígito verificador es suficiente para confirmar que un RUT existe?
No. El algoritmo módulo 11 solo verifica que el número es matemáticamente coherente, no que exista en los registros del SII. Un RUT puede pasar la validación de formato y no corresponder a ningún contribuyente real, o corresponder a uno dado de baja. Para confirmar existencia y obtener datos reales, necesitas consultar el SII.
¿Puedo consultar el RUT de cualquier empresa sin sus credenciales?
Depende del tipo de dato que necesites. Algunos datos básicos del SII son públicos y accesibles sin credenciales del contribuyente. Para obtener información completa (giros, régimen, dirección, email), el endpoint de contribuyente de BaseAPI requiere las credenciales SII del contribuyente consultado. Esto es coherente con el modelo de privacidad del SII.
¿Qué diferencia hay entre "situación tributaria" y "inicio de actividades"?
El campo inicioActividades indica la fecha en que el contribuyente se registró formalmente ante el SII. El campo situacionTributaria refleja el estado actual, que puede ser "Activo", "Sin inicio de actividades" o indicar que la empresa está en proceso de término. Un RUT con inicio de actividades puede estar activo o haber terminado su giro posteriormente.
¿Con qué frecuencia cambian los datos de un contribuyente?
La razón social y el RUT no cambian. Los giros, la dirección y el régimen tributario pueden modificarse cuando la empresa actualiza su información en el SII. Para aplicaciones donde la exactitud es crítica (como el receptor de una factura), se recomienda actualizar los datos cada 30 días o antes de cada emisión de DTE.
¿Puedo usar esta API para validar RUTs de personas naturales?
Sí. El endpoint funciona tanto para empresas como para personas naturales con RUT activo. El campo razonSocial contiene el nombre completo de la persona en ese caso. Los giros y régimen tributario aplican solo si la persona tiene inicio de actividades como contribuyente.
¿Cuánto cuesta consultar el endpoint de contribuyente?
El endpoint de información del contribuyente está disponible en los planes de BaseAPI. Puedes consultar los precios exactos en la página de planes, donde hay opciones desde uso gratuito limitado hasta planes de alto volumen. La primera consulta no requiere tarjeta de crédito.
Conclusión
Validar RUT en Chile programáticamente requiere dos capas: validación local del dígito verificador para feedback inmediato y consulta al SII para datos reales del contribuyente. Combinar ambas garantiza una experiencia de usuario fluida y datos confiables en tu sistema.
La consulta de RUT por API es la base de docenas de flujos críticos: onboarding fintech, emisión de DTE, compliance, carga de proveedores en ERP y verificación de situación tributaria. Construirla sobre una API REST estable, con soporte y documentación, es la diferencia entre una integración que escala y una que requiere mantenimiento constante.
Si estás trabajando en un flujo similar, el endpoint de información del contribuyente de BaseAPI es el punto de partida. Puedes revisar la documentación técnica completa y hacer tu primera consulta en menos de 30 minutos.
Guias relacionadas:
- Automatizar documentos tributarios del SII con API
- Guia completa del RCV 2026
- Boletas de honorarios electronicos: guia completa 2026
Comenzar con el endpoint de contribuyente:
Ver endpoint de contribuyente · Consultar precios · Crear cuenta gratis
¿Listo para automatizar tu gestión tributaria?
Activa todos los endpoints gratis y descubre cómo integrar datos del SII en tu sistema.