Ir al contenido

DTE XML Format1 — Compatibilidad SOAP

Este endpoint permite que sistemas que actualmente emiten DTEs usando el protocolo SOAP XML migren a Redcumbre sin modificar su código. El único cambio necesario es la URL del servicio y las credenciales de autenticación.

El endpoint acepta un request SOAP XML con la estructura ProcesaDte, procesa el DTE usando el pipeline de emisión estándar de Redcumbre, y responde en el mismo formato SOAP XML ProcesaDteResponse.


  • API Key configurada en tu tenant con rol FULL-API (o DTE_ROL_FULL / DTE_ROL_EMISOR)
  • Emisor DTE activo registrado en el tenant con el RUT que usarás en el XML
  • Content-Type del request configurado como application/xml o text/xml

La autenticación se realiza mediante API Key (JWT Bearer Token) en el header HTTP:

Authorization: Bearer <tu_api_key_jwt>

El acceso es por tenant: la URL incluye el {tenantSlug} para identificar la organización.

RequisitoValor
HeaderAuthorization: Bearer <jwt>
Rol requeridoFULL-API, DTE_ROL_FULL o DTE_ROL_EMISOR
TenantIdentificado por {tenantSlug} en la URL

El request usa un envelope SOAP estándar:

<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:app="http://www.redcumbre.cl">
<soapenv:Header/>
<soapenv:Body>
<app:ProcesaDte>
<STRINGXML><![CDATA[...DTE XML...]]></STRINGXML>
<STRINGXMLADICIONAL><![CDATA[...XML adicional...]]></STRINGXMLADICIONAL>
<TIPOIMPRESO>tpl_dte41_002</TIPOIMPRESO>
<ASIGNAFOLIO>False</ASIGNAFOLIO>
<AMBIENTE>1</AMBIENTE>
<TOKEN>...</TOKEN>
</app:ProcesaDte>
</soapenv:Body>
</soapenv:Envelope>
CampoTipoObligatorioDescripción
STRINGXMLCDATADTE XML estándar SII embebido en CDATA
STRINGXMLADICIONALCDATANoXML con campos adicionales (metadata personalizada)
TIPOIMPRESOStringNoID del template PDF (ej: tpl_dte41_002). Si no se envía o el ID no existe en el catálogo, usa el default del tenant
IdempotencyKeyStringNoClave de idempotencia (max 128 chars). Protege contra emisiones duplicadas por reintentos. Ver Idempotencia
SHORTURLSStringNoIGNORADO — las URLs siempre salen en formato corto. Ver URLs de descarga
ASIGNAFOLIOStringNoIGNORADO — el folio siempre se asigna internamente
AMBIENTEIntegerNoIGNORADO — el ambiente se determina por la configuración del emisor
TOKENStringNoIGNORADO — la autenticación es por API Key en header HTTP

Dentro de STRINGXML va el DTE XML con formato estándar SII. La estructura general es:

<DTE version="1.0">
<Documento ID="F1T33">
<Encabezado>
<IdDoc>...</IdDoc>
<Emisor>...</Emisor>
<Receptor>...</Receptor>
<Totales>...</Totales>
</Encabezado>
<Detalle>...</Detalle>
</Documento>
</DTE>
CampoTipoObligatorioDescripción
TipoDTEIntegerCódigo SII del tipo de documento (ver tabla de tipos)
FolioIntegerNoIGNORADO — el folio se asigna internamente por el SII
FchEmisStringNoFecha de emisión en formato YYYY-MM-DD. Si no se envía, usa la fecha actual
FchVencStringNoFecha de vencimiento en formato YYYY-MM-DD
IndServicioIntegerNoTipo de venta/servicio: 1 = Servicio periódico domiciliario, 2 = Otros servicios periódicos, 3 = Ventas y servicios, 4 = Espectáculo por cuenta de terceros
CampoTipoObligatorioDescripción
RUTEmisorStringRUT del emisor (ej: 76123456-7). Se usa para buscar el emisor activo en el tenant
RznSocEmisorStringNoRazón social del emisor (informativo, no se usa para la emisión)
CampoTipoObligatorioDescripción
RUTRecepStringRUT del receptor
RznSocRecepStringRazón social del receptor
GiroRecepStringNoGiro comercial del receptor
DirRecepStringNoDirección del receptor
CmnaRecepStringNoComuna del receptor
CiudadRecepStringNoIgnorado. La ciudad del receptor se deriva siempre de CmnaRecep. Si lo envías, se descarta sin error
CorreoRecepStringNoEmail del receptor. Si se incluye, se envía automáticamente el PDF del documento por email al receptor después de la emisión exitosa

