bancapi
Bank accounts and movements of your companies, synced from Banco de Chile Empresas and Banco BICE Empresas. Personal accounts at Banco BICE Personas show as a company under the person's own RUT. Read-only, except for triggering a sync. Authenticate with an API token from the web app: `Authorization: Bearer <token>`. Amounts are strings with decimals to avoid float rounding.
Machine-readable spec: https://bancapi.fitoexact.com/api/v1/openapi.json · tokens: API tokens
curl -H "Authorization: Bearer $TOKEN" "https://bancapi.fitoexact.com/api/v1/movements?company_rut=77945259-K&kind=credit&from=2026-09-01"
MCP
Agents (Claude and other MCP clients) can query the same data at https://bancapi.fitoexact.com/mcp
(Streamable HTTP, same API token). Tools, all read-only:
list_companies, search_movements (the movement filters below),
get_movement, movements_summary (credits, debits and net per currency).
In the Claude app or claude.ai: Settings → Connectors → Add custom connector, URL https://bancapi.fitoexact.com/mcp.
Claude signs you in to bancapi (OAuth 2.1 with PKCE) and asks for your consent; no token to copy.
In Claude Code, either the same URL (it runs the sign-in) or a personal token:
claude mcp add --transport http bancapi https://bancapi.fitoexact.com/mcp --header "Authorization: Bearer $TOKEN"
GET /api/v1/companies
List companies. Every company (empresa, by RUT) with its accounts at every bank.
200
array of Company
401
Unauthorized
GET /api/v1/companies/{id}
Get a company
| Parameter | In | Type | Description |
|---|---|---|---|
id |
path | integer |
200
Company
401
Unauthorized
404
NotFound
GET /api/v1/accounts
List accounts. Every bank account with balance and company.
200
array of Account
401
Unauthorized
GET /api/v1/accounts/{id}
Get an account
| Parameter | In | Type | Description |
|---|---|---|---|
id |
path | integer |
200
Account
401
Unauthorized
404
NotFound
GET /api/v1/movements
Search movements. All movements across banks and companies, filtered and paged.
| Parameter | In | Type | Description |
|---|---|---|---|
company_id |
query | integer | Only this company's movements (id from /companies). |
company_rut |
query | string | Only this company's movements, by RUT in any format (77.945.259-K, 77945259K…). |
account_id |
query | integer | Only this account's movements. |
bank |
query | banco_de_chile_empresas | banco_bice_empresas | banco_bice_personas | Only accounts at this bank. |
currency |
query | string | Only accounts in this currency, e.g. CLP or USD. |
from |
query | string, date | Movements on or after this date (YYYY-MM-DD). |
to |
query | string, date | Movements on or before this date (YYYY-MM-DD). |
kind |
query | credit | debit | credit (money in) or debit (money out). |
counterparty_rut |
query | string | The other party's RUT, any format. Check digit is validated. |
counterparty |
query | string | Text contained in the other party's name (case-insensitive). |
q |
query | string | Text contained in the description (case-insensitive). |
min_amount |
query | number | Minimum absolute amount. |
max_amount |
query | number | Maximum absolute amount. |
sort |
query | date_desc | date_asc | amount_desc | amount_asc | Order of results (default date_desc). |
page |
query | integer | Page number, from 1. |
per_page |
query | integer | Results per page (default 100, max 500). |
200
array of Movement
401
Unauthorized
400
InvalidFilter
GET /api/v1/accounts/{account_id}/movements
Search one account's movements. Same filters, limited to one account.
| Parameter | In | Type | Description |
|---|---|---|---|
account_id |
path | integer | |
company_id |
query | integer | Only this company's movements (id from /companies). |
company_rut |
query | string | Only this company's movements, by RUT in any format (77.945.259-K, 77945259K…). |
account_id |
query | integer | Only this account's movements. |
bank |
query | banco_de_chile_empresas | banco_bice_empresas | banco_bice_personas | Only accounts at this bank. |
currency |
query | string | Only accounts in this currency, e.g. CLP or USD. |
from |
query | string, date | Movements on or after this date (YYYY-MM-DD). |
to |
query | string, date | Movements on or before this date (YYYY-MM-DD). |
kind |
query | credit | debit | credit (money in) or debit (money out). |
counterparty_rut |
query | string | The other party's RUT, any format. Check digit is validated. |
counterparty |
query | string | Text contained in the other party's name (case-insensitive). |
q |
query | string | Text contained in the description (case-insensitive). |
min_amount |
query | number | Minimum absolute amount. |
max_amount |
query | number | Maximum absolute amount. |
sort |
query | date_desc | date_asc | amount_desc | amount_asc | Order of results (default date_desc). |
page |
query | integer | Page number, from 1. |
per_page |
query | integer | Results per page (default 100, max 500). |
200
array of Movement
401
Unauthorized
404
NotFound
400
InvalidFilter
GET /api/v1/movements/{id}
Get a movement
| Parameter | In | Type | Description |
|---|---|---|---|
id |
path | integer |
200
Movement
401
Unauthorized
404
NotFound
GET /api/v1/bank_connections
List bank connections. Sync status per bank login. Credentials are never returned.
200
array of Connection
401
Unauthorized
GET /api/v1/bank_connections/{id}
Get a bank connection
| Parameter | In | Type | Description |
|---|---|---|---|
id |
path | integer |
200
Connection
401
Unauthorized
404
NotFound
POST /api/v1/bank_connections/{id}/sync
Queue a sync. Banks that sync from the server only (Banco de Chile). Extension-only banks answer 422.
| Parameter | In | Type | Description |
|---|---|---|---|
id |
path | integer |
202
OK
401
Unauthorized
404
NotFound
POST /api/v1/bank_connections/{bank_connection_id}/imports
Upload from the connector extension. Used by the bancapi connector Chrome extension; the payload is the bank portal's own JSON.
| Parameter | In | Type | Description |
|---|---|---|---|
bank_connection_id |
path | integer |
201
OK
401
Unauthorized
404
NotFound
Objects
Company
id |
integer | |
rut |
string | |
name |
string | |
accounts |
array |
Account
id |
integer | |
bank_connection_id |
integer | |
bank |
banco_de_chile_empresas | banco_bice_empresas | banco_bice_personas | |
number |
string | |
product_code |
string or null | |
currency |
string | |
company |
object or null | |
balance |
string or null | Decimal as string, e.g. "1500000.0" |
balance_at |
string or null |
Movement
id |
integer | |
external_id |
string | The bank's own id, stable across syncs |
account |
object | |
company |
object or null | |
date |
string | |
posted_at |
string or null | |
kind |
credit | debit | |
currency |
string | |
amount |
string | Absolute amount |
signed_amount |
string | Negative for debits |
balance_after |
string or null | Decimal as string, e.g. "1500000.0" |
description |
string or null | |
channel |
string or null | |
document_number |
string or null | |
transaction_code |
string or null | |
counterparty |
object |
Connection
id |
integer | |
bank |
banco_de_chile_empresas | banco_bice_empresas | banco_bice_personas | |
name |
string | |
status |
pending | active | failing | |
last_synced_at |
string or null | |
last_error |
string or null | |
account_ids |
array | |
sync_from |
string or null | Where the next extension upload should start |
Error
error |
string | |
message |
string |