# Consultar boletas electrónicas del SII

> Lee el resumen diario de boletas electrónicas ya sincronizado para esta conexión, filtrado por período.



{/* AUTO-GENERATED by @emisso/codegen. DO NOT EDIT. */}

|                     |                                                                    |
| ------------------- | ------------------------------------------------------------------ |
| **Tool ID**         | `sii.boletas.consultar`                                            |
| **Nombre MCP**      | `sii__boletas__consultar`                                          |
| **Conector**        | `sii`                                                              |
| **Plano**           | `action`                                                           |
| **Lee el alcance**  | `boletas` (debe estar habilitado en la conexión)                   |
| **Scope (permiso)** | `sii:read`                                                         |
| **Auth**            | `none`                                                             |
| **Versión**         | `4`                                                                |
| **Sensible**        | sí                                                                 |
| **Deprecado**       | no                                                                 |
| **Comportamiento**  | readOnly=true, destructive=false, idempotent=true, openWorld=false |

> **Requiere conexión.** Indica cuál en cada llamada: header `X-Connect-Connection` en REST, campo `connectionId` en el `execute` de MCP y en las opciones del SDK. No hay resolución implícita, ni siquiera con una sola conexión activa: la conexión es la empresa. El id sale de [`conexiones.estado.consultar`](../conexiones/estado-consultar).

## Qué hace [#qué-hace]

Lectura pura: NO dispara una sincronización nueva ni contacta al SII. Si el período nunca se sincronizó, devuelve una lista vacía y 'sincronizacion: null'. Para traer datos nuevos, use 'sii.conexion.sincronizar' primero. Pagina con 'cursor': cuando la respuesta trae 'cursor' distinto de null, hay más filas. reenvía ese valor tal cual en 'cursor' para pedir la página siguiente; nunca lo construyas a mano.

## Entrada [#entrada]

| Campo     | Tipo                   | Requerido          | Descripción                                                                                                                                                                                                                                                                                                      |
| --------- | ---------------------- | ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `periodo` | string `^\d{4}-\d{2}$` | no                 | Un mes, en formato AAAA-MM y en calendario chileno (por ejemplo '2026-07'). Cada sitio de uso afina qué significa ahí: en una sincronización es el mes que se va a traer, y en una consulta a la caché es el filtro. Esta descripción base existe para que el campo nunca llegue pelado a quien lee el contrato. |
| `cursor`  | string                 | no                 | Paginación: el valor que devolvió la respuesta anterior, tal cual.                                                                                                                                                                                                                                               |
| `limit`   | entero 1-500           | no · default `100` | Filas por página.                                                                                                                                                                                                                                                                                                |

<details>
  <summary>
    JSON Schema de entrada
  </summary>

  ```json
  {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "type": "object",
    "properties": {
      "periodo": {
        "type": "string",
        "pattern": "^\\d{4}-\\d{2}$",
        "description": "Un mes, en formato AAAA-MM y en calendario chileno (por ejemplo '2026-07'). Cada sitio de uso afina qué significa ahí: en una sincronización es el mes que se va a traer, y en una consulta a la caché es el filtro. Esta descripción base existe para que el campo nunca llegue pelado a quien lee el contrato."
      },
      "cursor": {
        "description": "Paginación: el valor que devolvió la respuesta anterior, tal cual.",
        "type": "string"
      },
      "limit": {
        "default": 100,
        "description": "Filas por página.",
        "type": "integer",
        "minimum": 1,
        "maximum": 500
      }
    }
  }
  ```
</details>

## Ejemplo [#ejemplo]

```bash title="curl"
curl -X POST https://connect.emisso.ai/api/v1/tools/sii.boletas.consultar/execute \
  -H "Authorization: Bearer connect_sk_…" \
  -H "X-Connect-Connection: conn_9tKfR2mQx4Vb" \
  -H "Content-Type: application/json" \
  -d '{"input":{"periodo":"2026-07"}}'
```

```ts title="SDK TypeScript"
const data = await connect.tools.sii.boletas.consultar({ periodo: "2026-07" }, { connectionId: "conn_9tKfR2mQx4Vb" });
```

```json title="MCP · meta-tool execute"
{
  "tool": "sii.boletas.consultar",
  "params": {
    "periodo": "2026-07"
  },
  "connectionId": "conn_9tKfR2mQx4Vb"
}
```

**Salida esperada (200):**

