---
title: "API"
description: "Integración directa con la API"
type: "docs"
category: "doc"
tags: []
authors: [Anonymous]
date: "2026-08-20"
last_update: "2026-08-20"
time_minutes: 1
draft: false
unlisted: false
url: "https://www.libredte.cl/docs/integracion/api"
---

# Integración directa con la API



---

## ¿Los montos se envían netos o brutos por API?

Cómo enviar los montos al emitir por API

# ¿Cómo enviar los montos al emitir por API?

Esto dependerá del tipo de documento que emitas:

Para **boletas**, los montos son considerados como **brutos** por defecto.

Si deseas que se consideren como montos netos debes indicar el siguiente campo en el encabezado del documento:

```json
&quot;IndMntNeto&quot;: 2
```

Por ejemplo:

```json
{
    &quot;Encabezado&quot;: {
        &quot;IdDoc&quot;: {
            &quot;TipoDTE&quot;: 39,
            &quot;IndMntNeto&quot;: 2
        },
```


Documentación oficial del SII con el formato para boletas (pagina 8) https://www.sii.cl/factura_electronica/factura_mercado/formato_boletas_elec_202306.pdf

---

Para **facturas y otros DTEs**, los montos son considerados como **netos** por defecto.

Si deseas que se consideren como motos brutos debe indicar el campo en el encabezado del documento:

```json
&quot;MntBruto &quot;: 1
```

Por ejemplo:

```json
{
    &quot;Encabezado&quot;: {
        &quot;IdDoc&quot;: {
            &quot;TipoDTE&quot;: 33,
            &quot;MntBruto&quot;: 1
        },
```

Documentación oficial del SII con el formato para facturas y otros DTE (pagina 13) https://www.sii.cl/factura_electronica/factura_mercado/formato_dte_202602.pdf




---

## Integración con el cliente de LibreDTE

Integra tu sistema con LibreDTE usando XML y el cliente oficial.

# Integración con el cliente de LibreDTE

