Preparar boleta en e-Boleta
Prepara una boleta 39 o 41 en E-Boleta del SII sin emitir y devuelve previewRef, vigente 15 minutos.
| Tool ID | sii.boleta.previsualizar |
| Nombre MCP | sii__boleta__previsualizar |
| Conector | sii |
| Plano | action |
| Scope (permiso) | sii:boletas:write |
| Auth | connection_credentials |
| Versión | 1 |
| Sensible | sí |
| Deprecado | no |
| Comportamiento | readOnly=true, destructive=false, idempotent=true, openWorld=true |
Requiere conexión. Indica cuál en cada llamada: header
X-Connect-Connectionen REST y campoconnectionIden elexecutede MCP. 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
Requiere la conexión de representante con las boletas activas y el permiso sii:boletas:write. Si la empresa tiene varias sucursales en E-Boleta, indica en sucursal desde cuál se emite esta boleta (los códigos salen de sii.boleta_sucursales.listar); con una sola se usa esa. La respuesta dice qué sucursal se usó.
Entrada
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
candidato | objeto | sí | Baseline de una línea con cantidad 1; no acepta fecha, folio, referencias ni descuentos. |
candidato.tipoDte | "39" · "41" | sí | Tipo de boleta: 39 afecta o 41 exenta. |
candidato.montoTotal | entero | sí | Monto total entero en CLP. El límite es de representación segura; no acredita un máximo del SII. |
candidato.detalle | string | no | Descripción de la única línea, hasta 80 caracteres. |
candidato.medioPagoCodigo | string | no | Código contrastado con el catálogo fresco al preparar. |
candidato.receptor | objeto | no | Receptor opcional; no se inventan valores cuando está ausente. |
candidato.receptor.rut | string | sí | RUT del receptor validado con módulo 11 y canonizado. |
candidato.receptor.razonSocial | string | sí | Nombre o razón social del receptor. |
candidato.receptor.direccion | string | sí | Dirección del receptor. |
candidato.receptor.correo | string ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$ | no | Correo opcional del receptor. |
candidato.receptor.telefono | string | no | Teléfono opcional del receptor. |
sucursal | entero | no | Código SII de la sucursal que emite esta boleta. Si la empresa tiene una sola sucursal en E-Boleta se usa esa y no hace falta. Si tiene varias es obligatorio en cada boleta: no queda guardado ni hay una por defecto. Los códigos salen de sii.boleta_sucursales.listar. |
JSON Schema de entrada
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"candidato": {
"type": "object",
"properties": {
"tipoDte": {
"type": "string",
"enum": [
"39",
"41"
],
"description": "Tipo de boleta: 39 afecta o 41 exenta."
},
"montoTotal": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Monto total entero en CLP. El límite es de representación segura; no acredita un máximo del SII."
},
"detalle": {
"description": "Descripción de la única línea, hasta 80 caracteres.",
"type": "string",
"minLength": 1,
"maxLength": 80
},
"medioPagoCodigo": {
"description": "Código contrastado con el catálogo fresco al preparar.",
"type": "string",
"minLength": 1,
"maxLength": 64
},
"receptor": {
"description": "Receptor opcional; no se inventan valores cuando está ausente.",
"type": "object",
"properties": {
"rut": {
"description": "RUT del receptor validado con módulo 11 y canonizado.",
"type": "string"
},
"razonSocial": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Nombre o razón social del receptor."
},
"direccion": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Dirección del receptor."
},
"correo": {
"description": "Correo opcional del receptor.",
"type": "string",
"maxLength": 254,
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"telefono": {
"description": "Teléfono opcional del receptor.",
"type": "string",
"minLength": 1,
"maxLength": 32
}
},
"required": [
"rut",
"razonSocial",
"direccion"
],
"additionalProperties": false
}
},
"required": [
"tipoDte",
"montoTotal"
],
"additionalProperties": false,
"description": "Baseline de una línea con cantidad 1; no acepta fecha, folio, referencias ni descuentos."
},
"sucursal": {
"description": "Código SII de la sucursal que emite esta boleta. Si la empresa tiene una sola sucursal en E-Boleta se usa esa y no hace falta. Si tiene varias es obligatorio en cada boleta: no queda guardado ni hay una por defecto. Los códigos salen de `sii.boleta_sucursales.listar`.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"candidato"
],
"additionalProperties": false
}Ejemplo
curl -X POST https://connect.emisso.ai/api/v1/tools/sii.boleta.previsualizar/execute \
-H "Authorization: Bearer connect_sk_…" \
-H "X-Connect-Connection: conn_9tKfR2mQx4Vb" \
-H "Content-Type: application/json" \
-d '{"input":{"candidato":{"tipoDte":"39","montoTotal":25000,"detalle":"Mantención de jardín - Av. Los Aromos 1234","medioPagoCodigo":"TRANSFERENCIA"}}}'{
"tool": "sii.boleta.previsualizar",
"params": {
"candidato": {
"tipoDte": "39",
"montoTotal": 25000,
"detalle": "Mantención de jardín - Av. Los Aromos 1234",
"medioPagoCodigo": "TRANSFERENCIA"
}
},
"connectionId": "conn_9tKfR2mQx4Vb"
}Salida esperada (200):
{
"data": {
"candidato": {
"tipoDte": "39",
"montoTotal": 25000,
"detalle": "Mantención de jardín - Av. Los Aromos 1234",
"medioPagoCodigo": "TRANSFERENCIA"
},
"totales": {
"total": 25000
},
"advertencias": [
"receptor_no_informado"
],
"sucursal": {
"codigo": 0,
"direccion": "Av. Los Aromos 1234",
"comuna": "Providencia"
},
"previewRef": "ebr.1.1.Tz4Kp9Wm2Qx7Lb5N.Vc8Rj3Yt6Hn1Fs0Gk4DmQw.Jq2Ux9Ab4Lr7Wn1Ze5Ct8Ks3Pv6Hy0Mf2Gd9Tb4Nx7Qa1Rw5Ej8Lc3Vu6Is0Op2Y"
},
"meta": {
"request_id": "req_…",
"tool_id": "sii.boleta.previsualizar",
"plane": "action",
"latency_ms": 7410,
"audit_status": "recorded"
}
}No emite nada. El
previewRefvence en 15 minutos y se emite consii.boleta.emitir. Paso a paso en Boletas 39 y 41.
Salida
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
candidato | objeto | sí | Baseline de una línea con cantidad 1; no acepta fecha, folio, referencias ni descuentos. |
candidato.tipoDte | "39" · "41" | sí | Tipo de boleta: 39 afecta o 41 exenta. |
candidato.montoTotal | entero | sí | Monto total entero en CLP. El límite es de representación segura; no acredita un máximo del SII. |
candidato.detalle | string | no | Descripción de la única línea, hasta 80 caracteres. |
candidato.medioPagoCodigo | string | no | Código contrastado con el catálogo fresco al preparar. |
candidato.receptor | objeto | no | Receptor opcional; no se inventan valores cuando está ausente. |
candidato.receptor.rut | string | sí | RUT del receptor validado con módulo 11 y canonizado. |
candidato.receptor.razonSocial | string | sí | Nombre o razón social del receptor. |
candidato.receptor.direccion | string | sí | Dirección del receptor. |
candidato.receptor.correo | string ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$ | no | Correo opcional del receptor. |
candidato.receptor.telefono | string | no | Teléfono opcional del receptor. |
totales | objeto | sí | Total de la única línea. No acredita un desglose neto/IVA del SII. |
totales.total | entero | sí | Monto total entero en CLP. El límite es de representación segura; no acredita un máximo del SII. |
advertencias | lista de "receptor_no_informado" · "medio_pago_no_informado" · "confirmacion_humana_pendiente" | sí | Advertencias codificadas de la preparación. confirmacion_humana_pendiente ya no se emite: quien preparó la boleta la confirma al emitir; se conserva sólo por compatibilidad. |
sucursal | objeto | sí | La sucursal desde la que se emitirá esta boleta. |
sucursal.codigo | entero | sí | Código SII de la sucursal (CdgSIISucur). |
sucursal.direccion | string | sí | Dirección de la sucursal tal como la muestra E-Boleta. |
sucursal.comuna | string | null | sí |
previewRef | string ^[A-Za-z0-9_.-]+$ | sí | Referencia opaca de preparación ligada a su propietario; vigencia máxima de 15 minutos para iniciar emisión. |
JSON Schema de salida
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"candidato": {
"type": "object",
"properties": {
"tipoDte": {
"type": "string",
"enum": [
"39",
"41"
],
"description": "Tipo de boleta: 39 afecta o 41 exenta."
},
"montoTotal": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Monto total entero en CLP. El límite es de representación segura; no acredita un máximo del SII."
},
"detalle": {
"description": "Descripción de la única línea, hasta 80 caracteres.",
"type": "string",
"minLength": 1,
"maxLength": 80
},
"medioPagoCodigo": {
"description": "Código contrastado con el catálogo fresco al preparar.",
"type": "string",
"minLength": 1,
"maxLength": 64
},
"receptor": {
"description": "Receptor opcional; no se inventan valores cuando está ausente.",
"type": "object",
"properties": {
"rut": {
"description": "RUT del receptor validado con módulo 11 y canonizado.",
"type": "string"
},
"razonSocial": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Nombre o razón social del receptor."
},
"direccion": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Dirección del receptor."
},
"correo": {
"description": "Correo opcional del receptor.",
"type": "string",
"maxLength": 254,
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"telefono": {
"description": "Teléfono opcional del receptor.",
"type": "string",
"minLength": 1,
"maxLength": 32
}
},
"required": [
"rut",
"razonSocial",
"direccion"
],
"additionalProperties": false
}
},
"required": [
"tipoDte",
"montoTotal"
],
"additionalProperties": false,
"description": "Baseline de una línea con cantidad 1; no acepta fecha, folio, referencias ni descuentos."
},
"totales": {
"type": "object",
"properties": {
"total": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Monto total entero en CLP. El límite es de representación segura; no acredita un máximo del SII."
}
},
"required": [
"total"
],
"additionalProperties": false,
"description": "Total de la única línea. No acredita un desglose neto/IVA del SII."
},
"advertencias": {
"maxItems": 3,
"type": "array",
"items": {
"type": "string",
"enum": [
"receptor_no_informado",
"medio_pago_no_informado",
"confirmacion_humana_pendiente"
]
},
"description": "Advertencias codificadas de la preparación. `confirmacion_humana_pendiente` ya no se emite: quien preparó la boleta la confirma al emitir; se conserva sólo por compatibilidad."
},
"sucursal": {
"type": "object",
"properties": {
"codigo": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Código SII de la sucursal (CdgSIISucur)."
},
"direccion": {
"type": "string",
"maxLength": 1000,
"description": "Dirección de la sucursal tal como la muestra E-Boleta."
},
"comuna": {
"anyOf": [
{
"type": "string",
"maxLength": 200
},
{
"type": "null"
}
],
"description": "Comuna de la sucursal; null si E-Boleta no la informa."
}
},
"required": [
"codigo",
"direccion",
"comuna"
],
"additionalProperties": false,
"description": "La sucursal desde la que se emitirá esta boleta."
},
"previewRef": {
"type": "string",
"minLength": 24,
"maxLength": 8192,
"pattern": "^[A-Za-z0-9_.-]+$",
"description": "Referencia opaca de preparación ligada a su propietario; vigencia máxima de 15 minutos para iniciar emisión."
}
},
"required": [
"candidato",
"totales",
"advertencias",
"sucursal",
"previewRef"
],
"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. |
connection_not_found | 404 | no | Usa uno de los connectionId que lista el error, o revisa la conexión en /connections. No hace falta reactivar nada. |
connection_credential_required | 428 | no | Crea un enlace con conexiones.enlace.crear (modo reconectar si la conexión ya existe) y pide a la persona que entregue la credencial de nuevo. No reintentes con la credencial anterior. |
connection_busy | 409 | sí | Espera unos segundos y reintenta. Es una espera transitoria: no necesitas volver a conectar ni ingresar la credencial otra vez. |
upstream_error | 502 | sí | Reintenta más tarde. Si persiste, el problema está en el sistema externo, no en tu integración. |
timeout | 504 | sí | Reintenta. Para sincronizaciones largas usa la vía asíncrona y consulta el estado del trabajo. |
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.
Emitir boleta en e-Boleta
Emite en E-Boleta del SII la boleta de un previewRef vigente.
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).