```json
{
  "data": {
    "documentos": [
      {
        "period": "2026-07",
        "documentType": "39",
        "day": 13,
        "date": "2026-07-13",
        "totalDocumentos": 42,
        "netAmount": 389500,
        "exemptAmount": 0,
        "vatAmount": 74005,
        "totalAmount": 463505,
        "currency": "CLP",
        "channel": null
      },
      {
        "period": "2026-07",
        "documentType": "39",
        "day": 14,
        "date": "2026-07-14",
        "totalDocumentos": 51,
        "netAmount": 452000,
        "exemptAmount": 0,
        "vatAmount": 85880,
        "totalAmount": 537880,
        "currency": "CLP",
        "channel": null
      }
    ],
    "cursor": null,
    "sincronizacion": {
      "sincronizadoEn": "2026-08-06T03:15:42.000Z",
      "completo": true,
      "incompletos": 0,
      "fueraDeVentana": null,
      "perspectivasFallidas": []
    }
  },
  "meta": {
    "request_id": "req_…",
    "tool_id": "sii.boletas.consultar",
    "plane": "action",
    "latency_ms": 24,
    "audit_status": "recorded"
  }
}
```

> Recortado a dos días. Cada fila es el agregado de un día y un tipo de documento (39 = boleta afecta, 41 = boleta exenta), nunca una boleta individual.

## Salida [#salida]

| Campo                                               | Tipo                         | Requerido | Descripción                                                                                                                                                                                                                                                                             |                                                                                                                                                                                                                                                                                                                                                                                                        |
| --------------------------------------------------- | ---------------------------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `documentos`                                        | lista de objeto              | sí        | El resumen diario de boletas electrónicas que calza con el filtro. Cada fila es el agregado de un día y un tipo de boleta (39 afecta, 41 exenta), nunca una boleta individual. Los montos son enteros en pesos chilenos, y un monto que el SII no informó llega como 0, no como 'null'. |                                                                                                                                                                                                                                                                                                                                                                                                        |
| `documentos[].period`                               | string                       | sí        | El período tributario del agregado, en formato AAAA-MM.                                                                                                                                                                                                                                 |                                                                                                                                                                                                                                                                                                                                                                                                        |
| `documentos[].documentType`                         | string                       | sí        | Tipo de boleta, como texto: '39' es la boleta afecta y '41' la exenta.                                                                                                                                                                                                                  |                                                                                                                                                                                                                                                                                                                                                                                                        |
| `documentos[].day`                                  | entero                       | sí        | El día del mes que resume esta fila. Cada fila es el agregado de un día y un tipo de boleta, nunca una boleta individual.                                                                                                                                                               |                                                                                                                                                                                                                                                                                                                                                                                                        |
| `documentos[].date`                                 | string                       | null      | sí                                                                                                                                                                                                                                                                                      | El mismo día en formato AAAA-MM-DD, o 'null' si el SII mandó un día fuera de rango.                                                                                                                                                                                                                                                                                                                    |
| `documentos[].totalDocumentos`                      | entero                       | null      | sí                                                                                                                                                                                                                                                                                      | Cuántas boletas de ese tipo se emitieron ese día. 'null' significa que el SII no informó el conteo, distinto de un 0 informado.                                                                                                                                                                                                                                                                        |
| `documentos[].netAmount`                            | entero                       | sí        | Monto neto del día en pesos chilenos, entero.                                                                                                                                                                                                                                           |                                                                                                                                                                                                                                                                                                                                                                                                        |
| `documentos[].exemptAmount`                         | entero                       | sí        | Monto exento del día en pesos chilenos, entero.                                                                                                                                                                                                                                         |                                                                                                                                                                                                                                                                                                                                                                                                        |
| `documentos[].vatAmount`                            | entero                       | sí        | IVA del día en pesos chilenos, entero.                                                                                                                                                                                                                                                  |                                                                                                                                                                                                                                                                                                                                                                                                        |
| `documentos[].totalAmount`                          | entero                       | sí        | Monto total del día en pesos chilenos, entero.                                                                                                                                                                                                                                          |                                                                                                                                                                                                                                                                                                                                                                                                        |
| `documentos[].currency`                             | string                       | sí        | Siempre 'CLP': este resumen del SII sólo viene en pesos chilenos.                                                                                                                                                                                                                       |                                                                                                                                                                                                                                                                                                                                                                                                        |
| `documentos[].channel`                              | string                       | null      | sí                                                                                                                                                                                                                                                                                      | Canal de venta: 'presencial' o 'internet'. 'null' cuando el SII no desglosa por canal, que es lo habitual en boletas 39 y 41.                                                                                                                                                                                                                                                                          |
| `cursor`                                            | string                       | null      | sí                                                                                                                                                                                                                                                                                      | El cursor de la página siguiente, opaco. 'null' significa que no hay más filas; cualquier otro valor se reenvía tal cual en 'cursor' de la próxima llamada y nunca se construye a mano.                                                                                                                                                                                                                |
| `sincronizacion`                                    | objeto                       | null      | sí                                                                                                                                                                                                                                                                                      | Completitud del último sync del período consultado. Es 'null' por DOS motivos distintos, y ninguno significa que las filas devueltas sean inválidas: (a) la consulta no filtró por 'periodo', así que no hay un sync único al que mirar (pide un 'periodo' concreto para obtener el bloque); o (b) ese período nunca se sincronizó. Un 'null' junto a una lista CON documentos es siempre el caso (a). |
| `sincronizacion.sincronizadoEn`                     | string                       | sí        | Cuándo terminó la última sincronización de este período, en ISO 8601 UTC. Es la frescura del dato que estás leyendo.                                                                                                                                                                    |                                                                                                                                                                                                                                                                                                                                                                                                        |
| `sincronizacion.completo`                           | booleano                     | null      | sí                                                                                                                                                                                                                                                                                      | 'true' = el período se sincronizó entero. 'false' = quedaron casillas sin traer, así que puede faltar información. 'null' = no se puede saber, porque no hay registro de ese intento.                                                                                                                                                                                                                  |
| `sincronizacion.incompletos`                        | entero                       | null      | sí                                                                                                                                                                                                                                                                                      | Cuántas casillas quedaron sin traer en esa sincronización. 'null' cuando no se puede saber.                                                                                                                                                                                                                                                                                                            |
| `sincronizacion.fueraDeVentana`                     | entero                       | null      | sí                                                                                                                                                                                                                                                                                      | Sólo aplica a guías: cuántas direcciones cayeron fuera de la ventana de 6 meses que el SII conserva. Un 0 dice que se verificó y no aplicó; 'null', que no aplica o no se conoce.                                                                                                                                                                                                                      |
| `sincronizacion.perspectivasFallidas`               | lista de objeto              | sí        | Qué direcciones fallaron enteras en esa sincronización, con su código de error. Hoy sólo la puebla el alcance de boletas de honorarios; para los demás llega vacía.                                                                                                                     |                                                                                                                                                                                                                                                                                                                                                                                                        |
| `sincronizacion.perspectivasFallidas[].perspectiva` | `"emitidas"` · `"recibidas"` | sí        | Qué lado falló: 'emitidas' son las que emitió esta empresa y 'recibidas' las que le emitieron.                                                                                                                                                                                          |                                                                                                                                                                                                                                                                                                                                                                                                        |
| `sincronizacion.perspectivasFallidas[].code`        | string                       | sí        | El código del catálogo de errores que explica por qué falló ese lado. Decide por el código, nunca por el texto.                                                                                                                                                                         |                                                                                                                                                                                                                                                                                                                                                                                                        |

