Emisión de DTE
Paso 5: Consultar el estado (obligatorio)
El SII procesa los envíos en segundo plano. Con el Track ID del paso anterior consultas en qué va el procesamiento y, al final, si los documentos fueron aceptados o rechazados.
Qué operación usar
Se consulta con el mismo servicio con que enviaste:
| Enviaste con | Consulta con |
|---|---|
sii_dte/sendXmlDocument (sobre EnvioDTE) |
billing/integration/sii_dte/checkXmlDocumentSentStatus |
sii_boleta/sendXmlDocument (sobre EnvioBOLETA) |
billing/integration/sii_boleta/checkXmlDocumentSentStatus |
Las dos reciben los mismos parámetros. Usa el mismo ambiente (environment) que usaste al enviar.
5.1. Facturas, notas y guías
La solicitud
POST https://app.apigateway.cl/api/v2/libredte/billing/integration/sii_dte/checkXmlDocumentSentStatus
{
"parameters": {
"request": {
"certificate": {
"certificate": "-----BEGIN CERTIFICATE-----\nMIIG...\n-----END CERTIFICATE-----",
"privateKey": "-----BEGIN PRIVATE KEY-----\nMIIE...\n-----END PRIVATE KEY-----"
},
"options": {
"environment": 1
}
},
"trackId": 4753411374,
"company": "88888888-8"
}
}
La respuesta
{
"data": {
"query_number": 532120,
"query_datetime": "2026-10-30T09:31:02",
"track_id": 4753411374,
"company": "88888888-8",
"status": "EPR",
"error": false,
"description": "Envío Procesado",
"resume": {
"reported": 1,
"accepted": 1,
"rejected": 0,
"repairs": 0
},
"documents": {
"33": {
"type": 33,
"reported": 1,
"accepted": 1,
"rejected": 0,
"repairs": 0
}
}
}
}
| Campo | Qué es |
|---|---|
status |
Código del estado del envío (ver tabla). |
error |
true si el envío fue rechazado o hubo un error en la consulta. |
description |
Glosa del estado que entrega el SII. |
resume |
Cuántos documentos se informaron, aceptaron, rechazaron o tienen reparos. |
documents |
El mismo resumen, por tipo de documento. |
query_number, query_datetime |
El número y la fecha de la consulta en el SII. |
Los estados del envío
status |
Significado | ¿Es final? | Qué hacer |
|---|---|---|---|
SOK |
Esquema validado | No | Consulta de nuevo más tarde |
CRT |
Carátula OK | No | Consulta de nuevo más tarde |
FOK |
Firma del envío validada | No | Consulta de nuevo más tarde |
PDR |
Envío en proceso | No | Consulta de nuevo más tarde |
EPR |
Envío procesado | Sí | Revisa resume (ver abajo) |
RSC |
Rechazado por error en el esquema | Sí | Corrige el XML y emite de nuevo, con el mismo folio |
RFR |
Rechazado por error en la firma | Sí | Revisa el certificado y emite de nuevo, con el mismo folio |
RCT |
Rechazado por error en la carátula | Sí | Revisa el emisor, la resolución y el ambiente del sobre |
Cuando el estado es EPR, el resultado de cada documento está en resume:
| Resultado | Cómo se ve | Significado |
|---|---|---|
| Aceptado | accepted = reported |
El documento es válido. |
| Aceptado con reparos | repairs > 0 |
El documento es válido, pero tiene observaciones menores. Revísalas para corregir los siguientes documentos. |
| Rechazado | rejected > 0 |
El documento no es válido. Hay que corregirlo y emitirlo de nuevo, con el mismo folio. |
Si status es un número negativo (por ejemplo -11) o un código como 001, es un error de la consulta (no del documento): el Track ID no existe, el usuario no está autorizado o la sesión del SII expiró. Revisa description y que el RUT de company sea el mismo con que enviaste.
¿Por qué fue rechazado?
El estado indica que un documento fue rechazado, pero no siempre por qué. Para obtener el detalle, pide al SII que te envíe el resultado por correo:
POST https://app.apigateway.cl/api/v2/libredte/billing/integration/sii_dte/requestXmlDocumentSentStatusByEmail
{
"parameters": {
"request": {
"certificate": { "certificate": "-----BEGIN CERTIFICATE-----\nMIIG...\n-----END CERTIFICATE-----", "privateKey": "-----BEGIN PRIVATE KEY-----\nMIIE...\n-----END PRIVATE KEY-----" },
"options": { "environment": 1 }
},
"trackId": 4753411374,
"company": "88888888-8"
}
}
La respuesta confirma que el SII recibió la solicitud:
{
"data": {
"company": "88888888-8",
"track_id": 4753411374,
"status": "0",
"description": "Requerimiento recibido OK."
}
}
El SII envía el detalle de los rechazos al correo configurado en el SII para la empresa (no se puede elegir otro desde la API).
5.2. Boletas
La solicitud
POST https://app.apigateway.cl/api/v2/libredte/billing/integration/sii_boleta/checkXmlDocumentSentStatus
Los parámetros son los mismos de 5.1 (request, trackId y company), con el Track ID que entregó sii_boleta/sendXmlDocument.
La respuesta
Mientras el SII procesa el envío, el estado no es final y todavía no hay resultados:
{
"data": {
"track_id": 33790541,
"company": "88888888-8",
"status": "SOK",
"error": false,
"description": "Schema validado",
"resume": {
"reported": 0,
"accepted": 0,
"rejected": 0,
"repairs": 0
},
"documents": [],
"received_at": "2026-11-04T12:18:29-03:00",
"sender": "11222333-9",
"retry_after": null,
"location": null,
"rate_limit": null,
"details": []
}
}
Cuando el estado es final, resume y documents traen los resultados, igual que en 5.1. Si el SII rechazó algo, error es true y details explica el motivo. En este ejemplo el SII rechazó el envío completo por un error de schema: el giro del emisor superaba el largo máximo.
{
"data": {
"track_id": 33790541,
"company": "88888888-8",
"status": "RSC",
"error": true,
"description": "Rechazado por schema",
"resume": {
"reported": 0,
"accepted": 0,
"rejected": 0,
"repairs": 0
},
"documents": [],
"received_at": "2026-11-04T12:18:29-03:00",
"sender": "11222333-9",
"retry_after": null,
"location": null,
"rate_limit": null,
"details": [
{
"type": null,
"folio": null,
"status": "RCH",
"description": "DTE Rechazado",
"errors": [
{
"section": "ENV",
"line": 0,
"level": 3,
"code": 0,
"description": "Error en Schema",
"detail": "[0] LSX-00222: \"VENTA AL POR MENOR DE COMPUTADORES, EQUIPO PERIFERICO, PROGR"
}
]
}
]
}
}
| Campo | Qué es |
|---|---|
status |
Código del estado del envío (ver tabla). |
error |
true si el envío o alguna boleta fue rechazada. |
description |
Explicación del estado. |
resume |
Cuántas boletas se informaron, aceptaron, rechazaron o tienen reparos. |
documents |
El mismo resumen, por tipo de documento (39 o 41). Mientras no hay resultados, viene vacío ([]). |
details |
Una entrada por cada problema: una boleta rechazada o con reparos, o el envío completo si el rechazo es de todo el sobre. Si no hay problemas, viene vacío. |
received_at, sender |
Cuándo recibió el SII el sobre y quién lo envió. |
retry_after, rate_limit |
La espera que pide el SII y el límite de solicitudes del servicio de boletas (ver paso 4). Pueden venir en null. |
Los estados del envío de boletas
status |
Significado | ¿Es final? | Qué hacer |
|---|---|---|---|
REC |
Envío recibido | No | Consulta de nuevo más tarde |
SOK |
Schema validado | No | Consulta de nuevo más tarde |
CRT |
Carátula OK | No | Consulta de nuevo más tarde |
FOK |
Firma del envío validada | No | Consulta de nuevo más tarde |
PRD |
Envío en proceso | No | Consulta de nuevo más tarde |
EPR |
Envío procesado | Sí | Revisa resume y details |
RPR |
Aceptado con reparos | Sí | Revisa details para corregir las siguientes boletas |
RCH |
Rechazado por errores en la información | Sí | Revisa details, corrige y emite de nuevo, con el mismo folio |
RCO |
Rechazado por consistencia | Sí | Revisa details, corrige y emite de nuevo, con el mismo folio |
RSC |
Rechazado por schema | Sí | Corrige el XML y emite de nuevo, con el mismo folio |
RFR |
Rechazado por error en la firma | Sí | Revisa el certificado y emite de nuevo, con el mismo folio |
RCT |
Rechazado por error en la carátula | Sí | Revisa el emisor, la resolución y el ambiente del sobre |
RPT |
Envío repetido rechazado | Sí | Ese sobre ya se había enviado: consulta el estado con el Track ID del primer envío |
VOF |
No se encontró el archivo XML | Sí | Envía de nuevo el mismo sobre |
En los estados de rechazo, error es true.
¿Por qué fue rechazada una boleta?
A diferencia de las facturas, notas y guías, el detalle viene en la misma respuesta, en details. Cada entrada tiene:
| Campo | Qué es |
|---|---|
type y folio |
Qué boleta es. Vienen en null cuando el rechazo es de todo el envío, como en el ejemplo. |
status |
DOK aceptada, RLV aceptada con reparos leves, RPR aceptada con reparos, RCH rechazada. |
description |
Explicación del estado. |
errors |
Los problemas encontrados. section es la parte del documento (ENV envío, CRT carátula, HED encabezado, DET detalle, REF referencias, TED timbre, CAF folios, DTE documento); level es la gravedad (1 reparo leve, 2 reparo, 3 rechazo); description y detail explican el problema. |
Qué hacer con el folio según el resultado
La regla es la misma para facturas, notas, guías y boletas, y vale tanto si el SII rechaza el envío completo como si rechaza solo un documento dentro de un envío procesado:
| Resultado | ¿Es válido? | El folio | Qué hacer |
|---|---|---|---|
| Aceptado | Sí | Queda usado. | Guarda el estado. |
| Aceptado con reparos | Sí | Queda usado: no se puede volver a usar. | Revisa los reparos para no repetirlos en los documentos siguientes. |
| Rechazado | No: el SII lo considera no emitido. | Queda libre: se puede volver a usar. | Corrige los datos y emite el documento de nuevo con el mismo folio: constrúyelo otra vez (paso 1), arma un sobre nuevo (paso 3) y envíalo (paso 4). |
Si el envío falló (el SII no respondió y no tienes Track ID), el documento no se construye de nuevo: reintenta el envío del mismo sobre. Solo cuando el SII rechazó el documento lo construyes otra vez, corregido y con el mismo folio.
Cada cuánto consultar
El SII suele procesar un envío en pocos minutos, pero puede demorar más en horas de alta carga. Una estrategia razonable:
- Espera unos 30 segundos después del envío antes de la primera consulta.
- Si el estado no es final, vuelve a consultar con esperas cada vez más largas (1, 2, 5, 10 minutos…).
- Si después de varias horas sigue sin estado final, márcalo para revisión.
Un estado es final cuando ya no va a cambiar. Cualquier otro código significa que el SII sigue procesando, o que la consulta misma falló (por ejemplo, un código negativo): en los dos casos se vuelve a consultar más tarde. Esta función sirve para facturas y boletas; solo cambia el worker. Usa la función libredte() de Tu primera llamada:
import time
ESTADOS_FINALES = {'EPR', 'LOK', 'RPR', 'RLV', 'RCH', 'RCO', 'RFR', 'RSC', 'RCT', 'RPT', 'VOF'}
def esperar_estado(worker: str, request_sii: dict, track_id: int, company: str,
espera_inicial: int = 30) -> dict | None:
"""Consulta el estado hasta que sea final.
worker: 'sii_dte' (facturas, notas y guías) o 'sii_boleta' (boletas).
espera_inicial: en boletas, usa max(30, retry_after or 0) de la respuesta del envío.
Entrega el estado final, o None si se acabaron las esperas sin estado final.
"""
for espera in [espera_inicial, 60, 120, 300, 600, 1800, 3600, 7200]: # segundos
time.sleep(espera)
try:
estado = libredte(f'billing/integration/{worker}/checkXmlDocumentSentStatus', {
'request': request_sii,
'trackId': track_id,
'company': company,
})
except RuntimeError:
continue # La consulta falló (por ejemplo, el SII no respondió): se reintenta.
if estado['status'] in ESTADOS_FINALES:
return estado
return None # Sin estado final: márcalo para revisión.
Por ejemplo, para una factura: esperar_estado('sii_dte', {'certificate': CERTIFICADO, 'options': {'environment': 1}}, track_id, '88888888-8').
No hagas esperar al usuario mientras el SII procesa. Emite, envía, guarda el Track ID y deja que un proceso programado (cron, cola de tareas) consulte los estados pendientes.
Verificar un documento puntual
Cuando un documento ya fue aceptado, puedes verificar que exista en el SII y que sus datos coincidan.
Facturas, notas y guías
Usa el recurso de Documentos Emitidos, con el tipo, el folio, la fecha, el monto y el receptor:
curl -X POST "https://app.apigateway.cl/api/v2/sii/dte/emitidos/verificar?certificacion=1" \
-H "Authorization: Token $API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"auth": {
"cert": {
"cert-data": "-----BEGIN CERTIFICATE-----\nMIIG...\n-----END CERTIFICATE-----",
"pkey-data": "-----BEGIN PRIVATE KEY-----\nMIIE...\n-----END PRIVATE KEY-----"
}
},
"dte": {
"emisor": "88888888-8",
"dte": 33,
"folio": 1,
"fecha": "2026-10-29",
"total": 119000,
"receptor": "77777777-7"
}
}'
La respuesta:
{
"data": {
"status": "DOK",
"detalle": "Documento recibido por el SII. Datos coinciden con los registrados.",
"track_id": 4753411374,
"razon_social": "MI EMPRESA SPA"
}
}
status |
Significado |
|---|---|
DOK |
Documento recibido por el SII. Los datos coinciden. |
DNK |
Documento recibido por el SII, pero los datos no coinciden. |
FAU |
El SII no ha recibido un documento con ese folio. |
FNA |
El folio no está autorizado por el SII. |
track_id es el del envío en que llegó el documento (0 si el SII no lo informa) y razon_social es la del emisor según el SII (null si no viene).
Boletas
Usa sii_boleta/validateDocument. El SII exige todos los datos: el tipo, el folio, la fecha, el total y el receptor.
POST https://app.apigateway.cl/api/v2/libredte/billing/integration/sii_boleta/validateDocument
{
"parameters": {
"request": {
"certificate": {
"certificate": "-----BEGIN CERTIFICATE-----\nMIIG...\n-----END CERTIFICATE-----",
"privateKey": "-----BEGIN PRIVATE KEY-----\nMIIE...\n-----END PRIVATE KEY-----"
},
"options": {
"environment": 1
}
},
"company": "88888888-8",
"document": 39,
"number": 1,
"date": "2026-11-04",
"total": 23800,
"recipient": "66666666-6"
}
}
| Parámetro | Qué es |
|---|---|
company |
El RUT del emisor. |
document |
El tipo de boleta: 39 o 41. |
number |
El folio. |
date |
La fecha de emisión (AAAA-MM-DD). |
total |
El total de la boleta. |
recipient |
El RUT del receptor (66666666-6 si no se identificó). |
La respuesta:
{
"data": {
"status": "DOK",
"description": "Documento Recibido por el SII. Datos Coinciden con los Registrados",
"rate_limit": null
}
}
Los códigos que puede traer status:
status |
Significado |
|---|---|
DOK |
Boleta recibida por el SII. Los datos coinciden. |
DNK |
Boleta recibida por el SII, pero los datos no coinciden. |
FAU |
El SII no ha recibido una boleta con ese folio. |
FNA |
El folio no está autorizado por el SII. |
FAN |
La boleta fue anulada. |
EMP |
La empresa no está autorizada a emitir documentos electrónicos. |
ANC, MMC, TMC |
Una nota de crédito anula la boleta, modifica sus montos o modifica su texto. |
AND, MMD, TMD |
Una nota de débito anula la boleta, modifica sus montos o modifica su texto. |
El recurso POST /api/v2/sii/dte/emitidos/estado_envio/{emisor}/{trackId} también entrega el estado de un envío EnvioDTE, con el certificado en auth.cert. Revisa la documentación de la API en API DTE - Documentos Emitidos.