Balances
Who calls these endpoints?External API (s2s)
- 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:transactions: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.
GET /api/v1/bank-connect/balances returns the most recently read balance of each account. Past balances are not returned by this endpoint; for the balance after a transaction see the balanceAfterMinor field in the transaction detail.
The list contains only accounts that are ACTIVE and whose balance has been read at least once.
Request
| Query parameter | Type | Description |
|---|---|---|
accountId | string | Comma-separated account IDs (UUID), at most 100. If omitted, all active accounts in your key's environment are returned. |
currency | string | ISO 4217 currency, e.g. TRY. |
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/balances?currency=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.
Response
{
"status": "success",
"code": "SUCCESS",
"data": {
"items": [
{
"accountId": "00000000-0000-0000-0000-000000000100",
"currency": "TRY",
"balanceMinor": 1250000,
"availableMinor": 1200000,
"blockedMinor": 50000,
"asOf": "2026-01-01T07:05:00.000Z",
"availableWithoutOverdraftMinor": 1000000,
"overdraftAvailableMinor": 200000
}
]
},
"pageInfo": { "hasMore": false, "nextCursor": null, "totalCount": null },
"statusCode": 200,
"requestId": "00000000-0000-0000-0000-000000000000"
}| Field | Type | Description |
|---|---|---|
accountId | string (UUID) | The account's ID. |
currency | string | The balance currency (ISO 4217). |
balanceMinor | integer | The balance in minor units (kuruş). May be negative. |
availableMinor | integer | Available balance. Absent if the bank does not report it. |
blockedMinor | integer | Blocked amount. Absent if the bank does not report it. |
asOf | string | The moment the balance applies to. Absent when there is no value. |
availableWithoutOverdraftMinor | integer | Available balance excluding the overdraft line. Absent when the bank does not report it separately. |
overdraftAvailableMinor | integer | The unused overdraft line. Absent when the bank does not report it. |
availableMinor, blockedMinor, availableWithoutOverdraftMinor and overdraftAvailableMinor are not provided by every bank. If the field is absent, do not treat the value as zero; it means the bank does not report this information.
The balance is the value at the last time the account was read. You can see when that was in the account's freshness object.
Errors
| HTTP | code | What to do |
|---|---|---|
400 | VALIDATION_ERROR | accountId is not a UUID or has more than 100 values, currency 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. |
403 | API_INSUFFICIENT_SCOPE | Add bank-connect:transactions:view to your key; bank-connect:view is not enough. |