---
title: "Emisión de Documentos"
description: ""
type: "academy"
category: "module"
tags: []
authors: [Anonymous]
date: "2026-08-27"
last_update: "2026-08-21"
time_minutes: 23
draft: false
unlisted: false
url: "https://www.stage.apigateway.cl/academy/integracion-para-la-emision-de-dte/emision-de-documentos"
---

# Emisión de Documentos




---

## Conocimientos Previos

Revisa los conocimientos previos necesarios para emisión de documentos

# Conocimientos Previos

Antes de comenzar con la emisión de documentos, es importante que tengas en cuenta los siguientes conocimientos previos:

---

## Configuración del Certificado Digital

### Formatos de Certificado

API Gateway acepta certificados en los siguientes formatos:

| Formato | Extensión | Descripción |
|---------|-----------|-------------|
| **PFX/P12** | `.pfx`, `.p12` | Formato binario con clave privada incluida |
| **PEM** | `.pem`, `.crt`, `.key` | Formato texto, certificado y clave separados |

### Conversión de Formatos

#### De PFX a PEM (Linux/Mac)

```bash
# Extraer certificado
openssl pkcs12 -in certificado.pfx -clcerts -nokeys -out cert.pem

# Extraer clave privada
openssl pkcs12 -in certificado.pfx -nocerts -nodes -out key.pem

# Verificar certificado
openssl x509 -in cert.pem -text -noout
```

#### De PFX a PEM (Windows - PowerShell)

```powershell
# Usando OpenSSL para Windows
.\openssl.exe pkcs12 -in certificado.pfx -clcerts -nokeys -out cert.pem
.\openssl.exe pkcs12 -in certificado.pfx -nocerts -nodes -out key.pem
```

## Ambientes de Trabajo

API Gateway ofrece dos ambientes principales para la emisión de DTEs:

### 1. Ambiente de Certificación (Pruebas)

| Característica | Detalle |
|----------------|---------|
| **URL Base** | `https://legacy.apigateway.cl` |
| **Parámetro** | `?certificacion=1` |
| **Propósito** | Pruebas y desarrollo |
| **Datos** | Ficticios, sin validez legal |
| **Límites** | Más flexibles |
| **SII** | Ambiente de certificación del SII |

**Ejemplo de uso**:
```
POST https://legacy.apigateway.cl/api/v1/libredte/dte/envios/enviar?certificacion=1
```

### 2. Ambiente de Producción

| Característica | Detalle |
|----------------|---------|
| **URL Base** | `https://legacy.apigateway.cl` |
| **Parámetro** | `?certificacion=0` |
| **Propósito** | Emisión real de DTEs |
| **Datos** | Reales con validez legal |
| **Límites** | Según plan contratado |
| **SII** | Ambiente de producción del SII |

**Ejemplo de uso**:
```
POST https://legacy.apigateway.cl/api/v1/libredte/dte/envios/enviar?certificacion=0
```

---

## Configuración del Entorno de Desarrollo

### Variables de Entorno

Crea un archivo `.env` para gestionar configuraciones:

```env
# API Gateway
API_GATEWAY_URL=https://legacy.apigateway.cl
API_GATEWAY_ENV=0 # 0: Producción, 1: Certificación

# Certificados
CERT_PATH=./certs/cert.pem
KEY_PATH=./certs/key.pem

# Logs
LOG_LEVEL=DEBUG
LOG_PATH=./logs/
```


    
---

## Generar XML de un DTE

Aprende a generar el XML de un documento tributario electrónico usando API Gateway

# Generar XML de un DTE

El primer paso para emitir un DTE es generar su representación en XML. API Gateway simplifica este proceso permitiéndote enviar los datos en formato JSON y encargándose de toda la complejidad del formato XML requerido por el SII.

---

## Endpoint y Parámetros

### URL del Servicio

```http
[POST] https://legacy.apigateway.cl/api/v1/libredte/dte/documentos/generar
```

### Parámetros de Query

| Parámetro | Tipo | Default | Descripción |
|-----------|------|---------|-------------|
| `normalizar` | int | `1` | `0`: No aplica normalización automática&lt;br/&gt;`1`: Aplica normalización automática |
| `formato` | string | `json` | `json` formato por defecto en JSON&lt;br/&gt;`xml` igual que `json` pero en formato XML&lt;br/&gt;`yaml` igual que `json` pero en formato YAML&lt;br/&gt;`JSONString` String JSON que contiene el JSON completo&lt;br/&gt;`Acepta.Normal` todos los DTE menos boletas ni exportación&lt;br/&gt;`Acepta.Boleta` para generar boletas&lt;br/&gt;`FacturacionCL.XML` |
| `gzip` | int | `0` | `0`: Sin comprimir&lt;br/&gt;`1`: Comprime la respuesta |
| `retry` | int | `1` | Número de reintentos si falla |

### URL Típica de Uso

```
https://legacy.apigateway.cl/api/v1/libredte/dte/documentos/generar?normalizar=1&amp;formato=json
```

---

## Estructura del Request


El formato del objeto JSON del DTE corresponde a los mismos nombres que
el XML del DTE que se desea emitir, con los mismos tipos de datos y
restricciones. Puede encontrar más información sobre estos campos en la
documentación del SII en:


