> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sahlfinancial.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Bank connections

> Console routes, and the partner API-key routes for workspaces Sahl has enabled (Growth plan). Production answers 409 until a bank data provider is live.

Bank connections pull account data after the customer agrees. The console shows each connection with its status, income and spending. How they work is in [Bank connections and open banking](/guides/open-banking); the institutions Sahl lists are on [Bank coverage](/bank-coverage). No per-bank connector type is recorded in the code, and no live bank data provider is wired in the API today.

<Card title="Upgrade for real bank connections" icon="building-columns" href="https://sahlfinancial.com/use-cases" horizontal>
  Real bank connections come with the Growth plan, switched on for your workspace by Sahl. Until then the sandbox simulates them. See plans and talk to Sales.
</Card>

## Console routes

The seven routes the console calls are documented in the separate [Console API reference](/console-api/overview). They need a console login session, not an API key.

| Route | Reference |
| - | - |
| `POST /v1/bank-connections` | [Create a bank connection](/console-api/reference/bank-connections/create-a-bank-connection) |
| `GET /v1/bank-connections` | [List bank connections](/console-api/reference/bank-connections/list-bank-connections) |
| `GET /v1/bank-connections/stats` | [Count bank connections by status](/console-api/reference/bank-connections/count-bank-connections-by-status) |
| `GET /v1/bank-connections/{connection_id}` | [Get a bank connection](/console-api/reference/bank-connections/get-a-bank-connection) |
| `POST /v1/bank-connections/{connection_id}/refresh` | [Refresh a bank connection](/console-api/reference/bank-connections/refresh-a-bank-connection) |
| `GET /v1/bank-connections/{connection_id}/transactions` | [List the transactions](/console-api/reference/bank-connections/list-the-transactions-of-a-bank-connection) |
| `GET /v1/bank-connections/{connection_id}/analysis` | [Get the cash-flow analysis](/console-api/reference/bank-connections/get-the-cash-flow-analysis-of-a-bank-connection) |

## Partner API routes (API key)

The same seven operations exist for server-to-server use, under `/v1/partner/bank-connections`, with an API key instead of a login session. They are in the [Partner API reference](/api-reference/introduction) under "Bank connections (Growth)".

* **Plan:** Growth.
* **Switched on per workspace by Sahl.** Until Sahl enables your workspace, you cannot issue a key with the scopes `bank:read` or `bank:write`, and a call answers `403` with the code `bank_scope_not_allowed`. Ask Sahl at [contact@sahlfinancial.com](mailto:contact@sahlfinancial.com).
* **Scopes:** `bank:read` for list, stats, one connection, transactions and analysis. `bank:write` for create and refresh.
* **Same rule as the console:** no bank data provider is live. Data is a sandbox simulation, and in production create, refresh, transactions and analysis answer `409` `bank_connect_unavailable`.
* Every call is limited to your own workspace: another workspace's connection id answers `404`.

| Route | Scope |
| - | - |
| `POST /v1/partner/bank-connections` | `bank:write` |
| `GET /v1/partner/bank-connections` | `bank:read` |
| `GET /v1/partner/bank-connections/stats` | `bank:read` |
| `GET /v1/partner/bank-connections/{connection_id}` | `bank:read` |
| `POST /v1/partner/bank-connections/{connection_id}/refresh` | `bank:write` |
| `GET /v1/partner/bank-connections/{connection_id}/transactions` | `bank:read` |
| `GET /v1/partner/bank-connections/{connection_id}/analysis` | `bank:read` |

## Sandbox and production

In sandbox, a simulated connection gives instant fake data, so you need no real bank details.

In production the API answers `409` with the code `bank_connect_unavailable` for create, refresh, transactions and analysis today. The simulation runs only when the request says it is a Sandbox request (`X-Sahl-Environment: sandbox`); a request that names no environment is refused as well. Listing, stats and reading one connection never return 409. See [Coverage](/coverage) and [Bank coverage](/bank-coverage).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.