Manual de Integración mediante API REST
Índice
Introducción

El presente manual tiene como objetivo dar a conocer el medio de integración desde una aplicación que soporte conexión mediante una API REST, con el servicio que ofrece la emisión y consulta de Documentos Tributarios Electrónicos (DTE) a través de Facturación.cl.


Para realizar la integración entre aplicaciones, se utiliza una API basada en el estilo REST, en la que las solicitudes y respuestas se intercambian en formato JSON sobre el protocolo HTTP.


Una API REST permite que distintos programas, desarrollados en diferentes lenguajes de programación y ejecutándose en diversas plataformas, puedan interactuar entre sí mediante solicitudes HTTP estándar (GET, POST) e intercambio de datos en formato JSON.

Clientes REST

Al estar basada en estándares abiertos (HTTP y JSON), existen múltiples clientes y librerías disponibles para la mayoría de las plataformas y lenguajes de programación que permiten hacer uso de la API, sin requerir herramientas especializadas.


A continuación, se presenta un listado de algunas de las herramientas y librerías que permiten realizar la integración con el servicio:

Plataforma Lenguaje Nombre Uso
Multiplataforma - Postman / Insomnia Pruebas manuales de los endpoints
Multiplataforma PHP Guzzle / cURL Consumo de servicios HTTP/JSON
Multiplataforma JavaScript fetch / axios Consumo de servicios HTTP/JSON
Multiplataforma Python requests Consumo de servicios HTTP/JSON
Microsoft Windows C#, VB.Net HttpClient Consumo de servicios HTTP/JSON
Multiplataforma Java HttpClient / OkHttp Consumo de servicios HTTP/JSON
URL del Servicio

Para acceder a la API REST debe utilizar como base la URL rest.facturacion.cl, seguida del recurso correspondiente:

 
https://rest.facturacion.cl/login
https://rest.facturacion.cl/wsds/procesar
https://rest.facturacion.cl/wsds/obtenerlink
https://rest.facturacion.cl/wsds/obtenerpdf
https://rest.facturacion.cl/wsds/getticket
https://rest.facturacion.cl/wsds/version
        
Modelo de Operación

- El primer paso consiste en construir el archivo de Integración, el cual será necesario para la emisión y generación de los Documentos Tributarios Electrónicos.


Actualmente se dispone de dos formatos, para los cuales existe documentación respectiva a fin de crearlos basados en ciertas estructuras de información:

Estos archivos deberán contener la información del documento a generar (Factura Electrónica, Guía de Despacho Electrónica, Nota de Crédito Electrónica, Nota de Débito Electrónica, etc.). Para más información respecto de los formatos de dichos archivos, se pueden consultar los manuales correspondientes de Facturación.cl.


- El segundo paso consiste en enviar dicho archivo al endpoint /wsds/procesar de la API, previa autenticación.


- El tercer paso y final consiste en obtener la representación impresa del documento tributario ya generado, en formato PDF o en los datos requeridos para impresión térmica.

Codificación

La información sensible o binaria debe ser enviada de manera codificada utilizando el formato de codificación Base64, el cual es un estándar disponible en múltiples lenguajes de programación.


En los casos en que se indique Codificado, tanto en los datos enviados como en los recibidos, se debe utilizar dicho algoritmo.

Autenticación

Para hacer uso del servicio, es necesario autenticarse mediante el endpoint POST /login, indicando las credenciales de acceso entregadas al inicio del proceso de integración, las que variarán dependiendo si se está en ambiente de pruebas o producción.


Como resultado de una autenticación exitosa, se obtiene un token de acceso que debe incluirse en cada petición posterior a los métodos protegidos, dentro de la cabecera Authorization.

Clase: credenciales de acceso
Campo Descripción Obligatorio
usuario Corresponde al nombre del usuario. SI
rut Corresponde al identificador (RUT) de su empresa. SI
clave Clave asignada a su empresa para este servicio. SI

Solicitud

POST /login
Content-Type: application/json
{
"usuario": "desisws",
"rut": "11111111-1",
"clave": "123456xx"
}

Respuesta exitosa

{
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9....."
}

Uso del token

El token debe incluirse en cada petición a los métodos protegidos, con el siguiente formato de cabecera:

Authorization: <token>

Nota:

El token tiene una vigencia de 24 horas. Transcurrido ese plazo, se debe solicitar uno nuevo mediante /login.

Métodos Incluidos

La API posee varios métodos (endpoints) los cuales es posible consumir mediante cualquier cliente HTTP, por lo que se entrega a continuación una breve descripción de los que se utilizarán en la integración.

