Facturiadocs
Referencia API

Folios y CAF

Disponibilidad de folios por tipo de documento, solicitud de timbraje y carga de CAF propios.

Base: https://api.facturia.cl/v1. Todos los endpoints de este capítulo se autentican con Authorization: Bearer salvo que se diga lo contrario, y el sobre de error es el de Errores.

MétodoRutaQué hace
GET/foliosDisponibilidad de folios por tipo de documento
POST/folios/requestsSolicita un CAF nuevo al SII (asíncrono)
GET/cafsLista los CAF que esta empresa tiene cargados
POST/cafsCarga un CAF que ya tienes
DELETE/cafs/{caf_id}Desactiva un CAF (el historial se conserva)

GET /folios

Disponibilidad de folios por tipo de documento

Los rangos de folios (respaldados por CAF) disponibles para la empresa, con cuántos quedan de cada tipo_dte antes de necesitar una nueva solicitud.

curl -sS https://api.facturia.cl/v1/folios \
  -H "Authorization: Bearer $FACTURIA_KEY" \
  -H "Facturia-Empresa: $EMPRESA"

Parámetros

ParámetroEnRequeridoTipoNotas
Facturia-Empresaheader—stringLa empresa destino: RUT canónico (77928532-4) o id de empresa (emp_…). Obligatorio en toda llamada con alcance de empresa, salvo que la llave sea un token de empresa. Este header es el ÚNICO mecanismo: no hay parámetro ?empresa= ni campo empresa en el cuerpo. Omitido donde se requiere → 400 empresa_required; fuera de la lista blanca → 403 empresa_not_allowed.
tipo_dtequery—33 · 34 · 39 · 41 · 46 · 52 · 56 · 61

Respuestas

CódigoSignificadoCuerpo
200Los rangos de folios.lista de FolioRange
400Entrada mal formada o incompleta.ErrorResponse
401Llave ausente, mal formada o revocada.ErrorResponse
403Llave válida pero sin permiso: scope, lista blanca de empresas o modo.ErrorResponse
429Demasiadas solicitudes.ErrorResponse
defaultUn error no enumerado aparte para esta operación, en el mismo sobre §5.5 que cualquier otro rechazo. Ramifica por error.code, nunca solo por el estado HTTP ni por error.message — un código que esta operación aún no se ha visto lanzar sigue siendo más seguro para decidir que un texto pensado para una persona.ErrorResponse

POST /folios/requests

Solicita un CAF nuevo al SII (asíncrono)

El timbraje del SII es un flujo de portal guionizado, no un webservice. Devuelve un job.

curl -sS -X POST https://api.facturia.cl/v1/folios/requests \
  -H "Authorization: Bearer $FACTURIA_KEY" \
  -H "Facturia-Empresa: $EMPRESA" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"tipo_dte":33}'

Parámetros

ParámetroEnRequeridoTipoNotas
Facturia-Empresaheader—stringLa empresa destino: RUT canónico (77928532-4) o id de empresa (emp_…). Obligatorio en toda llamada con alcance de empresa, salvo que la llave sea un token de empresa. Este header es el ÚNICO mecanismo: no hay parámetro ?empresa= ni campo empresa en el cuerpo. Omitido donde se requiere → 400 empresa_required; fuera de la lista blanca → 403 empresa_not_allowed.
Idempotency-Keyheader—stringLlave que genera el cliente, única por operación lógica, retenida 24 h y con alcance (cuenta, empresa, endpoint). Un replay devuelve la respuesta original con Facturia-Idempotent-Replay: true. Misma llave y cuerpo distinto → 409.

Cuerpo

