Connect

Consultar movimientos de Banco de Chile

Lee los movimientos ya sincronizados de esta conexión, del más reciente al más antiguo, filtrables por período (AAAA-MM) y por cuenta.

Tool IDbch_empresas.movimientos.consultar
Nombre MCPbch_empresas__movimientos__consultar
Conectorbch_empresas
Planoaction
Lee el alcancemovimientos (debe estar habilitado en la conexión)
Scope (permiso)bch_empresas: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 banco ni dispara una sincronización. Si el período nunca se sincronizó, devuelve una lista vacía, que NO significa que no haya movimientos. Incluye cuentas en pesos chilenos (CLP) y dólares estadounidenses (USD); la moneda viaja en cada fila. Para traer datos nuevos, usa 'bch_empresas.conexion.sincronizar' primero. Los montos vienen como NÚMERO: 'monto' es la magnitud sin signo, 'type' dice si entra ('debit') o sale ('credit') plata según el libro del banco (al revés de como se lee una cartola), y 'display' es ese monto ya formateado a la chilena con su signo. 'saldoContable' es un balance: no lleva 'type' y conserva su propio signo. 'id' es la huella estable con la que se guardó el movimiento: el mismo movimiento visto en dos sincronizaciones solapadas trae el mismo 'id'. Pagina con 'cursor': cuando la respuesta trae 'cursor' distinto de null hay más filas; reenvía ese valor tal cual, nunca lo construyas a mano.

Entrada

CampoTipoRequeridoDescripción
periodostring ^\d{4}-\d{2}$noFiltra por el mes (AAAA-MM) con el que se sincronizó la fila. Sin él, la respuesta cruza todos los períodos guardados de esta conexión.
numeroCuentastringnoFiltra por una sola cuenta, escrita igual que el 'numeroCuenta' de las filas. Sin él vienen todas las cuentas de la conexión.
cursorstringnoPara pedir la página siguiente: el valor que la respuesta anterior devolvió en 'cursor', tal cual. Nunca lo construyas ni lo edites a mano. Omítelo para empezar por la primera página.
limitentero 1-500no · default 100Cuántas filas trae una página, entre 1 y 500. Por defecto, 100.
JSON Schema de entrada
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "periodo": {
      "description": "Filtra por el mes (AAAA-MM) con el que se sincronizó la fila. Sin él, la respuesta cruza todos los períodos guardados de esta conexión.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}$"
    },
    "numeroCuenta": {
      "description": "Filtra por una sola cuenta, escrita igual que el 'numeroCuenta' de las filas. Sin él vienen todas las cuentas de la conexión.",
      "type": "string"
    },
    "cursor": {
      "description": "Para pedir la página siguiente: el valor que la respuesta anterior devolvió en 'cursor', tal cual. Nunca lo construyas ni lo edites a mano. Omítelo para empezar por la primera página.",
      "type": "string"
    },
    "limit": {
      "default": 100,
      "description": "Cuántas filas trae una página, entre 1 y 500. Por defecto, 100.",
      "type": "integer",
      "minimum": 1,
      "maximum": 500
    }
  }
}

Ejemplo

curl
curl -X POST https://connect.emisso.ai/api/v1/tools/bch_empresas.movimientos.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.bch_empresas.movimientos.consultar({ periodo: "2026-07" }, { connectionId: "conn_9tKfR2mQx4Vb" });
MCP · meta-tool execute
{
  "tool": "bch_empresas.movimientos.consultar",
  "params": {
    "periodo": "2026-07"
  },
  "connectionId": "conn_9tKfR2mQx4Vb"
}

Salida esperada (200):

