Emisión de DTE
Paso 3: Armar el sobre (obligatorio)
El SII no recibe documentos sueltos: recibe un sobre que contiene uno o más documentos. Las facturas, notas y guías van en un sobre EnvioDTE y las boletas en un sobre EnvioBOLETA. Los dos se crean con la misma operación, dispatcher/create, que elige el tipo según el documento (ver Un sobre por tipo de documento).
El sobre tiene una carátula con:
| Dato de la carátula | Qué es | De dónde sale |
|---|---|---|
RutEmisor |
RUT de la empresa emisora | emisor.rut |
RutEnvia |
RUT de la persona que envía | El certificado digital |
RutReceptor |
A quién va dirigido el sobre | receptor.rut (ver abajo) |
FchResol y NroResol |
Resolución de autorización del emisor | emisor.autorizacion_dte |
SubTotDTE |
Cuántos documentos de cada tipo lleva | Se calcula solo |
El sobre también se firma con el certificado digital.
Crear el sobre para el SII
POST https://app.apigateway.cl/api/v2/libredte/billing/document/dispatcher/create
{
"parameters": {
"bag": {
"xmlDocument": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8RFRF...",
"certificate": {
"certificate": "-----BEGIN CERTIFICATE-----\nMIIG...\n-----END CERTIFICATE-----",
"privateKey": "-----BEGIN PRIVATE KEY-----\nMIIE...\n-----END PRIVATE KEY-----"
},
"emisor": {
"rut": "88888888-8",
"razon_social": "Mi Empresa SpA",
"autorizacion_dte": {
"fecha_resolucion": "2025-11-20",
"numero_resolucion": 0
}
},
"receptor": {
"rut": "60803000-K"
}
}
}
}
| Campo | Qué es |
|---|---|
xmlDocument |
El document_xml del paso 1, en base64. |
certificate |
El certificado con que se firma el sobre. |
emisor.autorizacion_dte |
La resolución del emisor: en certificación, número 0 y la fecha que muestra el SII en ese ambiente; en producción, el número y la fecha de la resolución real. |
receptor.rut |
A quién va dirigido el sobre. Para el SII usa 60803000-K, el RUT del SII. |
¿Dónde obtengo la fecha y el número de resolución?
Son datos del emisor que entrega el SII, y cada ambiente tiene los suyos. Puedes obtenerlos de dos formas:
Con la API, consultando el estado de autorización del emisor:
# Producción
curl https://app.apigateway.cl/api/v2/sii/dte/contribuyentes/autorizado/88888888-8 \
-H "Authorization: Token $API_TOKEN"
# Certificación
curl "https://app.apigateway.cl/api/v2/sii/dte/contribuyentes/autorizado/88888888-8?certificacion=1" \
-H "Authorization: Token $API_TOKEN"
La resolución viene en data.resolucion. Esta es la respuesta en certificación:
{
"data": {
"rut": "88888888-8",
"autorizado": true,
"resolucion": {
"numero": 0,
"fecha": "2025-11-20"
}
}
}
Usa resolucion.fecha como fecha_resolucion y resolucion.numero como numero_resolucion. En certificación el número siempre es 0.
En el sitio del SII, buscando al emisor por su RUT en el listado de empresas autorizadas: certificación o producción.
La resolución no cambia de un envío a otro. Consúltala una vez por emisor y ambiente, y guárdala en la configuración de la empresa. Más detalles en Resolución de autorización.
La respuesta
Esta es la respuesta para el sobre del ejemplo. Los valores largos están acortados con ..., y de documents se muestran solo los campos propios del sobre: el resto es igual a la respuesta de builder/build.
{
"data": {
"tag": "EnvioDTE",
"xml": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0i...",
"documents": [
{
"document_id": "88888888-8_T033F000000001",
"document_xml": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8RFRF...",
"document_auth": {
"FchResol": "2025-11-20",
"NroResol": 0
},
"...": "los demás campos de builder/build (ver el paso 1)"
}
],
"caratula": {
"@attributes": {
"version": "1.0"
},
"RutEmisor": "88888888-8",
"RutEnvia": "11222333-9",
"RutReceptor": "60803000-K",
"FchResol": "2025-11-20",
"NroResol": 0,
"TmstFirmaEnv": "2026-10-30T09:23:51",
"SubTotDTE": [
{
"TpoDTE": 33,
"NroDTE": 1
}
]
}
}
}
| Campo | Qué es | ¿Guardarlo? |
|---|---|---|
xml |
El sobre firmado, en base64. Es lo que enviarás al SII en el paso 4. | Sí, siempre |
tag |
El tipo de sobre: EnvioDTE, o EnvioBOLETA si son boletas. |
No |
caratula |
La carátula del sobre: emisor, quién envía (RutEnvia, el RUT del certificado), a quién va dirigido, la resolución, la fecha de firma y cuántos documentos de cada tipo lleva (SubTotDTE). |
Opcional |
documents |
Los documentos que van dentro del sobre, con los mismos campos que entrega builder/build. document_auth trae la resolución que indicaste. |
No |
Cada documento de documents incluye los datos del certificado, con su llave privada (certificate.pkey). No guardes la respuesta completa en tu base de datos ni en tus logs: guarda el xml del sobre.
Varios documentos en un sobre
Si emites muchos documentos a la vez, puedes enviarlos en un solo sobre con dispatcher/createMany. Recibe una lista de bolsas en el parámetro bags, todas del mismo emisor:
{
"parameters": {
"bags": [
{
"xmlDocument": "...DTE 1 en base64...",
"certificate": { "certificate": "...", "privateKey": "..." },
"emisor": { "rut": "88888888-8", "razon_social": "Mi Empresa SpA", "autorizacion_dte": { "fecha_resolucion": "2025-11-20", "numero_resolucion": 0 } },
"receptor": { "rut": "60803000-K" }
},
{
"xmlDocument": "...DTE 2 en base64..."
}
]
}
}
El certificado, el emisor y el receptor del sobre se toman de la primera bolsa.
Para empezar, usa un documento por sobre: es más simple saber qué documento tiene cada Track ID, y si el SII rechaza uno no afecta a los demás. Agrupa documentos en un sobre solo cuando el volumen lo justifique.
Un sobre por tipo de documento
La llamada es la misma para todos los documentos: envía en xmlDocument el document_xml del documento, sea una factura o una boleta. La API elige el tipo de sobre y lo informa en tag:
Documento en xmlDocument |
tag de la respuesta |
caratula.SubTotDTE |
Se envía con (paso 4) |
|---|---|---|---|
| Factura, nota o guía | EnvioDTE |
[{ "TpoDTE": 33, "NroDTE": 1 }] |
sii_dte/sendXmlDocument |
| Boleta | EnvioBOLETA |
[{ "TpoDTE": 39, "NroDTE": 1 }] |
sii_boleta/sendXmlDocument |
El resto de la respuesta tiene los mismos campos en los dos casos.
Un sobre lleva solo boletas o solo los demás DTE, nunca ambos. Si intentas juntarlos (por ejemplo, con createMany, ver Varios documentos en un sobre), la API responde:
El tipo de documento Factura electrónica no se puede agregar a un sobre de tipo ENVIO_BOLETA.