Método: GET /wsds/procesar
Descripción:
Permite procesar el archivo de Integración y generar el DTE (Documento Tributario Electrónico).
Parámetro Descripción Codificado Obligatorio
file Archivo a procesar. SI SI
formato Corresponde al tipo de archivo enviado: 1 = Archivo de texto / 2 = Archivo XML. - SI
incluyelink Indica si se deben incluir en la respuesta los links de impresión (Original y Cedible si aplica). - NO
Respuesta:
Retorna un JSON con la información de resultado del archivo procesado.
Método: GET /wsds/obtenerlink
Descripción:
Obtiene el link de descarga del Documento Tributario una vez que este ha sido generado.
Parámetro Descripción Obligatorio
tpomov Corresponde al tipo de movimiento asociado al documento enviado: C = Compra / V = Venta / B = Boleta. SI
folio Corresponde al número de Folio del Documento. SI
tipo Corresponde al Tipo de Documento (Tipo DTE). SI
cedible Indica si se obtendrá la copia cedible del PDF. true = copia Cedible / false = copia Original. NO
Respuesta:
Retorna un JSON con el link de descarga codificado en Base64.
Método: GET /wsds/obtenerpdf
Descripción:
Obtiene el archivo PDF y/o su contenido en Base64 de un documento ya emitido.
Parámetro Descripción Obligatorio
tpomov Corresponde al tipo de movimiento asociado al documento enviado: C = Compra / V = Venta / B = Boleta. SI
folio Corresponde al número de Folio del Documento. SI
tipo Corresponde al Tipo de Documento (Tipo DTE). SI
cedible Indica si se obtendrá la copia cedible del PDF. true = copia Cedible / false = copia Original. NO
pdfbase64 Indica el formato de respuesta: 0 = Archivo PDF (link). 1 = Contenido del PDF en Base64. 2 = Ambos. NO
Respuesta:
Retorna un JSON con la información del documento solicitado.
Método: GET /wsds/version
Descripción:
Se utiliza para verificar la disponibilidad y versión del servicio.
Parámetro
No posee parámetros.
Respuesta:
Retorna un JSON con el número de versión.
Método: GET /wsds/getticket
Descripción:
Obtiene los datos necesarios para poder generar la salida de impresión de una Boleta o Factura Electrónica emitida en formato Ticket Térmico.
Parámetro Descripción Obligatorio
folio Corresponde al número de Folio del Documento. SI
tipo Corresponde al Tipo de Documento (Tipo DTE). SI
Respuesta:
Retorna un JSON con la información necesaria para ser enviada a la salida de impresión térmica.
Ejemplos

En el siguiente ejemplo, se muestra la manera de autenticarse y procesar el archivo de integración utilizando cURL desde la línea de comandos.

# 1. Autenticación
/* 1. Autenticación mediante cURL */
curl -X POST https://rest.facturacion.cl/login \
-H "Content-Type: application/json" \
-d '{"usuario":"desisws","rut": "11111111-1","clave":"123456xx"}'
/* 2. Procesar archivo de integracion (usando el token obtenido) */
curl -X GET "https://rest.facturacion.cl/wsds/procesar?file=<archivo_base64>&formato=1" \
-H "Authorization: <token>"
/* Ejemplo utilizando JavaScript con la API fetch */
const login = await fetch('https://rest.facturacion.cl/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ usuario: 'desisws', "rut": "11111111-1", clave: '123456xx' })
}).then(r => r.json());
const resultado = await fetch(
`https://rest.facturacion.cl/wsds/procesar?file=${archivoBase64}&formato=1`,
{ headers: { Authorization: login.token } }
).then(r => r.json());
console.log(resultado);
<?php
/* Ejemplo utilizando PHP con cURL */
$loginPayload = json_encode([
"usuario" => "desisws",
"rut" => "11111111-1",
"clave" => "123456xx"
]);
$ch = curl_init("https://rest.facturacion.cl/login");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $loginPayload);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: application/json"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$login = json_decode(curl_exec($ch), true);
$archivoBase64 = base64_encode(file_get_contents("integracion.txt"));
$ch2 = curl_init("https://rest.facturacion.cl/wsds/procesar?file=$archivoBase64&formato=1");
curl_setopt($ch2, CURLOPT_HTTPHEADER, ["Authorization: " . $login['token']]);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
$resultado = json_decode(curl_exec($ch2), true);
print_r($resultado);
?>
# Ejemplo utilizando Python con la librería requests
import requests, base64
login = requests.post("https://rest.facturacion.cl/login", json={
"usuario": "desisws", "rut": "11111111-1", "clave": "123456xx"
}).json()
with open("integracion.txt", "rb") as f:
archivo_base64 = base64.b64encode(f.read()).decode()
resultado = requests.get(
"https://rest.facturacion.cl/wsds/procesar",
params={"file": archivo_base64, "formato": 1},
headers={"Authorization": login["token"]}
).json()
print(resultado)
Respuesta Métodos Consumidos

El método /wsds/procesar retorna como respuesta un JSON con la información del resultado del o los documentos procesados.

Ejemplo de proceso exitoso:

{
    "WSPLANO": {
        "Resultado": "True",
        "Mensaje": "Proceso exitoso.",
        "Detalle": {
            "Documento": {
                "Folio": "126",
                "TipoDte": "33",
                "Operacion": "VENTA",
                "Fecha": "2008-09-12T15:55:09",
                "Resultado": "True",
                "urlOriginal": "<base64>",
                "urlCedible": "<base64>"
            }
        }
    }
}

