SoyKoda
Herramientas/Manuales/MANUAL_API_BCN_LEYCHILE.md
Manual Oficial

Manual de Referencia y Guía de Integración: API Ley Chile (BCN)

Manual de Referencia y Guía de Integración: API Ley Chile (BCN)

Biblioteca del Congreso Nacional de Chile (BCN)
Servicio Web RESTful Ley Chile
Versión del Documento: 1.0.0
Última actualización: 2026


Índice

  1. Introducción y Aspectos Generales
  2. Autenticación y Cuotas de Uso
  3. Estructura Base de las Peticiones y Respuestas
  4. Catálogo Completo de Endpoints
  5. Modelos y Esquemas XSD / JSON
  6. Flujos de Integración Comunes (Recipes)
  7. Ejemplos de Implementación (TypeScript, Python, cURL)
  8. Términos de Uso, Buenas Prácticas y Atribución

1. Introducción y Aspectos Generales

La API de Ley Chile de la Biblioteca del Congreso Nacional (BCN) proporciona acceso programático estandarizado a la base de datos jurídica y normativa oficial de Chile: leyes, decretos, reglamentos, códigos, autos acordados, resoluciones, modificaciones históricas y tramitaciones legislativas vinculadas (Boletines).

Información del Servidor


2. Autenticación y Cuotas de Uso

Autenticación por Query String

Todas las solicitudes requieren una clave de acceso (API Key) suministrada por la BCN. Debe enviarse como parámetro secret en la URL de la consulta (query string).

GET https://www.leychile.cl/servicio/3/?secret=TU_API_KEY&cantidad=5

Seguridad: La API Key es personal, secreta e intransferible. No debe exponerse en repositorios públicos, clientes frontend sin proxy, ni logs de producción.

Límites de Consumo (Rate Limiting)

Errores de Autenticación

Si no se provee el parámetro secret o este es inválido, el servicio responde con código 401 Unauthorized en texto plano:

HTTP/1.1 401 Unauthorized
Content-Type: text/plain; charset=UTF-8

Favor proveer parámetro secret en query string. Ej: &secret=xxxxx

3. Estructura Base de las Peticiones y Respuestas

ConceptoDetalle
idNormaIdentificador numérico único global de una norma en el sistema de la BCN (ej: 206396 para la Ley N° 19.846 o 1213759 para la Ley N° 21.748).
idLeyNúmero identificador específico de una Ley (ej: 19886 para la Ley de Compras Públicas, 21735).
idParteIdentificador de una sección específica de la norma (artículo, título, libro, transitorio, anexo).
idVersionFecha de la versión histórica en formato YYYY-MM-DD.
tipoVersionEntero 0 para solicitar la versión original (primera publicación en Diario Oficial).
cveCódigo de Validación Electrónica asignado por el Diario Oficial.
boletinCódigo del proyecto de ley legislativo (formato XXXXX-YY, ej: 14845-11).

4. Catálogo Completo de Endpoints

Módulo 1: Consulta de Normas, Textos y Estructura


GET /servicio/39/ — Catálogo / Listado General de idNormas

Permite obtener la lista paginada de todos los identificadores de normas (idNorma) existentes en la base de datos de Ley Chile, con opción de filtrar por tipo de norma.

Parámetros:

ParámetroTipoRequeridoDefaultDescripción
secretstringTu API Key de la BCN.
paginaintegerNo1Número de página a consultar.
cantidadintegerNo100Cantidad de ítems por página (ej. 50, 100).
tipo_normastringNo(Todos)Filtrar por tipo de norma (ver lista de valores válidos).

Valores válidos para tipo_norma:
Ley, Decreto, Resolución, Auto Acordado, Acuerdo, Alcance, Aviso, Circular, Certificado, Constitución de la República, Código, Convenio, Decreto con Fuerza de Ley, Dictamen, Decreto Ley, Instrucción, Mensaje, Norma Antigua, Notificación, Oficio, Orden, Ordenanza, Sentencia, Sesión, Rectificación, Reunión extraordinaria, Reunión ordinaria, Carta Circular, Telegrama Circular, Norma de Carácter General, Bando, Senado Consulto, Reglamento Municipal, Constitución Política de la República.

Respuesta Exitosa (200 XML):