El teléfono del receptor no tiene campo propio en el STRINGXML: entra por el adicional posicional Treintaytres, que es legacy — ver Adicionales posicionales que sí tienen efecto.

Cada <Detalle> representa una línea del documento. Puede haber múltiples elementos <Detalle>.

CampoTipoObligatorioDescripción
NroLinDetIntegerNoNúmero de línea (informativo)
NmbItemStringNombre del ítem o servicio
QtyItemDecimalCantidad
PrcItemDecimalPrecio unitario
MontoItemDecimalSubtotal de la línea (cantidad × precio)
IndExeIntegerNoSi es 1, la línea está exenta de IVA

Opcionalmente se puede enviar metadata adicional dentro de STRINGXMLADICIONAL. Esta información se almacena como JSON en el campo metadataAdicional del DTE y queda disponible para templates PDF personalizados.

<Adicional>
<Uno>valor1</Uno>
<Dos>valor2</Dos>
<Tres>valor3</Tres>
<!-- ... hasta Veintiocho -->
</Adicional>

Los campos son numerados del Uno al Veintiocho. Todos son opcionales y de tipo string. Los campos vacíos se preservan como strings vacíos.

Adicionales posicionales que sí tienen efecto

Sección titulada «Adicionales posicionales que sí tienen efecto»

Dos posiciones no son metadata inerte: el parser las lee y las convierte en campos del receptor. Existen por compatibilidad con integraciones antiguas y no deben usarse en integraciones nuevas.

PosiciónSe convierte enCondiciónEquivalente moderno
Treintaydosreceptor.emailSólo si no viene CorreoRecep y el valor es un email válidoCorreoRecep del STRINGXML, o receptor.email en la API REST
Treintaytresreceptor.telefonoSólo si el valor son exactamente 9 dígitos; se guarda como +56 + esos 9 dígitosreceptor.telefono en la API REST

Un valor que no cumple la condición se descarta sin error: el documento se emite igual, sin teléfono ni email.

Lo que llega por Treintaytres es un teléfono del receptor con todos sus efectos: se guarda en el documento, queda en la agenda de destinatarios DTE del cliente, y recibe el SMS de la emisión si NotificarSmsDte está activo. Ver Notificar al receptor en la guía de DTE.


Código SIITipo de Documento
33Factura Afecta
34Factura Exenta
39Boleta Afecta
41Boleta Exenta
43Liquidación Factura
46Factura de Compra
52Guía de Despacho
56Nota de Débito
61Nota de Crédito

La respuesta siempre es un SOAP XML con la estructura ProcesaDteResponse.

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns1:ProcesaDteResponse xmlns:ns1="http://www.redcumbre.cl">
<return>
<item>
<DescripcionResultado>TVAL</DescripcionResultado>
<IdResultadoFE>0</IdResultadoFE>
<ResultadoFE>DTE procesado correctamente.</ResultadoFE>
<UrlPdf>https://app.redcumbre.cl/d/DHp51REmpiqt/pdf</UrlPdf>
<UrlXmlSii>https://app.redcumbre.cl/d/DHp51REmpiqt/xml</UrlXmlSii>
<UrlXmlReceptor>https://app.redcumbre.cl/d/DHp51REmpiqt/xml</UrlXmlReceptor>
<FolioAsignado>37898</FolioAsignado>
<IdDte>cm8x1y2z3abc456def789</IdDte>
<TiempoEjecucion>0.96504092</TiempoEjecucion>
</item>
</return>
</ns1:ProcesaDteResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns1:ProcesaDteResponse xmlns:ns1="http://www.redcumbre.cl">
<return>
<item>
<DescripcionResultado>ERROR</DescripcionResultado>
<IdResultadoFE>1</IdResultadoFE>
<ResultadoFE>No se encontró un emisor DTE activo con RUT 99999999-9 en el tenant</ResultadoFE>
<UrlPdf></UrlPdf>
<UrlXmlSii></UrlXmlSii>
<UrlXmlReceptor></UrlXmlReceptor>
<FolioAsignado>0</FolioAsignado>
<IdDte></IdDte>
<TiempoEjecucion>0.12345000</TiempoEjecucion>
</item>
</return>
</ns1:ProcesaDteResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
CampoTipoÉxitoErrorDescripción
DescripcionResultadoStringTVALERRORCódigo de resultado
IdResultadoFEInteger010 = éxito, otro valor = error
ResultadoFEStringMensaje de éxitoMensaje descriptivo del errorDescripción del resultado
UrlPdfURLURL del PDFvacíoURL pública para descargar el PDF del DTE (ver URLs de descarga)
UrlXmlSiiURLURL del XMLvacíoURL pública para descargar el XML del DTE. Mismo formato que UrlPdf
UrlXmlReceptorURLURL del XMLvacíoURL pública del XML del DTE (misma que UrlXmlSii)
FolioAsignadoIntegerFolio real0Folio asignado por el SII
IdDteStringCUIDvacíoIdentificador único del DTE generado en el sistema
TiempoEjecucionDecimalSegundosSegundosTiempo de procesamiento en segundos

