Accounts
- Base path
/api/v1/bank-connect- Identity
- Ed25519 request signature on every request —
X-Key-Id,X-Date,X-Nonce,X-Signature. ±5 min clock window, single-use nonce. A Bearer token or a panel session is not accepted here (401 AUTH_HEADERS_MISSING). - Authorization
- The key must carry the Bank Connections product (
BANK_CONNECT) and the permission for the endpoints on this page:bank-connect:view. Without the product the call gets403 PRODUCT_NOT_ENABLED; without the permission403 API_INSUFFICIENT_SCOPE. See API Introduction › Permissions. - Cross-surface
- These endpoints are the s2s surface — call them from your own server with a signed request. The same data has screens in the panel, but panel endpoints cannot be called with an API key, and these endpoints cannot be called with a panel session. Connecting and disconnecting a bank is done only in the panel.
Once a connection is active, the accounts at your bank are discovered automatically. These endpoints return your accounts with masked identifiers and freshness information; no balance is returned. For balances use the Balances endpoint.
List accounts
GET /api/v1/bank-connect/accounts
| Query parameter | Type | Description |
|---|---|---|
connectionId | string (UUID) | Only accounts of this connection. |
bankId | string (UUID) | Only accounts at this bank. |
currency | string | ISO 4217 currency, e.g. TRY. |
status | string | ACTIVE or INACTIVE. |
limit | integer | Records per page, 1–100. Default 25. |
cursor | string | pageInfo.nextCursor from the previous response. |
source lunixi-sign.sh
REQ_PATH="/api/v1/bank-connect/accounts?status=ACTIVE¤cy=TRY"
lunixi_sign GET "$REQ_PATH"
curl "https://api-gateway.lunixi.com$REQ_PATH" \
-H "X-Key-Id: $LUNIXI_KEY_ID" \
-H "X-Date: $DATE" \
-H "X-Nonce: $NONCE" \
-H "X-Signature: $SIGNATURE"$bankConnect in the PHP example: API Introduction › PHP SDK.
{
"status": "success",
"code": "SUCCESS",
"data": {
"items": [
{
"accountId": "00000000-0000-0000-0000-000000000100",
"connectionId": "00000000-0000-0000-0000-000000000010",
"bank": { "bankId": "00000000-0000-0000-0000-000000000001", "eftCode": "0000", "name": "ÖRNEK BANKA" },
"ibanMasked": "TR00 **** **** **** **** **00 00",
"accountNumberMasked": "****0000",
"currency": "TRY",
"productCode": "CARIHSP",
"status": "ACTIVE",
"discoveredAt": "2026-01-01T07:00:00.000Z",
"freshness": {
"lastSuccessfulSyncAt": "2026-01-01T07:05:00.000Z",
"nextSyncAvailableAt": "2026-01-01T07:20:00.000Z",
"minSyncIntervalSeconds": 900
},
"displayName": "ANA HESAP",
"accountType": "VADESIZ"
}
]
},
"pageInfo": { "hasMore": false, "nextCursor": null, "totalCount": null },
"statusCode": 200,
"requestId": "00000000-0000-0000-0000-000000000000"
}The minSyncIntervalSeconds value in the example is only an example. Read the real value from each account's freshness object; it may differ per connection.
Single account
GET /api/v1/bank-connect/accounts/{accountId} returns a single account. data is the account object itself; the fields are the same as in the list. An account that is unknown, belongs to another organization or to the other environment returns 404 bank_connect.account.not_found.
The account object
| Field | Type | Description |
|---|---|---|
accountId | string (UUID) | The account's ID; the accountId filter on the balance and transaction endpoints takes this value. |
connectionId | string (UUID) | The connection the account belongs to. |
bank | object | bankId, eftCode and, when available, name. |
ibanMasked | string | Masked IBAN. Absent when there is no value. |
accountNumberMasked | string | Masked account number. Absent when there is no value. |
currency | string | The account currency (ISO 4217). |
branchCode | string | Branch code. Absent when there is no value. |
branchName | string | Branch name. Absent when there is no value. |
productCode | string | The bank's product code for the account, e.g. CARIHSP. Absent when the bank does not report it. |
status | string | ACTIVE: the account is being read. INACTIVE: the connection was disconnected or the bank no longer returns the account. |
discoveredAt | string | When the account was first discovered. |
freshness | object | Freshness of the data; see below. |
displayName | string | The name the bank gives the account. Absent when the bank does not report it. |
accountType | string | The account type the bank reports (e.g. demand deposit). The text depends on the bank; absent when the bank does not report it. |
freshness
| Field | Type | Description |
|---|---|---|
lastSuccessfulSyncAt | string | Time of the last successful read from the bank. Absent if there has been no read yet. |
nextSyncAvailableAt | string | Earliest time of the next read. Absent when there is no value. |
minSyncIntervalSeconds | integer | Shortest time between two reads (seconds). |
How freshness works: Concepts › Freshness. To bring a read forward: Sync Now.
Whether transfers or currency exchange can be made from an account depends on its connection; see the connection's capabilities field. → Connections · Money Transfers
Errors
| HTTP | code | What to do |
|---|---|---|
400 | VALIDATION_ERROR | A filter value is invalid, limit is outside 1–100, or you sent an undeclared parameter. |
400 | bank_connect.cursor.invalid | Send the cursor unchanged or start from the first page. |
404 | bank_connect.account.not_found | Check the ID and your key's environment. |