APICAF

API de Autorización de Folios para documentos tributarios chilenos

Sistema integral para la emisión, anulación y reobtención de Códigos de Autorización de Folios (CAF) del Servicio de Impuestos Internos de Chile.

Estado del Servicio

En línea

Tiempo de Respuesta

< 500ms

Seguridad

Tokens activos

Planes de Uso

Plan Público

Gratis

  • 10 consultas diarias
  • Token: token_publico
  • Tiempo de vida: 1 minuto
  • Soporte básico

Plan Premium

$1.000 CLP/año

  • 50 consultas diarias
  • Token personalizado
  • Sin límite de tiempo
  • Soporte prioritario
Obtener Token

Documentación de la API

URL Base

https://apicaf.cl

Endpoint Principal: Autorización de Folios (CAF)

POST /api/caf

Endpoint principal para emisión, anulación y reobtención de folios CAF.

Parámetros principales:
  • token (string): Token de autorización
  • rut (string): RUT de la empresa
  • etapa (string): Etapa del proceso
  • entorno (string): "certificacion" o "produccion"
  • firma_electronica (object): Datos de la firma digital

Tutorial Paso a Paso

Con firma electrónica (P12/PFX):
{
  "entorno": "certificacion",
  "token": "token_publico",
  "firma_electronica": {
    "string_firma": "MIIb...", // Archivo P12 en base64
    "string_password": "clave_firma",
    "subject_serial_number": "16291998-9"
  },
  "rut": "76883241-2",
  "etapa": "conectar"
}
Con certificado ya procesado:
{
  "entorno": "certificacion",
  "token": "token_publico",
  "firma_electronica": {
    "priv_key": "-----BEGIN PRIVATE KEY-----...",
    "cert": "-----BEGIN CERTIFICATE-----...",
    "subject_serial_number": "16291998-9",
    "init_signature": false
  },
  "rut": "76883241-2",
  "etapa": "conectar"
}

{
  "id_peticion": 1,
  "token": "token_publico",
  "etapa": "listar"
}

Respuesta: Lista de códigos de documento disponibles (33, 34, 39, 41, etc.)

{
  "id_peticion": 1,
  "token": "token_publico",
  "cod_docto": 33,
  "etapa": "disponibles"
}

Respuesta: Cantidad máxima de folios disponibles para el documento

{
  "id_peticion": 1,
  "token": "token_publico",
  "cant_doctos": 1,
  "etapa": "confirmar"
}

Respuesta: Confirmación de la cantidad solicitada

{
  "id_peticion": 1,
  "token": "token_publico",
  "etapa": "obtener"
}

Respuesta: Información de los folios asignados

{
  "id_peticion": 1,
  "token": "token_publico",
  "etapa": "archivo"
}

Respuesta: Archivo CAF en formato XML para usar en la facturación

Reobtención de un CAF emitido

Permite volver a descargar el XML de un CAF ya autorizado (por ejemplo, si se perdió el archivo original). Es el mismo esquema de etapas de la emisión, con prefijo reob_.

Mismo payload que conectar (token, rut, entorno y firma_electronica), cambiando la etapa:

{
  "entorno": "certificacion",
  "token": "token_publico",
  "firma_electronica": { ... },
  "rut": "76883241-2",
  "etapa": "reob_conectar"
}

Respuesta: id_peticion y etapa reob_listar

{
  "id_peticion": 1,
  "token": "token_publico",
  "etapa": "reob_listar"
}

Respuesta: documentos con los tipos que tienen folios reobtenibles

{
  "id_peticion": 1,
  "token": "token_publico",
  "cod_docto": 33,
  "pagina": 1,
  "etapa": "reob_disponibles"
}

Respuesta: folios — lista de rangos ya emitidos, cada uno con form_name, folio_inicial, folio_final, cantidad, dia, mes, ano — más pagina_actual y tiene_siguiente para paginar (pagina es opcional, por defecto 1).

Se confirma el rango a reobtener usando el form_name obtenido en el paso anterior:

{
  "id_peticion": 1,
  "token": "token_publico",
  "form_name": "form1",
  "etapa": "reob_confirmar"
}

{
  "id_peticion": 1,
  "token": "token_publico",
  "etapa": "reob_obtener"
}

Respuesta: folio_ini y folio_fin del rango reobtenido

{
  "id_peticion": 1,
  "token": "token_publico",
  "etapa": "reob_archivo"
}

Respuesta: archivo_caf con el XML del CAF en base64. Esta etapa finaliza y libera la petición.

Anulación de Folios

Permite anular folios autorizados que no serán utilizados (uno de los pasos que el SII exige para regularizar el timbraje cuando hay folios acumulados sin uso). Etapas con prefijo an_.

Mismo payload que conectar, con "etapa": "an_conectar".

Respuesta: id_peticion y etapa an_listar

{
  "id_peticion": 1,
  "token": "token_publico",
  "etapa": "an_listar"
}

Respuesta: documentos con los tipos disponibles para anulación

{
  "id_peticion": 1,
  "token": "token_publico",
  "cod_docto": 33,
  "etapa": "an_disponibles"
}

Respuesta: folios — rangos con folios anulables, cada uno con form_name, folio_inicial, folio_final, cantidad, dia, mes, ano

{
  "id_peticion": 1,
  "token": "token_publico",
  "form_name": "form1",
  "etapa": "an_confirmar"
}

Respuesta: folio_ini y folio_fin, el rango vigente dentro del cual se puede anular

Ejecuta la anulación del sub-rango indicado. folio_ini_a / folio_fin_a deben estar dentro del rango confirmado en el paso 4; motivo es texto libre.

{
  "id_peticion": 1,
  "token": "token_publico",
  "folio_ini_a": 150,
  "folio_fin_a": 200,
  "motivo": "Folios sin uso",
  "etapa": "an_motivo"
}

Errores posibles: Folio Fuera de Rango, No se puede anular o ya está anulado. Verifique bien el rango antes de enviar esta etapa.

{
  "id_peticion": 1,
  "token": "token_publico",
  "etapa": "an_finalizar"
}

Respuesta: respuesta_sii con la última respuesta del SII en base64. Esta etapa finaliza y libera la petición (opcional: si no se invoca, la petición expira sola).

Liberar Ban

POST /api/delist

El sistema aplica bans temporales de 24 horas por tipo de documento cuando el SII rechaza consultas en forma reiterada (certificado no reconocido, timbraje restringido por situaciones pendientes). El ban no afecta la reobtención ni la anulación. Este endpoint elimina los bans asociados a la IP que llama.

Parámetros JSON:
  • token (string): Token de autorización (obligatorio)
  • rut (string, opcional): liberar solo los bans de ese RUT
  • entorno (string, opcional): "certificacion" o "produccion"
  • cod_docto (int, opcional): liberar solo el ban de ese tipo de documento
Ejemplo:
{
  "token": "tu_token",
  "rut": "76883241-2",
  "entorno": "produccion",
  "cod_docto": 33
}

Respuesta: {"message": "Usuario liberado (1 ban(s) eliminados)"} o {"message": "Usuario No tiene ban activo"}

Información Importante
  • Todos los requests deben incluir un token válido
  • Las respuestas exitosas incluyen consultas_restantes con el cupo restante del token (-1 = ilimitado)
  • Los RUTs deben estar en formato sin puntos y con dígito verificador
  • El sistema implementa rate limiting y ban temporal de 24 horas por tipo de documento (liberable vía /api/delist); el ban no afecta reobtención ni anulación
  • Los archivos CAF se generan en formato XML estándar SII
  • Soporte para entornos de Certificación y Producción
  • Las peticiones tienen un tiempo de vida de 1 minuto
Proyecto de Donación

Este servicio se mantiene gracias a donaciones simbólicas para fomentar el uso de software libre como Odoo y Flectra.

Impulsado por GlobalResponse y OdooCoop

Soporte Técnico

¿Necesitas ayuda con la integración? Contáctanos para soporte técnico especializado.

Contactar Soporte