Connect

Facturas 33 y 34

Emite una factura afecta 33 o exenta 34 ante el SII con una a diez líneas y hasta tres referencias, por REST, MCP o SDK, paso a paso.

Esta guía emite una factura afecta 33 con tres líneas y dos referencias. La exenta 34 usa la misma forma. Antes de empezar, revisa qué necesitas y ten a mano el connectionId de la empresa, que sale de conexiones.estado.consultar.

Los datos de los ejemplos son ficticios. No los envíes: toda emisión es real.

1. Previsualiza la factura

sii.dte.previsualizar recibe el documento completo en candidato, lo carga en el Facturador Gratuito y devuelve lo que calculó el SII, sin firmar ni emitir:

curl -X POST https://connect.emisso.ai/api/v1/tools/sii.dte.previsualizar/execute \
  -H "Authorization: Bearer connect_sk_…" \
  -H "X-Connect-Connection: conn_9tKfR2mQx4Vb" \
  -H "Content-Type: application/json" \
  -d '{
    "input": {
      "candidato": {
        "tipoDte": "33",
        "receptor": {
          "rut": "77123456-9",
          "razonSocial": "Comercial Los Aromos SpA",
          "giro": "Venta de artículos de oficina",
          "direccion": "Av. Providencia 1234, oficina 501",
          "comuna": "Providencia",
          "ciudad": "Santiago"
        },
        "tipoVenta": "del_giro",
        "tipoCompra": "del_giro",
        "condicionPago": { "formaPago": "credito" },
        "detalles": [
          { "nombre": "Asesoría contable", "cantidad": 1, "precioUnitario": 450000 },
          { "nombre": "Horas extra", "cantidad": 2.5, "precioUnitario": 32000 },
          { "nombre": "Traslado", "cantidad": 1, "precioUnitario": 18000 }
        ],
        "referencias": [
          { "tipoDocumento": "801", "folio": "OC-4512", "fecha": "2026-09-10", "razon": "Orden de compra" },
          { "tipoDocumento": "HES", "folio": "7781", "fecha": "2026-09-12" }
        ]
      }
    }
  }'

Salida esperada (200, campo data):

{
  "estado": "previsualizado",
  "tipoDte": "33",
  "variante": "33:del_giro:del_giro:credito",
  "fechaEmision": "2026-09-15",
  "receptorRut": "77123456-9",
  "totales": { "tributacion": "afecta", "neto": 548000, "iva": 104120, "total": 652120 },
  "advertencias": [],
  "previewRef": "<referencia opaca>",
  "expiraEn": "2026-09-15T14:15:00.000Z",
  "contractVersion": 3
}

Revisa los totales antes de seguir. La fecha de emisión la fija el portal del SII: no se envía. El previewRef es de un solo uso, vence en 15 minutos y solo sirve para la misma conexión y el mismo actor.

2. Emite la factura

Genera una clave de idempotencia (UUID v4), guárdala junto a la factura en tu sistema y llama a sii.dte.emitir con el previewRef:

curl -X POST https://connect.emisso.ai/api/v1/tools/sii.dte.emitir/execute \
  -H "Authorization: Bearer connect_sk_…" \
  -H "X-Connect-Connection: conn_9tKfR2mQx4Vb" \
  -H "Idempotency-Key: 3f6c1b2e-8d4a-4c7f-9e21-5a0b7d9c4e18" \
  -H "Content-Type: application/json" \
  -d '{"input": {"previewRef": "<referencia opaca>"}}'

Salida esperada (200, campo data):

{
  "resultado": {
    "estado": "emitido",
    "operacionId": "req_k7w2m9q4x1c8v5b3n6z0p",
    "tipoDte": "33",
    "variante": "33:del_giro:del_giro:credito",
    "folio": "1042",
    "fechaEmision": "2026-09-15",
    "confirmadoEn": "2026-09-15T14:03:12.000Z"
  }
}

Guarda folio y operacionId. Si el estado es rechazado o resultado_desconocido, sigue Resultados y errores: nunca reenvíes con una clave nueva para salir de la duda.

Por MCP

Un agente conectado al servidor MCP hace las mismas dos llamadas. La vista previa no escribe, así que va por execute, y params lleva lo mismo que el input de REST (aquí, una factura de una línea):

{
  "tool": "sii.dte.previsualizar",
  "connectionId": "conn_9tKfR2mQx4Vb",
  "params": {
    "candidato": {
      "tipoDte": "33",
      "receptor": {
        "rut": "77123456-9",
        "razonSocial": "Comercial Los Aromos SpA",
        "giro": "Venta de artículos de oficina",
        "direccion": "Av. Providencia 1234, oficina 501",
        "comuna": "Providencia",
        "ciudad": "Santiago"
      },
      "tipoVenta": "del_giro",
      "tipoCompra": "del_giro",
      "condicionPago": { "formaPago": "credito" },
      "detalles": [
        { "nombre": "Asesoría contable", "cantidad": 1, "precioUnitario": 450000 }
      ]
    }
  }
}

La emisión escribe, así que va por execute_write, con la clave de idempotencia como argumento, fuera de params:

{
  "tool": "sii.dte.emitir",
  "connectionId": "conn_9tKfR2mQx4Vb",
  "idempotencyKey": "3f6c1b2e-8d4a-4c7f-9e21-5a0b7d9c4e18",
  "params": { "previewRef": "<referencia opaca>" }
}

La UUID del ejemplo solo ilustra el formato: genera una propia por documento.

Por SDK

import { createClient } from "@emisso/connect";

const connect = createClient({ apiKey: process.env.EMISSO_CONNECT_API_KEY! });
const connectionId = "conn_9tKfR2mQx4Vb";

// `candidato` es el mismo objeto del ejemplo REST.
const vista = await connect.tools.sii.dte.previsualizar({ candidato }, { connectionId });
// Revisa vista.totales. Guarda la clave junto a la factura ANTES de emitir.
const idempotencyKey = crypto.randomUUID();
const { resultado } = await connect.tools.sii.dte.emitir(
  { previewRef: vista.previewRef },
  { connectionId, idempotencyKey },
);

La versión 0.1.0 publicada en npm no incluye las tools de emisión ni idempotencyKey. Revisa qué versión tienes; con la 0.1.0, emite por REST.

El candidato, campo por campo

CampoQué va
tipoDte"33" para la factura afecta o "34" para la exenta.
receptor.rutRUT del receptor sin puntos, con guion y dígito verificador válido.
receptor.razonSocialHasta 100 caracteres.
receptor.giroHasta 40 caracteres.
receptor.direccionHasta 70 caracteres.
receptor.comunaHasta 20 caracteres.
receptor.ciudadHasta 15 caracteres.
tipoVenta y tipoCompraSiempre "del_giro".
condicionPago.formaPagoSiempre "credito".
detallesEntre una y diez líneas. Ver abajo.
referenciasOpcional: entre una y tres. Ver abajo.

Usa los datos del receptor tal como están registrados en el SII, sin espacios al inicio ni al final. Los textos deben poder escribirse en Latin-1: tildes y ñ sí, emojis no. El emisor no se envía: sale del perfil de la conexión (su actividad económica y su dirección).

Varias líneas

detalles lleva entre una y diez líneas, en el orden en que van en la factura. Cada línea tiene:

  • nombre: hasta 25 caracteres.
  • cantidad: desde 1, con hasta dos decimales.
  • precioUnitario: en pesos, entero, positivo y antes de impuestos.

Ninguna línea admite código, unidad, descripción ni descuento.

Connect calcula el subtotal de cada línea como round(cantidad × precioUnitario), igual que el portal, y el neto (o el monto exento de la 34) como la suma de esos subtotales. El IVA de la 33 se calcula una sola vez sobre ese neto. En el ejemplo: 450.000 + 80.000 + 18.000 = 548.000 de neto, 104.120 de IVA y 652.120 de total.

Connect compara cada línea de la vista previa y del documento que se firma con las que enviaste. Si el SII devuelve una línea distinta, de más o de menos, la operación se detiene antes de firmar.

Referencias

Una factura 33 o 34 puede llevar entre una y tres referencias a los documentos que la originan. Cada referencia tiene:

  • tipoDocumento: el código del documento referido, tal como lo ofrece el selector del Facturador Gratuito.
  • folio: el folio o número de ese documento, en texto y hasta 18 caracteres.
  • fecha: la fecha de ese documento, en AAAA-MM-DD.
  • razon: opcional, hasta 90 caracteres.
  • indicadorGlobal: opcional. Con 1, la referencia cubre un conjunto de documentos y el folio debe ser "0".
tipoDocumentoDocumento
801Orden de compra
802Nota de pedido
803Contrato
804Resolución
805 y 806Proceso y ficha ChileCompra
813Pasaporte
820Código de registro de Economía
821Georreferencia
822Rol de avalúo del predio
823Plan de manejo Conaf
HESHoja de entrada de servicio

También puedes referir un documento tributario por su código: 30, 32, 33, 34, 35, 38, 39, 40, 41, 43, 45, 46, 48, 50, 52 (guía de despacho), 55, 56, 60, 61 o 103. En ese caso el folio es un número mayor que 0, sin ceros a la izquierda.

Una factura no lleva código de referencia: anular una factura se hace con su nota de anulación, y corregir montos de una 34, con una nota de corrección.

Connect compara las referencias de la vista previa y del documento que se firma con las que enviaste. Si el SII devuelve otras, la operación se detiene antes de firmar.

Factura exenta 34

La 34 lleva el mismo candidato con "tipoDte": "34". Sus líneas son exentas y la vista previa devuelve totales sin IVA:

{ "tributacion": "exenta", "exento": 548000, "total": 548000 }

Qué no admite esta beta

  • Contacto del receptor ni solicitante.
  • Código, unidad, descripción o descuento por línea, ni descuento global.
  • Más de diez líneas o más de tres referencias.
  • Formas de pago distintas de crédito, pagos parciales ni datos de transporte.
  • En la 33: líneas exentas, impuestos adicionales y regímenes especiales (constructoras, madera, bienes raíces, factura turística).
  • Precios unitarios con decimales.

La compatibilidad de cada conexión se confirma al previsualizar: que un campo figure en esta guía no prueba que el formulario de una empresa en particular lo acepte. La referencia completa del contrato está en sii.dte.previsualizar y sii.dte.emitir.

On this page