<?xml version="1.0" encoding="UTF-8"?>
<Normas pagina="1" cantidad="100" total="20000">
  <i>206396</i>
  <i>206397</i>
  <i>206398</i>
</Normas>

GET /servicio/62/ — Delta de Normas Nuevas o Modificadas

Obtiene los IDs de las normas que han sido creadas o actualizadas dentro de una ventana temporal. Ideal para procesos de sincronización incremental y Webhooks/Crons.

Parámetros:

ParámetroTipoRequeridoDefaultDescripción
secretstringTu API Key de la BCN.
desdestring(date)NoAyerFecha de inicio en formato YYYY-MM-DD.
hastastring(date)NoHoyFecha de fin en formato YYYY-MM-DD.

Respuesta Exitosa (200 XML):

<?xml version="1.0" encoding="UTF-8"?>
<Ids>
  <Id>206396</Id>
  <Id>1213603</Id>
</Ids>

GET /servicio/3/ — Últimas Leyes Publicadas

Retorna una lista con las leyes promulgadas y publicadas más recientemente en el Diario Oficial.

Parámetros:

ParámetroTipoRequeridoDefaultDescripción
secretstringTu API Key de la BCN.
cantidadintegerNo10Cantidad de leyes a retornar.

Respuesta Exitosa (200 XML):

<?xml version="1.0" encoding="UTF-8"?>
<NORMAS>
  <NORMA idNorma="1213603" fecha_version="2025-05-24" nro_bcn="1213603">
    <TIPOS_NUMEROS>
      <TIPO_NUMERO>
        <TIPO>XX1</TIPO>
        <NUMERO>21735</NUMERO>
        <DESCRIPCION>Ley</DESCRIPCION>
        <COMPUESTO>Ley-21735</COMPUESTO>
      </TIPO_NUMERO>
    </TIPOS_NUMEROS>
    <FECHA_PUBLICACION>2025-05-24</FECHA_PUBLICACION>
    <FECHA_PROMULGACION>2025-05-14</FECHA_PROMULGACION>
    <ORGANISMOS>
      <ORGANISMO>MINISTERIO DE SALUD</ORGANISMO>
    </ORGANISMOS>
    <TEXTO>Establece normas sobre salud pública y prevención...</TEXTO>
  </NORMA>
</NORMAS>

GET /servicio/7/ — XML Estructurado de una Norma (Texto Completo)

Entrega el documento XML completo de una norma legal, incluyendo metadatos, encabezado, articulado estructurado por partes y anexos.

Parámetros:

ParámetroTipoRequeridoDescripción
secretstringTu API Key de la BCN.
idNormaintegerCondicional*ID de la norma en Ley Chile (excluyente con idLey).
idLeyintegerCondicional*Número de ley (ej: 19886, excluyente con idNorma).
idVersionstring(date)NoVersión por fecha (YYYY-MM-DD). Por defecto es la vigente.
tipoVersionintegerNoSi es 0, entrega la versión Original promulgada.
esquemaTipostringNoUsar cNotas para incrustar notas explicativas inline en el XML.
conNotasstringNoUsar False para omitir completamente las notas del texto.

* Debe enviarse idNorma o idLey, pero nunca ambos a la vez.

Ejemplo de Petición:

GET https://www.leychile.cl/servicio/7/?secret=MI_SECRET&idLey=19886&esquemaTipo=cNotas

Respuesta Exitosa (200 XML):

<?xml version="1.0" encoding="UTF-8"?>
<Norma xmlns="http://www.leychile.cl/esquemas" normaId="206396" fechaVersion="2024-01-01" derogado="no">
  <Identificador>
    <TiposNumeros>
      <TipoNumero>
        <Tipo>Ley</Tipo>
        <Numero>19886</Numero>
        <Descripcion>Ley</Descripcion>
        <Compuesto>Ley-19886</Compuesto>
      </TipoNumero>
    </TiposNumeros>
    <Organismos>
      <Organismo>MINISTERIO DE HACIENDA</Organismo>
    </Organismos>
    <FechaPublicacion>2003-07-30</FechaPublicacion>
    <TituloNorma>LEY DE BASES SOBRE CONTRATOS ADMINISTRATIVOS DE SUMINISTRO Y PRESTACIÓN DE SERVICIOS</TituloNorma>
  </Identificador>
  <EstructurasFuncionales>
    <EstructuraFuncional idParte="871234" tipoParte="Artículo" numeroParte="1">
      <Texto>El presente cuerpo legal regulará los contratos que celebre la Administración del Estado...</Texto>
    </EstructuraFuncional>
  </EstructurasFuncionales>
