---
title: "Folios y CAF"
description: "Qué es un CAF, cómo solicitarlo al SII con la API o en el sitio del SII, cómo revisarlo, cómo controlar los folios en tu sistema y cómo practicar con un CAF de prueba."
type: "academy"
category: "lesson"
tags: []
authors: [Anonymous]
date: "2026-11-05"
last_update: "2026-11-05"
time_minutes: 6
draft: false
unlisted: false
url: "https://www.apigateway.cl/academy/emision-de-dte/preparacion/folios-y-caf"
---

# 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:

```xml
<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.

> [!INFO] 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](https://www.sii.cl/factura_electronica/factura_mercado/menu_certificacion.html) o [ambiente de producción](https://palena.sii.cl/dte/menu.html). |

### Solicitar un CAF con la API

```bash
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.

> [!WARNING] 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](https://www.apigateway.cl/docs/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:

```bash
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):

```json
{
    "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.

> [!WARNING] 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:

```bash
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.

> [!WARNING] 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.


---
Última actualización el 05/11/2026

