← Blog
API

Emitir boleta y factura electrónica por API en Chile

Cómo emitir boleta y factura electrónica por API en Chile: una API REST que absorbe certificado, CAF, firma y certificación del SII. Con ejemplos de código.

Equipo Emitir5 min de lectura

Integrar la facturación electrónica del SII directamente, a mano, no es un sprint: es un proyecto que se mide en meses. Antes de emitir tu primer documento válido tienes que conseguir un certificado digital, solicitar y administrar folios CAF, firmar el XML con XMLDSig, generar el TED, codificarlo como PDF417, y pasar el set de pruebas en el ambiente de certificación del SII (Palena) antes de tocar producción. Y eso es solo para empezar a emitir; después vienen los rechazos.

Si lo que quieres es emitir boletas y facturas electrónicas por API y volver a tu producto, hay un camino más corto.

Qué resuelve una API de facturación electrónica

El SII define un formato de DTE (Documento Tributario Electrónico) y un protocolo de envío y validación. Una API de facturación se pone delante de toda esa maquinaria y te expone una sola superficie: HTTP, JSON, una API key. Tú describes la venta; la API se encarga del resto del flujo del SII.

Lo que tendrías que construir y mantener tú mismo —y que una API absorbe— incluye:

  • Certificado digital. Comprar y custodiar el .p12/.pfx de una AC acreditada (e-certchile, e-Sign, Acepta) y usarlo para firmar cada documento.
  • Folios CAF. Solicitar al SII los rangos de folios por tipo de DTE, controlar el consumo y reponer antes de quedarte sin folios.
  • Firma XMLDSig. Firmar el XML del documento con la estructura y los algoritmos que el SII exige.
  • TED. Generar el Timbre Electrónico y representarlo como código de barras PDF417 en el documento impreso.
  • Certificación. Pasar el set de pruebas en Palena para cada tipo de documento antes de habilitar producción.
  • Rechazos. Interpretar las respuestas del SII y reaccionar cuando un DTE es rechazado.

Cómo se ve emitir por API

La promesa se entiende mejor con código. Para emitir una boleta o una factura, haces un POST a /v1/dte/boletas con el receptor y los ítems. La API te responde con el folio y el estado.

Base URL: https://api.emitir.cl. Autenticación por header Authorization: Bearer sk_live_•••.

curl https://api.emitir.cl/v1/dte/boletas \
  -H "Authorization: Bearer sk_live_•••" \
  -d '{
    "receptor": { "rut": "76.123.456-7" },
    "items": [{ "glosa": "Plan Pro", "monto": 29990 }]
  }'
# { "folio": 48213, "estado": "aceptado" }

Con el SDK de Node:

const dte = await emitir.boletas.create({
  receptor: { rut: "76.123.456-7" },
  items: [{ glosa: "Plan Pro", monto: 29990 }],
});
console.log(dte.folio, dte.estado); // 48213 "aceptado"

Con el SDK de Python:

dte = emitir.boletas.create(
    receptor={"rut": "76.123.456-7"},
    items=[{"glosa": "Plan Pro", "monto": 29990}],
)
print(dte.folio, dte.estado)  # 48213 "aceptado"

No hay certificado en el código. No hay XML firmado a mano. No hay PDF417. Esa diferencia entre lo que escribes y lo que ocurre es exactamente lo que la API se lleva puesto.

Boletas, facturas y notas

El mismo endpoint POST /v1/dte/boletas emite tanto boletas (DTE tipo 39) como facturas (tipo 33), según el documento que indiques. Conviene tener presente el catálogo de tipos del SII: 33 factura, 34 factura exenta, 39 boleta, 41 boleta exenta, 52 guía de despacho, 56 nota de débito, 61 nota de crédito. El IVA en Chile es 19%; la factura da derecho a crédito fiscal del IVA al receptor, la boleta no. Si quieres entender cuándo emitir cada uno, revisa qué es un DTE y los tipos del SII.

Para anular o corregir un documento ya emitido, usas POST /v1/dte/notas-credito, que genera una nota de crédito (tipo 61) referenciando el DTE original. No se edita el documento: se emite uno nuevo que lo corrige, como exige el SII.

El flujo de estados y los webhooks

Un DTE no nace "aceptado" de forma instantánea: el SII lo procesa. Tienes dos formas de seguir ese ciclo de vida.