</Norma>

GET /servicio/7.2/ — JSON Estructurado de una Norma

Versión en formato JSON del contenido normativo (equivalente al endpoint /Navegar/get_norma_json).

Parámetros:

ParámetroTipoRequeridoDescripción
secretstringTu API Key de la BCN.
idNormaintegerCondicional*ID único de la norma (ej: 1111237).
idLeyintegerCondicional*Número de ley (ej: 21735).
cveintegerCondicional*Número CVE del Diario Oficial.
idVersionstring(date)NoFecha de versión (YYYY-MM-DD).
tipoVersionintegerNo0 para versión original.

* Debe enviarse al menos uno: idNorma, idLey o cve.

Respuesta Exitosa (200 JSON):

{
  "id_norma": 1111237,
  "titulo": "ESTABLECE MARCO REGULATORIO...",
  "organismo": ["MINISTERIO DE HACIENDA"],
  "fecha_publicacion": "2023-12-15",
  "fecha_promulgacion": "2023-12-01",
  "articulos": [
    {
      "id_parte": "105942",
      "numero": "1",
      "texto": "Artículo 1.- Las disposiciones de la presente ley se aplicarán a..."
    }
  ]
}

GET /servicio/9/ — Árbol Jerárquico de la Norma (TOC / Articulado)

Entrega el árbol funcional de la norma (Libros, Títulos, Capítulos, Párrafos, Artículos, Disposiciones Transitorias, Proyectos de Ley e Historias de la Ley vinculados) sin descargar la totalidad del texto continuo. Es ideal para construir tablas de contenidos interactivas.

Parámetros:

ParámetroTipoRequeridoDescripción
secretstringTu API Key de la BCN.
idNormaintegerCondicional*ID único de la norma (ej: 206396).
idLeyintegerCondicional*Número de la ley (ej: 19886).
idVersionstring(date)NoFecha de versión (YYYY-MM-DD).

* idNorma e idLey son mutuamente excluyentes.

Respuesta Exitosa (200 XML según servicio 9.xsd):

<?xml version="1.0" encoding="utf-8"?>
<Norma xmlns="http://www.leychile.cl/esquemas">
  <Identificador normaId="206396"/>
  <Metadatos>
    <HistoriasLey>
      <HistoriaLey>
        <Enlace>https://www.bcn.cl/historiadelaley/...</Enlace>
        <Informacion>Historia de la Ley N° 19.886</Informacion>
        <Categoria>Historia de la Ley</Categoria>
      </HistoriaLey>
    </HistoriasLey>
    <ProyectosLey>
      <ProyectoLey>
        <Enlace>https://www.camara.cl/...</Enlace>
        <Informacion>Proyecto Original</Informacion>
        <Categoria>Proyecto de Ley</Categoria>
        <NroBoletin>2382-05</NroBoletin>
      </ProyectoLey>
    </ProyectosLey>
  </Metadatos>
  <Encabezado idParte="9801" tipoParte="Encabezado"/>
  <PartesHijas>
    <Parte idParte="9802" tipoParte="Título" numeroParte="I" tituloParte="Disposiciones Generales">
      <PartesHijas>
        <Parte idParte="9803" tipoParte="Artículo" numeroParte="1">
          <Identificador tipoParte="Artículo" numeroParte="1">
            <Compuesto>Artículo 1°</Compuesto>
          </Identificador>
        </Parte>
      </PartesHijas>
    </Parte>
  </PartesHijas>
  <Promulgacion idParte="9899" tipoParte="Promulgación"/>
</Norma>

GET /servicio/80/ — Historial de Versiones y Modificaciones

Retorna la cronología completa de versiones de una norma o de un artículo específico, con enlaces a los textos históricos y el detalle de cada ley modificatoria.

Parámetros:

ParámetroTipoRequeridoDescripción
secretstringTu API Key de la BCN.
idNormaintegerCondicional*ID de la norma (ej: 206396).
idLeyintegerCondicional*Número de ley (ej: 19886).
idPartestringNoID de la Parte/Artículo obtenido en /servicio/9/ o /servicio/7/.

Respuesta Exitosa (200 XML según servicio 80.xsd):

<?xml version="1.0" encoding="UTF-8"?>
<Versiones id_norma="206396">
  <Version tipoVersion="Modificada" vigenteDesde="2023-12-11" vigenteHasta="2024-12-01">
    <UrlVersion>https://www.bcn.cl/leychile/navegar?idNorma=206396&amp;idVersion=2023-12-11</UrlVersion>
    <Modificatorias>
      <Modificatoria idNorma="1198542" nroNorma="21634" tipoNorma="Ley" tipoModificacion="Modifica"
                     titulo="MODIFICA LEY DE COMPRAS PÚBLICAS..." organismo="MINISTERIO DE HACIENDA"
                     inicioVigencia="2023-12-11" fechaPublicacion="2023-12-11">
        <UrlModificatoria>https://www.bcn.cl/leychile/navegar?idNorma=1198542</UrlModificatoria>
      </Modificatoria>
    </Modificatorias>
  </Version>
</Versiones>

GET /servicio/846/ — Vinculaciones y Relaciones Jurídicas

Permite consultar la matriz de relaciones explícitas de una norma: normas a las que modifica, normas que la modifican, refundiciones, reglamentaciones, concordancias y rectificaciones.

Parámetros:

ParámetroTipoRequeridoDescripción
secretstringTu API Key de la BCN.
idNormaintegerID de la norma a consultar (ej: 206396).

Respuesta Exitosa (200 XML según servicio 846.xsd):

<?xml version="1.0" encoding="UTF-8"?>
<Vinculaciones idNorma="206396">
  <modifica_a>
    <Norma idNorma="18248" idParte="0"/>
  </modifica_a>
  <modificada_por>
    <Norma idNorma="1198542" idParte="5"/>
  </modificada_por>
  <refundida_por/>
  <refunde_a/>
  <reglamenta_a/>
  <reglamentada_por>
    <Norma idNorma="231422" idParte="0"/>
  </reglamentada_por>
  <concuerda_con/>
  <rectificada_por/>
  <rectifica_a/>
</Vinculaciones>

GET /servicio/63/ — Texto en HTML Plano

Retorna el contenido de la versión vigente de la norma formateado en HTML simple.

Parámetros:

ParámetroTipoRequeridoDescripción
secretstringTu API Key de la BCN.
idNormaintegerID de la norma (ej: 206396).

Respuesta Exitosa (200 HTML):

<div class="norma-body">
  <h2>LEY NÚM. 19.886</h2>
  <p>El presente cuerpo legal regulará los contratos...</p>
</div>

Módulo 2: Buscadores y Búsquedas Especiales


GET /servicio/61/ — Búsqueda por Palabras Clave o Frase Exacta

Buscador principal por relevancia del texto jurídico en el catálogo de Ley Chile.

Parámetros:

ParámetroTipoRequeridoDefaultDescripción
secretstringTu API Key de la BCN.
cadenastringTérmino o frase a buscar (ej: "contratos de suministro").
exactaintegerNo00 = Contiene todas las palabras. 1 = Coincidencia de frase exacta.
cantidadintegerNo5Resultados a retornar (máximo 100).

Respuesta Exitosa (200 XML según servicio 61.xsd):

<?xml version="1.0" encoding="UTF-8"?>
<Normas fechaGeneracion="2026-08-14">
  <Norma>
    <IdNorma>206396</IdNorma>
    <TiposNumeros>
      <TipoNumero>
        <Tipo>Ley</Tipo>
        <Numero>19886</Numero>
        <Descripcion>Ley</Descripcion>
        <Abreviacion>L</Abreviacion>
        <Compuesto>Ley-19886</Compuesto>
      </TipoNumero>
    </TiposNumeros>
    <FechaPublicacion>2003-07-30</FechaPublicacion>
    <TituloNorma>LEY DE BASES SOBRE CONTRATOS ADMINISTRATIVOS DE SUMINISTRO Y PRESTACIÓN DE SERVICIOS</TituloNorma>
    <InicioDeVigencia>2003-08-29</InicioDeVigencia>
    <Url>https://www.bcn.cl/leychile/navegar?idNorma=206396</Url>
  </Norma>
