Facturiadocs
Referencia API

Documentos

Emisión de DTE, lectura, artefactos PDF y XML, enlaces públicos y acciones sobre un documento.

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/documentsLista los documentos emitidos
POST/documentsEmite un DTE
POST/documents/previewsCotiza y valida un documento sin emitirlo
GET/documents/previews/{preview_id}Lee una previsualización guardada
GET/documents/{document_id}Devuelve un documento
GET/documents/{document_id}/pdfDescarga el PDF
GET/documents/{document_id}/xmlDescarga el XML firmado, exactamente como se envió al SII
GET/documents/{document_id}/eventsEventos del ciclo de vida de un documento
POST/documents/{document_id}/retryReintenta un documento en failed
POST/documents/{document_id}/sendEnvía el documento por correo al receptor
POST/documents/{document_id}/credit_noteEmite una nota de crédito contra este documento
POST/documents/{document_id}/public_linksCrea o rota los enlaces públicos de los artefactos de este documento
DELETE/documents/{document_id}/public_linksRevoca todos los enlaces públicos de este documento

GET /documents

Lista los documentos emitidos

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

Parámetros

ParámetroEnRequeridoTipoNotas
Facturia-EmpresaheaderstringLa 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.
limitqueryinteger
cursorquerystringCursor opaco tomado del next_cursor de una respuesta anterior.
statusqueryqueued · sent · accepted · reparo · rejected · failed · annulled
tipo_dtequery33 · 34 · 39 · 41 · 46 · 52 · 56 · 61
folioqueryinteger
receptor_rutqueryRut
external_idquerystring
issue_date[gte]querystring
issue_date[lte]querystring
created_at[gte]querystring

Respuestas

CódigoSignificadoCuerpo
200Una lista de documentos.lista de Document
400Entrada mal formada o incompleta.ErrorResponse

POST /documents

Emite un DTE

Síncrono: devuelve 201 con un folio asignado y status: queued. La ida y vuelta al SII es asíncrona — obsérvala con webhooks o consultando el documento. Todo lo que no envías se completa desde el perfil de la empresa (bloque emisor, giro, dirección), el registro de contribuyentes y las reglas tributarias del tipo.

curl -sS -X POST https://api.facturia.cl/v1/documents \
  -H "Authorization: Bearer $FACTURIA_KEY" \
  -H "Facturia-Empresa: $EMPRESA" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"tipo_dte":33,"items":[{"description":"Consultoría","quantity":1,"unit_price":1200000}]}'

Parámetros

ParámetroEnRequeridoTipoNotas
Facturia-EmpresaheaderstringLa 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-KeyheaderstringLlave 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
preview_idstringEmite una previsualización ya calculada (POST /documents/previews). La solicitud guardada se reproduce por el mismo camino de creación, así que la emisión no difiere en nada de una directa. Solo puedes acompañarla de external_id y metadata — nada que cambie un monto, un receptor o una fecha. Emitir dos veces la misma previsualización devuelve el documento original con 200, no un segundo 201. Ej.: "prev_01K2R9M3D8V5QW7N".
tipo_dte33 · 34 · 39 · 41 · 46 · 52 · 56 · 6133 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.
external_idstringTu propio identificador. Único por empresa; uno duplicado devuelve 409 external_id_exists.
issue_datestringPor defecto, hoy en America/Santiago.
prices_include_taxbooleanPor defecto true para 39/41 y false para todo otro tipo.
receptorParty
itemsDocumentItem[]
global_discountsobject[]
referencesDocumentReference[]
dispatchobjectObligatorio para el tipo 52.
withholdingobjectTipo 46 — tú eres el agente retenedor.
paymentobject
totalsTotals + any
pdfobject
xmlobjectEl artefacto XML comparte el mecanismo de enlace público del PDF en los mismos términos: es el archivo que el sistema contable del receptor realmente ingiere, así que dejarlo tras una llave obligaría a cada integrador a proxear un archivo que ya generamos.
notesstring
metadataobjectHasta 20 llaves de ≤500 caracteres cada una. Se guardan y se devuelven intactas; nunca llegan al SII.
testobjectSolo en modo test. Enviarlo con una llave live falla con 400 test_field_in_live_mode.
Respuestas
CódigoSignificadoCuerpo
201Documento creado y encolado para transmisión.Document
400Entrada mal formada o incompleta.ErrorResponse
402Cuota del plan agotada.ErrorResponse
403Llave válida pero sin permiso: scope, lista blanca de empresas o modo.ErrorResponse
409Conflicto de estado: reutilización de idempotencia, external_id duplicado o artefacto no listo.ErrorResponse
422Bien formado pero viola una regla del dominio: folios agotados, ventana de acuse cerrada.ErrorResponse
429Demasiadas solicitudes.ErrorResponse

POST /documents/previews

Cotiza y valida un documento sin emitirlo

Corre el validador de emisión COMPLETO — los mismos rechazos, con las mismas palabras — y después no emite nada. folio es null porque no se tomó ninguno; folio_preview es el folio que se USARÍA, leído del contador y no reservado.

