Empezar
Tu primer DTE
Con una API Key en la mano, emitir la primera factura de certificación es cuestión de minutos. Conseguir esa key toma más: el alta de la empresa ante el SII la ejecuta nuestro equipo y necesita datos que sólo tiene tu cliente. Eso es el paso 0, y es por donde hay que empezar.
Paso 0 — Dar de alta la empresa
El alta no es autoservicio: la ejecuta el equipo de Comges, porque valida el certificado digital y la clave tributaria directamente contra el SII. Si estás integrando para un cliente, esto es lo primero que hay que destrabar — sin empresa dada de alta no hay usuario, sin usuario no hay API Key, y sin API Key no hay nada que probar.
Son cinco datos, todos del contribuyente que va a emitir:
| Dato | Detalle |
|---|---|
| RUT de la empresa | El del contribuyente emisor. |
| Clave tributaria del SII | La de la empresa en sii.cl. Se usa para leer sus datos oficiales. |
| Certificado digital (.pfx) | El archivo del certificado con el que se firman los DTE. Máximo 5 MB. |
| Clave del certificado | La que abre el archivo .pfx. |
| RUT del titular del certificado | La persona a nombre de quien está emitido el certificado. Puede no ser el mismo RUT de la empresa, y hay que informarlo aparte: no se lee del archivo. |
Con esos datos se validan el certificado y la clave contra el SII y se cargan solos la razón social, el correo, el teléfono, las sucursales y los giros (actecos) de la empresa. El usuario administrador se crea en un paso aparte: es el que después puede entrar al portal y emitir la API Key.
La empresa arranca con un plan de prueba de 30 días, y el reloj corre desde el alta — no desde que empezás a integrar. Conviene coordinar el alta cuando vayas a arrancar de verdad.
Con la empresa lista, el camino corto
- 1
Crea una API Key
Genera una key de certificación (pk_test_) desde el botón "Configurar API Key" de la barra superior, o créala en el portal. Las keys nacen con scopes mínimos.
Crear API Key → - 2
Déjala cargada en este sitio
Si la creaste desde la barra superior ya queda guardada. Si la tienes a mano, pégala ahí: se guarda solo en tu navegador (localStorage) y los ejemplos de código quedan listos para copiar.
- 3
Haz tu primer request
Ejecuta un POST a /api/public/v1/dte con un body de prueba. La respuesta trae el DTE firmado, timbrado y con folio definitivo; el envío al SII sigue en segundo plano.
Ver ejemplo →
Es el caso normal de un integrador externo: los pasos 1 y 2 los hace tu cliente, vos arrancás en el 3. Lo que necesitás saber de esa key:
- Qué ambiente: lo dice el prefijo.
pk_test_emite contra certificación (sin valor tributario);pk_live_emite documentos reales. - Qué puede hacer: probalo. Un
403en la primera emisión significa que le falta el scope del tipo de documento y que hay que pedírselo al administrador de la empresa. - Empezá siempre con
pk_test_. Un folio de producción consumido no se recupera.
https://api-publica.dtecomges.cl. Toda la superficie pública cuelga de /api/public/v1.1. Crear una API Key
Entra al portal y genera una key. Si tu usuario opera en certificación, la key sale con prefijo pk_test_ y apunta al ambiente Maullín del SII: ideal para integrar sin emitir documentos con valor tributario.
dte:emit:33 y dte:read.Cuando confirmes la creación verás la key completa una única vez. Cópiala al portapapeles y pasa al siguiente paso.
Requiere sesión en el portal y el permiso empresa:api-keys:write. Si integrás para un tercero, es tu cliente quien hace este paso.
2. Pegarla en el portal de docs
Usa el botón Pegar API Key de la barra superior. Se guarda sólo en tu navegador (localStorage) y se inyecta automáticamente en todos los bloques de código de esta documentación, además de configurar el API Reference para que puedas ejecutar requests sin copiar la key cada vez.
3. Emitir tu primera factura
Copia este ejemplo. Si ya pegaste tu API Key, el literal $API_KEY viene reemplazado automáticamente. Fíjate en que el ambiente no se declara en el cuerpo: lo define el prefijo de tu key.
curl -X POST https://api-publica.dtecomges.cl/api/public/v1/dte \
-H "X-Api-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"tipoDte": 33,
"transactionId": "a3bb189e-8bf9-3888-9912-ace4e6543002",
"receptor": {
"rut": "96790240-3",
"razonSocial": "Cliente Demo S.A.",
"giro": "Servicios profesionales",
"direccion": "Av. Apoquindo 4501, Of. 901",
"comuna": "Las Condes"
},
"detalles": [
{
"nroLinea": 1,
"nombreItem": "Consultoría técnica febrero",
"cantidad": 1,
"precioUnitario": 1200000
}
],
"formaPago": 2,
"fechaVencimiento": "2026-08-27"
}'precioUnitario va siempre NETOEn todos los tipos de documento el precio que enviás es sin IVA. En la factura de arriba, 1200000 produce montoIva: 228000 y montoTotal: 1428000.
La boleta afecta (39) no es la excepción: el servidor le recarga el 19 % igual. Si tu sistema maneja precios al público (con IVA incluido), dividilos por 1,19 antes de mandarlos — si no, cada boleta sale un 19 % arriba con el folio ya consumido. El detalle está en la guía del modelo asíncrono.
Lo habitual es un 201 con el folio ya reservado del CAF. Ese folio es definitivo: podés imprimirlo y guardarlo de inmediato.
202 con un ticketId en vez de un id. Es un éxito, no un error, y reemitir consumiría otro folio. Ramificá por status desde el primer día: está explicado en la guía del modelo asíncrono.HTTP/1.1 201 Created
Content-Type: application/json
{
"id": "b5f8c2e1-7d93-4e8f-a12b-9c4d5e6f7a8b",
"tipoDte": 33,
"folio": 1842,
"ambiente": "Certificacion",
"fechaEmision": "2026-07-27",
"montoNeto": 1200000,
"montoExento": 0,
"montoIva": 228000,
"montoTotal": 1428000,
"montoNF": 0,
"estadoSii": "Pendiente",
"trackId": null,
"transactionId": "a3bb189e-8bf9-3888-9912-ace4e6543002",
"creadoEn": "2026-07-27T14:30:12Z",
"offsetUtcHoras": -4,
"glosa": "Consultoría técnica febrero",
"receptorRut": "96790240-3",
"receptorRznSoc": "Cliente Demo S.A."
}estadoSii: "Pendiente" y trackId: null son lo esperado4. Consultar el estado
Con el id que devolvió la emisión, consultá el documento hasta llegar a un estado final (Aceptado, AceptadoConReparos o Rechazado).
curl https://api-publica.dtecomges.cl/api/public/v1/dte/b5f8c2e1-7d93-4e8f-a12b-9c4d5e6f7a8b \
-H "X-Api-Key: $API_KEY"
# Unos segundos después:
# { ..., "estadoSii": "Enviado", "trackId": 2394857620 }
# Y al cerrar el ciclo:
# { ..., "estadoSii": "Aceptado", "trackId": 2394857620 }5. Descargar XML y PDF
Ambos existen desde la emisión: no hace falta esperar la respuesta del SII. Los dos endpoints piden la misma API Key, así que sirven para tu backend — no para mandárselos al comprador.
# XML firmado (incluye TED y Signature)
curl https://api-publica.dtecomges.cl/api/public/v1/dte/{id}/xml \
-H "X-Api-Key: $API_KEY" -o dte.xml
# PDF con timbre PDF417
curl "https://api-publica.dtecomges.cl/api/public/v1/dte/{id}/pdf?formato=carta" \
-H "X-Api-Key: $API_KEY" -o dte.pdf
# Para mandárselo al comprador: la emisión ya trae enlaces firmados que
# se abren SIN API Key. No los armes vos, usalos tal como vienen.
jq -r '.xmlUrl, .pdfUrl' respuesta.jsonTu API Key no puede salir de tu backend, pero al comprador hay que entregarle su documento. Por eso la respuesta de emisión trae xmlUrl y pdfUrl: URLs que se abren sin API Key y están listas para reenviar por correo. Lo que las protege es la firma del propio enlace, que vence — 30 días por defecto.
Usalas tal como vienen: cualquier retoque las invalida. Si una venció, volvé a consultar GET /api/public/v1/dte/{id} y vas a recibir enlaces recién firmados, sin reemitir nada. Y asumí que quien tenga la URL accede al documento hasta que caduque: no la publiques en una página indexable. El detalle completo está en la referencia, sección «Descargar XML y PDF».
La emisión devuelve además ted, el timbre electrónico del documento como XML, por si armás tu propia representación impresa. Solo llega al emitir: en las consultas viene null, así que guardalo si lo vas a necesitar.
¿Qué sigue?
- Lee la guía de autenticación para entender ambientes, scopes y rotación.
- Entendé el modelo asíncrono y el polling, que es la parte que más suele sorprender al integrar.
- Familiarízate con los códigos de error y la estrategia de reintentos.
- Consulta la referencia de la API para ver todos los endpoints, campos y códigos de error. Es la fuente de verdad: estas guías son tutoriales y, si alguna vez difieren, gana la referencia.