</Normas>

GET /servicio/71/ — Búsqueda de idParte por Número de Artículo

Permite obtener el idParte de un artículo específico dentro de una norma, conociendo únicamente el idNorma y el número de artículo. Esencial para generar deep links y consultas de versiones a nivel de artículo.

Parámetros:

ParámetroTipoRequeridoDescripción
secretstringTu API Key de la BCN.
idNormaintegerID de la norma (ej: 206396).
nroPartestringNúmero del artículo buscado (ej: 2, 15 bis).

GET /servicio/91/ — Búsqueda de Norma por Boletín de Origen

Dado el número de un Boletín legislativo de origen (ej: 14845-11), entrega la norma resultante (Ley o Decreto promulgatorio) con las URLs a su versión original y versión actualizada.

Parámetros:

ParámetroTipoRequeridoDescripción
secretstringTu API Key de la BCN.
boletinstringNúmero de Boletín legislativo (ej: 14845-11).

Respuesta Exitosa (200 XML según servicio 91.xsd):

<?xml version="1.0" encoding="UTF-8"?>
<UrlsNorma id_norma="1213759" norma="Ley 21748" fecha_publicacion="2025-05-29" nro_boletin="14845-11">
  <status>ok</status>
  <VersionOriginal>https://www.bcn.cl/leychile/navegar?idNorma=1213759&amp;tipoVersion=0</VersionOriginal>
  <VersionActualizada>https://www.bcn.cl/leychile/navegar?idNorma=1213759</VersionActualizada>
  <mensaje></mensaje>
</UrlsNorma>

GET /servicio/93/ — Normas Modificadas por un Boletín en Trámite

Permite anticipar qué leyes serán impactadas por un proyecto de ley actualmente en trámite en el Congreso Nacional.

Nota: Esta información es curada por el equipo de análisis legislativo de la BCN durante la tramitación del boletín. Una vez promulgada la ley, se recomienda utilizar el /servicio/846/.

Parámetros:

ParámetroTipoRequeridoDescripción
secretstringTu API Key de la BCN.
boletinstringNúmero del boletín en trámite (ej: 17328-07).

Respuesta Exitosa (200 JSON):

{
  "total": 1,
  "normas": [
    {
      "id_norma": 206396,
      "identificacion": "Ley 19886",
      "title": "LEY DE BASES SOBRE CONTRATOS ADMINISTRATIVOS...",
      "organismo": ["MINISTERIO DE HACIENDA"],
      "fechaPromulgacion": "2003-07-11",
      "fechaPublicacion": "2003-07-30",
      "url": "https://www.bcn.cl/leychile/navegar?idNorma=206396"
    }
  ]
}

GET /servicio/94/ — Búsqueda de Norma por Código CVE (Diario Oficial)

Resuelve una norma a partir del Código de Validación Electrónica (CVE) impreso en el Diario Oficial.

Parámetros:

ParámetroTipoRequeridoDescripción
secretstringTu API Key de la BCN.
cveintegerNúmero CVE del documento oficial (ej: 2653997).

Respuesta Exitosa (200 JSON):

{
  "numero_cve": 2653997,
  "id_norma": 1213759,
  "identificacion": "Ley 21748",
  "title": "ESTABLECE SUBSIDIO A LA TASA DE INTERÉS HIPOTECARIA PARA LA ADQUISICIÓN DE VIVIENDAS NUEVAS...",
  "organismo": [
    "MINISTERIO DE HACIENDA"
  ],
  "fechaPromulgacion": "2025-05-23",
  "fechaPublicacion": "2025-05-29",
  "actualizada": false,
  "url": "https://www.bcn.cl/leychile/navegar?idNorma=1213759",
  "url_original": "https://www.bcn.cl/leychile/navegar?idNorma=1213759&tipoVersion=0"
}

Módulo 3: Categorías, Agrupadores y Comisiones


GET /servicio/30/ — Categorías Temáticas BCN

Lista las grandes categorías editoriales y temáticas configuradas en Ley Chile.

Parámetros:

