Subir CAF XML
curl -X POST "https://api.simplo.cl/api/v1/billing/caf" \ -H "X-Api-Key: $SIMPLO_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "tipo_dte": 33, "caf_xml": "'"$(base64 -i CAF33.xml)"'" }'import { readFile } from "node:fs/promises";
const cafXml = await readFile("CAF33.xml", "base64");
const res = await fetch("https://api.simplo.cl/api/v1/billing/caf", { method: "POST", headers: { "X-Api-Key": process.env.SIMPLO_API_KEY, "Content-Type": "application/json", }, body: JSON.stringify({ tipo_dte: 33, caf_xml: cafXml }),});
const caf = await res.json();console.log(caf.folio_desde, caf.folio_hasta);using var http = new HttpClient();http.DefaultRequestHeaders.Add("X-Api-Key", Environment.GetEnvironmentVariable("SIMPLO_API_KEY"));
var cafXml = Convert.ToBase64String(File.ReadAllBytes("CAF33.xml"));var body = JsonSerializer.Serialize(new { tipo_dte = 33, caf_xml = cafXml });
var res = await http.PostAsync( "https://api.simplo.cl/api/v1/billing/caf", new StringContent(body, Encoding.UTF8, "application/json"));res.EnsureSuccessStatusCode();Console.WriteLine(await res.Content.ReadAsStringAsync());var cafXml = Base64.getEncoder() .encodeToString(Files.readAllBytes(Path.of("CAF33.xml")));var body = """ { "tipo_dte": 33, "caf_xml": "%s" } """.formatted(cafXml);
var client = HttpClient.newHttpClient();var request = HttpRequest.newBuilder() .uri(URI.create("https://api.simplo.cl/api/v1/billing/caf")) .header("X-Api-Key", System.getenv("SIMPLO_API_KEY")) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(body)) .build();
var response = client.send(request, HttpResponse.BodyHandlers.ofString());System.out.println(response.body());Sube un Código de Autorización de Folios obtenido desde el SII. Acepta el XML en base64 o raw. El sistema parsea y valida el CAF, y extrae el rango de folios y la clave RSA pública.
Beta privada: las escrituras vía API key están en beta privada (solicitar acceso: [email protected]); las API keys hoy operan en modo lectura.
Autenticación
Sección titulada «Autenticación»Cuerpo de la peticiónrequerido
Sección titulada «Cuerpo de la peticiónrequerido»object
Código SII del tipo de Documento Tributario Electrónico (33 factura, 39 boleta, 52 guía de despacho, 56/61 notas, 110-112 exportación). Detalle de cada tipo en la guía Tipos de DTE.
XML del CAF en base64 o raw XML
Respuestas
Sección titulada «Respuestas»CAF registrado
object
Código SII del tipo de Documento Tributario Electrónico (33 factura, 39 boleta, 52 guía de despacho, 56/61 notas, 110-112 exportación). Detalle de cada tipo en la guía Tipos de DTE.
Cantidad de folios aún no asignados
Example
{ "id": "9b7e6a3c-2f1d-4e5a-8b9c-0d1e2f3a4b5c", "tipo_dte": 33, "folio_desde": 1, "folio_hasta": 200, "folios_disponibles": 158, "ambiente": "produccion", "fecha_autorizacion": "2026-07-15", "is_active": true, "created_at": "2026-07-15T10:00:00Z"}CAF inválido
object
Código de error máquina-legible
Mensaje descriptivo del error. Este es el campo canónico para clientes nuevos.
Alias de compatibilidad de message mantenido hacia atrás.
object
Campo con error (dot notation para nested)
Código de validación
Mensaje descriptivo
Acción recomendada para el cliente
Severidad opcional del error
Contexto estructurado opcional para debugging
object
Example
{ "code": "VALIDATION_ERROR", "message": "Error de validacion en los campos enviados", "details": [ { "field": "receptor.rut", "code": "INVALID_RUT", "message": "RUT invalido: digito verificador no coincide" } ], "severity": "critical"}Token o API key inválido o ausente
object
Código de error máquina-legible
Mensaje descriptivo del error. Este es el campo canónico para clientes nuevos.
Alias de compatibilidad de message mantenido hacia atrás.
object
Campo con error (dot notation para nested)
Código de validación
Mensaje descriptivo
Acción recomendada para el cliente
Severidad opcional del error
Contexto estructurado opcional para debugging
object
Example
{ "code": "VALIDATION_ERROR", "message": "Error de validacion en los campos enviados", "details": [ { "field": "receptor.rut", "code": "INVALID_RUT", "message": "RUT invalido: digito verificador no coincide" } ], "severity": "critical"}CAF con rango de folios ya registrado
object
Código de error máquina-legible
Mensaje descriptivo del error. Este es el campo canónico para clientes nuevos.
Alias de compatibilidad de message mantenido hacia atrás.
object
Campo con error (dot notation para nested)
Código de validación
Mensaje descriptivo
Acción recomendada para el cliente
Severidad opcional del error
Contexto estructurado opcional para debugging
object
Example
{ "code": "VALIDATION_ERROR", "message": "Error de validacion en los campos enviados", "details": [ { "field": "receptor.rut", "code": "INVALID_RUT", "message": "RUT invalido: digito verificador no coincide" } ], "severity": "critical"}