Emisión de DTE

Aprende desde cero a emitir facturas, boletas, notas de crédito, guías de despacho y otros documentos tributarios electrónicos desde tu software con API Gateway V2.

Folios y CAF

Cada documento tiene un folio (su número). No puedes usar cualquier número: el SII te autoriza rangos de folios por tipo de documento, y esa autorización llega en un archivo llamado CAF (Código de Autorización de Folios).

Por ejemplo, un CAF puede decir: “la empresa 88888888-8 puede emitir facturas (33) con los folios del 1 al 100”.

Qué contiene un CAF

Es un XML firmado por el SII:

<AUTORIZACION>
  <CAF version="1.0">
    <DA>
      <RE>88888888-8</RE>          <!-- RUT del emisor -->
      <RS>Mi Empresa SpA</RS>      <!-- Razón social -->
      <TD>33</TD>                  <!-- Tipo de documento -->
      <RNG><D>1</D><H>100</H></RNG><!-- Rango: desde el 1 hasta el 100 -->
      <FA>2026-10-29</FA>          <!-- Fecha de autorización -->
      <RSAPK>...</RSAPK>           <!-- Llave pública -->
      <IDK>100</IDK>
    </DA>
    <FRMA algoritmo="SHA1withRSA">...</FRMA>   <!-- Firma del SII -->
  </CAF>
  <RSASK>...</RSASK>               <!-- Llave privada para timbrar -->
  <RSAPUBK>...</RSAPUBK>
</AUTORIZACION>

La llave privada del CAF (RSASK) es la que se usa para timbrar cada documento. Por eso el CAF también es un dato sensible: guárdalo con el mismo cuidado que el certificado.

Reglas de los folios
  • Un CAF sirve para un solo tipo de documento y un solo emisor.
  • Un CAF de certificación no sirve en producción, y al revés.
  • Cada folio se usa una sola vez. La excepción es un documento rechazado por el SII: se considera no emitido, y su folio se vuelve a usar al emitirlo corregido.
  • Los CAF de facturas, notas de crédito y notas de débito vencen a los 6 meses de autorizados: revisa la fecha de vencimiento al cargarlo. Los de boletas, facturas exentas, guías de despacho y documentos de exportación no vencen.

Obtener el CAF

Los CAF se solicitan al SII con el certificado digital de una persona autorizada por la empresa. Puedes hacerlo de dos formas, y ambas sirven para cualquier CAF, incluido el primero de cada tipo de documento:

Forma Cuándo conviene
Con la API Para automatizar: tu sistema pide folios cuando se están acabando.
En el sitio del SII Para una solicitud puntual, a mano: ambiente de certificación o ambiente de producción.

Solicitar un CAF con la API

curl -X POST "https://app.apigateway.cl/api/v2/sii/dte/caf/solicitar/88888888-8/33/100?certificacion=1" \
  -H "Authorization: Token $API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "auth": {
        "cert": {
            "cert-data": "-----BEGIN CERTIFICATE-----\nMIIG...\n-----END CERTIFICATE-----",
            "pkey-data": "-----BEGIN PRIVATE KEY-----\nMIIE...\n-----END PRIVATE KEY-----"
        }
    }
}'
Parte Significado
88888888-8 RUT del emisor
33 Tipo de documento
100 Cantidad de folios
certificacion=1 Ambiente de certificación. Usa 0 (o no lo indiques) para producción.

La respuesta no es JSON: es directamente el XML del CAF, en codificación ISO-8859-1. Guárdalo tal cual como archivo.

El SII decide la cantidad

El SII puede autorizar menos folios de los que pides, según el historial de emisión de la empresa. Revisa siempre el rango real del CAF que recibiste.

Otros recursos de folios

Todos son POST, usan el bloque auth.cert y el parámetro certificacion igual que la solicitud, y sus URL parten en /api/v2/sii/dte/caf/:

Para qué sirve Recurso
Volver a descargar un CAF ya autorizado, por ejemplo si lo perdiste xml/{emisor}/{dte}/{desde}/{hasta}/{fecha}
Ver el historial de CAF solicitados solicitudes/{emisor}/{dte}
Ver el estado de un folio en el SII estado/{emisor}/{dte}/{folio}
Ver qué folios de un rango están recibidos, anulados o pendientes estados/{emisor}/{dte}/{desde}/{hasta}/{estado}
Anular folios que nunca vas a usar anular/{emisor}/{dte}/{desde}/{hasta}

El detalle de cada uno está en la documentación de la API, en API DTE - Código de Asignación de Folios (CAF).

Revisar un CAF

Antes de guardar un CAF en tu sistema, cárgalo con la API para leer sus datos. El XML va en base64:

curl -X POST https://app.apigateway.cl/api/v2/libredte/billing/identifier/caf_loader/load \
  -H "Authorization: Token $API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"parameters": {"xml": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8QVVU..."}}'

Respuesta (resumida):

{
    "data": {
        "id": "CAF33D1H100",
        "emisor": {
            "rut": "88888888-8",
            "razon_social": "Mi Empresa SpA"
        },
        "tipoDocumento": 33,
        "folioDesde": 1,
        "folioHasta": 100,
        "cantidadFolios": 100,
        "fechaAutorizacion": "2026-10-29",
        "fechaVencimiento": "2027-04-27",
        "vigente": true,
        "vence": true
    }
}

Guarda en tu base de datos al menos: el emisor, el tipo de documento, folioDesde, folioHasta, fechaVencimiento, el ambiente y el XML del CAF.

Controlar los folios en tu sistema

La API no lleva la cuenta de qué folios usaste: eso es responsabilidad de tu sistema. Una forma simple de hacerlo:

Tabla de CAF: un registro por cada CAF recibido.

emisor tipo desde hasta vence ambiente
88888888-8 33 1 100 2027-04-27 certificación

Tabla de folios usados: un registro por cada folio que asignas.

emisor tipo folio estado
88888888-8 33 1 aceptado
88888888-8 33 2 enviado

Para emitir:

  1. Busca un CAF vigente del emisor, tipo de documento y ambiente.
  2. Toma el siguiente folio libre de ese CAF y resérvalo en tu base de datos dentro de una transacción, para que dos emisiones simultáneas nunca usen el mismo folio.
  3. Construye el documento con ese folio y ese CAF.
  4. Cuando queden pocos folios (por ejemplo, el 20%), solicita un nuevo CAF.
El folio debe estar dentro del CAF

Si el folio no está en el rango del CAF, la API responde con un 422: El folio 500 del documento 88888888-8_T033F000000500 no está disponible en el rango del CAF CAF33D1H100.

Practicar con un CAF de prueba

Mientras aprendes, no necesitas un CAF real. La API puede generar un CAF ficticio para cualquier emisor:

curl -X POST https://app.apigateway.cl/api/v2/libredte/billing/identifier/caf_faker/create \
  -H "Authorization: Token $API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "parameters": {
        "emisor": {"rut": "88888888-8", "razon_social": "Mi Empresa SpA"},
        "codigoDocumento": 33,
        "folioDesde": 1,
        "folioHasta": 100
    }
}'

La respuesta tiene el mismo formato que caf_loader/load y además el XML del CAF en base64 en el campo xml. Ese valor es el que usarás como caf al construir documentos.

Un CAF de prueba nunca va al SII

Con un CAF ficticio puedes construir, timbrar, firmar, validar y generar el PDF, pero el SII rechazará cualquier documento timbrado con él. Úsalo solo para aprender y para tus pruebas automáticas.

En esta página

Última actualización el 05/11/2026 por Anonymous