QuickBooks Online data API: invoices, bank feeds and P&L
Intuit QuickBooks for Business is Intuit Inc.'s Android client for QuickBooks Online, the cloud bookkeeping product the Mountain View company sells to small and mid-size businesses. From the home dashboard owners raise invoices and estimates, snap receipts for expenses, match bank and card feeds, take card or ACH payments, run payroll, and open profit-and-loss and cash-flow views without sitting at a desktop. The same company file is shared with bookkeepers and accountants who already work in QuickBooks Online on the web, so a shop owner on the road and a firm on the books stay on one ledger. Play-listed as Intuit QuickBooks for Business (the binary brands itself QuickBooks Online), it is the mobile front door for Intuit's US-centric SMB accounting franchise and also ships for QuickBooks Online companies in India, France and Mexico; it competes with Xero, FreshBooks, Sage and Zoho Books for phone-first bookkeeping.
Open-invoice Balance and DueDate ride on each sales document next to DocNumber, TotalAmt and the customer DisplayName, while the invoice list also returns openTotalAmount, overdueTotalCount and receivable status. Chart-of-accounts rows carry CurrentBalance, AccountType and linked bank-feed bankBalance, totalMoneyIn and totalMoneyOut; cash-flow windows add moneyIn, moneyOut and endingBalance, and P&L aggregates split income, expense and profit value.
Collections teams can age AR from those open and overdue totals, cash-ops dashboards can reconcile book balances against bank-feed figures, and FP&A tools can chart P&L and cash-flow spans without re-keying the company file. openData Studio turns that company-books surface into callable open data.
Screenshots
API surface
The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.
Query company entities (QBO v3)
GET
/v1/books/{companyId}/queryopenfinanceRuns QuickBooks Online's v3 query language against the signed-in company (Invoice, Customer, Account, Payment, Item, Vendor and other QueryResponse collections).
Auth: OAuth 2 Bearer from Intuit identity sign-in (Authorization header). Company scoped by realmId; originating-app header identifies the Android client.
- Id
- SyncToken
- DocNumber
- TxnDate
- DueDate
- TotalAmt
- Balance
- CustomerRef
- BillEmail
- AllowOnlineACHPayment
- AllowOnlineCreditCardPayment
- status
GET /v1/books/934145123456/query?query=SELECT%20*%20FROM%20Invoice%20WHERE%20Balance%20%3E%20%270%27%20STARTPOSITION%201%20MAXRESULTS%2020 HTTP/1.1 Authorization: Bearer <intuit_access_token> Accept: application/json{ "QueryResponse": { "Invoice": [ { "Id": "142", "SyncToken": "3", "DocNumber": "1042", "TxnDate": "2026-09-12", "DueDate": "2026-10-12", "TotalAmt": "1850.00", "Balance": "1850.00", "CustomerRef": {"value": "88", "name": "Harbor Mill Coffee"}, "BillEmail": {"Address": "[email protected]"}, "AllowOnlineACHPayment": true, "AllowOnlineCreditCardPayment": true, "status": "Open" } ], "maxResults": 20, "startPosition": 1 } }Record customer payment
POST
/v1/books/{companyId}/customer-paymentsopenfinancePosts a customer payment against open invoices and optionally processes card/ACH through Payments Hub.
Auth: OAuth 2 Bearer from Intuit identity sign-in (Authorization header). Company scoped by realmId; originating-app header identifies the Android client.
- Id
- CustomerRef
- TotalAmt
- UnappliedAmt
- TxnDate
- PaymentRefNum
- DepositToAccountRef
- ProcessPayment
- LinkedTxn
- status
- TxnSource
POST /v1/books/934145123456/customer-payments HTTP/1.1 Authorization: Bearer <intuit_access_token> Content-Type: application/json { "CustomerRef": {"value": "88", "name": "Harbor Mill Coffee"}, "TotalAmt": "1850.00", "TxnDate": "2026-10-01", "PaymentRefNum": "ACH-88421", "DepositToAccountRef": {"value": "35"}, "ProcessPayment": true, "Line": [{"Amount": "1850.00", "LinkedTxn": [{"TxnId": "142", "TxnType": "Invoice"}]}] }{ "Payment": { "Id": "901", "SyncToken": "0", "CustomerRef": {"value": "88", "name": "Harbor Mill Coffee"}, "TotalAmt": "1850.00", "UnappliedAmt": "0", "TxnDate": "2026-10-01", "PaymentRefNum": "ACH-88421", "DepositToAccountRef": {"value": "35"}, "status": "Completed", "TxnSource": "QBOMobile" } }Run company report
GET
/v1/books/{companyId}/reports/{reportName}opendataExecutes a named QuickBooks Online report (ProfitAndLoss and other reportEndPoint values) as column/row grids for the reports screen.
Auth: OAuth 2 Bearer from Intuit identity sign-in (Authorization header). Company scoped by realmId; originating-app header identifies the Android client.
- ReportName
- StartPeriod
- EndPeriod
- Currency
- ColTitle
- ColType
- group
- ColData
- value
GET /v1/books/934145123456/reports/ProfitAndLoss?start_date=2026-09-01&end_date=2026-09-30&accounting_method=Accrual HTTP/1.1 Authorization: Bearer <intuit_access_token> Accept: application/json{ "Header": {"ReportName": "ProfitAndLoss", "StartPeriod": "2026-09-01", "EndPeriod": "2026-09-30", "Currency": "USD"}, "Columns": {"Column": [{"ColTitle": "", "ColType": "Account"}, {"ColTitle": "Total", "ColType": "Money"}]}, "Rows": {"Row": [ {"group": "Income", "Summary": {"ColData": [{"value": "Income"}, {"value": "48210.00"}]}}, {"group": "Expenses", "Summary": {"ColData": [{"value": "Expenses"}, {"value": "27140.00"}]}}, {"group": "NetIncome", "Summary": {"ColData": [{"value": "Net Income"}, {"value": "21070.00"}]}} ]} }Download transaction PDF
GET
/v1/books/{companyId}/txns/{txnKind}/{txnId}/fileopendataFetches the printable PDF for an invoice, estimate, sales receipt or other transaction type from the share/print sheet.
Auth: OAuth 2 Bearer from Intuit identity sign-in (Authorization header). Company scoped by realmId; originating-app header identifies the Android client.
- contentType
- transactionType
- transactionId
- DocNumber
- fileName
- byteSize
GET /v1/books/934145123456/txns/invoice/142/file HTTP/1.1 Authorization: Bearer <intuit_access_token> Accept: application/pdf{ "contentType": "application/pdf", "transactionType": "invoice", "transactionId": "142", "DocNumber": "1042", "fileName": "Invoice_1042.pdf", "byteSize": 86421 }Create sales receipt
POST
/v1/books/{companyId}/walk-in-salesopenfinanceCreates a paid-in-full sales receipt (counter sale) and deposits it to a book account.
Auth: OAuth 2 Bearer from Intuit identity sign-in (Authorization header). Company scoped by realmId; originating-app header identifies the Android client.
- Id
- SyncToken
- DocNumber
- TxnDate
- TotalAmt
- Balance
- CustomerRef
- DepositToAccountRef
- Line
POST /v1/books/934145123456/walk-in-sales HTTP/1.1 Authorization: Bearer <intuit_access_token> Content-Type: application/json { "DocNumber": "SR-221", "TxnDate": "2026-10-02", "CustomerRef": {"value": "88"}, "TotalAmt": "64.50", "DepositToAccountRef": {"value": "35", "name": "Checking"}, "Line": [{"Amount": "64.50", "Description": "Drip bar — 2 drinks", "DetailType": "SalesItemLineDetail"}] }{ "SalesReceipt": { "Id": "310", "SyncToken": "0", "DocNumber": "SR-221", "TxnDate": "2026-10-02", "TotalAmt": "64.50", "Balance": "0", "CustomerRef": {"value": "88", "name": "Harbor Mill Coffee"}, "DepositToAccountRef": {"value": "35", "name": "Checking"} } }List invoices (GetInvoices)
GET
/v1/books/{companyId}/invoicesopenfinancePages the company's sales documents for the invoice list, with receivable balance, due date and online-payment flags.
Auth: OAuth 2 Bearer from Intuit identity sign-in (Authorization header). Company scoped by realmId; originating-app header identifies the Android client.
- id
- type
- referenceNumber
- status
- amount
- txnDate
- balance
- dueDate
- displayName
- enableCCPayment
- enableBankPayment
- totalTaxAmount
- shareLink
- endCursor
GET /v1/books/934145123456/invoices?status=Open&first=20&orderBy=txnDate%20DESC HTTP/1.1 Authorization: Bearer <intuit_access_token> Accept: application/json{ "data": { "company": { "sales": { "pageInfo": {"hasNextPage": true, "endCursor": "Y3Vyc29yOjIw"}, "edges": [{ "node": { "id": "142", "type": "Invoice", "referenceNumber": "1042", "status": "Open", "amount": "1850.00", "txnDate": "2026-09-12", "receivable": {"balance": "1850.00", "dueDate": "2026-10-12", "onlinePaymentInfo": {"enableCCPayment": true, "enableBankPayment": true}}, "contact": {"id": "88", "displayName": "Harbor Mill Coffee"}, "tax": {"totalTaxAmount": "148.00"}, "delivery": {"status": "EmailSent"} } }] } } } }Invoice open/overdue totals
GET
/v1/books/{companyId}/invoices/rollupsopendataReturns the invoice-list summary chips: open, paid and overdue counts and amounts.
Auth: OAuth 2 Bearer from Intuit identity sign-in (Authorization header). Company scoped by realmId; originating-app header identifies the Android client.
- openTotalCount
- openTotalAmount
- overallCount
- overallAmount
- paidTotalCount
- paidTotalAmount
- overdueTotalCount
- overdueTotalAmount
GET /v1/books/934145123456/invoices/rollups?asOfDate=2026-10-05 HTTP/1.1 Authorization: Bearer <intuit_access_token> Accept: application/json{ "data": { "company": { "saleSummary_getStats": { "edges": [{ "node": { "openTotalCount": 14, "openTotalAmount": "12840.00", "overallCount": 86, "overallAmount": "94120.00", "paidTotalCount": 72, "paidTotalAmount": "81280.00", "overdueTotalCount": 3, "overdueTotalAmount": "2100.00" } }] } } } }Create invoice (createSales_Sale)
POST
/v1/books/{companyId}/invoicesopenfinanceCreates a sales invoice from the mobile new-invoice form, returning line items and the open receivable.
Auth: OAuth 2 Bearer from Intuit identity sign-in (Authorization header). Company scoped by realmId; originating-app header identifies the Android client.
- id
- type
- referenceNumber
- status
- amount
- txnDate
- balance
- dueDate
- description
- quantity
- rate
- item
POST /v1/books/934145123456/invoices HTTP/1.1 Authorization: Bearer <intuit_access_token> Content-Type: application/json { "contactId": "88", "txnDate": "2026-10-05", "dueDate": "2026-11-04", "lines": [{"itemId": "12", "description": "Catering — 40 covers", "quantity": 1, "rate": "1850.00", "amount": "1850.00"}] }{ "data": { "createSales_Sale": { "salesSaleEdge": { "node": { "id": "155", "type": "Invoice", "referenceNumber": "1043", "status": "Open", "amount": "1850.00", "txnDate": "2026-10-05", "receivable": {"balance": "1850.00", "dueDate": "2026-11-04"}, "lines": {"edges": [{"node": {"id": "1", "description": "Catering — 40 covers", "quantity": 1, "rate": "1850.00", "amount": "1850.00", "item": {"id": "12", "name": "Catering"}}}]} } } } } }List customers
GET
/v1/books/{companyId}/parties/customersopendataSearches the customer directory with outstanding AR balance, emails, phones and billing address for the customers screen.
Auth: OAuth 2 Bearer from Intuit identity sign-in (Authorization header). Company scoped by realmId; originating-app header identifies the Android client.
- id
- displayName
- firstName
- lastName
- companyName
- active
- totalAmount
- address
- number
- city
- state
- postalCode
- totalCount
GET /v1/books/934145123456/parties/customers?search=Harbor&offset=0&limit=25 HTTP/1.1 Authorization: Bearer <intuit_access_token> Accept: application/json{ "data": { "contacts": { "totalCount": 1, "data": [{ "id": "88", "displayName": "Harbor Mill Coffee", "firstName": "Maya", "lastName": "Chen", "companyName": "Harbor Mill Coffee LLC", "active": true, "balance": {"totalAmount": "1850.00"}, "emailDirectory": {"primary": {"address": "[email protected]"}}, "phoneDirectory": {"primary": {"number": "+1-415-555-0142"}}, "addressDirectory": {"billing": {"city": "San Francisco", "state": "CA", "postalCode": "94107", "country": "US"}} }] } } }List vendors
GET
/v1/books/{companyId}/parties/vendorsopendataPages vendor contacts for bills and expenses, including print-on-check name and active vendor profile.
Auth: OAuth 2 Bearer from Intuit identity sign-in (Authorization header). Company scoped by realmId; originating-app header identifies the Android client.
- id
- displayName
- companyName
- givenName
- familyName
- printOnCheckName
- emailAddress
- number
- active
- realmId
- localId
GET /v1/books/934145123456/parties/vendors?active=true&first=25 HTTP/1.1 Authorization: Bearer <intuit_access_token> Accept: application/json{ "data": { "company": { "contacts": { "pageInfo": {"hasNextPage": false, "endCursor": null}, "edges": [{ "node": { "id": "44", "displayName": "Pacific Roasters", "companyName": "Pacific Roasters Inc", "person": {"givenName": "Luis", "familyName": "Ortega", "printOnCheckName": "Pacific Roasters Inc"}, "contactMethods": {"emails": [{"emailAddress": "[email protected]", "primary": true}], "telephones": [{"number": "+1-510-555-0199"}]}, "profiles": {"vendor": {"active": true}} } }] } } } }Profit and loss totals
GET
/v1/books/{companyId}/pnlopendataReturns period P&L aggregates with prior-period compare — the numbers on the profit-and-loss home card.
Auth: OAuth 2 Bearer from Intuit identity sign-in (Authorization header). Company scoped by realmId; originating-app header identifies the Android client.
- income
- expense
- profit
- value
- count
- diff
- diffPercentage
- percentCount
- uncategorized
GET /v1/books/934145123456/pnl?startDate=2026-09-01&endDate=2026-09-30&accountingMethod=ACCRUAL&calendar=MONTH HTTP/1.1 Authorization: Bearer <intuit_access_token> Accept: application/json{ "data": { "profitability": { "income": {"aggregate": {"total": {"value": "48210.00"}, "count": {"value": 86}}}, "expense": {"aggregate": {"total": {"value": "27140.00"}, "count": {"value": 54}}}, "profit": {"aggregate": {"total": {"value": "21070.00", "compareTo": {"value": "19840.00", "diff": "1230.00", "diffPercentage": "6.2"}}, "percentCount": {"value": "43.7"}}}, "uncategorized": {"all": {"aggregate": {"count": {"value": 2}}}} } } }Cash-flow summary
GET
/v1/books/{companyId}/cash-planopenfinanceReturns money-in / money-out and ending cash balances for the cash-flow widget and 12-month forecast.
Auth: OAuth 2 Bearer from Intuit identity sign-in (Authorization header). Company scoped by realmId; originating-app header identifies the Android client.
- summaryStartDate
- summaryEndDate
- summarySpan
- source
- moneyIn
- moneyOut
- endingBalance
- summaryType
- startDate
- endDate
GET /v1/books/934145123456/cash-plan?summaryStartDate=2026-10-01&summaryEndDate=2026-10-31&summarySpan=MONTH HTTP/1.1 Authorization: Bearer <intuit_access_token> Accept: application/json{ "data": { "getCashflowSummary": { "summaryStartDate": "2026-10-01", "summaryEndDate": "2026-10-31", "summarySpan": "MONTH", "source": "BOOKS_AND_BANK", "summaryData": [ {"startDate": "2026-10-01", "endDate": "2026-10-07", "moneyIn": "6240.00", "moneyOut": "4180.00", "endingBalance": "15210.00", "summaryType": "WEEK"}, {"startDate": "2026-10-08", "endDate": "2026-10-14", "moneyIn": "5100.00", "moneyOut": "3900.00", "endingBalance": "16410.00", "summaryType": "WEEK"} ] } } }Bank-feed account balances
GET
/v1/books/{companyId}/bank-linksopenbankingReads chart-of-accounts bank/credit-card rows plus online-banking (OLB) feed balances and money-in/out for the banking home.
Auth: OAuth 2 Bearer from Intuit identity sign-in (Authorization header). Company scoped by realmId; originating-app header identifies the Android client.
- id
- accountType
- accountSubType
- fullName
- code
- bankBalance
- totalMoneyIn
- totalMoneyOut
- transactionCount
- startDate
- endDate
GET /v1/books/934145123456/bank-links?startDate=2026-10-01&endDate=2026-10-31 HTTP/1.1 Authorization: Bearer <intuit_access_token> Accept: application/json{ "data": { "company": { "accountsSummary": { "accountGroups": [{ "financialPeriod": {"startDate": "2026-10-01", "endDate": "2026-10-31"}, "accounts": {"edges": [{ "node": { "id": "35", "accountType": "Bank", "accountSubType": "Checking", "fullName": "Checking", "currencyInfo": {"code": "USD"}, "olbAccounts": {"edges": [{ "node": {"id": "olb-35", "bankBalance": "16410.55", "totalMoneyIn": "11340.00", "totalMoneyOut": "8080.00", "transactionCount": 47} }]} } }]} }] } } } }Expense totals by category
GET
/v1/books/{companyId}/costs/by-categoryopendataBreaks expenses by category with prior-period compare for the expenses analytics card.
Auth: OAuth 2 Bearer from Intuit identity sign-in (Authorization header). Company scoped by realmId; originating-app header identifies the Android client.
- category
- id
- name
- categorized
- count
- total
- value
- diffPercentage
GET /v1/books/934145123456/costs/by-category?startDate=2026-09-01&endDate=2026-09-30&compareTo=PREVIOUS_PERIOD&includeUncategorized=true HTTP/1.1 Authorization: Bearer <intuit_access_token> Accept: application/json{ "data": { "expenses": [ { "category": {"id": "61", "name": "Meals and Entertainment"}, "categorized": true, "aggregate": { "count": {"value": 18, "compareTo": {"value": 14, "diffPercentage": "28.6"}}, "total": {"value": "2140.00", "compareTo": {"value": "1680.00", "diffPercentage": "27.4"}} } } ] } }
Data categories
- invoices
- customers
- vendors
- payments
- chart of accounts
- bank feeds
- cash flow
- profit and loss
- expenses
- sales receipts
Where teams use this data
AR collections dashboard
A collections bot pages GetInvoices for Open documents, reads receivable.balance and dueDate, and ages them against InvoiceTotals overdueTotalAmount so a shop owner sees who is late without exporting a spreadsheet.
Bank-feed reconciliation
Nightly jobs compare olbAccounts.bankBalance and totalMoneyIn/totalMoneyOut with book CurrentBalance on Bank accounts, then flag unmatched transactionCount spikes before the owner opens the banking home.
Customer credit check
A B2B underwriting screen looks up DisplayName, companyName and Customer.balance.totalAmount (plus PrimaryEmailAddr) before extending terms, using the same customer card the invoice form already loads.
Cash-ops vs books
FP&A tools chart GetCashflowSummary moneyIn, moneyOut and endingBalance next to ProfitAndLoss income/expense/profit.value so cash and accrual views stay on one company file.
Frequently asked questions
Does the QuickBooks Android app expose invoice balances, not just a PDF?
Yes. The sales-document list returns referenceNumber, amount, receivable.balance and dueDate per invoice, the invoice rollup adds openTotalAmount and overdueTotalCount, and the company query returns the same Balance, DocNumber and DueDate fields used on the invoice list.
Can I read connected bank balances from the company file?
Linked bank rows nest online-banking accounts with bankBalance, totalMoneyIn, totalMoneyOut and transactionCount on each Bank or credit-card book account, which is what the banking home uses after a feed refresh.
How does the app authenticate company calls?
After Intuit identity sign-in the client attaches an OAuth 2 Bearer token in the Authorization header, scopes the company by realmId, and sends an originating-app header that identifies the Android client on REST and Graph-style company calls.
Is this the public Intuit Developer API?
The calls match what the first-party Android client makes after login for a signed-in QuickBooks Online company — not a separately provisioned developer app. Treat tokens as the signed-in user's company session.
Topics
- QuickBooks Online API
- QuickBooks invoice Balance DueDate
- QuickBooks customer DisplayName
- QuickBooks bank feed bankBalance
- QuickBooks profit and loss
- QuickBooks cash flow moneyIn
- Intuit company books
- QuickBooks company query
Need this app's data API integrated?
We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.
- NDA + SOW on every engagement
- Delivery in 3–7 days
- Payment only after acceptance
- Work scoped to authorized use