ParámetroTipoRequeridoDescripción
secretstringTu API Key de la BCN.

Respuesta Exitosa (200 XML):

<?xml version="1.0" encoding="UTF-8"?>
<Categorias>
  <Categoria idCategoria="2">
    <Descripcion>Comisiones Legislativas</Descripcion>
    <Observacion>Normas agrupadas por comisión parlamentaria</Observacion>
  </Categoria>
</Categorias>

GET /servicio/31/ — Agrupadores por Categoría

Retorna los sub-agrupadores asociados a una categoría obtenida en el /servicio/30/.

Parámetros:

ParámetroTipoRequeridoDescripción
secretstringTu API Key de la BCN.
agrintegerID de la categoría (ej: 2).

GET /servicio/37/ — Normas de un Agrupador

Obtiene la lista de normas asignadas a un agrupador específico (idAgrupador).

Parámetros:

ParámetroTipoRequeridoDescripción
secretstringTu API Key de la BCN.
idAgrupadorintegerID del agrupador obtenido en /servicio/31/.

GET /servicio/92/ — Normas de Comisiones Legislativas (Cámara)

Obtiene las normas de consulta frecuente categorizadas por las comisiones legislativas de la Cámara de Diputadas y Diputados.

Parámetros:

ParámetroTipoRequeridoDescripción
secretstringTu API Key de la BCN.
idintegerID de la comisión legislativa (ej: 1032 para Comisión de Hacienda).

Referencia: Los IDs de comisiones se obtienen en el portal Ley Chile en https://www.bcn.cl/leychile/consulta/agrupadores?tipCat=2.

Respuesta Exitosa (200 XML):

<?xml version="1.0" encoding="UTF-8"?>
<Normas comision="Hacienda">
  <Norma>
    <IdNorma>206396</IdNorma>
    <Norma>Ley 19886</Norma>
    <FechaPublicacion>2003-07-30</FechaPublicacion>
    <Organismo>MINISTERIO DE HACIENDA</Organismo>
    <Materia>Compras Públicas y Contratación del Estado</Materia>
    <Url>https://www.bcn.cl/leychile/navegar?idNorma=206396</Url>
  </Norma>
</Normas>

Módulo 4: Resúmenes y Lenguaje Ciudadano


GET /servicio/66/ — Resúmenes Ciudadanos e Historia de la Ley

Entrega resúmenes en lenguaje claro y accesible elaborados por la BCN (Guías Legales / Ley Fácil), junto con el enlace directo a la historia formativa de la ley.

Parámetros:

ParámetroTipoRequeridoDefaultDescripción
secretstringTu API Key de la BCN.
idNormaintegerNoFiltrar por una norma específica.
nintegerNo1Número de página.
iintegerNo10Cantidad de resultados por página.
ointegerNo1Criterio de orden: <br> 1 = Fecha publicación (más reciente primero)<br> 2 = Fecha publicación (más antigua primero)<br> 3 = Número de ley (descendente)<br> 4 = Título (alfabético A-Z).
tintegerNoTotal precalculado de registros (acelera la consulta en paginación continua).

Respuesta Exitosa (200 XML):

<?xml version="1.0" encoding="UTF-8"?>
<Resultados total="1400" ahora="10" pagina="1" items_x_pag="10">
  <fila>
    <id_norma>206396</id_norma>
    <nro_norma>19886</nro_norma>
    <tiutlo_corto>Ley de Compras Públicas</tiutlo_corto>
    <titulo_largo>LEY DE BASES SOBRE CONTRATOS ADMINISTRATIVOS DE SUMINISTRO Y PRESTACIÓN DE SERVICIOS</titulo_largo>
    <titulo_ciudano>Guía legal sobre compras del Estado</titulo_ciudano>
    <fecha_publicacion>2003-07-30</fecha_publicacion>
    <historia_ley>https://www.bcn.cl/historiadelaley/nc/historia-de-la-ley/5507/</historia_ley>
    <resumen>Establece que las compras y contrataciones de bienes y servicios que realizan los organismos públicos deben regirse por principios de transparencia, libre concurrencia e igualdad...</resumen>
  </fila>
</Resultados>

5. Modelos y Esquemas XSD / JSON

