Connect

Consultar declaraciones F29 del SII

Lee las declaraciones mensuales (Formulario 29) ya sincronizadas para esta conexión, con sus códigos.

Tool IDsii.f29.consultar
Nombre MCPsii__f29__consultar
Conectorsii
Planoaction
Lee el alcancef29 (debe estar habilitado en la conexión)
Scope (permiso)sii:read
Authnone
Versión1
Sensiblesí
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 contacta al SII. Por defecto trae sólo las vigentes; con 'incluirNoVigentes' trae también las rectificadas y anuladas. Filtra por un 'periodo' o por un rango 'desde'/'hasta'. Los códigos vienen por número sin ceros a la izquierda y un código ausente venía en blanco en el formulario (vacío no es cero). El F29 se revisa solo después de cada vencimiento; para forzar una revisión usa 'sii.conexion.sincronizar' con alcances ['f29']. Pagina con 'cursor'.

Entrada

CampoTipoRequeridoDescripción
periodostring ^\d{4}-\d{2}$noUn período concreto, AAAA-MM.
desdestring ^\d{4}-\d{2}$noPrimer período del rango, inclusive.
hastastring ^\d{4}-\d{2}$noÚltimo período del rango, inclusive.
incluirNoVigentesbooleanono · default false'true' para traer también las declaraciones rectificadas y anuladas.
cursorstringnoPaginación: el valor que devolvió la respuesta anterior, tal cual.
limitentero 1-120no · default 24Filas por página.
JSON Schema de entrada
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "periodo": {
      "description": "Un período concreto, AAAA-MM.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}$"
    },
    "desde": {
      "description": "Primer período del rango, inclusive.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}$"
    },
    "hasta": {
      "description": "Último período del rango, inclusive.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}$"
    },
    "incluirNoVigentes": {
      "default": false,
      "description": "'true' para traer también las declaraciones rectificadas y anuladas.",
      "type": "boolean"
    },
    "cursor": {
      "description": "Paginación: el valor que devolvió la respuesta anterior, tal cual.",
      "type": "string"
    },
    "limit": {
      "default": 24,
      "description": "Filas por página.",
      "type": "integer",
      "minimum": 1,
      "maximum": 120
    }
  }
}

Ejemplo

curl
curl -X POST https://connect.emisso.ai/api/v1/tools/sii.f29.consultar/execute \
  -H "Authorization: Bearer connect_sk_…" \
  -H "X-Connect-Connection: conn_9tKfR2mQx4Vb" \
  -H "Content-Type: application/json" \
  -d '{"input":{"desde":"2026-06","hasta":"2026-07"}}'
SDK TypeScript
const data = await connect.tools.sii.f29.consultar({ desde: "2026-06", hasta: "2026-07" }, { connectionId: "conn_9tKfR2mQx4Vb" });
MCP · meta-tool execute
{
  "tool": "sii.f29.consultar",
  "params": {
    "desde": "2026-06",
    "hasta": "2026-07"
  },
  "connectionId": "conn_9tKfR2mQx4Vb"
}

Salida esperada (200):

{
  "data": {
    "declaraciones": [
      {
        "folio": "1234567890",
        "periodo": "2026-07",
        "estado": "vigente",
        "tipoDeclaracion": "primitiva",
        "fechaPresentacion": "2026-08-11",
        "corrigeAFolios": [],
        "medioPago": "PEL",
        "banco": "ESTADO",
        "totalAPagar": 310250,
        "codigos": {
          "62": {
            "glosa": "PPM NETO DETERMINADO",
            "valor": 4750,
            "tipo": "monto"
          },
          "89": {
            "glosa": "IMP. DETERM. IVA",
            "valor": 305500,
            "tipo": "monto"
          },
          "91": {
            "glosa": "TOTAL A PAGAR DENTRO DEL PLAZO LEGAL",
            "valor": 310250,
            "tipo": "monto"
          },
          "115": {
            "glosa": "TASA PPM 1ra. CATEGORÍA",
            "valor": 0.125,
            "tipo": "tasa"
          },
          "502": {
            "glosa": "DÉBITOS FACTURAS EMITIDAS",
            "valor": 520000,
            "tipo": "monto"
          },
          "503": {
            "glosa": "CANTIDAD FACTURAS EMITIDAS",
            "valor": 12,
            "tipo": "monto"
          },
          "537": {
            "glosa": "TOTAL CRÉDITOS",
            "valor": 214500,
            "tipo": "monto"
          },
          "538": {
            "glosa": "TOTAL DÉBITOS",
            "valor": 520000,
            "tipo": "monto"
          }
        },
        "ultimaLecturaEn": "2026-08-13T11:02:10.000Z"
      }
    ],
    "cursor": null,
    "revision": {
      "revisadoEn": "2026-08-13T11:02:10.000Z",
      "completo": true,
      "pendientes": 0
    }
  },
  "meta": {
    "request_id": "req_…",
    "tool_id": "sii.f29.consultar",
    "plane": "action",
    "latency_ms": 24,
    "audit_status": "recorded"
  }
}

Recortado a los códigos principales. 89 = 538 − 537 en esta declaración simple, pero no es una regla general: otras líneas del formulario (por ejemplo el 755) también entran al cálculo. El 115 es una tasa: 0.125 es 0,125 %, no 125.

Salida

