Facturiadocs
Emisión

Tipos de documento

Los ocho tipos de DTE que emite la v1, sus bloques específicos y cómo funcionan las referencias.

Los tipos soportados

tipo_dteDocumentoLos precios sonNotas
33Factura electrónica (afecta)netosCedible
34Factura no afecta o exentanetosTodas las líneas exentas
39Boleta electrónica (afecta)brutos (IVA incluido)Receptor opcional (66666666-6)
41Boleta exentabrutosReceptor opcional
46Factura de compranetosTú retienes el IVA. No la emite el canal sfg
52Guía de despachonetosRequiere un bloque dispatch. La emiten ambos canales
56Nota de débitonetosRequiere una referencia
61Nota de créditonetosRequiere una referencia

No están en la v1: exportación (110/111/112), liquidación factura (43) y boleta de honorarios (que es un régimen del SII completamente distinto).

Las boletas viajan por otro camino, y no te enteras

Las boletas (39/41) usan un transporte distinto al de las facturas — REST en vez de SOAP, por lotes, con su propio token y su propia certificación. Eso es invisible para ti: mismo endpoint, mismos campos, mismos estados.

Referencias

Una referencia apunta a otro documento. La necesitan obligatoriamente las notas de crédito (61) y de débito (56), y es opcional en el resto.

"references": [
  { "tipo_dte": 33, "folio": 412, "date": "2026-08-14", "code": 3, "reason": "Corrige montos" }
]
codeSignificado
1Anula el documento referenciado
2Corrige texto
3Corrige montos

Las referencias a documentos que no son DTE — una orden de compra, un contrato — usan los códigos de tipo_dte del SII en el rango 800 y omiten code:

"references": [
  { "tipo_dte": 801, "folio": "OC-99213", "date": "2026-08-01", "code": null, "reason": "Orden de compra" }
]

references[].date es opcional: si se omite, toma la issue_date del propio documento. references[].folio acepta número o string; un número se convierte a su string decimal, porque <FolioRef> es xs:string en el esquema del SII — un folio como OC-99213 nunca podría serlo.

Guía de despacho (52)

Requiere un bloque dispatch. La emiten los dos canales: el sfg (Portal MIPYME) por su formulario y el mercado con el motor certificado, que escribe el IndTraslado y el bloque Transporte del DTE. Lo que cambia entre canales no es si puedes emitirla, sino qué campos del dispatch caben en cada uno — al final de esta sección.

curl -sS https://api.facturia.cl/v1/documents \
  -H "Authorization: Bearer $FACTURIA_KEY" -H "Facturia-Empresa: $EMPRESA" \
  -H "Content-Type: application/json" \
  -d '{
    "tipo_dte": 52,
    "receptor": { "rut": "76543212-K", "address": { "street": "Ruta 5 Sur km 12", "comuna": "San Bernardo", "city": "Santiago" } },
    "dispatch": {
      "transfer_type": "venta",
      "carrier": { "rut": "11111111-1", "plate": "KJHZ42", "driver_rut": "13456789-9", "driver_name": "Ana Rojas" },
      "requester_rut": "76543212-K"
    },
    "items": [{ "description": "Pallet de insumos", "quantity": 4, "unit_price": 120000 }]
  }'

dispatch.transfer_type es el IndTraslado del SII: dice qué clase de movimiento documenta la guía, y es obligatorio (422 dispatch_incomplete si falta). No hay default: el formulario del propio SII parte marcando «operación constituye venta», que es justo lo que no quieres heredar cuando estás moviendo mercadería entre tus bodegas.

transfer_typeIndTrasladoQué es
venta1La operación constituye venta
venta_por_efectuar2Ventas por efectuar
consignacion3Consignaciones
entrega_gratuita4Entrega gratuita
traslado_interno5Traslados internos
otros6Otros traslados que no son venta
devolucion7Guía de devolución
traslado_exportacion8Traslado para exportación (no venta)
venta_exportacion9Venta para exportación

Solo venta y venta_exportacion son ventas: en las demás la guía declara el valor de la mercadería para efectos del traslado y no genera débito fiscal. Los dos canales se comportan distinto con los montos. Por canal mercado un monto cero o simbólico es un documento legítimo y no lo rechazamos — el SII aceptó exactamente uno (guía de traslado interno en $0) el 2026-08-21. Por canal sfg cada línea debe ir con precio mayor que 0 y el documento debe sumar más que 0, o la petición se rechaza con 422 sfg_guia_zero_amount: el portal valida su formulario de guía con las validaciones de la factura, sea cual sea la clase de traslado, y lo dice con sus propias palabras — «Precio del primer item del detalle debe ser mayor a 0 … Valor Total Factura debe igual a la suma del Monto neto + IVA y mayor que 0». Es una regla del portal, no del impuesto, y por eso aplica a un solo canal.

El bloque de transporte es opcional (una guía que se lleva el propio receptor no nombra transportista).

dispatch.destination es una dirección de entrega distinta de receptor.address. El canal mercado la acepta y la escribe en el bloque Transporte del DTE. El canal sfg la rechaza con 422 dispatch_not_available_for_channel: el formulario de guía del portal lleva una sola dirección, así que una destinación distinta no se podría imprimir — ponla en receptor.address. Lleva el mismo objeto que receptor.address (street / comuna / city); el SII los limita a 70 / 20 / 20 caracteres y lo que se pase se rechaza con 400 field_too_long, nunca se trunca.