Se guarda una hora y se lee con GET /documents/previews/\{preview_id\}, que devuelve lo que se calculó en vez de volver a cotizar: que los totales cambien entre que se muestran y que se aprueban es justamente la falla que este flujo existe para evitar.

Para emitirla, manda \{"preview_id": "prev_…"\} a POST /documents. Emitir dos veces la misma previsualización devuelve el documento ORIGINAL con 200 y no gasta un segundo folio — una propiedad garantizada en la base de datos, porque un agente que reintenta una llamada de herramienta es el caso normal aquí y los agentes rara vez mandan Idempotency-Key.

curl -sS -X POST https://api.facturia.cl/v1/documents/previews \
  -H "Authorization: Bearer $FACTURIA_KEY" \
  -H "Facturia-Empresa: $EMPRESA" \
  -H "Content-Type: application/json" \
  -d '{"tipo_dte":33,"items":[{"description":"Consultoría","quantity":1,"unit_price":1200000}]}'

Parámetros

ParámetroEnRequeridoTipoNotas
Facturia-EmpresaheaderstringLa 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.

Cuerpo

CampoTipoRequeridoNotas
preview_idstringEmite una previsualización ya calculada (POST /documents/previews). La solicitud guardada se reproduce por el mismo camino de creación, así que la emisión no difiere en nada de una directa. Solo puedes acompañarla de external_id y metadata — nada que cambie un monto, un receptor o una fecha. Emitir dos veces la misma previsualización devuelve el documento original con 200, no un segundo 201. Ej.: "prev_01K2R9M3D8V5QW7N".
tipo_dte33 · 34 · 39 · 41 · 46 · 52 · 56 · 6133 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.
external_idstringTu propio identificador. Único por empresa; uno duplicado devuelve 409 external_id_exists.
issue_datestringPor defecto, hoy en America/Santiago.
prices_include_taxbooleanPor defecto true para 39/41 y false para todo otro tipo.
receptorParty
itemsDocumentItem[]
global_discountsobject[]
referencesDocumentReference[]
dispatchobjectObligatorio para el tipo 52.
withholdingobjectTipo 46 — tú eres el agente retenedor.
paymentobject
totalsTotals + any
pdfobject
xmlobjectEl artefacto XML comparte el mecanismo de enlace público del PDF en los mismos términos: es el archivo que el sistema contable del receptor realmente ingiere, así que dejarlo tras una llave obligaría a cada integrador a proxear un archivo que ya generamos.
notesstring
metadataobjectHasta 20 llaves de ≤500 caracteres cada una. Se guardan y se devuelven intactas; nunca llegan al SII.
testobjectSolo en modo test. Enviarlo con una llave live falla con 400 test_field_in_live_mode.
Respuestas
CódigoSignificadoCuerpo
201La previsualización calculada. No se emitió nada ni se reservó folio.DocumentPreview
400Entrada mal formada o incompleta.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

GET /documents/previews/{preview_id}

Lee una previsualización guardada

Devuelve lo que se calculó, nunca un recálculo. Una previsualización ya emitida sigue siendo legible con emitted: true y un consumed_at; una sin usar desaparece una hora después de creada y responde 404.

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

Parámetros

ParámetroEnRequeridoTipoNotas
preview_idpathstring
Facturia-EmpresaheaderstringLa 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
200The preview.DocumentPreview
404No existe ese objeto bajo esta llave.ErrorResponse

GET /documents/{document_id}

Devuelve un documento

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

Parámetros

ParámetroEnRequeridoTipoNotas
document_idpathstring
Facturia-EmpresaheaderstringLa 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.
expandquerystringSeparados por coma. Uno o más de xml, pdf_base64, events, references, received_document.

Respuestas

CódigoSignificadoCuerpo
200El documento.Document
404No existe ese objeto bajo esta llave.ErrorResponse

GET /documents/{document_id}/pdf

Descarga el PDF

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

Parámetros

ParámetroEnRequeridoTipoNotas
document_idpathstring
Facturia-EmpresaheaderstringLa 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.
formatquerycarta · 80mm
copyqueryoriginal · cedible · bothcedible está disponible solo para tipo_dte 33 en el lanzamiento — es el layout que ya pasó la revisión de muestras impresas del SII. Cualquier otro tipo devuelve 422 cedible_not_available. El tipo 34 se desbloquea cuando pase su muestra; sigue el changelog.

Respuestas

CódigoSignificadoCuerpo
200El PDF generado.application/pdf
404No existe ese objeto bajo esta llave.ErrorResponse
409Conflicto de estado: reutilización de idempotencia, external_id duplicado o artefacto no listo.ErrorResponse

GET /documents/{document_id}/xml

Descarga el XML firmado, exactamente como se envió al SII

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

Parámetros

ParámetroEnRequeridoTipoNotas
document_idpathstring
Facturia-EmpresaheaderstringLa 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
200El XML EnvioDTE / EnvioBOLETA firmado (ISO-8859-1).application/xml
404No existe ese objeto bajo esta llave.ErrorResponse
409Conflicto de estado: reutilización de idempotencia, external_id duplicado o artefacto no listo.ErrorResponse