{
  "data": {
    "movimientos": [
      {
        "id": "CTD12345678:20260728 09:15:33:890750:cargo:1",
        "numeroCuenta": "CTD12345678",
        "codigoProducto": "CTD",
        "currency": "CLP",
        "periodo": "2026-07",
        "fechaMovimiento": "2026-07-28T09:15:33.000Z",
        "fechaContable": "2026-07-28",
        "codigoTransaccion": "170",
        "monto": 890750,
        "type": "credit",
        "display": "-890.750",
        "saldoContable": 4370480,
        "descripcion": "Transferencia a proveedor",
        "canal": "INTERNET",
        "detalleGlosa": "Nombre Destinatario: Proveedora del Maule SpA | Rut Destinatario: 0761111116 | Banco: Banco de Chile | Cuenta Destinatario: 001234567890 | Id transaccion: C0012151402052",
        "counterparty": {
          "name": "Proveedora del Maule SpA",
          "rut": "76111111-6",
          "bank": "Banco de Chile",
          "account": "001234567890"
        },
        "counterpartySource": "detalle",
        "idTransaccion": "C0012151402052",
        "comentario": null,
        "ultimaLecturaEn": "2026-08-10T14:02:11.000Z"
      }
    ],
    "cursor": null
  },
  "meta": {
    "request_id": "req_…",
    "tool_id": "bch_empresas.movimientos.consultar",
    "plane": "action",
    "latency_ms": 24,
    "audit_status": "recorded"
  }
}

'id' es literal el que entrega el banco (canonizando sólo el relleno de ceros de la cuenta): no es un hash recomputado, a diferencia de BICE y Banco Security. El ejemplo es un cargo ('type' 'credit'), así que la contraparte es el DESTINATARIO; en un abono ('debit') los mismos campos traen el origen.

Salida