Campos Ignorados y Comportamiento Automático

Sección titulada «Campos Ignorados y Comportamiento Automático»

Tu Sistema Redcumbre
│ │
│── POST /{tenantSlug}/dte_xml_format1 ──▶│
│ Headers: │
│ - Authorization: Bearer <jwt> │
│ - Content-Type: application/xml │
│ Body: SOAP XML (ProcesaDte) │
│ │
│ │── Parsea SOAP envelope
│ │── Extrae DTE XML de STRINGXML
│ │── Resuelve emisor por RUT
│ │── Emite DTE via SII
│ │── Genera PDF y XML
│ │
│◀── SOAP XML (ProcesaDteResponse) ─│
│ - FolioAsignado │
│ - UrlPdf │
│ - UrlXmlSii │

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:app="http://www.redcumbre.cl">
<soapenv:Header/>
<soapenv:Body>
<app:ProcesaDte>
<STRINGXML><![CDATA[<DTE version="1.0">
<Documento ID="F1T41">
<Encabezado>
<IdDoc>
<TipoDTE>41</TipoDTE>
<Folio>0</Folio>
<FchEmis>2026-02-26</FchEmis>
<IndServicio>1</IndServicio>
<FchVenc>2026-03-26</FchVenc>
</IdDoc>
<Emisor>
<RUTEmisor>76123456-7</RUTEmisor>
<RznSocEmisor>MI EMPRESA SPA</RznSocEmisor>
</Emisor>
<Receptor>
<RUTRecep>12345678-5</RUTRecep>
<RznSocRecep>JUAN PEREZ GONZALEZ</RznSocRecep>
<DirRecep>AV. PRINCIPAL 1234</DirRecep>
<CmnaRecep>SANTIAGO</CmnaRecep>
<CorreoRecep>juan.perez@ejemplo.cl</CorreoRecep>
</Receptor>
<Totales>
<MntExe>15000</MntExe>
<MntTotal>15000</MntTotal>
</Totales>
</Encabezado>
<Detalle>
<NroLinDet>1</NroLinDet>
<IndExe>1</IndExe>
<NmbItem>Servicio de Agua Potable - Enero 2026</NmbItem>
<QtyItem>1</QtyItem>
<PrcItem>15000</PrcItem>
<MontoItem>15000</MontoItem>
</Detalle>
</Documento>
</DTE>]]></STRINGXML>
<STRINGXMLADICIONAL><![CDATA[<Adicional>
<Uno>1001</Uno>
<Dos>Enero 2026</Dos>
<Tres></Tres>
</Adicional>]]></STRINGXMLADICIONAL>
<TIPOIMPRESO>tpl_dte41_002</TIPOIMPRESO>
<IdempotencyKey>servicio-agua-enero-2026</IdempotencyKey>
<ASIGNAFOLIO>False</ASIGNAFOLIO>
<AMBIENTE>1</AMBIENTE>
<TOKEN></TOKEN>
</app:ProcesaDte>
</soapenv:Body>
</soapenv:Envelope>
Ventana de terminal
curl -X POST "https://api.redcumbre.cl/{tenantSlug}/dte_xml_format1" \
-H "Authorization: Bearer <tu_api_key_jwt>" \
-H "Content-Type: application/xml" \
-d @request.xml

Donde request.xml contiene el SOAP envelope completo del ejemplo anterior.


La respuesta trae tres enlaces —UrlPdf, UrlXmlSii y UrlXmlReceptor— que descargan el documento sin autenticación. Podés guardarlos, mandárselos al receptor por tu propio canal o publicarlos en tu portal.

https://{tu-dominio}/d/{shortToken}/{pdf|xml|pdf-sii}

{tu-dominio} es el dominio con el que opera tu empresa en la plataforma; {shortToken} es un identificador de 12 caracteres que la plataforma genera para cada documento y no cambia nunca.

<UrlPdf>https://app.redcumbre.cl/d/DHp51REmpiqt/pdf</UrlPdf>
<UrlXmlSii>https://app.redcumbre.cl/d/DHp51REmpiqt/xml</UrlXmlSii>
<UrlXmlReceptor>https://app.redcumbre.cl/d/DHp51REmpiqt/xml</UrlXmlReceptor>