GET /documents/{document_id}/events

Eventos del ciclo de vida de un documento

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

Parámetros

ParámetroEnRequeridoTipoNotas
document_idpathstring
Facturia-EmpresaheaderstringLa 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
200Los eventos, del más antiguo al más nuevo.lista de DocumentEvent

POST /documents/{document_id}/retry

Reintenta un documento en failed

Reutiliza el folio ya asignado. Nunca crea un segundo documento.

curl -sS -X POST https://api.facturia.cl/v1/documents/doc_01K2R7Q4XW9M3B8ZC5YHTVJD6N/retry \
  -H "Authorization: Bearer $FACTURIA_KEY" \
  -H "Facturia-Empresa: $EMPRESA"

Parámetros

ParámetroEnRequeridoTipoNotas
document_idpathstring
Facturia-EmpresaheaderstringLa 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
200El documento, de vuelta en queued.Document
409Conflicto de estado: reutilización de idempotencia, external_id duplicado o artefacto no listo.ErrorResponse

POST /documents/{document_id}/send

Envía el documento por correo al receptor

curl -sS -X POST https://api.facturia.cl/v1/documents/doc_01K2R7Q4XW9M3B8ZC5YHTVJD6N/send \
  -H "Authorization: Bearer $FACTURIA_KEY" \
  -H "Facturia-Empresa: $EMPRESA" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"to":["pagos@andina.cl"],"attach":["pdf","xml"]}'

Parámetros

ParámetroEnRequeridoTipoNotas
document_idpathstring
Facturia-EmpresaheaderstringLa 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-KeyheaderstringLlave 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
tostring[]
attachpdf · xml · cedible[]Por defecto: ["pdf","xml"].
Respuestas
CódigoSignificadoCuerpo
202Encolado para envío.
409Conflicto de estado: reutilización de idempotencia, external_id duplicado o artefacto no listo.ErrorResponse

POST /documents/{document_id}/credit_note

Emite una nota de crédito contra este documento

En Chile no existe «borrar una factura». code: 1 anula el documento referenciado, 2 corrige texto y 3 corrige montos (con items para los valores corregidos).

curl -sS -X POST https://api.facturia.cl/v1/documents/doc_01K2R7Q4XW9M3B8ZC5YHTVJD6N/credit_note \
  -H "Authorization: Bearer $FACTURIA_KEY" \
  -H "Facturia-Empresa: $EMPRESA" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"code":1,"reason":"content"}'

Parámetros

ParámetroEnRequeridoTipoNotas
document_idpathstring
Facturia-EmpresaheaderstringLa 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-KeyheaderstringLlave 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
code1 · 2 · 3
reasonstring
itemsDocumentItem[]
Respuestas
CódigoSignificadoCuerpo
201La nota de crédito (tipo 61).Document
422Bien formado pero viola una regla del dominio: folios agotados, ventana de acuse cerrada.ErrorResponse

POST /documents/{document_id}/public_links

Crea o rota los enlaces públicos de los artefactos de este documento

Enciende un enlace público después de emitir, o rota uno existente (lo que invalida la URL anterior). Un enlace expone exactamente un artefacto de un documento — nunca los demás documentos de la empresa ni datos de la cuenta — y no puede escalarse a una credencial de API.

curl -sS -X POST https://api.facturia.cl/v1/documents/doc_01K2R7Q4XW9M3B8ZC5YHTVJD6N/public_links \
  -H "Authorization: Bearer $FACTURIA_KEY" \
  -H "Facturia-Empresa: $EMPRESA" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"artifacts":["pdf","xml"]}'

Parámetros

ParámetroEnRequeridoTipoNotas
document_idpathstring
Facturia-EmpresaheaderstringLa 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-KeyheaderstringLlave 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
artifactspdf · xml[]Por defecto: ["pdf","xml"].
expires_in_daysinteger,nullNull significa que el enlace no expira. Por defecto: 90.
expires_in_secondsinteger,nullLa misma vigencia en segundos, acotada entre 30 s y 365 días. GANA cuando se mandan las dos unidades: los días no pueden expresar el enlace de diez minutos que necesita un agente, y la unidad más corta y específica es la lectura más segura de una solicitud ambigua.
Respuestas
CódigoSignificadoCuerpo
200Los enlaces recién creados. NO el documento: la mitad secreta de cada URL se guarda hasheada, así que esta respuesta es el único lugar donde una URL que funciona llega a existir. Guárdala.PublicLinks
409Conflicto de estado: reutilización de idempotencia, external_id duplicado o artefacto no listo.ErrorResponse

Revoca todos los enlaces públicos de este documento

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

Parámetros

ParámetroEnRequeridoTipoNotas
document_idpathstring
Facturia-EmpresaheaderstringLa 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
204Revocados. Las URL existentes dejan de resolver de inmediato.

En esta página