Consultar boletas electrónicas del SII
Lee el resumen diario de boletas electrónicas ya sincronizado para esta conexión, filtrado por período.
| 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-Connectionen REST, campoconnectionIden elexecutede 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 deconexiones.estado.consultar.
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
| 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. |
JSON Schema de entrada
{
"$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
}
}
}Ejemplo
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"}}'const data = await connect.tools.sii.boletas.consultar({ periodo: "2026-07" }, { connectionId: "conn_9tKfR2mQx4Vb" });{
"tool": "sii.boletas.consultar",
"params": {
"periodo": "2026-07"
},
"connectionId": "conn_9tKfR2mQx4Vb"
}Salida esperada (200):
{
"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
| 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í |
documentos[].totalDocumentos | entero | null | sí |
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í |
cursor | string | null | sí |
sincronizacion | objeto | null | sí |
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í |
sincronizacion.incompletos | entero | null | sí |
sincronizacion.fueraDeVentana | entero | null | sí |
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. |
JSON Schema de salida
{
"$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
}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.
Próximos pasos
sii.conexion.sincronizar: la tool que escribe los datos que esta lectura devuelve.- Sincronizar y consultar: por qué leer datos reales son dos pasos.
Consultar boletas de honorarios del SII
Lee las boletas de honorarios electrónicas (BHE) ya sincronizadas para esta conexión, filtradas por período y/o perspectiva (emitidas = las que emitió esta empresa; recibidas = las que le emitieron, donde esta empresa es el agente retenedor).
Sincronizar conexión SII
Sincroniza los alcances solicitados (rcv, boletas, guias, boletas_honorarios, documentos) para un período en una sola sesión (un login, un logout).