Sync Now
- 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.
POST /api/v1/bank-connect/accounts/{accountId}/sync asks for an account to be read from the bank again. The endpoint returns no account data and changes no data; it only brings the read forward. When the read completes, new transactions arrive by webhook and the account's lastSuccessfulSyncAt advances.
A sync request does not shorten the read interval. If minSyncIntervalSeconds has not elapsed since the account was last read, the read does not happen immediately; it is scheduled for nextSyncAvailableAt. Sending repeated requests to this endpoint does not speed up the read.
Request
There is no body. The bank-connect:view permission is enough.
source lunixi-sign.sh
REQ_PATH="/api/v1/bank-connect/accounts/00000000-0000-0000-0000-000000000100/sync"
lunixi_sign POST "$REQ_PATH"
curl -X POST "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
A successful request returns 202 Accepted:
{
"status": "success",
"code": "SUCCESS",
"data": {
"accountId": "00000000-0000-0000-0000-000000000100",
"syncStatus": "SCHEDULED",
"scheduledAt": "2026-01-01T07:20:00.000Z",
"lastSuccessfulSyncAt": "2026-01-01T07:05:00.000Z",
"minSyncIntervalSeconds": 900
},
"statusCode": 202,
"requestId": "00000000-0000-0000-0000-000000000000"
}| Field | Type | Description |
|---|---|---|
accountId | string (UUID) | The account's ID. |
syncStatus | string | QUEUED or SCHEDULED; see below. |
scheduledAt | string | The moment the read starts or started. |
lastSuccessfulSyncAt | string | Time of the last successful read from the bank. Absent if there has been no read yet. |
minSyncIntervalSeconds | integer | Shortest time between two reads (seconds). The value in the example is only an example. |
syncStatus
| Value | Meaning |
|---|---|
QUEUED | The read interval has elapsed; the read was started or queued. It does not mean the read has finished. |
SCHEDULED | The read interval has not elapsed yet; the read will happen at scheduledAt. |
Behaviour
- A pending read is merged. If a read is already pending, no new one is opened; a second request returns the same scheduled read.
- Other accounts may be refreshed too. The read may cover your other accounts read in the same round as this account; their
lastSuccessfulSyncAtmay advance as well. - The connection must be readable. If the account's connection is not
ACTIVEorDEGRADED, the request returns409 bank_connect.connection.not_active. Check the connection status with the Connections endpoint.
Tracking the result
Do not poll for the result of a sync request; use one of these two ways:
QUEUED means the read has started or is queued, not that it has finished. Without new transactions no event arrives; read the account once after scheduledAt and check lastSuccessfulSyncAt.- Webhook. If the read finds new transactions, a
bank_account.transaction.receivedevent arrives for each one. → Webhook Events - Freshness. If there are no new transactions, no event arrives; you can tell the read happened when the account's
freshness.lastSuccessfulSyncAtadvances. Read the account once afterscheduledAt. → Accounts
Request limit
This endpoint is limited to 6 requests per minute per API key. When the limit is exceeded the request returns 429 RATE_LIMITED; the response's Retry-After header and details.retryAfterSeconds field tell you how many seconds to wait. Read endpoints do not count towards this limit. → Limits
Errors
| HTTP | code | What to do |
|---|---|---|
404 | bank_connect.account.not_found | Check the ID and your key's environment. |
409 | bank_connect.connection.not_active | The connection is not readable; check its status. Retrying does not change the result. |
429 | RATE_LIMITED | Wait for Retry-After and retry. → Rate Limits |