Los esquemas XML formales (.xsd) correspondientes a las respuestas de la BCN se encuentran disponibles en el repositorio en soykoda/public/:

  1. servicio 7 XSD por defecto.xsd: Estructura canónica del documento normativo (<Norma>, <Identificador>, <EstructurasFuncionales>, <Parte>, <Texto>).
  2. servicio 7 XSD para esquemaTipo=cNotas.xsd: Esquema extendido con notas al pie y anotaciones modificatorias incrustadas de forma inline.
  3. servicio 9 ver XSD de la respuesta.xsd: Estructura del árbol jerárquico (NormaType, ArticuloType, MetadatosType, HistoriasLey, ProyectosLey).
  4. servicio 61.xsd: Resultado de búsquedas (Normas, Norma, TiposNumeros, InicioDeVigencia).
  5. servicio 80.xsd: Historial de versiones y modificaciones (Versiones, Version, Modificatorias, Modificatoria).
  6. servicio 846.xsd: Grafo de vinculaciones (Vinculaciones, modifica_a, modificada_por, reglamentada_por, etc.).
  7. servicio 91.xsd: Mapeo de Boletín legislativo a URLs de la norma (UrlsNorma, VersionOriginal, VersionActualizada).

6. Flujos de Integración Comunes (Recipes)

Flujo A: Obtener el texto vigente completo de una ley por su número

  1. Consumir GET /servicio/7/?secret=KEY&idLey=19886.
  2. Parsear el XML resultante o transformarlo a Markdown/HTML según necesidad.

Flujo B: Sincronización Diaria de Modificaciones Normativas

  1. Ejecutar diariamente un Cron job a GET /servicio/62/?secret=KEY&desde=YYYY-MM-DD&hasta=YYYY-MM-DD.
  2. Para cada Id retornado en la lista:
    • Consultar GET /servicio/80/?secret=KEY&idNorma={Id} para verificar qué cambió.
    • Descargar la nueva versión con GET /servicio/7/?secret=KEY&idNorma={Id}.

Flujo C: Construcción de una Tabla de Contenidos (TOC) Interactiva

  1. Consumir GET /servicio/9/?secret=KEY&idLey=19886.
  2. Recorrer el árbol <PartesHijas> extrayendo idParte, tipoParte y numeroParte.
  3. Al hacer clic en un artículo específico:
    • Descargar únicamente la versión de esa parte o hacer scroll a la sección identificada.

Flujo D: Búsqueda Semántica o por Palabras Clave

  1. Ejecutar GET /servicio/61/?secret=KEY&cadena=probidad+administrativa&exacta=0&cantidad=10.
  2. Presentar al usuario los resultados con su TituloNorma, FechaPublicacion y enlace a Url.

7. Ejemplos de Implementación (TypeScript, Python, cURL)

TypeScript / Node.js (Cliente Modular)

/**
 * Cliente para la API de Ley Chile (Biblioteca del Congreso Nacional)
 */
export class BcnLeyChileClient {
  private readonly baseUrl = 'https://www.leychile.cl';
  private readonly apiKey: string;

  constructor(apiKey: string) {
    if (!apiKey) {
      throw new Error('Se requiere una API Key válida de la BCN.');
    }
    this.apiKey = apiKey;
  }

  private async fetchEndpoint<T = string>(endpoint: string, params: Record<string, any> = {}, isJson = false): Promise<T> {
    const url = new URL(`${this.baseUrl}${endpoint}`);
    url.searchParams.set('secret', this.apiKey);

    Object.entries(params).forEach(([key, value]) => {
      if (value !== undefined && value !== null) {
        url.searchParams.set(key, String(value));
      }
    });

    const response = await fetch(url.toString(), {
      headers: {
        'Accept': isJson ? 'application/json' : 'application/xml, text/plain, */*'
      }
    });

    if (!response.ok) {
      const errorText = await response.text();
      throw new Error(`Error API BCN (${response.status}): ${errorText}`);
    }

    if (isJson) {
      return response.json() as Promise<T>;
    }
    return response.text() as Promise<T>;
  }

  /** Obtiene las últimas leyes publicadas */
  async getUltimasLeyes(cantidad = 10): Promise<string> {
    return this.fetchEndpoint('/servicio/3/', { cantidad });
  }