- Documentos tributarios electrónicos (no boletas):

    - [Descripción del formato de DTE](https://www.sii.cl/factura_electronica/factura_mercado/formato_dte_202602.pdf)

    - [Diagrama del XML de DTE](https://www.sii.cl/factura_electronica/factura_mercado/diagrama_dte.zip)

- Boletas:

    - [Descripción del formato de boletas](https://www.sii.cl/factura_electronica/factura_mercado/boletas_elec_0720_3.pdf)

    - [Diagrama del XML de boletas](https://www.sii.cl/factura_electronica/factura_mercado/diag_boleta_0920.zip)


La documentación completa, y actualizada, está en la [web del
SII](https://www.sii.cl/factura_electronica/factura_mercado/instructivo.htm).


Es necesario y **obligatorio** que quien desee consumir este recurso
**conozca los campos que debe enviar** y los posibles valores de dichos
campos. Es responsabilidad de quien consume los recursos de la API que
los datos sean los que el SII espera. Por ejemplo, se deben considerar
formatos (K con mayúscula en RUT) o largos (dirección receptor máximo 70
caracteres).


Tenemos algunos [ejemplos de archivos
YAML](https://github.com/LibreDTE/libredte-lib-core/tree/master/tests/fixtures/yaml/documentos_ok)
con los casos más comunes de documentos tributarios electrónicos. Otros
casos deben ser construídos utilizando la documentación oficial del SII
previamente mencionada.


Adicionalmente al formato JSON, existen otros formatos que se pueden
utilizar como entrada de datos para emitir el DTE. Los formatos XML y
YAML siguen la misma regla que el formato JSON. Si necesitas ayuda con
alguno de los otros formatos [abre un ticket de
soporte](https://www.apigateway.cl/help).


**Formatos diferentes a JSON**: si el formato es diferente a `json` se
deben enviar codificados en base64 los datos del documento.
Adicionalmente, el string base64 debe ser enviado como un string JSON.


Ejemplo de los datos a enviar para un DTE con formato JSONString:


```

ewogICAgIkVuY2FiZXphZG8iOiB7CiAgICAgICAgIklkRG9jIjogewogICAgICAgICAgICAiVGlwb0RURSI6IDM5CiAgICAgICAgfSwKICAgICAgICAiRW1pc29yIjogewogICAgICAgICAgICAiUlVURW1pc29yIjogIjc2MTkyMDgzLTkiCiAgICAgICAgfSwKICAgICAgICAiUmVjZXB0b3IiOiB7CiAgICAgICAgICAgICJSVVRSZWNlcCI6ICI2NjY2NjY2Ni02IgogICAgICAgIH0KICAgIH0sCiAgICAiRGV0YWxsZSI6IFsKICAgICAgICB7CiAgICAgICAgICAgICJObWJJdGVtIjogIkNvbmVjdG9yZXMgUko0NSIsCiAgICAgICAgICAgICJRdHlJdGVtIjogNDUwLAogICAgICAgICAgICAiUHJjSXRlbSI6IDcwCiAgICAgICAgfQogICAgXQp9Cg==

```

El ambiente al que se envía el XML al SII estará determinado por el
ambiente del CAF que se está usando para timbrar el DTE.


El CAF se envía en el campo `caf` del cuerpo y es el XML del CAF
autorizado por el SII codificado en base64.


### Estructura Base

Todo request debe incluir:

```json
{
    &quot;auth&quot;: {
        &quot;cert&quot;: {
            &quot;cert-data&quot;: &quot;-----BEGIN CERTIFICATE-----\nMIIG...[tu certificado]...XYZ\n-----END CERTIFICATE-----&quot;,
            &quot;pkey-data&quot;: &quot;-----BEGIN PRIVATE KEY-----\nMIIE...[tu llave privada]...ABC\n-----END PRIVATE KEY-----&quot;
        }
    },
    &quot;dte&quot;: {
        // Contenido del documento
    },
    &quot;resolucion&quot;: {
        &quot;fecha&quot;: &quot;YYYY-MM-DD&quot;,
        &quot;numero&quot;: 0
    },
    &quot;caf&quot;: &quot;contenido_caf_base64&quot;
}
```

### Componentes Principales

| Campo | Requerido | Descripción |
|-------|-----------|-------------|
| `auth` | ✅ | Autenticación con certificado |
| `dte` | ✅ | Datos del documento a generar |
| `resolucion` | ✅ | Resolución de autorización SII |
| `caf` | ✅ | Código de Autorización de Folios |

---

## Ejemplos por Tipo de Documento

### Ejemplo 1: Boleta Electrónica (39)

```json
{
    &quot;auth&quot;: {
        &quot;cert&quot;: {
            &quot;cert-data&quot;: &quot;-----BEGIN CERTIFICATE-----\nMIIG...[tu certificado]...XYZ\n-----END CERTIFICATE-----&quot;,
            &quot;pkey-data&quot;: &quot;-----BEGIN PRIVATE KEY-----\nMIIE...[tu llave privada]...ABC\n-----END PRIVATE KEY-----&quot;
        }
    },
    &quot;dte&quot;: {
        &quot;Encabezado&quot;: {
            &quot;IdDoc&quot;: {
                &quot;TipoDTE&quot;: 39,
                &quot;FchEmis&quot;: &quot;2024-03-15&quot;
            },
            &quot;Emisor&quot;: {
                &quot;RUTEmisor&quot;: &quot;76192083-9&quot;
            },
            &quot;Receptor&quot;: {
                &quot;RUTRecep&quot;: &quot;66666666-6&quot;,
                &quot;RznSocRecep&quot;: &quot;Consumidor Final&quot;
            }
        },
        &quot;Detalle&quot;: [
            {
                &quot;NmbItem&quot;: &quot;Producto de ejemplo&quot;,
                &quot;QtyItem&quot;: 2,
                &quot;PrcItem&quot;: 5000  // Precio con IVA incluido
            }
        ]
    },
    &quot;resolucion&quot;: {
        &quot;fecha&quot;: &quot;2019-12-23&quot;,
        &quot;numero&quot;: 0
    },
    &quot;caf&quot;: &quot;PD94bWwgdmVyc2...&quot;
}
```

### Ejemplo 2: Factura Electrónica (33)

```json
{
    &quot;auth&quot;: {
        &quot;cert&quot;: {
            &quot;cert-data&quot;: &quot;-----BEGIN CERTIFICATE-----\nMIIG...[tu certificado]...XYZ\n-----END CERTIFICATE-----&quot;,
            &quot;pkey-data&quot;: &quot;-----BEGIN PRIVATE KEY-----\nMIIE...[tu llave privada]...ABC\n-----END PRIVATE KEY-----&quot;
        }
    },
    &quot;dte&quot;: {
        &quot;Encabezado&quot;: {
            &quot;IdDoc&quot;: {
                &quot;TipoDTE&quot;: 33,
                &quot;FchEmis&quot;: &quot;2024-03-15&quot;
            },
            &quot;Emisor&quot;: {
                &quot;RUTEmisor&quot;: &quot;76192083-9&quot;,
                &quot;RznSoc&quot;: &quot;Mi Empresa SpA&quot;,
                &quot;GiroEmis&quot;: &quot;Servicios Informáticos&quot;,
                &quot;Acteco&quot;: 620100,
                &quot;DirOrigen&quot;: &quot;Av. Principal 123&quot;,
                &quot;CmnaOrigen&quot;: &quot;Providencia&quot;
            },
            &quot;Receptor&quot;: {
                &quot;RUTRecep&quot;: &quot;11111111-1&quot;,
                &quot;RznSocRecep&quot;: &quot;Cliente Empresa SA&quot;,
                &quot;GiroRecep&quot;: &quot;Comercio&quot;,
                &quot;DirRecep&quot;: &quot;Calle Comercio 456&quot;,
                &quot;CmnaRecep&quot;: &quot;Santiago&quot;
            }
        },
        &quot;Detalle&quot;: [
            {
                &quot;NmbItem&quot;: &quot;Servicio de Desarrollo&quot;,
                &quot;DscItem&quot;: &quot;Desarrollo de módulo facturación&quot;,
                &quot;QtyItem&quot;: 1,
                &quot;UnmdItem&quot;: &quot;Unidad&quot;,
                &quot;PrcItem&quot;: 1000000  // Precio neto (sin IVA)
            },
            {
                &quot;NmbItem&quot;: &quot;Soporte Técnico&quot;,
                &quot;QtyItem&quot;: 3,
                &quot;UnmdItem&quot;: &quot;Horas&quot;,
                &quot;PrcItem&quot;: 50000
            }
        ]
    },
    &quot;resolucion&quot;: {
        &quot;fecha&quot;: &quot;2019-12-23&quot;,
        &quot;numero&quot;: 0
    },
    &quot;caf&quot;: &quot;...&quot;
}
```

### Ejemplo 3: Nota de Crédito (61)

```json
{
    &quot;auth&quot;: {
        &quot;cert&quot;: {
            &quot;cert-data&quot;: &quot;-----BEGIN CERTIFICATE-----\nMIIG...[tu certificado]...XYZ\n-----END CERTIFICATE-----&quot;,
            &quot;pkey-data&quot;: &quot;-----BEGIN PRIVATE KEY-----\nMIIE...[tu llave privada]...ABC\n-----END PRIVATE KEY-----&quot;
        }
    },
    &quot;dte&quot;: {
        &quot;Encabezado&quot;: {
            &quot;IdDoc&quot;: {
                &quot;TipoDTE&quot;: 61,
                &quot;FchEmis&quot;: &quot;2024-03-15&quot;
            },
            &quot;Emisor&quot;: {
                &quot;RUTEmisor&quot;: &quot;76192083-9&quot;
            },
            &quot;Receptor&quot;: {
                &quot;RUTRecep&quot;: &quot;11111111-1&quot;,
                &quot;RznSocRecep&quot;: &quot;Cliente Empresa SA&quot;
            },
            &quot;Totales&quot;: {
                &quot;MntNeto&quot;: 100000,
                &quot;IVA&quot;: 19000,
                &quot;MntTotal&quot;: 119000
            }
        },
        &quot;Detalle&quot;: [
            {
                &quot;NmbItem&quot;: &quot;Anulación de servicio&quot;,
                &quot;QtyItem&quot;: 1,
                &quot;PrcItem&quot;: 100000
            }
        ],
        &quot;Referencia&quot;: [
            {
                &quot;NroLinRef&quot;: 1,
                &quot;TpoDocRef&quot;: &quot;33&quot;,
                &quot;FolioRef&quot;: &quot;123&quot;,
                &quot;FchRef&quot;: &quot;2024-03-10&quot;,
                &quot;RazonRef&quot;: &quot;Anula factura por error en monto&quot;
            }
        ]
    },
    &quot;resolucion&quot;: {
        &quot;fecha&quot;: &quot;2019-12-23&quot;,
        &quot;numero&quot;: 0
    },
    &quot;caf&quot;: &quot;...&quot;
}
```

---

## Normalización Automática

### ¿Qué hace la normalización?

Cuando `normalizar=1`, API Gateway automáticamente:

1. **Calcula totales**: IVA, montos netos, totales
2. **Numera líneas**: Asigna NroLinDet si no existe
3. **Completa campos**: Agrega campos opcionales útiles
4. **Valida coherencia**: Verifica que los montos cuadren

### Ejemplo: Con y Sin Normalización

#### Con Normalización (`normalizar=1`)
```json
{
    &quot;Detalle&quot;: [
        {
            &quot;NmbItem&quot;: &quot;Producto&quot;,
            &quot;QtyItem&quot;: 2,
            &quot;PrcItem&quot;: 1000
        }
    ]
}
```

#### Sin Normalización (`normalizar=0`)
```json
{
    &quot;Detalle&quot;: [
        {
            &quot;NroLinDet&quot;: 1,
            &quot;NmbItem&quot;: &quot;Producto&quot;,
            &quot;QtyItem&quot;: 2,
            &quot;PrcItem&quot;: 1000,
            &quot;MontoItem&quot;: 2000
        }
    ],
    &quot;Encabezado&quot;: {
        &quot;Totales&quot;: {
            &quot;MntNeto&quot;: 2000,
            &quot;IVA&quot;: 380,
            &quot;MntTotal&quot;: 2380
        }
    }
}
```

---

## Estructura de la Respuesta

### Respuesta Exitosa

La respuesta incluye 3 XMLs diferentes en Base64:

```json
{
    &quot;dte&quot;: &quot;PD94bWwgdmVyc2lvbj0iMS4w...&quot;,     // XML del DTE individual
    &quot;sii&quot;: &quot;PD94bWwgdmVyc2lvbj0iMS4w...&quot;,     // XML para enviar al SII
    &quot;receptor&quot;: &quot;PD94bWwgdmVyc2lvbj0iMS4w...&quot; // XML para el receptor
}
```
---

## Errores Comunes y Soluciones

### Error: RUT Inválido

```json
{
    &quot;error&quot;: {
        &quot;code&quot;: &quot;xxx&quot;,
        &quot;message&quot;: &quot;RUT del receptor no es válido&quot;
    }
}
```

**Solución**: Verificar formato correcto: `11111111-1` (sin puntos, con guión)

### Error: CAF Faltante

```json
{
    &quot;error&quot;: {
        &quot;code&quot;: &quot;xxx&quot;,
        &quot;message&quot;: &quot;CAF requerido para el tipo de documento&quot;
    }
}
```

**Solución**: Incluir el CAF en base64 en el campo `caf`

### Error: Fecha Fuera de Rango

```json
{
    &quot;error&quot;: {
        &quot;code&quot;: &quot;xxx&quot;,
        &quot;message&quot;: &quot;Fecha de emisión fuera del rango permitido&quot;
    }
}
```

**Solución**: La fecha debe ser del día actual o hasta 2 meses atrás


    
---

## Enviar XML al SII

Aprende cómo enviar el XML generado al Servicio de Impuestos Internos

# Enviar XML al SII

Una vez generado el XML del DTE, el siguiente paso crítico es enviarlo al SII. Este proceso valida tu documento y, si es correcto, lo incorpora al sistema tributario oficial. El SII responde con un Track ID que permite dar seguimiento al estado del documento.

Para enviar un XML al SII se debe enviar la firma electrónica al servicio web y será el RUT asociado a la firma electrónica el que se usará para identificar el envío ante el SII (&quot;rut envío&quot;), ya que es el RUT de la persona que envía el XML, no el RUT de la empresa emisora del XML.

---

## Endpoint y Parámetros

### URL del Servicio

```http
[POST] https://legacy.apigateway.cl/api/v1/libredte/dte/envios/enviar
```

### Parámetros de Query

| Parámetro | Tipo | Default | Descripción |
|-----------|------|---------|-------------|
| `certificacion` | int | `0` | `1`: Ambiente de certificación&lt;br&gt;`0`: Ambiente de producción |
| `gzip` | int | `0` | `1`: Enviar comprimido&lt;br&gt;`0`: Enviar sin comprimir |
| `retry` | int | `1` | Cantidad de intentos de envío |

### URL Típica de Uso

```
https://legacy.apigateway.cl/api/v1/libredte/dte/envios/enviar?certificacion=0&amp;retry=3
```

---

## Estructura del Request

- El XML a enviar debe estar codificado en base64.
- Permite enviar al SII cualquier tipo de DTE (incluyendo boletas).

### Body de la Solicitud

```json
{
    &quot;auth&quot;: {
        &quot;cert&quot;: {
            &quot;cert-data&quot;: &quot;-----BEGIN CERTIFICATE-----\nMIIG...[tu certificado]...XYZ\n-----END CERTIFICATE-----&quot;,
            &quot;pkey-data&quot;: &quot;-----BEGIN PRIVATE KEY-----\nMIIE...[tu llave privada]...ABC\n-----END PRIVATE KEY-----&quot;
        }
    },
    &quot;emisor&quot;: &quot;76192083-9&quot;,
    &quot;xml&quot;: &quot;PD94bWwgdmVyc2lvbj0iMS4w...&quot;
}
```

### Campos Requeridos

| Campo | Tipo | Descripción |
|-------|------|-------------|
| `auth` | object | Autenticación con certificado digital |
| `emisor` | string | RUT del emisor (con guión) |
| `xml` | string | XML del campo `sii` de la respuesta anterior |

&gt; [!INFO] Importante
&gt;
&gt; El campo `xml` debe contener el contenido del campo `sii` obtenido en el paso anterior, NO el campo `dte`.

---

## Estructura de la Respuesta

### Respuesta Exitosa

```json
{
    &quot;track_id&quot;: 4753411374,
    &quot;certificacion&quot;: 0
}
```

### Componentes de la Respuesta

| Campo | Tipo | Descripción |
|-------|------|-------------|
| `track_id` | integer | Identificador único del envío |
| `certificacion` | integer | Ambiente donde se procesó |

---

## Conceptos Clave

### ¿Qué es el Track ID?

El Track ID es un número único que:
- Identifica tu envío en el sistema del SII
- Permite consultar el estado del procesamiento
- Es indispensable para el seguimiento
- Debe ser almacenado en tu sistema

---

## Tiempos y Estrategias

### Estrategia de Reintentos

El parámetro `retry` permite reintentos automáticos:

```
?retry=3  // Intentará hasta 3 veces si falla
```

**Cuándo es útil**:
- Problemas de conectividad temporales
- Alta carga en el SII
- Timeouts esporádicos

---

## Manejo de Errores

### Errores Comunes

| Error | Causa | Solución |
|-------|-------|----------|
| **Timeout** | SII no responde a tiempo | Aumentar timeout, reintentar |
| **XML inválido** | Estructura incorrecta | Verificar que se usa campo `sii` |
| **Certificado rechazado** | Certificado no autorizado | Verificar vigencia y permisos |
| **Emisor no coincide** | RUT emisor diferente | Verificar RUT en el XML |

### Respuesta de Error Típica

```json
{
    &quot;code&quot;: 400,
    &quot;message&quot;: &quot;No fue posible enviar el XML al SII.&quot;,
    &quot;logs&quot;: [
        {
            &quot;code&quot;: 52,
            &quot;msg&quot;: &quot;Falló el envío automático al SII. Empty reply from server&quot;,
            &quot;file&quot;: null,
            &quot;line&quot;: null,
            &quot;function&quot;: null,
            &quot;class&quot;: null,
            &quot;type&quot;: null,
            &quot;args&quot;: null
        }
    ]
}
```

---

## Mejores Prácticas

### 1. Almacenar Track ID Inmediatamente

Siempre guarda el Track ID en tu base de datos junto con:
- Tipo de documento
- Folio
- Fecha de envío
- RUT emisor
- RUT receptor

### 2. Logs de Envío

Registra cada intento de envío con:
- Timestamp
- Track ID (si se obtiene)
- Código de respuesta
- Mensajes de error
- Número de intento

### 3. Manejo de Contingencias

Si el SII no está disponible:
1. Guardar el XML localmente
2. Intentar envío cada 30 minutos
3. Notificar al administrador
4. Mantener registro de pendientes

---

## Pruebas en Certificación

### Usar Ambiente de Certificación

Para pruebas, agrega `certificacion=1`:

```
https://legacy.apigateway.cl/api/v1/libredte/dte/envios/enviar?certificacion=1
```

### Ventajas del Ambiente de Certificación

- Sin consecuencias tributarias
- Respuestas más rápidas
- Ideal para pruebas de integración
- Misma estructura que producción


    
---

## Consultar Estado del Envío

Aprende a consultar el estado de tus documentos enviados al SII

# Consultar Estado del Envío

Después de enviar un documento al SII y recibir un Track ID, es fundamental consultar el estado del procesamiento. El SII no procesa los documentos instantáneamente, por lo que debes implementar un mecanismo de consulta para conocer el resultado final.

---

## Endpoint y Estructura

### URL del Servicio

```http
[POST] https://legacy.apigateway.cl/api/v1/libredte/dte/envios/estado
```

### Parámetro de Query

| Parámetro | Tipo | Default | Descripción |
|-----------|------|---------|-------------|
| `certificacion` | int | `0` | `1`: Ambiente de certificación&lt;br&gt;`0`: Ambiente de producción |

---

## Estructura del Request

### Para Documentos NO Boletas

Para facturas, guías de despacho, notas de crédito/débito:

```json
{
    &quot;auth&quot;: {
        &quot;cert&quot;: {
            &quot;cert-data&quot;: &quot;-----BEGIN CERTIFICATE-----\nMIIG...[tu certificado]...XYZ\n-----END CERTIFICATE-----&quot;,
            &quot;pkey-data&quot;: &quot;-----BEGIN PRIVATE KEY-----\nMIIE...[tu llave privada]...ABC\n-----END PRIVATE KEY-----&quot;
        }
    },
    &quot;emisor&quot;: &quot;76192083-9&quot;,
    &quot;track_id&quot;: &quot;82484882&quot;
}
```

### Para Boletas Electrónicas

Las boletas requieren información adicional:

```json
{
    &quot;auth&quot;: {
        &quot;cert&quot;: {
            &quot;cert-data&quot;: &quot;-----BEGIN CERTIFICATE-----\nMIIG...[tu certificado]...XYZ\n-----END CERTIFICATE-----&quot;,
            &quot;pkey-data&quot;: &quot;-----BEGIN PRIVATE KEY-----\nMIIE...[tu llave privada]...ABC\n-----END PRIVATE KEY-----&quot;
        }
    },
    &quot;emisor&quot;: &quot;76192083-9&quot;,
    &quot;track_id&quot;: 14112302429,
    &quot;dte&quot;: 39,
    &quot;folio&quot;: 112
}
```

### Diferencias Clave

| Tipo Documento | Campos Requeridos | Observación |
|----------------|-------------------|-------------|
| **Facturas y otros** | `emisor`, `track_id` | Consulta simple |
| **Boletas** | `emisor`, `track_id`, `dte`, `folio` | Requiere tipo y folio |

---

## Estructura de la Respuesta

### Respuesta Típica

```json
{
    &quot;track_id&quot;: &quot;82484882&quot;,
    &quot;certificacion&quot;: 0,
    &quot;revision_estado&quot;: &quot;DOK - Documento Recibido&quot;,
    &quot;revision_detalle&quot;: null
}
```

### Respuesta con Error

```json
{
    &quot;track_id&quot;: &quot;82484883&quot;,
    &quot;certificacion&quot;: 0,
    &quot;revision_estado&quot;: &quot;RCT - Rechazado por Error en Caratula&quot;,
    &quot;revision_detalle&quot;: &quot;ERROR EN RUT RECEPTOR: DIGITO VERIFICADOR INCORRECTO&quot;
}
```

---

## Estados Posibles

### Estados Principales (No Boletas)

| Estado | Código | Significado | Acción Requerida |
|--------|--------|-------------|------------------|
| **Aceptado** | DOK | Documento procesado correctamente | Generar PDF, notificar |
| **Aceptado con Reparos** | DNK | Válido pero con observaciones | Revisar reparos, continuar |
| **Rechazado** | RCH, RCT, RCF | Documento con errores | Corregir y reenviar |
| **En Proceso** | EPR | Aún procesando | Consultar nuevamente |

### Códigos de Rechazo Detallados

| Código | Descripción | Causa Común |
|--------|-------------|-------------|
| **RCH** | Rechazado por Error en Schema | Estructura XML incorrecta |
| **RCT** | Rechazado por Error en Carátula | Datos del envío incorrectos |
| **RCF** | Rechazado por Error en Firma | Problema con certificado digital |
| **SOK** | Schema Validado | Primera validación OK (temporal) |

---

## Estados de Boletas Electrónicas

### Consulta de Boletas

Para boletas, el campo `folio` tiene un comportamiento especial:

| Valor `folio` | Comportamiento | Uso Recomendado |
|---------------|----------------|-----------------|
| Número específico | Busca ese folio exacto | Consulta individual |
| `0` o no incluido | Estado general del envío | Consulta masiva |

### Particularidades de Boletas

- Pueden enviarse múltiples boletas en un solo envío
- El estado general puede diferir del estado individual
- Importante verificar cada folio si hay problemas

![Estados Boletas Electrónicas](https://www.apigateway.cl/img/content/academy/integracion-para-la-emision-de-dte/estados_boleta_electronica.jpg &quot;Estados Generales para una boleta electrónica&quot;)


    
---

## Generar PDF del DTE

Aprende a generar la representación visual en PDF de tus documentos tributarios

# Generar PDF del DTE (Opcional)

Aunque el XML es el documento con validez legal, el PDF es fundamental para la experiencia del receptor. Es lo que el cliente ve, imprime y archiva. API Gateway ofrece múltiples opciones de personalización para que el PDF refleje tu imagen corporativa y cumpla con los requisitos legales.

---

## Endpoint del Servicio

### URL

```http
[POST] https://legacy.apigateway.cl/api/v1/libredte/dte/documentos/pdf
```

### Características

- El XML debe enviarse codificado en Base64
- Acepta XMLs individuales o múltiples
- Respuesta en formato PDF binario
- Sin parámetros en la URL

---

## Estructura Básica del Request

### Request Mínimo

```json
{
    &quot;formato&quot;: &quot;general&quot;,
    &quot;xml&quot;: &quot;PD94bWwgdmVyc2lvbj0iMS4w...&quot;
}
```

### Request con Opciones

```json
{
    &quot;formato&quot;: &quot;general&quot;,
    &quot;cedible&quot;: true,
    &quot;copias_tributarias&quot;: 1,
    &quot;copias_cedibles&quot;: 1,
    &quot;webVerificacion&quot;: false,
    &quot;xml&quot;: &quot;PD94bWwgdmVyc2lvbj0iMS4w...&quot;
}
```

---

## Formatos Disponibles

### Tipos de Formato

| Formato | Descripción | Ideal para | Características |
|---------|-------------|------------|-----------------|
| `estandar` | Formato LibreDTE | Uso general | Diseño limpio y funcional |
| `general` | Formato Empresarial | Empresas | Más opciones de personalización |
| `servicios_basicos` | Servicios básicos | Servicios | Incluye gráficos de consumo |

---

## Opciones de Configuración

### Parámetros Principales

| Parámetro | Tipo | Default | Descripción |
|-----------|------|---------|-------------|
| `formato` | string | `estandar` | Tipo de formato a usar |
| `cedible` | boolean | `false` | Incluir copia cedible |
| `copias_tributarias` | integer | `1` | Número de copias tributarias |
| `copias_cedibles` | integer | `0` | Número de copias cedibles |
| `webVerificacion` | boolean | `true` | Incluir URL de verificación |
| `compress` | boolean | `false` | Para múltiples DTEs en ZIP |

---

## Personalización Avanzada

### Estructura del Objeto `extra`

```json
{
    &quot;extra&quot;: {
        &quot;emisor&quot;: {
            &quot;razonsocial&quot;: true,
            &quot;giro&quot;: true,
            &quot;direccion&quot;: true,
            &quot;telefono&quot;: false,
            &quot;web&quot;: false,
            &quot;email&quot;: false
        },
        &quot;detalle&quot;: {
            &quot;posicion&quot;: 0,
            &quot;fuente&quot;: 9,
            &quot;ancho&quot;: {
                &quot;CdgItem&quot;: 30,
                &quot;QtyItem&quot;: 15,
                &quot;PrcItem&quot;: 22,
                &quot;DescuentoMonto&quot;: 22,
                &quot;RecargoMonto&quot;: 22,
                &quot;MontoItem&quot;: 22
            }
        }
    }
}
```

### Opciones del Emisor

| Campo | Tipo | Descripción |
|-------|------|-------------|
| `razonsocial` | boolean | Mostrar razón social |
| `giro` | boolean | Mostrar giro comercial |
| `direccion` | boolean | Mostrar dirección |
| `telefono` | boolean | Incluir teléfono |
| `web` | boolean | Incluir sitio web |
| `email` | boolean | Incluir email |

---

## Imágenes y Logos

### Configuración de Imágenes

```json
{
    &quot;extra&quot;: {
        &quot;img&quot;: {
            &quot;logo&quot;: &quot;base64_del_logo&quot;,
            &quot;cotizacion&quot;: &quot;base64_imagen_cotizacion&quot;,
            &quot;historial&quot;: &quot;base64_grafico_historial&quot;,
            &quot;pie&quot;: &quot;base64_imagen_pie&quot;
        }
    }
}
```
---

## Códigos de Barra

### Opciones Disponibles

```json
{
    &quot;extra&quot;: {
        &quot;codigo_barras&quot;: {
            &quot;cotizacion&quot;: true,
            &quot;dte&quot;: true,
            &quot;incluirrut&quot;: false
        }
    }
}
```

| Opción | Descripción | Contenido |
|--------|-------------|-----------|
| `cotizacion` | Código para cotización | Número de cotización |
| `dte` | Código del documento | TED (Timbre Electrónico) |
| `incluirrut` | RUT en código | Agrega RUT receptor |

---

## Personalización de Colores

### Configuración

```json
{
    &quot;extra&quot;: {
        &quot;color&quot;: {
            &quot;razonsocial&quot;: [14, 66, 170]
        }
    }
}
```

### Formato RGB

- Valores: Array de 3 números [R, G, B]
- Rango: 0-255 para cada componente
- Ejemplo: [14, 66, 170] = Azul corporativo

---

## Gráficos de Historial

### Para Servicios Básicos

```json
{
    &quot;extra&quot;: {
        &quot;historial&quot;: {
            &quot;titulo&quot;: &quot;Consumo de Agua Potable&quot;,
            &quot;datos&quot;: {
                &quot;Febrero&quot;: 12,
                &quot;Marzo&quot;: 11,
                &quot;Abril&quot;: 12,
                &quot;Mayo&quot;: 10.5,
                &quot;Junio&quot;: 4,
                &quot;Julio&quot;: 5
            }
        }
    }
}
```

### Características del Gráfico

- Tipo: Barras verticales
- Máximo: 12 meses
- Unidades: Numéricas
- Colores: Automáticos

---

## Papel Continuo

### Configuración

Para puntos de venta con impresoras térmicas:

```json
{
    &quot;formato&quot;: &quot;estandar&quot;,
    &quot;papelContinuo&quot;: 80
}
```

### Anchos Disponibles

| Ancho | Uso Típico | Impresora |
|-------|------------|-----------|
| `57` | Tickets pequeños | Móviles |
| `75` | Estándar | POS común |
| `80` | Más común | Mayoría POS |
| `110` | Documentos amplios | Especiales |

---

## Múltiples DTEs

### Generar ZIP con Varios PDFs

```json
{
    &quot;compress&quot;: true,
    &quot;xml&quot;: &quot;XML_con_multiples_DTEs_base64&quot;
}
```

### Consideraciones

- Retorna archivo ZIP
- Un PDF por cada DTE
- Nombres: `tipo_folio.pdf`


    
---

## Gestión de Códigos de Autorización de Folios (CAF)

Aprende a automatizar la gestión de CAF con API Gateway para emisión de documentos tributarios

# Gestión de Códigos de Autorización de Folios (CAF)

Los Códigos de Autorización de Folios (CAF) son archivos XML autorizados por el SII que contienen el rango de folios permitidos para emitir documentos tributarios electrónicos. API Gateway permite automatizar completamente la gestión de estos códigos, desde la solicitud hasta la consulta de estado.

&gt; [!INFO] Importante
&gt;
&gt;La primera solicitud de CAF para cada tipo de documento debe realizarse manualmente en el portal del SII. Las solicitudes posteriores pueden automatizarse usando esta API.


---

## ¿Qué es un CAF?

Un CAF es un archivo XML que contiene:
- **Rango de folios autorizados**: Números de folio inicial y final
- **Tipo de documento**: El tipo de DTE al que aplica (33, 39, 61, etc.)
- **Fecha de autorización**: Cuándo fue emitido por el SII
- **Firma digital del SII**: Que valida su autenticidad

### Ejemplo de estructura CAF
```xml
&lt;AUTORIZACION&gt;
    &lt;CAF version=&quot;1.0&quot;&gt;
        &lt;DA&gt;
            &lt;RE&gt;76192083-9&lt;/RE&gt;
            &lt;RS&gt;MI EMPRESA SPA&lt;/RS&gt;
            &lt;TD&gt;33&lt;/TD&gt;
            &lt;RNG&gt;
                &lt;D&gt;1000&lt;/D&gt;
                &lt;H&gt;1999&lt;/H&gt;
            &lt;/RNG&gt;
            &lt;FA&gt;2024-03-15&lt;/FA&gt;
        &lt;/DA&gt;
        &lt;FRMA&gt;...&lt;/FRMA&gt;
    &lt;/CAF&gt;
&lt;/AUTORIZACION&gt;
```

---

## 1. Solicitar un Nuevo CAF

Permite solicitar automáticamente un nuevo rango de folios al SII.

### Endpoint

```http
[POST] https://legacy.apigateway.cl/api/v1/sii/dte/caf/solicitar/{emisor}/{dte}/{cantidad}
```

### Parámetros de Ruta

| Parámetro | Tipo | Descripción | Ejemplo |
|-----------|------|-------------|---------|
| `emisor` | string | RUT del emisor | `76192083-9` |
| `dte` | string | Tipo de documento | `33` |
| `cantidad` | string | Cantidad de folios | `100` |

### Parámetros de Query

| Parámetro | Tipo | Default | Descripción |
|-----------|------|---------|-------------|
| `certificacion` | string | `0` | `0`: Producción&lt;br/&gt;`1`: Certificación |

### Ejemplo de Request

```json
{
    &quot;auth&quot;: {
        &quot;cert&quot;: {
            &quot;cert-data&quot;: &quot;-----BEGIN CERTIFICATE-----\nMIIG...[tu certificado]...XYZ\n-----END CERTIFICATE-----&quot;,
            &quot;pkey-data&quot;: &quot;-----BEGIN PRIVATE KEY-----\nMIIE...[tu llave privada]...ABC\n-----END PRIVATE KEY-----&quot;
        }
    }
}
```

### Ejemplo de Uso

```bash
curl -X POST https://legacy.apigateway.cl/api/v1/sii/dte/caf/solicitar/76192083-9/33/100?certificacion=0 \
  -H &quot;Content-Type: application/json&quot; \
  -d &#039;{
    &quot;auth&quot;: {
        &quot;cert&quot;: {
            &quot;cert-data&quot;: &quot;-----BEGIN CERTIFICATE-----\nMIIG...[tu certificado]...XYZ\n-----END CERTIFICATE-----&quot;,
            &quot;pkey-data&quot;: &quot;-----BEGIN PRIVATE KEY-----\nMIIE...[tu llave privada]...ABC\n-----END PRIVATE KEY-----&quot;
        }
    }
}&#039;
```

### Respuesta Exitosa

```xml
&lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?&gt;
&lt;AUTORIZACION&gt;
    &lt;CAF version=&quot;1.0&quot;&gt;
        &lt;DA&gt;
            &lt;RE&gt;76192083-9&lt;/RE&gt;
            &lt;RS&gt;MI EMPRESA SPA&lt;/RS&gt;
            &lt;TD&gt;33&lt;/TD&gt;
            &lt;RNG&gt;
                &lt;D&gt;2000&lt;/D&gt;
                &lt;H&gt;2099&lt;/H&gt;
            &lt;/RNG&gt;
            &lt;FA&gt;2024-03-15&lt;/FA&gt;
            &lt;RSAPK&gt;...&lt;/RSAPK&gt;
            &lt;IDK&gt;100&lt;/IDK&gt;
        &lt;/DA&gt;
        &lt;FRMA algoritmo=&quot;SHA1withRSA&quot;&gt;...&lt;/FRMA&gt;
    &lt;/CAF&gt;
    &lt;RSASK&gt;...&lt;/RSASK&gt;
    &lt;RSAPUBK&gt;...&lt;/RSAPUBK&gt;
&lt;/AUTORIZACION&gt;
```

---

## 2. Descargar XML de CAF Existente

Permite descargar nuevamente un CAF ya autorizado por el SII.

### Endpoint

```http
[POST] https://legacy.apigateway.cl/api/v1/sii/dte/caf/xml/{emisor}/{dte}/{folio_inicial}/{folio_final}/{fecha_autorizacion}
```

### Parámetros de Ruta

| Parámetro | Tipo | Descripción | Ejemplo |
|-----------|------|-------------|---------|
| `emisor` | string | RUT del emisor | `76192083-9` |
| `dte` | string | Tipo de documento | `33` |
| `folio_inicial` | string | Primer folio del rango | `669` |
| `folio_final` | string | Último folio del rango | `678` |
| `fecha_autorizacion` | string | Fecha de autorización | `2024-03-15` |

### Ejemplo de Request

```json
{
    &quot;auth&quot;: {
        &quot;cert&quot;: {
            &quot;cert-data&quot;: &quot;-----BEGIN CERTIFICATE-----\nMIIG...[tu certificado]...XYZ\n-----END CERTIFICATE-----&quot;,
            &quot;pkey-data&quot;: &quot;-----BEGIN PRIVATE KEY-----\nMIIE...[tu llave privada]...ABC\n-----END PRIVATE KEY-----&quot;
        }
    }
}
```

### Caso de Uso

Este endpoint es útil cuando:
- Se perdió el archivo CAF original
- Se necesita recuperar un CAF histórico
- Se requiere validar información de un CAF

---

## 3. Consultar Estado de un Folio

Verifica el estado actual de un folio específico en el SII.

&gt; **Limitación** Este servicio NO funciona con folios de boletas (tipos 39 o 41). Solo es compatible con otros tipos de DTE.

### Endpoint

```http
[POST] https://legacy.apigateway.cl/api/v1/sii/dte/caf/estado/{emisor}/{dte}/{folio}
```

### Parámetros de Ruta

| Parámetro | Tipo | Descripción | Ejemplo |
|-----------|------|-------------|---------|
| `emisor` | string | RUT del emisor | `76192083-9` |
| `dte` | string | Tipo de documento | `33` |
| `folio` | string | Número de folio | `77` |

### Parámetros de Query

| Parámetro | Tipo | Default | Descripción |
|-----------|------|---------|-------------|
| `certificacion` | string | `0` | `0`: Producción&lt;br/&gt;`1`: Certificación |
| `formato` | string | `json` | `json`: Respuesta en JSON&lt;br/&gt;`html`: Respuesta en HTML |

### Respuesta en JSON

```json
{
    &quot;estado&quot;: &quot;recibido&quot;,
    &quot;estado_glosa&quot;: &quot;Documento recibido por el SII&quot;,
    &quot;track_id&quot;: &quot;1234&quot;
}
```

### Estados Posibles

| Estado | Descripción |
|--------|-------------|
| `recibido` | Documento recibido correctamente por el SII |
| `anulado` | Folio anulado |
| `pendiente` | Folio asignado pero no utilizado |
| `rechazado` | Documento rechazado por el SII |

---

## 4. Anular Folios

Permite anular un rango de folios no utilizados.

### Endpoint

```http
[POST] https://legacy.apigateway.cl/api/v1/sii/dte/caf/anular/{emisor}/{dte}/{folio_inicial}/{folio_final}
```

### Parámetros de Ruta

| Parámetro | Tipo | Descripción | Ejemplo |
|-----------|------|-------------|---------|
| `emisor` | string | RUT del emisor | `76192083-9` |
| `dte` | string | Tipo de documento | `33` |
| `folio_inicial` | string | Primer folio a anular | `707` |
| `folio_final` | string | Último folio a anular | `710` |

### Consideraciones Importantes

- Solo se pueden anular folios **no utilizados**
- La anulación es **irreversible**
- Se puede anular un folio individual o un rango

### Ejemplo: Anular un Solo Folio

```bash
# Para anular solo el folio 707
POST .../anular/76192083-9/33/707/707
```

### Ejemplo: Anular un Rango

```bash
# Para anular del folio 707 al 720
POST .../anular/76192083-9/33/707/720
```

---

## 5. Listar Folios Solicitados

Obtiene el historial de todas las solicitudes de CAF realizadas.

### Endpoint

```http
[POST] https://legacy.apigateway.cl/api/v1/sii/dte/caf/solicitudes/{emisor}/{dte}
```

### Parámetros de Query

| Parámetro | Tipo | Default | Descripción |
|-----------|------|---------|-------------|
| `certificacion` | string | `0` | `0`: Producción&lt;br/&gt;`1`: Certificación |
| `formato` | string | `json` | `json` o `html` |
| `pagina` | string | `0` | `0`: Todas las solicitudes&lt;br/&gt;`&gt;0`: Página específica |

### Respuesta

```json
[
    {
        &quot;cantidad&quot;: 601,
        &quot;fecha&quot;: &quot;2024-03-01&quot;,
        &quot;inicial&quot;: 5618,
        &quot;final&quot;: 6218,
        &quot;mandatario&quot;: &quot;&quot;
    },
    {
        &quot;cantidad&quot;: 100,
        &quot;fecha&quot;: &quot;2024-02-15&quot;,
        &quot;inicial&quot;: 5518,
        &quot;final&quot;: 5617,
        &quot;mandatario&quot;: &quot;&quot;
    }
]
```

---

## 6. Listar Folios por Estado

Consulta folios dentro de un rango específico según su estado.

### Endpoint

```http
[POST] https://legacy.apigateway.cl/api/v1/sii/dte/caf/estados/{emisor}/{dte}/{folio_inicial}/{folio_final}/{estado}
```

### Parámetros de Ruta

| Parámetro | Tipo | Descripción | Ejemplo |
|-----------|------|-------------|---------|
| `emisor` | string | RUT del emisor | `76192083-9` |
| `dte` | string | Tipo de documento | `52` |
| `folio_inicial` | string | Folio inicial a consultar | `1` |
| `folio_final` | string | Folio final a consultar | `104` |
| `estado` | string | Estado a filtrar | `recibidos` |

### Estados Disponibles

- `recibidos`: Documentos recibidos por el SII
- `anulados`: Folios anulados
- `pendientes`: Folios asignados pero no utilizados

### Respuesta

```json
[
    {
        &quot;cantidad&quot;: &quot;9&quot;,
        &quot;inicial&quot;: &quot;1&quot;,
        &quot;final&quot;: &quot;9&quot;
    },
    {
        &quot;cantidad&quot;: &quot;31&quot;,
        &quot;inicial&quot;: &quot;13&quot;,
        &quot;final&quot;: &quot;43&quot;
    }
]
```


    

---
Last updated on 21/08/2026

