How to Integrate Xero Bank Feeds Using Apideck

What Are Bank Feeds?

Bank feeds let you automatically send transaction data from your platform into your users' Xero accounts. This removes the need for CSV uploads and manual entry. The data flows in directly, exactly as it happens.

The primary reason to use bank feeds is reconciliation. When transactions appear automatically in Xero, users can easily match them against invoices, bills, and other accounting entries. This helps them close their books faster and with more confidence.

Bank feeds are especially valuable for financial platforms that handle money movement on behalf of business customers, like corporate card providers, business banking apps, expense tools, payout platforms, and accounting automators. If your product processes transactions, a bank feed makes that data instantly available in the customer's ledger.

Automated feeds also improve data quality. Since transactions come straight from your platform, there's no risk of typos, formatting mistakes, or import errors. Feeds can run daily or more often, keeping Xero continuously up to date with the latest activity.

In short, bank feeds make reconciliation easier, faster, and more accurate by turning your product into a seamless part of your customers' accounting workflow.


Step-by-Step: Setting Up Xero Bank Feeds via Apideck

Setting up a bank feed for Xero through Apideck involves two main parts:

1️⃣ Getting permission to use Xero's Bank Feeds API, and

2️⃣ Using Apideck's endpoints to create the feed and send transactions.


1. Obtain Access to Xero's Bank Feeds API

The Bank Feeds API is a closed API that's only available to financial institutions with an established partnership with Xero.

To gain access:

  • Review the official overview: 👉 Xero Bank Feeds API Overview
  • If you're a financial institution interested in offering direct feeds to your customers, contact Xero to become a financial services partner.
  • If you're already a partner, reach out to your Partner Manager to request access and begin the certification process.

Once certified, your application will be granted access to the relevant endpoints. You can then authorize accounts via OAuth and push bank statement data into Xero using Apideck.


2. Connect Xero via Apideck (Create a Bank Feed Account)

Once your Xero app is certified and connected via OAuth, you can create a bank feed connection using Apideck, a unified way to interact with Xero's feed infrastructure.

The Bank Feed Accounts endpoint in Apideck's Accounting API corresponds to Xero's Feed Connections API. It links your platform's accounts to bank or credit card accounts in Xero.

Send a request to:

POST

https://unify.apideck.com/accounting/bank-feed-accounts

API Reference

Request body example:

{
  "source_account_id": "randomId6",
  "target_account_number": "12345676",
  "target_account_name": "My test bank account6",
  "bank_account_type": "bank",
  "currency": "EUR"
}

🔎 Note:

  • If you already have a bank account in Xero, use target_account_id instead of the name or number to link it.
  • If not, provide target_account_name and target_account_number. Xero will create a new account using those values.

A successful response returns the bank feed account ID, used in the next step:

{
  "data": {
    "id": "55af487b-df2b-425e-9432-ea2db7a77481"
  }
}

Once this connection is created, Xero is ready to receive transaction statements from your platform via Apideck.


3. Send Bank Transactions via a Bank Feed Statement

After establishing the connection, you can deliver transactions to Xero using a bank feed statement.

The Bank Feed Statements endpoint lets you send a batch of transactions tied to the bank_feed_account_id created earlier.

POST

https://unify.apideck.com/accounting/bank-feed-statements

API Reference

Request body example:

{
  "bank_feed_account_id": "55af487b-df2b-425e-9432-ea2db7a77481",
  "start_date": "2025-05-01T00:00:00.000Z",
  "end_date": "2025-05-15T23:59:00.000Z",
  "start_balance": 100.0,
  "start_balance_credit_or_debit": "credit",
  "end_balance": 142.0,
  "end_balance_credit_or_debit": "credit",
  "transactions": [
    {
      "posted_date": "2025-05-02T01:00:00.000Z",
      "description": "Payment received from ACME Corp",
      "amount": 11.0,
      "credit_or_debit": "credit",
      "source_transaction_id": "txn_1019",
      "counterparty": "ACME Corp",
      "reference": "INV-2025-0116",
      "transaction_type": "payment"
    },
    {
      "posted_date": "2025-05-03T09:30:00.000Z",
      "description": "Payment sent to Supplier XYZ",
      "amount": 31.0,
      "credit_or_debit": "debit",
      "source_transaction_id": "txn_1020",
      "counterparty": "Supplier XYZ",
      "reference": "Bill-2025-0501",
      "transaction_type": "payment"
    }
  ]
}

💡 Tip:

  • Send statements in chronological order.
  • Ensure balances align correctly. Xero validates them.
  • Avoid gaps or overlaps in statement periods to prevent rejections.

Once submitted, the statement is processed by Xero and the transactions appear automatically under the connected bank account.


4. Reconcile Transactions in Xero

Once the statement is successfully uploaded, the transactions will appear in Xero under the connected bank account. From there, users can reconcile them using Xero's standard process by matching each line to invoices, bills, or other accounting records.

This creates a smooth, ongoing workflow: your platform sends transactions, and Xero handles reconciliation. By automating this flow, you help your users maintain accurate books with minimal manual effort, whether feeds are sent daily, weekly, or on demand.


Conclusion

Integrating with Xero's Bank Feeds via Apideck allows you to offer your customers a seamless, secure, and automated way to sync financial data into their accounting system.

It reduces manual work, improves reconciliation accuracy, and turns your platform into a trusted part of their finance stack. With just a few endpoints and the right setup, you can deliver a complete, production-ready bank feed experience.