Accounting API · Bank FeedsUpdated October 11, 2026

Bank Feeds API

Put your platform’s transactions in your customers’ books, in the ledger’s own bank feed, ready to reconcile. One statement call, mapped to Xero, NetSuite, Sage Intacct, Exact Online and the rest, with QuickBooks Online through Intuit Bank Feeds.

XeroNetSuiteSage IntacctExact OnlineZoho BooksMoneybirdPennylaneRilletSnelstartTwinfieldNative feeds into 10 ledgers, live today
your-platform → unify.apideck.com201 Created
POST/accounting/bank-feed-statements
x-apideck-service-id:xero
start_balance=18,240.00
transactions=[4 lines]
end_balance=23,259.15
Your customer’s ledger · Bank reconciliation

Business card ·· 4821

Bank feed from Your platform, 5 to 11 Oct

Feed connected
  • Marketplace payout

    10/05 · txn_01J9B1

    +6,420.00
  • Card, ad spend

    10/07 · txn_01J9B2

    −1,284.50
  • Fuel card, depot 4

    10/08 · txn_01J9B3

    −212.35
  • Supplier refund

    10/10 · txn_01J9B4

    +96.00
Opening 18,240.00Statement balance 23,259.15

Sample data. The same statement is editable in the builder below.

ledgers take native bank feeds
10ledgers take native bank feeds
ledgers reachable today, QuickBooks Online included
34ledgers reachable today, QuickBooks Online included
ledgers on the Plaid network, coming soon
7ledgers on the Plaid network, coming soon
routes, one integration
4routes, one integration

01Definition

What is a bank feeds API?

A bank feeds API lets a platform that holds money for businesses, such as a card issuer, embedded bank or payout platform, send those businesses’ transactions straight into their accounting software. The lines land in the ledger’s bank reconciliation screen, where the bookkeeper matches them to invoices and bills. No CSV export, no statement upload, no copy-paste.

Accountants call the result automated bank feeds or direct bank feeds: bank statement feeds that arrive on their own, instead of a statement someone downloads and imports. It is often confused with bank data aggregation, which runs the other way.

Bank feed

Your platform
Bank Feeds API
Customer’s ledger

You hold the account. The ledger receives the transactions and reconciles them. This page.

Aggregation

Customer’s bank
Aggregator
Your app

Someone else holds the account. You read it with the customer’s consent. Plaid, MX, Stripe Financial Connections.

02Push and network

Two ways a feed reaches a ledger

Some ledgers take statements you push into their bank feed API. Others only pull, from institutions listed on a bank feed network. QuickBooks Online works this way through Intuit Bank Feeds, and so do the apps on the Plaid network. You need both to cover your customers, and with Apideck it is still one integration.

Push feed

You send
How data moves
You post statements into the ledger’s own bank feed API, account by account.
How the customer connects
The customer links your feed to a bank account inside the ledger.
Where it applies
Xero, NetSuite, Sage Intacct, Exact Online and the other native ledgers
Status with Apideck
Live today

Bank feed network

They pull
How data moves
You are listed as an institution. The network pulls accounts and transactions from your FDX endpoint.
How the customer connects
The customer searches for your name in the bank list and signs in on your own login.
Where it applies
Intuit Bank Feeds for QuickBooks Online (early access), and the Plaid network through Core Exchange (coming soon)
Status with Apideck
Early access and coming soon

On either model you post the same statements to the Bank Feeds API. Apideck pushes them into native ledgers and serves them to Intuit and Plaid through FDX Connect, its FDX data provider. Deep dives: Intuit Bank Feeds and Plaid Bank Feeds.

03Lifecycle

Five steps, one of which runs forever