Alrededor de 45 caracteres. Si tu sistema guarda estas URLs en campos VARCHAR(255), no tenés que hacer nada: es el único formato que emite la plataforma.

  • El shortToken se genera la primera vez y se reutiliza para el mismo documento en llamadas posteriores. Los emails de reenvío llevan la misma URL.
  • Las URLs son permanentes: no expiran.
  • UrlXmlSii y UrlXmlReceptor traen el mismo XML — son dos campos por compatibilidad histórica del contrato SOAP, no dos documentos.

Hubo dos formatos de URL: uno largo con un token JWT de ~260 caracteres y uno corto, y <SHORTURLS>True</SHORTURLS> servía para pedir el corto. El formato largo se retiró, así que hoy el corto es el único que existe y el tag quedó sin efecto.

Enviarlo no produce error y no cambia la respuesta. Podés dejar de enviarlo cuando te sea cómodo; no hay apuro ni nada que migrar.


Si tu sistema puede reintentar requests (por timeout, error de red, o doble-click), podés usar el tag <IdempotencyKey> para proteger contra emisiones duplicadas.

La idempotencia garantiza que un mismo request enviado múltiples veces produzca el mismo resultado: solo se emite un DTE, y los reintentos retornan el DTE original sin crear uno nuevo ni consumir folio.

Agregá el tag <IdempotencyKey> dentro de <app:ProcesaDte> con un valor único por operación:

<app:ProcesaDte>
<STRINGXML><![CDATA[...DTE XML...]]></STRINGXML>
<IdempotencyKey>order-12345-factura</IdempotencyKey>
</app:ProcesaDte>

Reglas:

  • Máximo 128 caracteres
  • El scope de unicidad es: emisor + tipo de DTE + key. Esto significa que podés usar la misma key para diferentes emisores o diferentes tipos de DTE sin colisión
  • La key es permanente — no expira. Un DTE emitido con una key siempre retornará el mismo resultado ante reintentos
  • Solo DTEs con estado EMITIDO se consideran para idempotencia. Si la primera emisión falló, podés reintentar con la misma key y se creará un DTE nuevo
  • El campo es opcional. Si no se envía, el comportamiento no cambia
<app:ProcesaDte>
<STRINGXML><![CDATA[<DTE version="1.0">
<Documento ID="F1T33">
<Encabezado>
<IdDoc>
<TipoDTE>33</TipoDTE>
<FchEmis>2026-03-03</FchEmis>
</IdDoc>
<Emisor>
<RUTEmisor>76123456-7</RUTEmisor>
</Emisor>
<Receptor>
<RUTRecep>77438768-4</RUTRecep>
<RznSocRecep>EMPRESA EJEMPLO SPA</RznSocRecep>
<GiroRecep>VENTA AL POR MENOR</GiroRecep>
<DirRecep>AV PROVIDENCIA 1234</DirRecep>
<CmnaRecep>PROVIDENCIA</CmnaRecep>
</Receptor>
</Encabezado>
<Detalle>
<NmbItem>Servicio de consultoría</NmbItem>
<QtyItem>1</QtyItem>
<PrcItem>100000</PrcItem>
<MontoItem>100000</MontoItem>
</Detalle>
</Documento>
</DTE>]]></STRINGXML>
<IdempotencyKey>order-12345-factura</IdempotencyKey>
</app:ProcesaDte>
SituaciónResultado
Primera emisión con keyDTE se emite normalmente, key se guarda
Reintento con misma key (DTE ya emitido)Retorna el DTE original sin crear nuevo
Misma key pero diferente emisor o tipo DTESe emite un DTE nuevo (scope diferente)
Misma key pero DTE original en estado ERRORSe emite un DTE nuevo (solo EMITIDO cuenta)

ErrorCausaSolución
Request body vacío o no es XMLContent-Type incorrecto o body vacíoVerificar que Content-Type sea application/xml o text/xml
SOAP Envelope no encontradoXML no tiene estructura SOAPVerificar el namespace soapenv y la estructura del envelope
Campo STRINGXML es obligatorioNo se incluyó el campo STRINGXMLAgregar el campo con el DTE XML en CDATA
TipoDTE no es un número válidoCódigo de tipo no reconocidoUsar uno de los códigos soportados (33, 34, 39, 41, etc.)
No se encontró un emisor DTE activo con RUT XEl RUT no tiene emisor activo en el tenantVerificar que el RUT del emisor esté registrado y activo