Portfolio Supported AIs Solutions Tasks Email Archive Bring Your Own Code Integrations Pricing

Get Started

ChatGPT

ChatGPT

Start directly →

Ready
Claude

Claude

Directory Connector →

Ready
Mistral

Mistral

Directory Connector →

Ready

Dashboard Always available

QuickBooks Online

🔑 BYO Key — Accounting

Your own QuickBooks Online company: create and update customers and invoices, read settings, run QuickBooks queries (also payments). Writes are idempotent per request_id; updates are always sparse. Connect with your own Intuit app (client id and secret in the vault), then the OAuth connect flow. Testing: sandbox company, Development keys, vault key quickbooks_environment = "sandbox".

🔑 Setup Required — Bring Your Own Key This integration requires API credentials. Store them once via setup_integration or the Dashboard Vault — they're encrypted with AES-256-GCM and never exposed.

Required Credentials

quickbooks_client_id
Client ID
Client ID of your Intuit developer app (Keys and credentials). Development keys for a sandbox company, Production keys for your real company.
quickbooks_client_secret
Client Secret
Client Secret from the same Intuit app and key set.
quickbooks_access_token
Access Token
Filled by the OAuth connect flow; refreshed by the engine.
quickbooks_refresh_token
Refresh Token
Filled by the OAuth connect flow; rotates on every refresh.
quickbooks_token_expires_at
Token Expires At (unix timestamp)
Filled by the OAuth connect flow.
quickbooks_realm_id
Company ID (realmId)
Filled by the OAuth connect flow (Company ID in QuickBooks).

Get your API key at quickbooks.intuit.com →

Endpoints (11)

GET get-company-info

The connected company: CompanyName, Country, addresses. Also a cheap connection check.

No input parameters required.

GET get-preferences

Company preferences: CurrencyPrefs (HomeCurrency, MultiCurrencyEnabled), SalesFormsPrefs.CustomTxnNumbers (must be true to keep your own invoice number as DocNumber), TaxPrefs.

No input parameters required.

GET query

Run a read-only QuickBooks query, e.g. "select * from Invoice where DocNumber = '1001'", "select * from Customer where DisplayName = 'Acme Ltd'", "select * from TaxCode", "select * from Payment where MetaData.LastUpdatedTime > '2026-10-01T00:00:00Z'". Page with STARTPOSITION and MAXRESULTS (100 or less).

Field Type Required Description
query string ✓ Yes select ... from Entity where ...
GET get-customer

One customer by QuickBooks Id, including the SyncToken that update-customer needs.

Field Type Required Description
customer_id string ✓ Yes
POST create-customer

Create a customer. DisplayName must be unique (customers, vendors and employees): look it up first with query. The same request_id returns the original result instead of a second customer, so a retry is safe. Other QuickBooks Customer fields pass through as given.

Field Type Required Description
request_id string ✓ Yes Idempotency key, unique per company, e.g. "cust-<your id>-v1".
DisplayName string ✓ Yes
GivenName string No
FamilyName string No
CompanyName string No
PrimaryEmailAddr array No {"Address": "jane@example.com"}
PrimaryPhone array No {"FreeFormNumber": "+44 20 7946 0000"}
BillAddr array No {"Line1", "City", "PostalCode", "Country"}
ShipAddr array No
Notes string No
CurrencyRef array No {"value": "GBP"}, only with multi-currency on.
POST update-customer

Update a customer; sparse, so only the fields you send change. Needs Id and the current SyncToken (get-customer); on a stale SyncToken read again and retry. Active false = inactive (no customer delete in QuickBooks).

Field Type Required Description
request_id string ✓ Yes
Id string ✓ Yes
SyncToken string ✓ Yes
DisplayName string No
GivenName string No
FamilyName string No
CompanyName string No
PrimaryEmailAddr array No
PrimaryPhone array No
BillAddr array No
ShipAddr array No
Notes string No
Active boolean No
GET get-invoice

One invoice by QuickBooks Id (not DocNumber): lines, TotalAmt, Balance (0 = paid), LinkedTxn (payments), SyncToken. Find one by your own number with query on DocNumber.

Field Type Required Description
invoice_id string ✓ Yes
POST create-invoice

Create an invoice. Minimal: CustomerRef {"value": "<customer Id>"} and Line [{"DetailType": "SalesItemLineDetail", "Amount": 120.00, "Description": "...", "SalesItemLineDetail": {"ItemRef": {"value": "<item Id>"}, "Qty": 1, "UnitPrice": 120.00, "TaxCodeRef": {"value": "<tax code>"}}}]. Amounts are decimals, not cents; Amount = Qty x UnitPrice. DocNumber (your invoice number, max 21) is only kept when SalesFormsPrefs.CustomTxnNumbers is on; check with query that it is not used yet. The same request_id returns the original invoice instead of a second one. Other Invoice fields pass through as given.

Field Type Required Description
request_id string ✓ Yes Idempotency key, unique per company, e.g. "inv-<your id>-v1".
CustomerRef array ✓ Yes
Line array ✓ Yes
DocNumber string No
TxnDate string No YYYY-MM-DD
DueDate string No YYYY-MM-DD
CurrencyRef array No Must be the customer currency.
BillEmail array No {"Address": "..."}
CustomerMemo array No {"value": "shown on the invoice"}
PrivateNote string No
SalesTermRef array No
TxnTaxDetail array No
GlobalTaxCalculation string No TaxExcluded, TaxInclusive or NotApplicable (non-US).
POST update-invoice

Update an invoice; sparse, so only the fields you send change (a Line array replaces all lines). Needs Id and the current SyncToken (get-invoice); on a stale SyncToken read again and retry.

Field Type Required Description
request_id string ✓ Yes
Id string ✓ Yes
SyncToken string ✓ Yes
CustomerRef array No
Line array No
DocNumber string No
TxnDate string No
DueDate string No
BillEmail array No
CustomerMemo array No
PrivateNote string No
SalesTermRef array No
TxnTaxDetail array No
GlobalTaxCalculation string No
GET get-payment

One payment by QuickBooks Id: TotalAmt, TxnDate, CustomerRef, PaymentMethodRef and Line[].LinkedTxn (the invoices it pays, TxnType Invoice).

Field Type Required Description
payment_id string ✓ Yes
GET change-data-capture

Objects changed since a moment, e.g. entities "Invoice,Payment" and changed_since "2026-10-01T00:00:00Z". At most 30 days back and at most 1000 objects per entity; deleted objects come back with status "Deleted". Answer: CDCResponse[0].QueryResponse[] per entity.

Field Type Required Description
entities string ✓ Yes Comma list of entity names, e.g. "Invoice,Payment".
changed_since string ✓ Yes ISO 8601 time, at most 30 days ago.

MCP Tool Names

When using this integration through an AI assistant (Claude, ChatGPT, Cursor, etc.), the endpoints are available as MCP tools:

EndpointMCP Tool Name
get-company-info quickbooks_get_company_info
get-preferences quickbooks_get_preferences
query quickbooks_query
get-customer quickbooks_get_customer
create-customer quickbooks_create_customer
update-customer quickbooks_update_customer
get-invoice quickbooks_get_invoice
create-invoice quickbooks_create_invoice
update-invoice quickbooks_update_invoice
get-payment quickbooks_get_payment
change-data-capture quickbooks_change_data_capture
← Back to all integrations