<details>
  <summary>
    JSON Schema de salida
  </summary>

  ```json
  {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "type": "object",
    "properties": {
      "documentos": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "period": {
              "type": "string",
              "description": "El período tributario del agregado, en formato AAAA-MM."
            },
            "documentType": {
              "type": "string",
              "description": "Tipo de boleta, como texto: '39' es la boleta afecta y '41' la exenta."
            },
            "day": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991,
              "description": "El día del mes que resume esta fila. Cada fila es el agregado de un día y un tipo de boleta, nunca una boleta individual."
            },
            "date": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "El mismo día en formato AAAA-MM-DD, o 'null' si el SII mandó un día fuera de rango."
            },
            "totalDocumentos": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                {
                  "type": "null"
                }
              ],
              "description": "Cuántas boletas de ese tipo se emitieron ese día. 'null' significa que el SII no informó el conteo, distinto de un 0 informado."
            },
            "netAmount": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991,
              "description": "Monto neto del día en pesos chilenos, entero."
            },
            "exemptAmount": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991,
              "description": "Monto exento del día en pesos chilenos, entero."
            },
            "vatAmount": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991,
              "description": "IVA del día en pesos chilenos, entero."
            },
            "totalAmount": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991,
              "description": "Monto total del día en pesos chilenos, entero."
            },
            "currency": {
              "type": "string",
              "description": "Siempre 'CLP': este resumen del SII sólo viene en pesos chilenos."
            },
            "channel": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Canal de venta: 'presencial' o 'internet'. 'null' cuando el SII no desglosa por canal, que es lo habitual en boletas 39 y 41."
            }
          },
          "required": [
            "period",
            "documentType",
            "day",
            "date",
            "totalDocumentos",
            "netAmount",
            "exemptAmount",
            "vatAmount",
            "totalAmount",
            "currency",
            "channel"
          ],
          "additionalProperties": false
        },
        "description": "El resumen diario de boletas electrónicas que calza con el filtro. Cada fila es el agregado de un día y un tipo de boleta (39 afecta, 41 exenta), nunca una boleta individual. Los montos son enteros en pesos chilenos, y un monto que el SII no informó llega como 0, no como 'null'."
      },
      "cursor": {
        "anyOf": [
          {
            "type": "string"
          },
          {
            "type": "null"
          }
        ],
        "description": "El cursor de la página siguiente, opaco. 'null' significa que no hay más filas; cualquier otro valor se reenvía tal cual en 'cursor' de la próxima llamada y nunca se construye a mano."
      },
      "sincronizacion": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "sincronizadoEn": {
                "type": "string",
                "description": "Cuándo terminó la última sincronización de este período, en ISO 8601 UTC. Es la frescura del dato que estás leyendo."
              },
              "completo": {
                "anyOf": [
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "'true' = el período se sincronizó entero. 'false' = quedaron casillas sin traer, así que puede faltar información. 'null' = no se puede saber, porque no hay registro de ese intento."
              },
              "incompletos": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Cuántas casillas quedaron sin traer en esa sincronización. 'null' cuando no se puede saber."
              },
              "fueraDeVentana": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Sólo aplica a guías: cuántas direcciones cayeron fuera de la ventana de 6 meses que el SII conserva. Un 0 dice que se verificó y no aplicó; 'null', que no aplica o no se conoce."
              },
              "perspectivasFallidas": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "perspectiva": {
                      "type": "string",
                      "enum": [
                        "emitidas",
                        "recibidas"
                      ],
                      "description": "Qué lado falló: 'emitidas' son las que emitió esta empresa y 'recibidas' las que le emitieron."
                    },
                    "code": {
                      "type": "string",
                      "description": "El código del catálogo de errores que explica por qué falló ese lado. Decide por el código, nunca por el texto."
                    }
                  },
                  "required": [
                    "perspectiva",
                    "code"
                  ],
                  "additionalProperties": false
                },
                "description": "Qué direcciones fallaron enteras en esa sincronización, con su código de error. Hoy sólo la puebla el alcance de boletas de honorarios; para los demás llega vacía."
              }
            },
            "required": [
              "sincronizadoEn",
              "completo",
              "incompletos",
              "fueraDeVentana",
              "perspectivasFallidas"
            ],
            "additionalProperties": false
          },
          {
            "type": "null"
          }
        ],
        "description": "Completitud del último sync del período consultado. Es 'null' por DOS motivos distintos, y ninguno significa que las filas devueltas sean inválidas: (a) la consulta no filtró por 'periodo', así que no hay un sync único al que mirar (pide un 'periodo' concreto para obtener el bloque); o (b) ese período nunca se sincronizó. Un 'null' junto a una lista CON documentos es siempre el caso (a)."
      }
    },
    "required": [
      "documentos",
      "cursor",
      "sincronizacion"
    ],
    "additionalProperties": false
  }
  ```
</details>

## Errores de esta tool [#errores-de-esta-tool]

| Código                | HTTP | Reintentable | Qué hacer                                                                     |
| --------------------- | ---- | ------------ | ----------------------------------------------------------------------------- |
| `connection_disabled` | 403  | no           | Reactívala en /connections o usa otra conexión del mismo sistema.             |
| `alcance_not_enabled` | 403  | no           | Habilita el alcance en /connections o quítalo del input de la sincronización. |

Toda llamada puede devolver además los códigos transversales (`validation_error`, `unauthorized`, `scope_not_granted`, `rate_limited`, entre otros): el detalle vive en el [catálogo de errores](../errores).

## Próximos pasos [#próximos-pasos]

* [`sii.conexion.sincronizar`](./conexion-sincronizar): la tool que escribe los datos que esta lectura devuelve.
* [Sincronizar y consultar](/docs/conceptos/sincronizar-consultar): por qué leer datos reales son dos pasos.
