Emisión de DTE

Aprende desde cero a emitir facturas, boletas, notas de crédito, guías de despacho y otros documentos tributarios electrónicos desde tu software con API Gateway V2.

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.
Los códigos negativos

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).
Un rechazo no es un envío fallido

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:

  1. Espera unos 30 segundos después del envío antes de la primera consulta.
  2. Si el estado no es final, vuelve a consultar con esperas cada vez más largas (1, 2, 5, 10 minutos…).
  3. 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').

Consulta desde un proceso en segundo plano

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.
Otra forma de consultar el estado de facturas, notas y guías

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.

En esta página

Última actualización el 05/11/2026 por Anonymous