Connections

List, read, and remove a user's linked bank connections.

Connections

A connection represents one bank a user has linked to Financy — the
authorized link to that bank, not the money inside it. One connection exposes
several Accounts, and each account has its Transactions. Once a
connection exists, that data becomes readable through the API.

📘

New to the model? Core Concepts defines every entity and explains the

connection vs. account distinction in full.

⚠️

Connections can be created only through the Financy UI — never via the
API.
Users link a bank through the hosted consent journey (or as part of a

payment flow). This API lets you list, read, refresh, and delete
connections; there is no create endpoint — bank linking requires the
interactive consent journey.

If you need to create connections programmatically (e.g. to aggregate your
customers' data at scale), that's available on the Open Finance platform,
our B2B product — contact us to get access.

All endpoints require a Bearer token — see Authentication. Failed requests
return the standard error shape — see Errors (deleting a connection can also
return 423 Locked).

EndpointPurpose
GET /v2/connectionsList the user's connections.
GET /v2/connections/{connectionId}Read one connection.
DELETE /v2/connections/{connectionId}Remove a connection.
POST /chat/connections/refreshRefresh all connections on demand. Full URL: https://api.open-finance.ai/chat/chat/connections/refresh.

List connections

GET https://api.open-finance.ai/v2/connections

Query paramDescription
statusFilter by status, e.g. ACTIVE.
limitMax documents to return.
sort1 ascending, -1 descending.
nextPagePagination cursor from the previous response.
customerIdFilter to a customer (business/national ID) from extended journeys.
contactIdFilter to a contact phone number from extended journeys.

Request

curl "https://api.open-finance.ai/v2/connections?status=ACTIVE&limit=20" \
  -H "Authorization: Bearer <accessToken>"

Response

{
  "count": 1,
  "nextPage": null,
  "items": [
    {
      "id": "01J8CONN...",
      "providerId": "hapoalim",
      "status": "ACTIVE",
      "mode": "PSD2",
      "accounts": 2,
      "cards": 1,
      "savings": 0,
      "loans": 0,
      "transactions": 431,
      "expiryDate": "2026-10-01T00:00:00.000Z",
      "createdAt": "2026-07-01T09:12:00.000Z"
    }
  ]
}
FieldDescription
countNumber of connections returned in items.
nextPageCursor for the next page; null when there are no more.
itemsArray of connection objects (see below).

Get a connection

GET https://api.open-finance.ai/v2/connections/{connectionId}

curl "https://api.open-finance.ai/v2/connections/01J8CONN..." \
  -H "Authorization: Bearer <accessToken>"

Key fields on a connection:

FieldDescription
idThe connection id — pass it as connectionId when filtering accounts/transactions.
providerIdThe linked bank (see Providers & Branches).
statusConnection status (see the table below).
modePSD2 (open banking) or PLAID.
accounts / cards / savings / loans / securitiesCount of each account type on the connection.
transactionsNumber of transactions collected.
expiryDateWhen the consent expires and needs renewing.
startDate / lastFetchedDataDateData window: earliest collected date and last fetched date (day-granular).
lastFetchedAtFull ISO timestamp of the last completed fetch/refresh attempt (success or error). Advances on every attempt, so it can be polled to detect when a refresh finished.
createdAt / updatedAtTimestamps in UTC.

Status values

StatusMeaning
CONNECTEDSuccessfully linked; the consent journey completed.
ACTIVEA recurring connection — accounts and transactions refresh daily.
COMPLETEDA one-time connection — all accounts and transactions were fetched once.
FETCHINGConnecting to the institution / collecting data.
INACTIVEInitialized but dormant, awaiting user action.
PARTIALLY_AUTHORIZEDAwaiting additional account-owner approvals (5-day window).
REPLACEDSuperseded by a newer connection from the same provider.
EXPIREDConsent lapsed — no longer usable.
REVOKEDThe user revoked consent at the provider.
TERMINATED_BY_USERThe user ended the connection.
SUSPENDED_BY_PROVIDERThe provider suspended the consent.
REJECTEDThe account owner declined consent at the provider.
CREDENTIALS_ERRORAuthentication with the bank failed.
FETCHING_ERROR / ERRORA processing/retrieval error occurred; see the error field.
UNKNOWNState could not be determined.
💡

CONNECTED, ACTIVE, and COMPLETED mean data is readable. ACTIVE stays

on the automatic refresh schedule; COMPLETED was a single fetch and will
not update. Treat every other status as "cannot read fresh data right now"
and, once consent has EXPIRED / been REVOKED, prompt the user to reconnect
in the Financy UI.

Refresh connections

POST https://api.open-finance.ai/chat/chat/connections/refresh

Triggers an on-demand refresh of every refreshable connection the user has,
independent of the automatic schedule. This is the same "Refresh now" action
offered in the Financy UI.

Automatic refresh is plan-dependent, not a flat 6-hour pull for everyone.
The aggregation cron ticks every 6 hours starting in the morning
(Asia/Jerusalem). Each plan spends its daily allowance across those ticks:

  • Free / Starter — one automatic pass, in the morning.
  • Pro — four automatic passes (every 6 hours from the morning).
  • Starter can add extra daily slots in Settings (up to four/day).

On-demand refresh does not consume that daily allowance.

⚠️

Different base path — and the doubled /chat is real. The refresh

endpoint is served by the chat API Gateway, not /v2. That gateway is
mounted at https://api.open-finance.ai/chat (basePath: chat) and the
route itself is /chat/connections/refresh, so the public URL is
https://api.open-finance.ai/chat/chat/connections/refresh. A request to
/chat/connections/refresh (one /chat) is 404. Authentication is
unchanged: the same OAuth2 client-credentials Bearer token, with the
read:connections scope.

A flat 20 credits are charged on accept — debited from the organization's
credit balance, separate from the daily update quota. The call enqueues and
returns immediately
(it does not wait for the banks); poll each connection's
lastFetchedAt to detect completion, typically within 1–2 minutes. A refresh
already in flight returns 200 with already_running and is not charged again.

Request

curl -X POST "https://api.open-finance.ai/chat/chat/connections/refresh" \
  -H "Authorization: Bearer <accessToken>"

Responses

StatusBody statusMeaning
200acceptedRefresh enqueued. Poll lastFetchedAt for completion.
200already_runningA refresh was already in flight — not charged again.
402insufficient_creditsNot enough credits (the response includes cost).
409no_refreshable_connectionsThe user has no refreshable connection — reconnect a bank first.

Delete a connection

DELETE https://api.open-finance.ai/v2/connections/{connectionId}

Removes the connection for the current user.

curl -X DELETE "https://api.open-finance.ai/v2/connections/01J8CONN..." \
  -H "Authorization: Bearer <accessToken>"

Next: read the balances and details of a connection's Accounts.


Did this page help you?