Comges DTE

Buscar en la documentación

Escribí para filtrar guías, endpoints y webhooks.

Guía

Autenticación

Toda request a la API pública de Comges DTE se autentica con una API Key. No hay OAuth, no hay JWT, no hay sesiones: una key, un header, un request.

Formato de las keys

Las API Keys tienen dos prefijos posibles, según el ambiente al que apuntan:

  • pk_test_... Certificación (SII Maullín). Ideal para pruebas, no genera DTE con valor tributario.
  • pk_live_... Producción (SII Palena). Emite DTE reales, con valor tributario ante el SII.

Cómo enviarla

La forma recomendada es el header X-Api-Key:

Header X-Api-Key
curl https://api-publica.dtecomges.cl/api/public/v1/dte/b5f8c2e1-7d93-4e8f-a12b-9c4d5e6f7a8b \
  -H "X-Api-Key: $API_KEY"

También aceptamos el esquema Authorization: Bearer estándar, útil cuando tu cliente HTTP sólo permite ese formato. El token debe empezar con pk_:

Authorization: Bearer
curl https://api-publica.dtecomges.cl/api/public/v1/dte/b5f8c2e1-7d93-4e8f-a12b-9c4d5e6f7a8b \
  -H "Authorization: Bearer $API_KEY"

Scopes y permisos

Cada key lleva asociado un conjunto de scopes que determinan qué puede hacer. Los scopes de emisión son granulares por tipo de documento: no existe un dte:emit genérico ni comodines.

ScopePermiteEstado
dte:emit:33Emitir Factura ElectrónicaOperativo
dte:emit:34Emitir Factura ExentaOperativo
dte:emit:39Emitir Boleta ElectrónicaOperativo
dte:emit:41Emitir Boleta ExentaOperativo
dte:emit:43Emitir Liquidación-FacturaNo operativo
dte:emit:46Emitir Factura de CompraNo operativo
dte:emit:52Emitir Guía de DespachoOperativo
dte:emit:56Emitir Nota de DébitoOperativo
dte:emit:61Emitir Nota de CréditoOperativo
dte:emit:110Emitir Factura de ExportaciónOperativo
dte:emit:111Emitir Nota de Débito de ExportaciónOperativo
dte:emit:112Emitir Nota de Crédito de ExportaciónOperativo
dte:readConsultar documentos emitidos y descargar su XML y su PDF. Es el scope que necesita casi cualquier integración.Operativo
plantillas:emitirEmitir a partir de una plantilla con variables.Sin endpoint público
dte:sobre:readConsultar el estado de un sobre enviado al SII.Sin endpoint público
dte:sobre:enviarForzar el envío al SII de un sobre creado previamente.Sin endpoint público
dte:proceso:readConsultar procesos de emisión async y batches.Sin endpoint público

Si llamás a un endpoint sin el scope que exige, recibís un 403. El código depende de qué capa corte primero — ver Errores de autenticación más abajo.

Los scopes se administran desde el portal, y quien lo haga necesita el permiso empresa:api-keys:write (para crear, rotar, revocar o editar scopes) o empresa:api-keys:read (para listarlas). Si sos un integrador externo y no ves la opción, pedísela al administrador de la empresa: no es algo que se resuelva desde la API.

Aislamiento entre empresas

La empresa emisora sale de los claims de la key, nunca del request. Un id de documento que pertenece a otra empresa responde 404, no 403: la API no confirma la existencia de documentos ajenos.

Rotación y revocación

Las keys no expiran automáticamente. Recomendamos rotar en estos casos:

  • Cada vez que un miembro del equipo con acceso deja de estar autorizado.
  • Al menos una vez al año como buena práctica de seguridad.
  • Inmediatamente si sospechas que la key fue expuesta.

Puedes crear una nueva key, migrar tus servicios al nuevo valor y revocar la vieja sin downtime.

Errores de autenticación

Todos los 401 llegan con el mismo código, api-key.ausente: header ausente, key inexistente, revocada o expirada. Es deliberado, para no confirmarle a nadie qué keys existen. No escribas ramas contra un api-key.invalida — no llega nunca.

401 — cualquier problema con la key
HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
  "code": "api-key.ausente",
  "title": "Se requiere API key en el header X-Api-Key."
}

El 403, en cambio, tiene dos códigos posibles según qué capa corte primero:

  • permiso.requerido — a la key le falta el scope que exige la ruta. Es el que devuelven las consultas (dte:read) y la anulación (dte:emit:61).
  • emisor.permiso-tipo-no-autorizado — a la key le falta dte:emit:{tipoDte} en la emisión. Trae field: "tipoDte".

Los dos significan lo mismo para vos: pedile a un administrador de la empresa que agregue ese scope a la key, o creá una key nueva con él.

403 — falta el scope del tipo de documento
HTTP/1.1 403 Forbidden
Content-Type: application/json

{
  "code": "emisor.permiso-tipo-no-autorizado",
  "title": "No tiene el permiso 'dte:emit:33' requerido para emitir este tipo de documento.",
  "status": 403,
  "field": "tipoDte"
}

El listado de scopes de esta guía refleja el registro real, pero la referencia de la API es la fuente de verdad: si alguna vez difieren, gana la referencia.