Skip to main content
An admin installs a bank from the console: open Connections → Banks, PSPs and custody, choose Browse connectors, open the bank and choose Install. It starts in ledger-only mode with uploaded statements, so PanoQore does not call the bank until you set up full integration below.

Before you start

  • An agreement and an account with the bank.
  • A ledger in the bank’s currency.
  • A settlement account and a suspense account for each bank and currency. For Safehaven in NGN, these are AST:SET:NGN:SHV and LIA:SUS:NGN:SHV. See Ledgers and accounts.

Set up full integration

1

Create API credentials at the bank

Each bank asks for different fields. Its page lists them, and where to find them on the bank’s dashboard.
2

Store the credentials

In the console, open Connections → Integration mode, choose the bank and enter the credentials. PanoQore signs in to the bank with them before it keeps them, and shows the account name the bank reports.
3

Give the bank your webhook URL

The same screen shows the URL the bank posts notices to. It is unique to your workspace and that bank. Paste it into the bank’s dashboard.
4

Ask for full integration

Choose Full integration and give a reason. An approver signs it off. See Integration modes.

Credentials

Credentials are write-only. Nobody can read them back, in the console or through the API. To change them, enter new ones: PanoQore checks them with the bank, and stops using the old ones once the new ones are accepted. Credentials the bank refuses are not stored.

The webhook URL

The URL carries a secret that says which workspace a notice is for. Treat it like a password. Replacing it in the console makes a new URL, and the old one stops working at once. Paste the new one into the bank’s dashboard straight away. Until you do, the hourly history pull still picks up every credit, later. A notice is never trusted on its own. Where the bank signs its notices, a notice whose signature does not hold is refused. Every credit in a notice is then confirmed with the bank’s API before it posts.

How credits arrive

Every credit, from a notice, the hourly pull or your own code, takes the same path:
  1. It is matched to a bound account number.
  2. Settlement is debited and the wallet credited, as one entry with kind: TRANSFER_IN.
  3. A credit already seen, by the bank’s transaction id, posts nothing and reports DUPLICATE.
  4. A credit that cannot be placed goes to suspense and opens a reconciliation break.
See Named accounts and inbound credits.

Health

GET /v1/partners reports each bank’s health. A refusal from the bank, such as an unknown account, still counts as an answer. Only failing to reach the bank, or an error on its side, counts against it. In ledger-only mode without READ_API, PanoQore does not call the bank, and health is OK. failingSince, lastAnsweredAt, lastWebhookAt and lastPolledAt say more. When a bank comes back, the next hourly pull posts what was missed.

Statements

With READ_API history access, or in full integration, PanoQore pulls yesterday’s statement from the bank each morning, in your workspace’s time zone, matches it and sends operators and approvers the report. Otherwise someone uploads it under Reconciliation → Partner history, or with POST /v1/recon/statements. See Reconciliation.