CampoTipoRequeridoNotas
tipo_dte33 · 34 · 39 · 41 · 46 · 52 · 56 · 61sí33 factura afecta · 34 factura exenta · 39 boleta afecta · 41 boleta exenta · 46 factura de compra · 52 guía de despacho · 56 nota de débito · 61 nota de crédito. Las boletas (39/41) viajan por otro transporte del SII; eso es invisible desde esta API.
quantityinteger—Cuántos folios pides. Omítelo y Facturia dimensiona según tu historial de consumo.
Respuestas
CódigoSignificadoCuerpo
202Job aceptado.Job
401Llave ausente, mal formada o revocada.ErrorResponse
402subscription_required - este acto real necesita una suscripción activa de la EMPRESA que el request nombra, y esa empresa no la tiene (se aplica de verdad). La suscripción es por empresa: las demás empresas de la misma cuenta no se ven afectadas, y error.details trae empresa, empresa_rut, empresa_name, account_plan, subscription_status, grace_until, blocked_by, un handoff next y un checkout_url que apunta a esa empresa. O bien plan_limit_reached - una cuota de plan agotada (declarado, todavía sin emisor). El modo de prueba nunca se bloquea por ninguno de los dos. LA ELEGIBILIDAD SE EVALÚA PRIMERO (2026-09-04, #475). Este rechazo ahora llega SOLO cuando la empresa por lo demás puede emitir: mientras su checklist está incompleto, su puesta en vivo pendiente o la empresa suspendida, el acto se rechaza con 422 empresa_not_emitting y el handoff del checklist. Así este 402 y Empresa.capabilities.blocked_by ya no pueden nombrar dos acciones siguientes distintas para un mismo estado — que es lo que hacían: el objeto decía «firma el mandato» y la puerta decía «paga».ErrorResponse
403Llave válida pero sin permiso: scope, lista blanca de empresas o modo.ErrorResponse
422Bien formado pero viola una regla del dominio: folios agotados, ventana de acuse cerrada.ErrorResponse
429Demasiadas solicitudes.ErrorResponse
defaultUn error no enumerado aparte para esta operación, en el mismo sobre §5.5 que cualquier otro rechazo. Ramifica por error.code, nunca solo por el estado HTTP ni por error.message — un código que esta operación aún no se ha visto lanzar sigue siendo más seguro para decidir que un texto pensado para una persona.ErrorResponse

GET /cafs

Lista los CAF que esta empresa tiene cargados

Todos los CAF (autorización de folios) cargados para la empresa, con su rango, tipo_dte y cuántos folios quedan.

curl -sS https://api.facturia.cl/v1/cafs \
  -H "Authorization: Bearer $FACTURIA_KEY" \
  -H "Facturia-Empresa: $EMPRESA"

Parámetros

ParámetroEnRequeridoTipoNotas
Facturia-Empresaheader—stringLa empresa destino: RUT canónico (77928532-4) o id de empresa (emp_…). Obligatorio en toda llamada con alcance de empresa, salvo que la llave sea un token de empresa. Este header es el ÚNICO mecanismo: no hay parámetro ?empresa= ni campo empresa en el cuerpo. Omitido donde se requiere → 400 empresa_required; fuera de la lista blanca → 403 empresa_not_allowed.
limitquery—integer
cursorquery—stringCursor opaco tomado del next_cursor de una respuesta anterior.

Respuestas

CódigoSignificadoCuerpo
200Una lista de CAF.lista de Caf
401Llave ausente, mal formada o revocada.ErrorResponse
403Llave válida pero sin permiso: scope, lista blanca de empresas o modo.ErrorResponse
429Demasiadas solicitudes.ErrorResponse
defaultUn error no enumerado aparte para esta operación, en el mismo sobre §5.5 que cualquier otro rechazo. Ramifica por error.code, nunca solo por el estado HTTP ni por error.message — un código que esta operación aún no se ha visto lanzar sigue siendo más seguro para decidir que un texto pensado para una persona.ErrorResponse

POST /cafs

Carga un CAF que ya tienes

Carga un archivo CAF obtenido desde el portal del SII. Se rechaza si su rango se traslapa con uno ya registrado para el mismo tipo_dte.

curl -sS -X POST https://api.facturia.cl/v1/cafs \
  -H "Authorization: Bearer $FACTURIA_KEY" \
  -H "Facturia-Empresa: $EMPRESA" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"caf_xml":"<AUTORIZACION>…</AUTORIZACION>"}'

Parámetros

ParámetroEnRequeridoTipoNotas
Facturia-Empresaheader—stringLa empresa destino: RUT canónico (77928532-4) o id de empresa (emp_…). Obligatorio en toda llamada con alcance de empresa, salvo que la llave sea un token de empresa. Este header es el ÚNICO mecanismo: no hay parámetro ?empresa= ni campo empresa en el cuerpo. Omitido donde se requiere → 400 empresa_required; fuera de la lista blanca → 403 empresa_not_allowed.
Idempotency-Keyheader—stringLlave que genera el cliente, única por operación lógica, retenida 24 h y con alcance (cuenta, empresa, endpoint). Un replay devuelve la respuesta original con Facturia-Idempotent-Replay: true. Misma llave y cuerpo distinto → 409.

Cuerpo

CampoTipoRequeridoNotas
caf_xmlstringsíEl XML &lt;AUTORIZACION&gt; crudo, tal como lo descargaste del SII.
Respuestas
CódigoSignificadoCuerpo
201CAF registrado.Caf
400Entrada mal formada o incompleta.ErrorResponse
401Llave ausente, mal formada o revocada.ErrorResponse
403Llave válida pero sin permiso: scope, lista blanca de empresas o modo.ErrorResponse
429Demasiadas solicitudes.ErrorResponse
defaultUn error no enumerado aparte para esta operación, en el mismo sobre §5.5 que cualquier otro rechazo. Ramifica por error.code, nunca solo por el estado HTTP ni por error.message — un código que esta operación aún no se ha visto lanzar sigue siendo más seguro para decidir que un texto pensado para una persona.ErrorResponse

DELETE /cafs/{caf_id}

Desactiva un CAF (el historial se conserva)

Desactiva un CAF (active: false). Los folios ya asignados desde él no se ven afectados; el rango solo deja de ofrecer folios nuevos.

curl -sS -X DELETE https://api.facturia.cl/v1/cafs/caf_01K2P4V8QW2M \
  -H "Authorization: Bearer $FACTURIA_KEY" \
  -H "Facturia-Empresa: $EMPRESA"

Parámetros

ParámetroEnRequeridoTipoNotas
caf_idpathsístring
Facturia-Empresaheader—stringLa empresa destino: RUT canónico (77928532-4) o id de empresa (emp_…). Obligatorio en toda llamada con alcance de empresa, salvo que la llave sea un token de empresa. Este header es el ÚNICO mecanismo: no hay parámetro ?empresa= ni campo empresa en el cuerpo. Omitido donde se requiere → 400 empresa_required; fuera de la lista blanca → 403 empresa_not_allowed.

Respuestas

CódigoSignificadoCuerpo
204Desactivado.—
401Llave ausente, mal formada o revocada.ErrorResponse
403Llave válida pero sin permiso: scope, lista blanca de empresas o modo.ErrorResponse
404No existe ese objeto bajo esta llave.ErrorResponse
429Demasiadas solicitudes.ErrorResponse
defaultUn error no enumerado aparte para esta operación, en el mismo sobre §5.5 que cualquier otro rechazo. Ramifica por error.code, nunca solo por el estado HTTP ni por error.message — un código que esta operación aún no se ha visto lanzar sigue siendo más seguro para decidir que un texto pensado para una persona.ErrorResponse

En esta página