Every bank feed, on every ledger, has the same lifecycle. Four steps happen once per customer. The statement call is the one you live with.

  1. 01 · Once per customerVault sessionPOST /vault/sessions

    Your customer connects their accounting platform in a hosted, white-label flow. Apideck stores and refreshes the tokens.

  2. 02 · Once per accountFeed accountPOST /accounting/bank-feed-accounts

    Register the card, wallet or account you hold for them, where the ledger has feed accounts. Elsewhere statements post against an existing bank account.

  3. 03 · Once, in the ledgerLinkCustomer maps the feed

    On most ledgers the customer maps the feed to a bank account in their chart of accounts. NetSuite needs an admin to install a SuiteBundle first.

  4. 04 · As transactions settleStatementsPOST /accounting/bank-feed-statements

    Post batches of posted transactions with an opening and closing balance. This call runs forever, so it is the one to get right.

  5. 05 · After each postRead backGET /accounting/bank-feed-statements

    Confirm what the ledger accepted, where the connector exposes it, and keep your own running balance in step.

04Statement builder

Build a statement a ledger will accept

Change an amount, flip a line from credit to debit, type your own closing balance or retry a transaction. The checks are the ones ledgers apply, and the JSON on the right is the exact request body for bank-feed-statements.

Statement, 2026-10-05 to 2026-10-11

  • Balances reconcile18,240.00 + 5,019.15 = 23,259.15
  • Every source_transaction_id is uniqueStable IDs from your ledger double as the idempotency key when you retry.
  • Every transaction falls inside the statement period2026-10-05 to 2026-10-11
  • Required fields presentposted_date, amount, credit_or_debit, source_transaction_id
POST/accounting/bank-feed-statements
{​  "bank_feed_account_id": "bfa_01J9C4X7Q2M8",​  "start_date": "2026-10-05T00:00:00Z",​  "end_date": "2026-10-11T23:59:59Z",​  "start_balance": 18240.00,​  "start_balance_credit_or_debit": "credit",​  "end_balance": 23259.15,​  "end_balance_credit_or_debit": "credit",​  "transactions": [​    {​      "source_transaction_id": "txn_01J9B1",​      "posted_date": "2026-10-05T12:00:00Z",​      "description": "Marketplace payout",​      "amount": 6420.00,​      "credit_or_debit": "credit"​    },​    {​      "source_transaction_id": "txn_01J9B2",​      "posted_date": "2026-10-07T12:00:00Z",​      "description": "Card, ad spend",​      "amount": 1284.50,​      "credit_or_debit": "debit"​    },​    {​      "source_transaction_id": "txn_01J9B3",​      "posted_date": "2026-10-08T12:00:00Z",​      "description": "Fuel card, depot 4",​      "amount": 212.35,​      "credit_or_debit": "debit"​    },​    {​      "source_transaction_id": "txn_01J9B4",​      "posted_date": "2026-10-10T12:00:00Z",​      "description": "Supplier refund",​      "amount": 96.00,​      "credit_or_debit": "credit"​    }​  ]​}​
Ready to post. The next statement for this account opens at 23,259.15: Xero checks that chain on every statement.

Amounts are always positive. Direction lives in credit_or_debit, and balances carry their own direction field, so an overdrawn account is a debit balance, not a negative number.

05Coverage

Which ledgers, and how each one gets there

34 ledgers are reachable today. That number is honest only with the route next to it: 10 take statements in their own bank feed, QuickBooks Online pulls through Intuit, and 23 get journal entries, which post to the ledger without a reconciliation queue. Pick a ledger to see its path and setup.

Xero

2 routes, chosen per customer

Native bank feedsLive today· Your own Xero partnership required
  1. 1POST /accounting/bank-feed-statements
  2. 2Apideck posts the statement into the ledger’s own bank feed
  3. 3The ledger’s bank reconciliation screen, ready to match
  • The customer links the feed account to a Xero bank account before statements are accepted.
  • Each statement’s opening balance must equal the previous statement’s closing balance.
The Plaid networkComing soon· United States
  1. 1POST /accounting/bank-feed-statements
  2. 2The customer finds your platform in the app, Plaid pulls through Core Exchange
  3. 3Wherever that app shows linked bank accounts
Xero integration details

06Ledger notes

What each ledger does differently

The unified statement hides the payload differences. These are the ones it cannot hide, because they live in the ledger, and they are what usually stalls a launch.

Xero