Los RUT del bloque dispatch — requester_rut, carrier.rut, carrier.driver_rut — se guardan en la forma del SII, así que 76.123.456-7 o un dígito verificador en minúscula se aceptan y se normalizan al entrar, igual que receptor.rut.

dispatch.dispatch_type es el TipoDespacho del SII: por cuenta de quién se despacha la mercadería y a las instalaciones de quién va. Es opcional — a diferencia de transfer_type no cambia lo que el documento significa, así que una guía que no lo trae es una guía completa.

dispatch_typeTipoDespachoQué es
receiver_account1Despacho por cuenta del receptor del documento: tu cliente, o el vendedor cuando el documento es una factura de compra
issuer_to_customer_site2Por cuenta del emisor, a instalaciones del cliente
issuer_to_other_site3Por cuenta del emisor, a otras instalaciones (entrega en obra, la bodega de un tercero)

El canal mercado lo escribe en el IdDoc/TipoDespacho del DTE. El canal sfg lo rechaza con 422 dispatch_not_available_for_channel: el formulario de guía del portal tiene un solo selector de traslado, el de la clase de movimiento, y ningún campo de TipoDespacho, así que el dato no se podría imprimir.

`dispatch.dispatch_type` cambió de vocabulario

Antes publicaba emisor_propio / emisor_arrendado / receptor, que decían de quién era el vehículo que movía la mercadería — una pregunta que el SII no hace y que no se podía escribir en ningún campo del DTE, así que el campo se rechazaba en los dos canales y nunca llegó a un documento. Se redefinió sobre la semántica del propio SII en vez de publicar un segundo campo; los tres valores antiguos hoy son 400 invalid_field. Para decir quién mueve la mercadería usa dispatch.carrier.

Nota de crédito (61) y nota de débito (56)

Autónomas, es decir sin pasar por el endpoint de conveniencia:

curl -sS https://api.facturia.cl/v1/documents \
  -H "Authorization: Bearer $FACTURIA_KEY" -H "Facturia-Empresa: $EMPRESA" \
  -H "Content-Type: application/json" \
  -d '{
    "tipo_dte": 61,
    "receptor": {
      "rut": "76543212-K",
      "giro": "Venta al por mayor de alimentos",
      "address": { "street": "Los Militares 5001, of. 302", "comuna": "Las Condes", "city": "Santiago" }
    },
    "references": [{ "tipo_dte": 33, "folio": 412, "date": "2026-08-14", "code": 3, "reason": "Corrige montos" }],
    "items": [{ "description": "Ajuste de precio", "quantity": 1, "unit_price": 120000 }]
  }'

Si lo que quieres es anular una factura, el atajo es POST /v1/documents/{document_id}/credit_note.

Factura de compra (46)

Tú eres el agente retenedor.

curl -sS https://api.facturia.cl/v1/documents \
  -H "Authorization: Bearer $FACTURIA_KEY" -H "Facturia-Empresa: $EMPRESA" \
  -H "Content-Type: application/json" \
  -d '{
    "tipo_dte": 46,
    "receptor": { "rut": "55555555-5", "legal_name": "Google Cloud EMEA Ltd", "foreign": true },
    "items": [{ "description": "Google Ads — julio 2026", "quantity": 1, "unit_price": 1000000 }],
    "withholding": { "iva": "total" }
  }'

55555555-5 es el RUT genérico del SII para proveedores extranjeros no registrados. withholding.iva: "total" produce IVA totalmente retenido — el débito del F29 cae en el código 39 y el crédito en el 519/520.

Hoy solo total es emitible: es el único <ImpAdicDTE> que el motor sabe declarar. Mandar "partial", o un rate distinto de 19, se rechaza con 422 withholding_not_supported. La retención queda en totals.other_taxes como un número negativo (p. ej. -1891 si el IVA retenido es 1891) — es la única forma de que total = net + exempt + iva + other_taxes siga siendo cierto en un documento que retiene.

La automatización que detecta estos cargos y propone el documento está en Impuestos · Tipo 46.

Boletas (39/41) y el consumidor anónimo

Las boletas pueden ir sin receptor. Cuando no hay uno, el documento va al consumidor final anónimo 66666666-6 — que es un RUT válido también en producción, y solo para boletas.

curl -sS https://api.facturia.cl/v1/documents \
  -H "Authorization: Bearer $FACTURIA_KEY" -H "Facturia-Empresa: $EMPRESA" \
  -H "Content-Type: application/json" \
  -d '{"tipo_dte":39,"items":[{"description":"Café","quantity":2,"unit_price":2500}]}'

Trampa

En una boleta, unit_price es bruto

prices_include_tax es true por defecto para 39 y 41. Los 2500 del ejemplo son 2.500 pesos con IVA incluido, no 2.500 más IVA. Si tu sistema guarda precios netos, pon "prices_include_tax": false explícitamente y normalizamos.

En una factura (33/34/56/61/46) es al revés: <PrcItem>/<MontoItem> del SII siempre es NETO (DTE_v10.xsd: MontoItem es neto salvo que venga MntBruto, que esta API nunca manda). Si mandas "prices_include_tax": true en una factura, el precio se normaliza HACIA ABAJO en la puerta: los items que devolvemos, el PDF y el <PrcItem> muestran el precio neto (11990 → 10075.6303), y el total puede quedar un peso distinto del bruto cotizado porque todo se calcula desde el precio neto ya redondeado.

En esta página