Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.routemcp.io/llms.txt

Use this file to discover all available pages before exploring further.

QuickBooks Online

Overview

PropertyValue
Slugquickbooks-online
AuthOAuth 2.0
API versionv3 (minorVersion 75)
SandboxYes
Rate limit500 req/min, 8 req/sec

Supported resources

ResourceListGetCreateUpdateDelete
Invoice
Contact
Account
Payment
Tax Rate
Journal Entry
Expense
Purchase Order
Credit Note
Vendor Credit
Item
Tracking Category
Payment Method
Payment Term
Company Info
Accounting Period
Sales Order
Employee
Project
Attachment
Expense Report
Item Fulfillment
Balance Sheet
Income Statement
Cash Flow Statement
General Ledger Transaction
Transaction
Bank Feed Account
Bank Feed Transaction
Address
Phone Number

Connect setup

QuickBooks Online uses OAuth 2.0. You need an app registered in the Intuit Developer portal.
1

Create an Intuit app

Go to the Intuit Developer dashboardMy AppsCreate an app. Choose QuickBooks Online and Payments. Under Keys & OAuth, copy the Client ID and Client Secret.
2

Add the redirect URL

In your app’s Redirect URIs list, add:
https://api.routemcp.io/api/v1/auth/callback
3

Configure scopes

QuickBooks Online uses a single accounting scope:
  • com.intuit.quickbooks.accounting
4

Connect via the widget

When your end user authorizes through the Connect widget, RouteMCP captures the realmId query parameter from Intuit’s OAuth callback into the connection settings automatically. Every subsequent request substitutes it into the QBO API path for you.

Usage

# List invoices (AR + AP merged) from QuickBooks Online
curl "https://api.routemcp.io/api/v1/accounting/invoice?provider=quickbooks-online" \
  -H "Authorization: Bearer sk_live_your_key" \
  -H "X-End-User-Id: user-123"

# Create a bill (AP) — set type=ACCOUNTS_PAYABLE to dispatch to QBO's /bill endpoint
curl -X POST "https://api.routemcp.io/api/v1/accounting/invoice?provider=quickbooks-online" \
  -H "Authorization: Bearer sk_live_your_key" \
  -H "Content-Type: application/json" \
  -H "X-End-User-Id: user-123" \
  -d '{ "type": "ACCOUNTS_PAYABLE", "contact": "urn:qbo:vendor:99", "total_amount": 850.00, "due_date": "2026-06-01" }'

# Update by URN — RouteMCP decodes the URN and routes to the correct entity
curl -X PATCH "https://api.routemcp.io/api/v1/accounting/invoice/urn:qbo:bill:7?provider=quickbooks-online" \
  -H "Authorization: Bearer sk_live_your_key" \
  -H "Content-Type: application/json" \
  -H "X-End-User-Id: user-123" \
  -d '{ "memo": "Approved by ops" }'

Notes

  • QuickBooks Online splits Invoice/Payment/Contact across two underlying entities (Invoice + Bill, Payment + BillPayment, Customer + Vendor). RouteMCP fans out across both on list and dispatches create based on the type / is_supplier discriminator. For all other operations, RouteMCP returns a URN-encoded id (urn:qbo:<entity>:<id>) that you round-trip on follow-up calls — no extra parameter needed.
  • Account, Contact, Item, Tracking Category, Payment Method, Payment Term, and Tax Rate use QBO’s “name list” archive semantics — DELETE translates to a sparse update with Active: false. The record stays in QuickBooks with status: "ARCHIVED".
  • Invoice status is synthesized from QBO fields (Balance, TotalAmt, EmailStatus, PrivateNote) into canonical PAID / VOID / PARTIALLY_PAID / SUBMITTED / DRAFT / OPEN. Past-due unpaid invoices map to OPEN / SUBMITTED; consumers derive overdue from due_date < today.
  • QBO uses optimistic concurrency via SyncToken. RouteMCP fetches the current SyncToken transparently before any update or delete — callers never have to manage it.
  • The three financial reports (balance_sheet, income_statement, cash_flow_statement) are generated on-demand by QBO each call — they aren’t stored as records. Use created_after / created_before to pass the report’s start/end dates (for balance_sheet, created_before is the as-of snapshot date and the start defaults to all-time). Reports support list and get only.
  • general_ledger_transaction is parsed from QBO’s /reports/GeneralLedger response. Each canonical record represents the GL impact of an underlying transaction (Invoice, Payment, Bill, JournalEntry, etc.) with one debit/credit leg per line.
  • transaction is a cross-type aggregator across QBO’s SalesReceipt, RefundReceipt, Deposit, and Transfer entities. Read-only.
  • project requires a QBO Plus or Advanced subscription. Surfaced via QBO’s Customer entity with IsProject = true — the project’s parent customer is exposed as the canonical contact field.
  • employee only covers W-2 employees. 1099 contractors live on the Vendor entity in QBO and are accessed via the Contact resource with is_supplier: true.
  • accounting_period is read-only on QBO — QuickBooks doesn’t expose user-defined fiscal periods through the public API. List/get returns the company’s configured fiscal year boundaries.
  • attachment sources from QBO’s Attachable entity. file_url is the permanent FileAccessUri — safe to cache.
  • sales_order, expense_report, item_fulfillment, bank_feed_account, bank_feed_transaction, address, and phone_number are not supported on QBO. Calls return 405 Method Not Allowed. These resources work on other providers (e.g. NetSuite, Xero) once those integrations land.
  • Use environment: "sandbox" in your connect token to route requests to the QuickBooks Online sandbox company.