Statements chain. Each opening balance must equal the previous closing balance, so a gap or a restated period is fixed with a correcting statement, never by editing the old one. The customer links the feed to a Xero bank account before the first statement lands.

28 Sep to 4 Oct

…→18,240.00

=

5 to 11 Oct

18,240.00→23,259.15

=

12 to 18 Oct

23,259.15→next

Xero bank feeds guide

QuickBooks Online

QuickBooks only pulls from FDX data providers. Through Intuit Bank Feeds, your platform appears in QuickBooks’ bank list under your own name, Apideck’s FDX Connect serves the data, and Intuit fetches it on its own schedule. Expect lag, not instant lines. Early access.

Intuit Bank Feeds

NetSuite

NetSuite has no bank feed endpoint to post to. Apideck ships a SuiteBundle an admin installs once, wired up through a Format Profile under Setup, Accounting, Financial Institution. Statements then appear in Match Bank Data on the next import.

NetSuite bank feeds

Sage Intacct

Statements only, on both the legacy XML and the REST API. There is no feed account to register: you post against a bank account that already exists in Intacct.

Sage Intacct bank feeds

Exact Online, Moneybird, Snelstart, Twinfield, Pennylane

The European ledgers most US-built feed providers skip. Exact Online runs as three connectors, for the Netherlands, Belgium and the UK. Snelstart and Twinfield accept statements but do not return them, so keep your own ledger as the record of what you sent.

Exact Online integration

07Build vs buy

Build it per ledger, or once

Code is the small part of a bank feed. Partner programs, certification and each ledger’s balance rules are the large part, and they repeat for every ledger you add.

Direct, per ledgerUnified Bank Feeds API
Time to the first ledgerMonths per ledger, mostly partner approval and certificationWeeks, on connectors that already exist
Partner programsYours to apply for, ledger by ledgerVaries by ledger: ask whose name is on each approval
PayloadA different shape and balance rule per ledgerOne statement shape, mapped per ledger
Where it breaksYour on-call rota, when a ledger changes its APIThe provider’s connector, with your monitoring on top
Ledgers without a feed endpointUnsupported, or a custom journal integrationDepends on the provider. Apideck falls back to journal entries

Bank feed providers, in their own words

The ledgers each provider names on its own bank feeds page, as of October 11, 2026. Follow the links for the current list. Rutter covers the most of the Intuit family, including QuickBooks Desktop, and already documents a Plaid listing. Apideck covers the most ledgers outside Intuit, including Europe’s.

ProviderLedgers named for bank feedsQuickBooksPlaid network
ApideckXero, NetSuite, Sage Intacct, Exact Online, Zoho Books, Moneybird, Pennylane, Rillet, Snelstart and TwinfieldJournal entries for 23 more ledgers.QuickBooks Online through Intuit Bank Feeds, early accessCore Exchange listing, coming soon. Partnership with Plaid signed
RutterSourceQuickBooks Online, QuickBooks Desktop, Quicken, Credit Karma, Xero, Sage, NetSuite and WaveIntuit Bank Feeds, one connection across the Intuit familyCore Exchange listing, documented
CodatSourceQuickBooks Online, Xero, Sage, NetSuite, Sage Intacct and FreshBooksQuickBooks Online bank feed, US and CanadaNot on its bank feeds page
MergeSourceNetSuite and Xero, announced as betaNot on its listNot on its bank feeds page

08Evaluation

How to choose a bank feeds API

Six questions that separate a demo from a feed your customers reconcile every day.

  1. 1

    Native or not, per ledger

    Ask which ledgers receive statements in their own bank feed and which get journal entries. Journal entries skip the reconciliation queue, which is the reason your customers asked for a feed.

  2. 2

    The ledgers your customers use, by country

    A US card issuer needs QuickBooks and Xero. A European one needs Exact Online, Moneybird or Pennylane. Headline connector counts hide this.

  3. 3

    Who holds the partner approvals

    Xero, Intuit and NetSuite each gate bank feeds behind a program. Find out whose name is on each approval and what happens if the provider loses it.

  4. 4

    Balance and duplicate handling

    Statements fail on unreconciled balances and repeated IDs. Ask how errors come back and whether retries with the same source ID are safe.

  5. 5

    Read back

    You need to see what the ledger accepted. Some ledgers return posted statements and some do not; the provider should tell you which.

  6. 6

    Room to grow

    The same integration should reach new networks, such as Intuit Bank Feeds and Plaid, without a second build.