Ejemplo de proceso con errores:

{
    "WSPLANO": {
        "Resultado": "True",
        "Mensaje": "Proceso exitoso.",
        "Detalle": {
            "Documento": {
                "Folio": "126",
                "TipoDte": "33",
                "Operacion": "VENTA",
                "Fecha": "2008-09-12T15:55:09",
                "Resultado": "False",
                "Error": "ERROR: Ya existe el Documento del TipoDTE = 33 con Folio = 126"
            }
        }
    }
}

Al consumir el método /wsds/obtenerlink, se retornará como respuesta un JSON que contendrá el link de descarga del documento electrónico en formato PDF, codificado en Base64, por lo cual deberá ser decodificado.

Ejemplo de resultado Obtener Link:

{
    "WSPLANO": {
        "Mensaje": "aHR0cDovL3d3dy5kb21pbmlvLmNvbS9zaXN0ZW1hL2Rlc2Nhcmdhci5waHA/cDE9YzI1YzBmYzllYiZwMj1HREkmbT1WJmk9JmM9ZmFsc2U="
    }
}

Una vez decodificado, se obtendrá un link similar al siguiente:

https://www.facturacion.cl/sistema/descargar.php?p1=c25c0fc9eb&p2=GDI&m=V&i&c=false

Desde dicho link, el cliente podrá descargar el archivo PDF del documento electrónico.

Al consumir el método /wsds/version, puede verificar que el servicio se encuentra disponible.

Ejemplo de resultado Versión:

{ "version": "x.x.x.x" }
Impresión Térmica

Consiste en un formato ticket de documento electrónico, desarrollado sin incluir logotipo, siendo la mejor alternativa en velocidad y bajo consumo de insumos de impresión, el cual requiere de una impresora térmica con capacidades gráficas con cabezal de entre 3 y 4 pulgadas.

Para acceder a este formato, la empresa debe contar con los módulos de ticket térmico (FETICKET y BETICKET) correspondientes a factura y boleta térmica contratados en Facturación.cl.

Con la impresión térmica puede integrar y controlar el proceso de impresión enviando los datos directamente a una impresora compatible con el lenguaje de impresión POS/ESC, consumiendo el método /wsds/getticket, indicando el folio y tipo de documento de la boleta o factura que desea imprimir.

Ej: Boleta Electrónica Afecta, Folio 100 ? parámetros tipo=39, folio=100.

Al ejecutar la llamada, retornará un JSON con los datos del ticket a imprimir de la siguiente forma:

{
    "WSPLANO": {
        "Head": "GyEBHSEBUkFaT04gU09DSUFMIFB08gUy....",
        "Foot": "DQpUSU1CUkUgRUxFQ1RST05JQ08gUy5J...",
        "TED": "PFRFRCB2ZXJzaW9uPSIxLjAiPjxERD48U..."
    }
}
* Nota: este método solo puede ser consumido si la empresa cuenta con el formato de ticket térmico de Boletas o Facturas Electrónicas.

Las tres variables retornadas (Head, Foot y TED) contienen su data codificada en Base64. Tras ser decodificadas, cada una contiene la siguiente información:

CampoContenido
HeadEncabezado del ticket (Formato: POS/ESC).
TEDTimbre Fiscal (Formato: RAW). Debe ser impreso como código bidimensional PDF417.
FootPie de página del ticket (Formato: POS/ESC).
Componentes de Impresión

Las siguientes modalidades de impresión, provistas por Facturación.cl, permiten incorporar la impresión de ticket utilizando un componente preconstruido, minimizando el desarrollo a realizar por el consumidor de la API.

1) Aplicación de Escritorio

Debe consumir el endpoint /wsds/getticket y obtener los datos de la boleta. Luego, desde su aplicación, realice una llamada por línea de comando a la librería de impresión provista por Facturación.cl, pasando como parámetros el nombre de la impresora local y las variables Head, Foot y TED tal como se reciben en la respuesta, sin decodificar.

2) Aplicación Web

Si su aplicación es una página web y desea incorporar la impresión térmica en ella, debe realizarlo mediante la llamada a una página que incrustará en su sitio el componente de impresión provisto por Facturación.cl, indicando los siguientes parámetros:

CampoDescripción
chkIdentificador de validación proporcionado por Facturación.cl (único y fijo).
iNombre de la impresora, codificado en Base64.
tTipo de documento (39: Boleta Electrónica / 41: Boleta No Afecta o Exenta Electrónica).
fFolio de la Boleta a imprimir.

La forma recomendada de incorporar este componente es mediante un iframe cuyo src se asocia dinámicamente a la URL del componente de impresión.


Nota:
esta opción de impresión requiere tener instalada la máquina virtual Java en el equipo del usuario, y solo funciona con un número limitado de impresoras homologadas por Facturación.cl.