Skip to main content

What you can retrieve

Retrieve the bank accounts and transactions connected to your own business in Bolta. The API returns the transactions Bolta fetched from the bank as is, and you can request a sync when you need one. Each API key covers the one business it belongs to. You cannot retrieve another business’s accounts.

Requirements

These calls deduct no points. Instead, you need a Standard plan or higher. A free trial also qualifies when the trial plan is Standard or higher. When your plan does not qualify, all three paths return 402 with PLAN_UPGRADE_REQUIRED. Upgrade your plan from the billing menu in the Bolta dashboard, then call again.
The API does not connect bank accounts. Connect them in the Bolta dashboard first.
None of the three paths needs issuer registration, a certificate, or Bolta-Client-Reference-Id. Send Basic {apiKey} in the Authorization header. See the authentication guide for details.

Account list

Treat id as a string even if it looks numeric. The identifier format may change. New bank codes may appear in bank, so display bankName in your UI.

Transactions

Every filter is optional. Without a date range, the API returns every loaded transaction.
The item shape depends on status. amount and balanceAfterTransaction omit trailing decimal zeros. OTHER marks a transaction where the bank reported zero for both the deposit and withdrawal amounts, so amount is 0.

Order and cursor

The API returns transactions in the order they changed in Bolta, not in transaction time order. Newly loaded, visible-again, and hidden transactions all join the end of the feed at the time they change. Bolta re-fetches one day of overlap with the previous sync window, so a transaction with an earlier time can be loaded later. Reconnecting an account can also bring old transactions back with the same id. Following the change order keeps you from missing these. To show the newest transactions first, sort by transactionAt after you receive them. The same id can arrive more than once. Apply items by id in the order you receive them.
  • ACTIVE: Overwrite the item with the same id, or add it if none exists.
  • REMOVED: Delete the item with the same id, or ignore it if none exists.

Collection steps

  1. Call without a cursor, then keep calling with nextCursor until hasMore is false.
  2. Save the last nextCursor. The API fills nextCursor even when hasMore is false.
  3. On your next collection, call with the saved cursor. You receive only the transactions that changed since then.
hasMore can be true even when items is empty. When few transactions match your filters, the API stops at the end of the range it scans in one call and returns that position as nextCursor. Decide whether to continue from hasMore, not from items.
Changes in Bolta appear in responses about 5 minutes later. To avoid skipping changes that are still being saved, the API holds back transactions changed in the last 5 minutes until a later call. Right after a sync finishes, wait about 5 minutes before you continue. Do not parse or build cursors. Send the value exactly as received. The API rejects a modified cursor with 400 and INVALID_CURSOR. If you change the filters (from, bankAccountId, and so on), start over without a cursor. When a Bolta operator cleans up incorrectly loaded transactions directly, those transactions can disappear without a REMOVED item. This is rare, and Bolta notifies you separately when it happens.

Sync request

Bolta fetches transactions periodically. Request a sync only when you need the latest transactions sooner.
The API only accepts the request with 202 Accepted, and the bank lookup runs asynchronously. Check progress with syncStatus in the account list. When IN_PROGRESS ends, continue fetching transactions with your saved cursor. Each business can request a sync once every 30 minutes and up to 12 times in 24 hours. nextAvailableAt reflects only the 30-minute interval, not the 24-hour limit. Bolta processes bank lookups one account at a time, so frequent requests do not make the sync faster. A request rejected because a sync is already running (409) does not count toward the limit.

Testing with a test key

Test keys return fixed samples regardless of your subscription. They do not query real accounts. A sync request sends no bank lookup and uses no quota. Transaction 6 is archived, so only status and id come back. Call with limit=3 to see cursor paging across two pages. Filters and cursors follow the same rules as live keys, and test keys skip the 5-minute delay.

Errors

See Error codes for the full list.