09Live demo

Run a bank feed end to end

Pick a bank, connect an accounting platform and watch the same transactions appear on both sides. Mock data, the real flow. Switch to Live mode in the demo to run it with your own Apideck credentials.

banks.apideck.devOpen full screen

10FAQ

Bank feeds API FAQ

What is a bank feed network?

A bank feed network is a directory of financial institutions that accounting software and apps can connect to. Instead of pushing statements into one ledger, the platform that holds the accounts is listed as an institution, and the network pulls accounts and transactions from it over the FDX standard after the customer signs in on the platform’s own login. Intuit Bank Feeds is the network behind QuickBooks Online, and Plaid Core Exchange is the network behind Plaid-powered apps. Through Apideck, both run behind the same Bank Feeds API as push feeds into Xero or NetSuite.

What is a bank feeds API?

A bank feeds API lets a financial platform, such as a card issuer, embedded banking provider or payout platform, send its customers’ transactions straight into their accounting software. The transactions arrive in the ledger’s bank reconciliation screen, where they are matched to invoices and bills, so nobody exports or imports a CSV. Apideck’s Bank Feeds API does this through one statement call that reaches each ledger’s native bank feed.

How is a bank feed different from open banking or Plaid-style aggregation?

They run in opposite directions. Aggregation pulls a person’s bank data out of their bank into an app, with their consent. A bank feed pushes transactions from the platform that holds the account into the customer’s accounting system. Apideck does not aggregate bank accounts. Its Plaid partnership works in the feed direction too: the upcoming Core Exchange connector lets Plaid-powered apps pull from your platform.

What is the best bank feeds API?

It depends on which ledgers your customers use. Compare providers on which ledgers get native feeds rather than journal entries, coverage in your customers’ countries, who holds the Xero, Intuit and NetSuite partner approvals, and how balance errors and duplicates are reported. Apideck sends native feeds to 10 ledgers, including Xero, NetSuite, Sage Intacct and European platforms such as Exact Online and Pennylane, and to QuickBooks Online through Intuit Bank Feeds in early access.

Does Xero have a bank feeds API?

Yes. Xero’s Bank Feeds API has feed connections and statements, and access requires approval through Xero’s partner program. Each statement’s opening balance must match the previous closing balance. Through Apideck you post the same unified statement you send to every other ledger, and Apideck maps it to Xero.

How do bank feeds get into QuickBooks Online?

QuickBooks Online does not accept pushed statements. It pulls from FDX data providers through Intuit Bank Feeds. Apideck runs an FDX data provider, so you post statements to the Bank Feeds API and Intuit fetches them on its own schedule. Your platform appears in QuickBooks’ bank list under your own name. This route is in early access.

What is the difference between automated bank feeds and importing bank statements?

An imported statement is a file, CSV, OFX or QBO, that someone downloads from the bank or platform and uploads into the accounting software, usually monthly and by hand. Automated bank feeds, also called direct bank feeds or bank statement feeds, deliver the same transactions on their own, every day, into the ledger’s reconciliation screen. A bank feeds API is how a platform provides automated feeds instead of asking customers to export files.

Can a bank feed move money?

No. A bank feed carries data: accounts, balances and posted transactions. Nothing moves between accounts. Payments are a separate API.

How long does it take to ship bank feeds?

Building direct, expect months per ledger, most of it spent in partner approval and certification rather than code. Through a unified API, the code is three calls: connect the customer, register the feed account, post statements. The rest of the time goes into linking the feed in each ledger and testing balances.

What happens if I post the same transaction twice?

Most ledgers reject a repeated source_transaction_id, which makes a stable ID from your own ledger the safest retry key. Generate a new ID on every retry and you create a duplicate line in your customer’s books.