---
title: "Paso 5: Consultar el estado (obligatorio)"
description: "Cómo saber si el SII aceptó, aceptó con reparos o rechazó el envío de facturas, notas, guías o boletas, cómo interpretar los estados y cómo obtener el detalle de un rechazo."
type: "academy"
category: "lesson"
tags: []
authors: [Anonymous]
date: "2026-11-05"
last_update: "2026-11-05"
time_minutes: 12
draft: false
unlisted: false
url: "https://www.apigateway.cl/academy/emision-de-dte/emision/paso-5-consultar-el-estado"
---

# 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
```

```json
{
    "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

```json
{
    "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. |

> [!INFO] 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
```

```json
{
    "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:

```json
{
    "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:

```json
{
    "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.

```json
{
    "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](https://www.apigateway.cl/academy/emision-de-dte/emision/paso-4-enviar-al-sii#42-boletas)). 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). |

> [!WARNING] 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](https://www.apigateway.cl/academy/emision-de-dte/preparacion/tu-primera-llamada#en-python):

```python
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')`.

> [!TIP] 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:

```bash
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:

```json
{
    "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
```

```json
{
    "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:

```json
{
    "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. |

> [!NOTE] 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](https://www.apigateway.cl/docs/api) en **API DTE - Documentos Emitidos**.


---
Última actualización el 05/11/2026