Consultar el estado en cualquier momento, junto con el PDF y el XML del documento:

curl https://api.emitir.cl/v1/dte/48213 \
  -H "Authorization: Bearer sk_live_•••"

O, mejor, suscribirte a los cambios de estado con un webhook y dejar que la API te avise:

curl https://api.emitir.cl/v1/webhooks \
  -H "Authorization: Bearer sk_live_•••" \
  -d '{ "url": "https://tu-app.cl/webhooks/emitir" }'

Cuando el SII cambia el estado de un documento, tu endpoint recibe la notificación. Así no consultas en bucle ni dejas al usuario esperando: reaccionas al evento cuando llega.

Saber leer los estados —y por qué un documento puede ser rechazado— sigue siendo útil. Si te topas con rechazos, por qué el SII rechaza un DTE y la gestión de folios CAF del SII explican las causas más frecuentes.

Cuándo conviene una API y cuándo no

Una API de facturación tiene sentido cuando:

  • Tu producto emite documentos como parte de su flujo (un checkout, una suscripción, un punto de venta) y no quieres que tu equipo se vuelva experto en la normativa del SII.
  • Quieres tiempo de integración en días, no en meses, midiendo el avance en líneas de código y no en trámites.
  • Prefieres que el certificado, los folios, la firma y la certificación sean responsabilidad de la plataforma.

Si solo necesitas emitir un puñado de documentos manuales al mes, el portal del SII o un facturador con interfaz gráfica te alcanzan. La API es para cuando la emisión es parte de tu software.

Empieza por la lista de espera

Emitir está en desarrollo y el acceso es por lista de espera. Si estás evaluando integrar facturación electrónica por API y quieres dejar atrás el certificado, los CAF y Palena, anótate y te avisamos cuando tengas acceso.

Súmate a la lista de espera.

Mientras tanto, si ya trabajas con DTE, puedes usar el validador de XML DTE gratuito para revisar documentos que ya tengas.

Preguntas frecuentes

¿Qué necesito para emitir una factura electrónica por API?+

Con la API de Emitir necesitas una llamada HTTP con tu API key. La complejidad del SII —certificado digital, folios CAF, firma XMLDSig, generación del TED y la certificación previa en Palena— queda absorbida por la API. Tú envías el receptor y los ítems a POST /v1/dte/boletas y recibes el folio y el estado del documento.

¿La API de Emitir sirve para boletas y para facturas?+

Sí. El endpoint POST /v1/dte/boletas emite tanto boletas (DTE tipo 39) como facturas (DTE tipo 33), según el tipo de documento que indiques. Para anular o corregir un DTE ya emitido usas POST /v1/dte/notas-credito, que genera una nota de crédito (tipo 61) referenciando el documento original.

¿Tengo que pasar el set de pruebas del SII si uso la API?+

La certificación ante el SII —pasar el set de pruebas en el ambiente Palena antes de operar en producción— es parte de lo que la API absorbe. No tienes que armar tu propio proceso de certificación ni administrar el paso a producción manualmente; eso queda del lado de la plataforma.

¿Cómo me entero de si el SII aceptó o rechazó el DTE?+

Cada DTE tiene un estado que puedes consultar con GET /v1/dte/{folio}, que además te devuelve el PDF y el XML. Para no tener que consultar en bucle, suscríbete con POST /v1/webhooks y recibe una notificación cuando el SII cambia el estado del documento (por ejemplo, de enviado a aceptado o rechazado).

¿Necesito mi propio certificado digital y mis folios CAF?+

La API absorbe el manejo del certificado digital (.p12/.pfx de una AC acreditada como e-certchile, e-Sign o Acepta) y la administración de folios CAF. No tienes que firmar el XML con XMLDSig ni generar el TED por tu cuenta: la API se encarga de esa parte del flujo del SII.

¿Puedo probar la API hoy?+

Emitir está en desarrollo y el acceso es por lista de espera. Puedes anotarte para recibir acceso a la API cuando esté disponible. Mientras tanto, puedes usar herramientas gratuitas como el validador de XML DTE para revisar documentos que ya tengas.

Emite DTE del SII desde tu backend

Emitir es la API de facturación electrónica para Chile. En construcción.

Unirme a la lista de espera