Intuit Bank Feeds (QuickBooks)

Back to Bank Feeds

Setting up an Intuit Bank Feeds Workflow with Rutter

Introduction

Rutter API enables you to support setting up bank feeds for your customers' accounting instances. This allows you to sync bank transaction data into the instance to enable reconciliation for an accountant which ensures the accuracy and validity of your customers' books.

  1. Get listed as a bank within Intuit's QuickBooks Online.
  2. Onboard your customers to Intuit Bank Feeds to establish a connection between their bank account and their accounting instance.
  3. Continuously sync transaction data into the accounting instance to enable reconciliation.

Our Intuit Bank Feeds API supports QuickBooks Online.

End User Setup Process

Platform Setup

Data Sync Configuration

Make sure to include these Rutter Objects in your Data Sync Configuration through the Rutter dashboard.

  • Bank Feed Account
  • Bank Feed Transaction

Get listed as a bank within QuickBooks Online

When your customer wants to set up a Bank Feed between their accounting instance and their bank account, they will need to select you from a list of banks within QuickBooks' "Link Account" flow.

To get listed, please contact Rutter's success team.

Implementation Steps

Step 1: Set up a Bank Feed Connection

For every business you onboard to bank feeds, you need to create a new Intuit Bank Feed connection. Create an Intuit Bank Feeds type connection by calling our Create Connection API with this JSON body:

1
{
2
"platform": "INTUIT_BANK_FEEDS"
3
}

Use the access token returned from the API to make the API requests in the next several steps.

Example Connection Response Body
1
{
2
"connection": {
3
"id": "00000000-0000-0000-0000-000000000000",
4
"access_token": "00000000-0000-0000-0000-000000000000",
5
"link_url": "https://link.rutterapi.com/connection/00000000-0000-0000-0000-000000000000",
6
"name": "Example Connection"
7
}
8
}

Step 2: Create a Bank Feed Account

Use Rutter’s POST /bank_feeds/accounts API endpoint to supply the bank accounts your customer would like to set up with a Bank Feed. Your customer will be able to select any of the accounts you supply through this endpoint during the Intuit Bank Feed authentication flow.

Example Create Bank Feed Account Request Body
1
{
2
"bank_feed_account": {
3
"account_id": "00000000-0000-0000-0000-000000000000",
4
"internal_bank_account_id": "0674101002388",
5
"parent_bank_feed_account_id": "00000000-0000-0000-0000-000000000000",
6
"transaction_start_date": "2023-02-02T00:00:00.000Z",
7
"bank_account_type": "bank",
8
"currency_code": "USD",
9
"name": "Regan's Bank Account",
10
"available_balance": 1546.23,
11
"bank_account_number": "182237382",
12
"current_balance": 1833.21,
13
"line_of_business": "small business",
14
"routing_number": "123456789",
15
"additional_fields": {
16
"override_existing": true
17
}
18
}
19
}
Example Create Bank Feed Account Response Body
1
{
2
"bank_feed_account": {
3
"id": "00000000-0000-0000-0000-000000000000",
4
"account_id": "00000000-0000-0000-0000-000000000000",
5
"internal_bank_account_id": "0674101002388",
6
"parent_bank_feed_account_id": "00000000-0000-0000-0000-000000000000",
7
"last_statement_date": null,
8
"next_payment_date": null,
9
"transaction_start_date": "2023-02-02T00:00:00.000Z",
10
"bank_account_type": "bank",
11
"feed_status": "active",
12
"available_balance": 1546.23,
13
"available_credit": null,
14
"bank_account_number": "182237382",
15
"credit_limit": null,
16
"currency_code": "USD",
17
"current_balance": 1833.21,
18
"finance_charges": null,
19
"last_statement_balance": null,
20
"line_of_business": "small business",
21
"minimum_payment_amount": null,
22
"name": "Regan's Bank Account",
23
"next_payment_amount": null,
24
"past_due_amount": null,
25
"purchases_apr": null,
26
"routing_number": "123456789",
27
"last_synced_at": "2023-01-02T02:34:56.000Z",
28
// ...
29
}
30
}

