Emisso Connect

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 IDsii.boletas.consultar
Nombre MCPsii__boletas__consultar
Conectorsii
Planoaction
Lee el alcanceboletas (debe estar habilitado en la conexión)
Scope (permiso)sii:read
Authnone
Versión4
Sensible
Deprecadono
ComportamientoreadOnly=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.

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

CampoTipoRequeridoDescripción
periodostring ^\d{4}-\d{2}$noUn 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.
cursorstringnoPaginación: el valor que devolvió la respuesta anterior, tal cual.
limitentero 1-500no · default 100Filas 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
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"}}'
SDK TypeScript
const data = await connect.tools.sii.boletas.consultar({ periodo: "2026-07" }, { connectionId: "conn_9tKfR2mQx4Vb" });
MCP · meta-tool execute
{
  "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

CampoTipoRequeridoDescripción
documentoslista de objetoEl 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[].periodstringEl período tributario del agregado, en formato AAAA-MM.
documentos[].documentTypestringTipo de boleta, como texto: '39' es la boleta afecta y '41' la exenta.
documentos[].dayenteroEl 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[].datestringnull
documentos[].totalDocumentosenteronull
documentos[].netAmountenteroMonto neto del día en pesos chilenos, entero.
documentos[].exemptAmountenteroMonto exento del día en pesos chilenos, entero.
documentos[].vatAmountenteroIVA del día en pesos chilenos, entero.
documentos[].totalAmountenteroMonto total del día en pesos chilenos, entero.
documentos[].currencystringSiempre 'CLP': este resumen del SII sólo viene en pesos chilenos.
documentos[].channelstringnull
cursorstringnull
sincronizacionobjetonull
sincronizacion.sincronizadoEnstringCuándo terminó la última sincronización de este período, en ISO 8601 UTC. Es la frescura del dato que estás leyendo.
sincronizacion.completobooleanonull
sincronizacion.incompletosenteronull
sincronizacion.fueraDeVentanaenteronull
sincronizacion.perspectivasFallidaslista de objetoQué 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"Qué lado falló: 'emitidas' son las que emitió esta empresa y 'recibidas' las que le emitieron.
sincronizacion.perspectivasFallidas[].codestringEl 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ódigoHTTPReintentableQué hacer
connection_disabled403noReactívala en /connections o usa otra conexión del mismo sistema.
alcance_not_enabled403noHabilita 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

On this page