CampoTipoRequeridoDescripción
movimientoslista de objetosíLos movimientos guardados, del más reciente al más antiguo. Una lista vacía significa que ese período todavía no se sincronizó, no que no haya movimientos.
movimientos[].idstringsíLa identidad estable del movimiento: el 'id' que entrega el propio Banco de Chile, con el relleno de ceros de la cuenta canonizado. El mismo movimiento visto en dos sincronizaciones solapadas trae el mismo 'id', así que sirve para deduplicar sin comparar campos de presentación.
movimientos[].numeroCuentastringsíLa cuenta a la que pertenece esta fila, con el código de producto adelante y sin el relleno de ceros del banco (por ejemplo 'CTD12345678'). Es el mismo valor en saldos, movimientos y cartolas, y el que espera el filtro 'numeroCuenta'.
movimientos[].codigoProductostringsíLas tres letras del tipo de producto de la cuenta (por ejemplo 'CTD'), tal como las entrega el banco. Es el prefijo de 'numeroCuenta'.
movimientos[].currencystringsíLa moneda de la cuenta, en código de tres letras. Sale de la cuenta y nunca se asume: los movimientos soportan pesos chilenos ('CLP') y dólares estadounidenses ('USD').
movimientos[].periodostringsíEl mes (AAAA-MM) con el que se sincronizó esta fila. Es la ventana con que se pidió, no una propiedad del movimiento: la fecha del movimiento vive en 'fechaMovimiento'. Es el valor con el que filtra el 'periodo' de la entrada.
movimientos[].fechaMovimientostringnullsí
movimientos[].fechaContablestringnullsí
movimientos[].codigoTransaccionstringnullsí
movimientos[].montonúmeronullsí
movimientos[].type"credit" · "debit"nullsí
movimientos[].displaystringnullsí
movimientos[].saldoContablenúmeronullsí
movimientos[].descripcionstringnullsí
movimientos[].canalstringnullsí
movimientos[].detalleGlosastringnullsí
movimientos[].counterpartyobjetosíLa contraparte del movimiento, extraída del detalle que adjunta el banco. QUÉ LADO ES depende de 'type': en un abono ('debit', plata que entra) es el origen; en un cargo ('credit', plata que sale) es el destinatario. Los cuatro campos vienen en 'null' cuando el movimiento no trae detalle, que es lo normal fuera de las transferencias. Cuando el banco no informó 'type' se vacían 'name', 'rut' y 'account' (sin el tipo no hay forma de saber cuál de los dos lados es el otro), pero 'bank' sí viaja: el banco que nombra el detalle es el del otro lado en cualquier dirección. El texto completo sigue en 'detalleGlosa'. Son datos personales de terceros: trátalos como tales.
movimientos[].counterparty.namestringnullsí
movimientos[].counterparty.rutstringnullsí
movimientos[].counterparty.bankstringnullsí
movimientos[].counterparty.accountstringnullsí
movimientos[].counterpartySource"detalle" · "descripcion"nullsí
movimientos[].idTransaccionstringnullsí
movimientos[].comentariostringnullsí
movimientos[].ultimaLecturaEnstringsíInstante (ISO 8601) en que esta fila se leyó del banco por última vez. Una reobservación del mismo id bancario actualiza la fila existente, así que este campo permite distinguir datos recién sincronizados de una caché antigua.
cursorstringnullsí
JSON Schema de salida
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "movimientos": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "La identidad estable del movimiento: el 'id' que entrega el propio Banco de Chile, con el relleno de ceros de la cuenta canonizado. El mismo movimiento visto en dos sincronizaciones solapadas trae el mismo 'id', así que sirve para deduplicar sin comparar campos de presentación."
          },
          "numeroCuenta": {
            "type": "string",
            "description": "La cuenta a la que pertenece esta fila, con el código de producto adelante y sin el relleno de ceros del banco (por ejemplo 'CTD12345678'). Es el mismo valor en saldos, movimientos y cartolas, y el que espera el filtro 'numeroCuenta'."
          },
          "codigoProducto": {
            "type": "string",
            "description": "Las tres letras del tipo de producto de la cuenta (por ejemplo 'CTD'), tal como las entrega el banco. Es el prefijo de 'numeroCuenta'."
          },
          "currency": {
            "type": "string",
            "description": "La moneda de la cuenta, en código de tres letras. Sale de la cuenta y nunca se asume: los movimientos soportan pesos chilenos ('CLP') y dólares estadounidenses ('USD')."
          },
          "periodo": {
            "type": "string",
            "description": "El mes (AAAA-MM) con el que se sincronizó esta fila. Es la ventana con que se pidió, no una propiedad del movimiento: la fecha del movimiento vive en 'fechaMovimiento'. Es el valor con el que filtra el 'periodo' de la entrada."
          },
          "fechaMovimiento": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Fecha y hora del movimiento (ISO 8601), tal como la entrega el banco. 'null' cuando el banco no la trajo."
          },
          "fechaContable": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "La fecha contable en formato AAAA-MM-DD, sin hora, y distinta de 'fechaMovimiento'. El banco la manda como dd/mm/aaaa y aquí ya viene convertida a ISO. 'null' cuando llegó en una forma que no se reconoció: nunca se adivina una fecha ni se deja pasar la celda cruda."
          },
          "codigoTransaccion": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "El código de transacción del núcleo del banco, tal cual. Es una etiqueta interna sin catálogo publicado: sirve para agrupar movimientos del mismo tipo, no para deducir qué fue la operación. 'null' cuando el banco no lo trae."
          },
          "monto": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "La magnitud del movimiento SIN signo. El sentido lo da 'type' y el signo visible, 'display'. 'null' significa que el banco no trajo la celda, nunca 0."
          },
          "type": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "credit",
                  "debit"
                ]
              },
              {
                "type": "null"
              }
            ],
            "description": "Eje crédito/débito del LIBRO DEL BANCO, no el de la cartola: 'debit' es plata que ENTRA a la cuenta (un abono) y 'credit' es plata que SALE (un cargo). Es al revés de la lectura intuitiva y está así a propósito. El campo 'monto' es la magnitud SIN signo; el signo lo lleva 'display' ('credit' → negativo). 'null' significa que el banco no informó el tipo: no asumas ninguno de los dos."
          },
          "display": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "El monto ya formateado a la chilena y CON signo, derivado de 'type' ('credit', plata que sale, se muestra negativo). Es una comodidad de presentación: se calcula en la lectura y no se persiste. Para operar con el número usa 'monto' (magnitud sin signo) junto con 'type'."
          },
          "saldoContable": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "description": "El saldo de la cuenta después de este movimiento. Es un balance: no lleva 'type' y conserva su propio signo, así que un sobregiro es negativo."
          },
          "descripcion": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "La glosa del movimiento, tal como la escribe el banco. 'null' cuando llega vacía."
          },
          "canal": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "El canal por el que se cursó el movimiento, con la etiqueta del propio banco (por ejemplo 'INTERNET'). 'null' cuando el banco no lo informa."
          },
          "detalleGlosa": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Las etiquetas extra del movimiento (RUT y nombre de la contraparte, entre otras) aplanadas en un solo texto, separadas por ' | '. Es el texto CRUDO del banco: 'counterparty', 'idTransaccion' y 'comentario' ya vienen extraídos de aquí. Trae datos personales de terceros: trátalo como tal. 'null' cuando el banco no adjunta ninguna."
          },
          "counterparty": {
            "type": "object",
            "properties": {
              "name": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "El nombre o razón social de la contraparte. 'null' cuando el detalle no lo trae."
              },
              "rut": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "El RUT de la contraparte, con guión y sin puntos ni relleno de ceros (por ejemplo '77147218-4'): el banco lo escribe corrido dentro del detalle y aquí ya viene canonizado. Si llegó en una forma que no se reconoce, viaja tal cual y nunca convertido a la fuerza. 'null' cuando el detalle no lo trae."
              },
              "bank": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "El banco de LA CONTRAPARTE, no el tuyo: es la institución del otro lado de la transferencia (por ejemplo 'Banco Estado'), escrita con la etiqueta que Banco de Chile adjunta al movimiento. 'null' cuando el detalle no lo trae."
              },
              "account": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "El número de cuenta de la contraparte, tal como lo escribe el banco (puede venir con relleno de ceros). 'null' cuando el detalle no lo trae."
              }
            },
            "required": [
              "name",
              "rut",
              "bank",
              "account"
            ],
            "additionalProperties": false,
            "description": "La contraparte del movimiento, extraída del detalle que adjunta el banco. QUÉ LADO ES depende de 'type': en un abono ('debit', plata que entra) es el origen; en un cargo ('credit', plata que sale) es el destinatario. Los cuatro campos vienen en 'null' cuando el movimiento no trae detalle, que es lo normal fuera de las transferencias. Cuando el banco no informó 'type' se vacían 'name', 'rut' y 'account' (sin el tipo no hay forma de saber cuál de los dos lados es el otro), pero 'bank' sí viaja: el banco que nombra el detalle es el del otro lado en cualquier dirección. El texto completo sigue en 'detalleGlosa'. Son datos personales de terceros: trátalos como tales."
          },
          "counterpartySource": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "detalle",
                  "descripcion"
                ]
              },
              {
                "type": "null"
              }
            ],
            "description": "De dónde salió 'counterparty', para no tener que adivinarlo. 'detalle': de las etiquetas que el banco adjunta al movimiento, que es el caso normal de una transferencia. 'descripcion': lo extrajimos del texto de la glosa, hoy sólo del patrón 'Pago: Proveedores <RUT>' de las nóminas de pago a proveedores, así que viene el RUT y nada más. 'null': EL BANCO NO INFORMÓ CONTRAPARTE para este movimiento, que es lo normal en cheques, depósitos en efectivo, comisiones, recaudaciones y cargos automáticos; no es un dato que falte por un problema de Connect. Ojo: 'bank' puede venir con valor aunque esto sea 'null', porque la institución del otro lado no identifica a nadie por sí sola y este campo habla de quién es la contraparte, no de dónde tiene su cuenta."
          },
          "idTransaccion": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "El identificador que el banco le pone a la transferencia, tal cual. Aparece sólo en traspasos y con más de un formato, así que sirve para conversar con el banco sobre una operación, NO como identidad: la identidad estable del movimiento es 'id'. 'null' cuando el detalle no lo trae."
          },
          "comentario": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "El comentario que quien transfiere escribe al hacer la operación. 'null' cuando viene vacío, que es lo habitual."
          },
          "ultimaLecturaEn": {
            "type": "string",
            "description": "Instante (ISO 8601) en que esta fila se leyó del banco por última vez. Una reobservación del mismo id bancario actualiza la fila existente, así que este campo permite distinguir datos recién sincronizados de una caché antigua."
          }
        },
        "required": [
          "id",
          "numeroCuenta",
          "codigoProducto",
          "currency",
          "periodo",
          "fechaMovimiento",
          "fechaContable",
          "codigoTransaccion",
          "monto",
          "type",
          "display",
          "saldoContable",
          "descripcion",
          "canal",
          "detalleGlosa",
          "counterparty",
          "counterpartySource",
          "idTransaccion",
          "comentario",
          "ultimaLecturaEn"
        ],
        "additionalProperties": false
      },
      "description": "Los movimientos guardados, del más reciente al más antiguo. Una lista vacía significa que ese período todavía no se sincronizó, no que no haya movimientos."
    },
    "cursor": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "El cursor de la página siguiente. Distinto de null significa que quedan más filas: reenvíalo tal cual en 'cursor'. 'null' significa que esta es la última página."
    }
  },
  "required": [
    "movimientos",
    "cursor"
  ],
  "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