1. Bajar e instalar [el cliente de escritorio de LibreDTE](https://github.com/LibreDTE/libredte-cliente).
2. Agregar a la configuración del cliente, en el archivo  archivo `config.yml`, el `hash` de su usuario, que obtiene en [su perfil](https://libredte.cl/usuarios/perfil).
3. Poder crear un archivo XML con su programa con la estructura del documento, se adjunta un XML de ejemplo con los datos para una boleta.
4. Ejecutar desde su programa el cliente, esto puede hacerlo de la siguiente forma (es un ejemplo, en el enlace del punto a encontrará más ejemplos):

```shell
libredte-cliente.py dte_generar --xml=dte.xml --dir=resultado --encoding=ISO-8859-1
```

Esto enviará el XML a la aplicación de [libredte.cl](https://libredte.cl) y dejará en la carpeta `resultado` varios archivos:

* `temporal.json` respuesta del servicio web que crea el DTE temporal.
* `emitido.json` respuesta del servicio web que crea el DTE real (sin el XML) e incluye el track_id si el DTE fue enviado al SII.
* `emitido.csv` mismos datos que emitido.json, pero en un archivo plano separado por punto y coma.
* `emitido.xml` archivo XML del documento real (solo si se pasó la opción --getXML al comando).
* `emitido.pdf` archivo PDF del documento real, con copia cedible por defecto.

Estos archivos son la respuesta del servicio web de LibreDTE consumido a través del cliente de escritorio.

&gt; [!HINT] Configuración del cliente
&gt;
&gt; Revisa la configuración completa del cliente en el [README del repositorio](https://github.com/LibreDTE/libredte-cliente?tab=readme-ov-file#c%C3%B3mo-ejecuto-el-cliente).




---

## Generación de XML desde un JSON

Convertir datos JSON a XML para documentos SII.

# Generación de XML desde un JSON

La generación de los XML en LibreDTE se hace directamente a partir de los datos de un arreglo en PHP, este arreglo a su vez puede ser generado a partir de los datos en formato JSON. Esta es la razón por la cual los ejemplos de LibreDTE, en su mayoría, son entregados en formato JSON. Y es la razón por la cual el formato estándar y por defecto para las integraciones mediante servicios web son con datos en JSON.

La conversión es directa desde el JSON al XML, es decir, se toma cada atributo el objeto JSON y se convierte a un tag en el XML. Esto tiene dos ventajas:

1. Hace muy simple la creación de los XML, ya que solo se deben crear JSON, que son archivos con un formato mucho más simple de manejar (a nivel de índices, objetos, etc).
2. El formato que se usa en los JSON es exactamente el mismo que se utiliza en los formatos de XML del SII.

El punto 2 implica que si quiero saber cómo agregar un campo X en el JSON, solo se debe ir a la documentación de los XML del SII y buscar el nombre y ubicación de dicho campo. Esto es lo que hace que LibreDTE sea posible.

Haz clic [aquí](https://www.youtube.com/watch?v=hFM7UbQQ9kw&amp;t=2055s) para ver la explicación de las alternativas que se analizaron para crear los XML y una explicación más detallada de lo que se explica acá.

## Ejemplos

El siguiente ejemplo muestra el resultado de convertir un objeto JSON a un XML usando LibreDTE:

```json
{
    &quot;root&quot;: {
        &quot;nodo1&quot;: &quot;A&quot;,
        &quot;nodo2&quot;: &quot;B&quot;
    }
}
```

![Resultado de convertir un objeto JSON a un XML](https://www.libredte.cl/img/content/docs/integracion/api/generacion-de-xml-desde-un-json/generacion-de-xml-desde-un-json-1.png)

Las listas son tratadas de forma especial, en este caso se repite el tag del índice de la lista:

```json
{
    &quot;raiz&quot;: {
        &quot;telefono&quot;: [123, 456]
    }
}
```

![Tag](https://www.libredte.cl/img/content/docs/integracion/api/generacion-de-xml-desde-un-json/generacion-de-xml-desde-un-json-2.png)




---

## Integrar aplicación propia con LibreDTE

Cómo integrar tu app con LibreDTE vía servicios.

# Integrar aplicación propia con LibreDTE

Para poder realizar la integración con los servicios web de [www.libredte.cl](https://www.libredte.cl) es necesario una cuenta con acceso a los servicios web, por ejemplo con el Servicio Plus. Teniendo esta cuenta, se utiliza el hash del usuario o API key, que están disponibles en el [perfil del usuario](https://libredte.cl/usuarios/perfil).

Los servicios web utilizan una estructura basada en REST, con solicitudes y respuestas en JSON. Toda la documentación está en [este enlace](https://www.libredte.cl/docs/api).

Dentro de la documentación oficial encontrará:
* Documentación de endpoints.
* Parámetros a pasar.
* Ejemplos de cuerpos de solicitudes.
* SDKs en diferentes lenguajes con código ya listo.
* Y más detalles sobre la integración.

Si su lenguaje no permite consumir servicios web o bien resulta muy complicado hacerlo puede utilizar nuestro [cliente de escritorio](https://github.com/LibreDTE/libredte-cliente) que funciona como un intermediario entre su aplicación y [www.libredte.cl](https://www.libredte.cl).




---

## Emisión de DTE con envío asíncrono al SII

Emite DTE sin enviar al SII y envíalo luego de forma asíncrona.

# Emisión de DTE con envío asíncrono al SII

Si desea evitar el envío del XML de un documento al SII para mejorar el tiempo de respuesta de la creación o bien realizar el envío después en caso de que haya existido algún problema con el SII, puede emitir el DTE con envío asíncrono. Realizar esto implica lo siguiente:

* Generar el DTE real sin enviarlo al SII.

* Enviar DTE real al SII posterior a la generación.

Para poder realizar lo indicado anteriormente debe realizar los siguientes pasos:

## Generar el DTE real sin enviarlo al SII

Para emitir el DTE real sin enviar XML al SII debe utilizar el recurso de &quot;[Generar DTE real](https://www.libredte.cl/docs/api#/Emisi%C3%B3n%20de%20un%20DTE/generarDteReal)&quot;, desactivando el envío del XML usando el parametro `retry=0`.

![retry=0](https://www.libredte.cl/img/content/docs/integracion/api/emision-de-un-dte-con-envio-asincrono-al-sii/emision-de-un-dte-con-envio-asincrono-al-sii-1.png)

## Enviar DTE real al SII posterior a la generación

Luego una vez que desee enviar el XML al SII después de tener el DTE real creado en LibreDTE debe utilizar el recurso &quot;[Enviar un DTE emitido al SII](https://www.libredte.cl/docs/api#/Documentos%20Emitidos%20(aka%3A%20reales)/enviarUnDteEmitidoAlSii)&quot;.

Esto permitirá enviar al SII el DTE que ha sido generado, pero que por el paso realizado anteriormente no fue enviado al SII.

### Diagrama de secuencia para el envío asíncrono de un DTE:

![Diagrama de secuencia](https://www.libredte.cl/img/content/docs/integracion/api/emision-de-un-dte-con-envio-asincrono-al-sii/emision-de-un-dte-con-envio-asincrono-al-sii-2.png)




---

## Emití un documento exento pero se genera uno afecto, o viceversa

DTE cambia según IndExe.

# Emití un documento exento pero se genera uno afecto, o viceversa

LibreDTE intenta minimizar los errores que los usuarios o desarrolladores puedan cometer. Por esta razón, realiza ajustes en función de los datos que se le proporcionan para construir los Documentos Tributarios Electrónicos (DTE). En este caso, dichos ajustes están ocurriendo debido a una razón específica por la cual el tipo de documento se modifica y no se genera el solicitado, aunque el servicio web esté funcionando correctamente.

La versión breve es la siguiente para generar un documento:

* **Exento:** todos los ítems deben estar marcados con el indicador IndExe.
* **Afecto:** debe haber al menos un ítem sin el indicador IndExe.

Si se intenta generar un documento exento, LibreDTE espera que todos los ítems vengan con el indicador IndExe (normalmente con valor 1). Si al menos un ítem no tiene ese indicador, el ítem se considerará afecto y, por lo tanto, la factura se cambiará automáticamente de exenta a afecta. En resumen, cada ítem exento debe estar marcado como tal (como lo solicita el SII y se indica en su documentación). Si hay al menos un ítem no exento (afecto), LibreDTE corregirá esto cambiando el tipo de documento; por eso, a pesar de seleccionar el tipo 34, se generará un tipo 33. En cambio, si se solicita emitir una factura afecta donde todos los ítems tienen el indicador IndExe, LibreDTE cambiará automáticamente el tipo de documento a factura exenta.

La descripción del campo IndExe se encuentra en la documentación oficial del formato de DTE del SII y su ubicación es dentro del ítem:

![campo IndExe](https://www.libredte.cl/img/content/docs/integracion/api/emiti-un-documento-exento-pero-se-genera-uno-afecto-o-viceversa/emiti-un-documento-exento-pero-se-genera-uno-afecto-o-viceversa.png)

Para las boletas, la explicación es análoga. En el caso de generar boletas, es esencial seguir las especificaciones y requerimientos establecidos en la documentación oficial del formato de DTE del SII. Al igual que con las facturas, la gestión adecuada del campo IndExe dentro de cada ítem de la boleta es crucial para garantizar la correcta clasificación entre exento y afecto, según las normativas del Servicio de Impuestos Internos.




---

## Integración desde un lenguaje que no consume servicios web

Integra LibreDTE con lenguajes sin soporte web usando middleware.

# Integración desde un lenguaje que no consume servicios web

La integración con la aplicación web de LibreDTE se hace consumiendo los servicios web de [www.libredte.cl](https://www.libredte.cl). Estos servicios web tienen una documentación en [este enlace](https://www.libredte.cl/docs/api) y en general, cualquier lenguaje que permita la conexión a servicios web de manera “fácil” debería usar siempre este método.

Sin embargo, hay lenguajes, como Clipper, donde el consumo de servicios web es muy difícil, o imposible. Uno podría pensar que en estos casos no es posible consumir los servicios web, pero si es posible.

Para estos casos la alternativa es usar un programa intermediario, un [middleware](https://es.wikipedia.org/wiki/Middleware), entre su sistema y LibreDTE. Este programa lo puede generar cada integrador en un lenguaje que si permita conexión a servicios web o bien se puede usar nuestro cliente de escritorio, es una buena idea usar el cliente nuestro porque ya está listo. Sin embargo, tendrá limitaciones en cuánto a qué podrá consumir desde los servicios web de LibreDTE.

MIDDLEWARE: mayo 2015.

El middleware permite unir su sistema con LibreDTE.

El cliente de escritorio de LibreDTE es un programa escrito en Python que se ejecuta en el computador donde está el sistema que se desea conectar. De tal forma que cuando el sistema desea generar un DTE, o cualquier otra comunicación con LibreDTE, se comunica con el middleware y este a su vez se comunicará con los servicios web de LibreDTE.

1. Lo **primero** es instalar este cliente, para esto las instrucciones están detalladas en [este enlace.](https://github.com/LibreDTE/libredte-cliente) Es importante seguir la guía paso a paso, sin saltarlos, ya que todos son importantes.

2. Una vez se tiene el cliente de escritorio instalado, lo **segundo** es definir el formato de los datos que se enviarán. Para esto hay 2 alternativas:

    * **Formato oficial en JSON, XML o YAML:** son los formatos oficiales de LibreDTE que tienen como principal ventaja usar la misma estructura de los archivos del SII. Por esta razón es muy recomendado usarlos, ya que usan la misma documentación del SII para facturas y boletas. A estos formatos podemos dar soporte, ya que los conocemos y son los que usamos nosotros.

    * **Formatos no oficiales:** LibreDTE permite el uso de formatos de otros proveedores, por ejemplo, algunos clientes usan el formato de Acepta. Sin embargo, en este caso no podemos dar el soporte, solo entregar la documentación, ya que no es un formato oficial de LibreDTE.

![Puzzle representando Middleware](https://www.libredte.cl/img/content/docs/integracion/api/integracion-desde-un-lenguaje-que-no-consume-servicios-web/integracion-desde-un-lenguaje-que-no-consume-servicios-web-1.png)

Ejemplo de boleta en formato YAML

Una nota muy importante para el formato YAML, los espacios son muy importantes, ya que esos definen la anidación. Por lo cual, si se usa ese formato, se debe respetar la indentación. [Acá hay detalles sobre YAML](https://es.wikipedia.org/wiki/YAML).

3. **Tercero**, qué modo usará para procesar los archivos, hay 2 alternativas:

    * **Llamar al cliente** desde el sistema que se está conectando. Esto se puede hacer con una llamada a “system”, “exec”, “run” o similar, según el lenguaje usado. En este caso se usa el comando dte_generar del cliente de LibreDTE. Tiene como ventaja que es el sistema el que inicia la ejecución del comando y entrega más control.

    * **Usar el modo monitor**, con el comando monitor. Este modo escaneará una carpeta y cuando detecte un archivo lo tomará y lo procesará. Requiere menos intervención al sistema, pero requiere tener el cliente funcionando siempre “escuchando” nuevos archivos. En general, no se aconseja esta forma, solo si no es posible usar la anterior.

4. **Cuarto**, listo. Si, esto es todo. Una vez que se tienen esos 3 pasos, la integración está completa.





---
Last updated on 20/08/2026