  /** Obtiene el XML completo de una ley por número o idNorma */
  async getNormaXml(options: { idNorma?: number; idLey?: number; esquemaTipo?: 'cNotas' }): Promise<string> {
    return this.fetchEndpoint('/servicio/7/', options);
  }

  /** Obtiene el JSON de una norma */
  async getNormaJson(options: { idNorma?: number; idLey?: number; cve?: number }): Promise<any> {
    return this.fetchEndpoint('/servicio/7.2/', options, true);
  }

  /** Busca normas por texto */
  async buscarNormas(cadena: string, exacta = 0, cantidad = 5): Promise<string> {
    return this.fetchEndpoint('/servicio/61/', { cadena, exacta, cantidad });
  }

  /** Obtiene normas modificadas por un boletín legislativo */
  async getNormasPorBoletin(boletin: string): Promise<any> {
    return this.fetchEndpoint('/servicio/93/', { boletin }, true);
  }
}

Python 3 (Requests)

import requests
from typing import Optional, Dict, Any

class BcnLeyChileAPI:
    BASE_URL = "https://www.leychile.cl"

    def __init__(self, api_key: str):
        self.api_key = api_key

    def _get(self, endpoint: str, params: Optional[Dict[str, Any]] = None, is_json: bool = False):
        query_params = {"secret": self.api_key}
        if params:
            query_params.update(params)
        
        response = requests.get(f"{self.BASE_URL}{endpoint}", params=query_params)
        response.raise_for_status()
        
        return response.json() if is_json else response.text

    def get_norma_xml(self, id_ley: Optional[int] = None, id_norma: Optional[int] = None):
        """Descarga el XML de una norma."""
        params = {}
        if id_ley:
            params["idLey"] = id_ley
        elif id_norma:
            params["idNorma"] = id_norma
        else:
            raise ValueError("Debe indicar id_ley o id_norma")
        return self._get("/servicio/7/", params=params)

    def buscar(self, texto: str, exacta: int = 0, cantidad: int = 5):
        """Busca normas por relevancia."""
        return self._get("/servicio/61/", params={"cadena": texto, "exacta": exacta, "cantidad": cantidad})

    def get_norma_por_cve(self, cve: int):
        """Consulta una norma por su código CVE."""
        return self._get("/servicio/94/", params={"cve": cve}, is_json=True)

cURL

# 1. Obtener las últimas 5 leyes
curl -G "https://www.leychile.cl/servicio/3/" \
  --data-urlencode "secret=TU_API_KEY" \
  --data-urlencode "cantidad=5"

# 2. Descargar XML de la Ley 19.886 con notas al pie
curl -G "https://www.leychile.cl/servicio/7/" \
  --data-urlencode "secret=TU_API_KEY" \
  --data-urlencode "idLey=19886" \
  --data-urlencode "esquemaTipo=cNotas" \
  -o ley_19886.xml

# 3. Consultar JSON de una norma por código CVE
curl -G "https://www.leychile.cl/servicio/94/" \
  --data-urlencode "secret=TU_API_KEY" \
  --data-urlencode "cve=2653997" \
  -H "Accept: application/json"

8. Términos de Uso, Buenas Prácticas y Atribución

  1. Atribución Obligatoria: En cualquier aplicación o plataforma que exponga datos derivados de este servicio, se debe incluir la siguiente mención visible:

    "Fuente: Ley Chile - Biblioteca del Congreso Nacional de Chile (Fecha de consulta: DD/MM/AAAA)"

  2. Prohibición de Scraping Masivo y Replicación: No está permitida la extracción no autorizada de la base de datos completa con el propósito de crear un repositorio espejo sin convenio explícito con la BCN.
  3. Entrenamiento de Modelos de Inteligencia Artificial: El entrenamiento masivo, preentrenamiento o ajuste fino (fine-tuning) de modelos de IA con datos directos de la API requiere de una autorización expresa otorgada por la Biblioteca del Congreso Nacional.
  4. Caché y Eficiencia: Se recomienda implementar estrategias de almacenamiento en caché local (Redis, SQLite, Postgres) para almacenar versiones consolidadas de leyes estables y evitar sobrecargar los servidores públicos.
Volver a manualesDescargar archivo .md