CampoTipoRequeridoDescripción
declaracioneslista de objetosíLas declaraciones que calzan con el filtro, de la más reciente a la más antigua. Salen de lo ya sincronizado, nunca de una consulta en vivo al SII.
declaraciones[].foliostringsíEl folio de la declaración. Es su identidad: una rectificatoria tiene otro folio.
declaraciones[].periodostring ^\d{4}-\d{2}$síEl período tributario declarado, AAAA-MM. No es el mes en que se presentó.
declaraciones[].estadostringsíEl estado que muestra el SII, en minúsculas: 'vigente' es la que rige; una rectificada o 'anulada' queda como historia.
declaraciones[].tipoDeclaracion"primitiva" · "rectificatoria"nullsí
declaraciones[].fechaPresentacionstringnullsí
declaraciones[].corrigeAFolioslista de stringsíLos folios que esta declaración corrige. Vacío en una primitiva.
declaraciones[].medioPagostringnullsí
declaraciones[].bancostringnullsí
declaraciones[].totalAPagarnúmeronullsí
declaraciones[].codigosobjetonullsí
declaraciones[].ultimaLecturaEnstringsíCuándo se observó esta fila por última vez, en ISO 8601 UTC.
cursorstringnullsí
revisionobjetonullsí
revision.revisadoEnstringsíCuándo terminó la última revisión del F29 de esta conexión, en ISO 8601 UTC.
revision.completobooleanonullsí
revision.pendientesenteronullsí
JSON Schema de salida
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "declaraciones": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "folio": {
            "type": "string",
            "description": "El folio de la declaración. Es su identidad: una rectificatoria tiene otro folio."
          },
          "periodo": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}$",
            "description": "El período tributario declarado, AAAA-MM. No es el mes en que se presentó."
          },
          "estado": {
            "type": "string",
            "description": "El estado que muestra el SII, en minúsculas: 'vigente' es la que rige; una rectificada o 'anulada' queda como historia."
          },
          "tipoDeclaracion": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "primitiva",
                  "rectificatoria"
                ]
              },
              {
                "type": "null"
              }
            ],
            "description": "Si es la primera declaración del período o una que corrige a otra."
          },
          "fechaPresentacion": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Cuándo se presentó, AAAA-MM-DD."
          },
          "corrigeAFolios": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Los folios que esta declaración corrige. Vacío en una primitiva."
          },
          "medioPago": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "El medio de pago tal como lo escribe el SII (por ejemplo 'PEL', pago electrónico)."
          },
          "banco": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "El banco por el que se pagó, cuando lo hubo."
          },
          "totalAPagar": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "Código 91, total a pagar dentro del plazo legal, en pesos. 'null' si la declaración no trae ese código o sus códigos aún no se leyeron."
          },
          "codigos": {
            "anyOf": [
              {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "type": "object",
                  "properties": {
                    "glosa": {
                      "type": "string",
                      "description": "El nombre de la línea tal como lo escribe el formulario del SII. Puede cambiar de texto sin que cambie el código."
                    },
                    "valor": {
                      "type": "number",
                      "description": "El valor numérico. En pesos para los montos y cantidades; como número decimal para las tasas (0.125 es 0,125 %)."
                    },
                    "tipo": {
                      "type": "string",
                      "enum": [
                        "monto",
                        "tasa"
                      ],
                      "description": "'tasa' cuando el formulario escribe el valor con decimales (el código 115); 'monto' en todo lo demás, incluidas las cantidades de documentos."
                    }
                  },
                  "required": [
                    "glosa",
                    "valor",
                    "tipo"
                  ],
                  "additionalProperties": false
                }
              },
              {
                "type": "null"
              }
            ],
            "description": "Los códigos del formulario con valor, por número de código sin ceros a la izquierda ('89', no '089'). Un código que no aparece venía en blanco en el formulario: vacío no es cero. 'null' cuando la declaración no es la vigente o su formulario todavía no se leyó."
          },
          "ultimaLecturaEn": {
            "type": "string",
            "description": "Cuándo se observó esta fila por última vez, en ISO 8601 UTC."
          }
        },
        "required": [
          "folio",
          "periodo",
          "estado",
          "tipoDeclaracion",
          "fechaPresentacion",
          "corrigeAFolios",
          "medioPago",
          "banco",
          "totalAPagar",
          "codigos",
          "ultimaLecturaEn"
        ],
        "additionalProperties": false
      },
      "description": "Las declaraciones que calzan con el filtro, de la más reciente a la más antigua. Salen de lo ya sincronizado, nunca de una consulta en vivo al SII."
    },
    "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."
    },
    "revision": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "revisadoEn": {
              "type": "string",
              "description": "Cuándo terminó la última revisión del F29 de esta conexión, en ISO 8601 UTC."
            },
            "completo": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ],
              "description": "'false' si quedaron declaraciones sin leer; se retoman solas en la revisión siguiente. 'null' si no se puede saber."
            },
            "pendientes": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": -9007199254740991,
                  "maximum": 9007199254740991
                },
                {
                  "type": "null"
                }
              ],
              "description": "Cuántas declaraciones quedaron sin leer en esa revisión. 'null' si no se puede saber."
            }
          },
          "required": [
            "revisadoEn",
            "completo",
            "pendientes"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "La última revisión del F29. 'null' significa que el F29 de esta conexión no se ha revisado nunca: una lista vacía con 'revision' distinto de null sí quiere decir que no hay declaraciones en ese rango."
    }
  },
  "required": [
    "declaraciones",
    "cursor",
    "revision"
  ],
  "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

En esta página