Step 3: Enable the Bank Feed Authentication Flow

To set up bank feeds with the bank accounts you have supplied through POST /bank_feeds/accounts, your customer will need to initiate an authentication flow through their accounting instance.

Your customer will be prompted to input a One-Time password on a white-labeled authentication page. Plan how to expose this password to customers, preferably via a button in your UI. The password will expire 1 hour after generation. If you'd like to customize the instructions for how your customer should obtain this password, set up an Intuit Bank Feeds Configuration through your Rutter Dashboard. Go to Rutter Dashboard > "Platforms" tab. Select "Bank Feeds" tab, then "Intuit Bank Feeds". Otherwise, the default OTP instructions will be "Please input your One-Time Password here".

To create a One-Time password for your customer, please use Rutter’s POST /bank_feeds/otp API.

Example Generate OTP Response Body
1
{
2
"bank_feed_otp": {
3
"expires_at": "2023-01-10T00:00:00.000Z",
4
"otp": "00000000-0000-0000-0000-000000000000"
5
}
6
}

Step 4: Sync Transaction Data

In order for you to start syncing transaction data for a Bank Feed Account, your customer must have authenticated and set up the Bank Feed through their Intuit product. To check the authentication status of a Bank Feed Account, use GET /bank_feeds/accounts API. Transactions can start being synced as soon as the bank feed account is created.

Example Create Bank Feed Account Response Body
1
{
2
"bank_feed_account": {
3
"id": "00000000-0000-0000-0000-000000000000",
4
"account_id": "00000000-0000-0000-0000-000000000000",
5
"internal_bank_account_id": "0674101002388",
6
"parent_bank_feed_account_id": "00000000-0000-0000-0000-000000000000",
7
"transaction_start_date": "2023-02-02T00:00:00.000Z",
8
"bank_account_type": "bank",
9
"feed_status": "active",
10
// ...
11
}
12
}

To sync transaction data for a Bank Feed Account, use POST /bank_feeds/transactions API. We suggest syncing transactions in real time, once they've posted to the account. If current_balance is provided, the current_balance on the account will be updated. If not provided, it will not be updated automatically. The transaction_ready status indicates when Rutter is able to accept new transactions for a bank feed account. For Intuit, this will always be true after a bank feed account has successfully been created.

Example Create Bank Feed Transactions Request Body
1
{
2
"bank_feed_transactions": {
3
"bank_feed_account_id": "00000000-0000-0000-0000-000000000000",
4
"current_balance": 1234.56,
5
"transactions": [
6
{
7
"transaction_id": "ACRAF23DB3C4",
8
"posted_at": "2023-02-02T02:34:56.000Z",
9
"transaction_date": "2023-02-02T02:34:56.000Z",
10
"amount": -300,
11
"description": "Office supplies",
12
"transaction_type": "debit",
13
"debit_credit_memo": "DEBIT",
14
"payee": "Office Depot"
15
}
16
]
17
}
18
}
  • If the Bank Feed Transaction input is valid, transactions will be synced to the accounting system the next time the end user requests updated transactions for this account in QuickBooks by opening the bank account's feed page.

  • If response_mode=async is specified in the request, the response will include a job ID which can be used to check the status of the POST request using Fetch a Job API. If the job completes successfully, your input was valid and the response will show transactions with platform_ingested: false, meaning the transactions have not yet been ingested by Intuit (thus will not yet appear in the accounting instance). You can check the platform_ingested status of the transactions through GET /bank_feeds/transactions to confirm whether the transactions have synced into the accounting instance or not.

If the job fails, you should retry the POST request after fixing the error described in the job response.

Transaction Syncing Rules

  1. You must provide at least one transaction per sync request
  2. Only posted transactions should be submitted.
  3. Each transaction must have a unique identifier (transaction_id). The identifier for a transaction must never change. The same transaction identifier should not occur more than one time for a Bank Feed Account.