Skip to main content
Tools Reference

QuickBooks Online Tools

Written By Christopher Scaminaci

Last updated 7 days ago

QuickBooks Online Tools

qbo_ · 230 tools · Free 113 · Pro 117 Intuit's cloud accounting ledger via the Accounting API v3. Auth is OAuth2 authorization_code and nothing else - no API key, no client_credentials - on a StackJack-owned Intuit application, one per environment. ONE AUTHORIZATION IS ONE QUICKBOOKS COMPANY: the company id (realmId) arrives on the authorize redirect and is a PATH segment on every call, so an MSP holds one named connection per client company. The access token lives an hour and is refreshed at 80% of that; the refresh token rotates on a 24-hour clock and lapses after 100 days unused. The API is versioned by a minorversion query parameter pinned to 75. Paging is STARTPOSITION/MAXRESULTS in the query string, maximum 1000, with no cursor, no total and no more flag - a short page is the last one. There is NO HTTP DELETE anywhere: delete and void are POSTs carrying an operation parameter, so destructiveness follows the documented operation rather than the verb. A FULL update NULLs every writable field left out.

All connector tools · QuickBooks Online setup guide

QuickBooks Online tool groups

Financial statements

ToolPlanAccessSummary
qbo_report_account_list_detailFreeRead-onlyAccount List detail — the chart of accounts with type, detail type and balance.
qbo_report_balance_sheetFreeRead-onlyBalance Sheet — assets, liabilities and equity as at a date.
qbo_report_cash_flowFreeRead-onlyStatement of Cash Flows — operating, investing and financing movement for a period.
qbo_report_general_ledgerFreeRead-onlyGeneral Ledger detail — every posting, account by account.
qbo_report_journalFreeRead-onlyJournal report — transactions in journal form with their debit and credit splits.
qbo_report_profit_and_lossFreeRead-onlyProfit and Loss summary — income, cost of goods sold, expenses and net income for a period.
qbo_report_profit_and_loss_detailFreeRead-onlyProfit and Loss detail — every transaction behind each income and expense line.
qbo_report_trial_balanceFreeRead-onlyTrial Balance — every account with its debit and credit totals.

[QuickBooks Online] Account List detail — the chart of accounts with type, detail type and balance. Report parameters are the vendor's own name=value pairs, passed through as a JSON object — for example {"start_date":"2026-01-01","end_date":"2026-03-31"}.

ParamTypeRequiredDefaultDescription
parametersstringnonullReport parameters as a JSON object of the vendor's own name=value pairs, for example {"start_date":"2026-01-01","end_date":"2026-03-31"}. Omit for the report's defaults.

[QuickBooks Online] Balance Sheet — assets, liabilities and equity as at a date. Report parameters are the vendor's own name=value pairs, passed through as a JSON object — for example {"start_date":"2026-01-01","end_date":"2026-03-31"}.

ParamTypeRequiredDefaultDescription
parametersstringnonullReport parameters as a JSON object of the vendor's own name=value pairs, for example {"start_date":"2026-01-01","end_date":"2026-03-31"}. Omit for the report's defaults.

[QuickBooks Online] Statement of Cash Flows — operating, investing and financing movement for a period. Report parameters are the vendor's own name=value pairs, passed through as a JSON object — for example {"start_date":"2026-01-01","end_date":"2026-03-31"}.

ParamTypeRequiredDefaultDescription
parametersstringnonullReport parameters as a JSON object of the vendor's own name=value pairs, for example {"start_date":"2026-01-01","end_date":"2026-03-31"}. Omit for the report's defaults.

[QuickBooks Online] General Ledger detail — every posting, account by account. This is the largest report in the set; narrow it with a date window. Report parameters are the vendor's own name=value pairs, passed through as a JSON object — for example {"start_date":"2026-01-01","end_date":"2026-03-31"}.

ParamTypeRequiredDefaultDescription
parametersstringnonullReport parameters as a JSON object of the vendor's own name=value pairs, for example {"start_date":"2026-01-01","end_date":"2026-03-31"}. Omit for the report's defaults.

[QuickBooks Online] Journal report — transactions in journal form with their debit and credit splits. Report parameters are the vendor's own name=value pairs, passed through as a JSON object — for example {"start_date":"2026-01-01","end_date":"2026-03-31"}.

ParamTypeRequiredDefaultDescription
parametersstringnonullReport parameters as a JSON object of the vendor's own name=value pairs, for example {"start_date":"2026-01-01","end_date":"2026-03-31"}. Omit for the report's defaults.

[QuickBooks Online] Profit and Loss summary — income, cost of goods sold, expenses and net income for a period. The vendor's own sample uses start_date, end_date and customer (for example start_date=2026-01-01&end_date=2026-03-31). Report parameters are the vendor's own name=value pairs, passed through as a JSON object — for example {"start_date":"2026-01-01","end_date":"2026-03-31"}.

ParamTypeRequiredDefaultDescription
parametersstringnonullReport parameters as a JSON object of the vendor's own name=value pairs, for example {"start_date":"2026-01-01","end_date":"2026-03-31"}. Omit for the report's defaults.

[QuickBooks Online] Profit and Loss detail — every transaction behind each income and expense line. The vendor's sample names customer and class. Report parameters are the vendor's own name=value pairs, passed through as a JSON object — for example {"start_date":"2026-01-01","end_date":"2026-03-31"}.

ParamTypeRequiredDefaultDescription
parametersstringnonullReport parameters as a JSON object of the vendor's own name=value pairs, for example {"start_date":"2026-01-01","end_date":"2026-03-31"}. Omit for the report's defaults.

[QuickBooks Online] Trial Balance — every account with its debit and credit totals. Report parameters are the vendor's own name=value pairs, passed through as a JSON object — for example {"start_date":"2026-01-01","end_date":"2026-03-31"}.

ParamTypeRequiredDefaultDescription
parametersstringnonullReport parameters as a JSON object of the vendor's own name=value pairs, for example {"start_date":"2026-01-01","end_date":"2026-03-31"}. Omit for the report's defaults.

Receivables

ToolPlanAccessSummary
qbo_report_ar_aging_detailFreeRead-onlyA/R Aging detail — the individual open invoices behind each aging bucket.
qbo_report_ar_aging_summaryFreeRead-onlyA/R Aging summary — what each customer owes, bucketed by how overdue it is.
qbo_report_customer_balanceFreeRead-onlyCustomer Balances — the outstanding balance per customer.
qbo_report_customer_balance_detailFreeRead-onlyCustomer Balance detail — the open transactions making up each customer's balance.
qbo_report_customer_incomeFreeRead-onlyIncome by Customer — revenue and expense per customer, the profitability-by-client read.

[QuickBooks Online] A/R Aging detail — the individual open invoices behind each aging bucket. Report parameters are the vendor's own name=value pairs, passed through as a JSON object — for example {"start_date":"2026-01-01","end_date":"2026-03-31"}.

ParamTypeRequiredDefaultDescription
parametersstringnonullReport parameters as a JSON object of the vendor's own name=value pairs, for example {"start_date":"2026-01-01","end_date":"2026-03-31"}. Omit for the report's defaults.

[QuickBooks Online] A/R Aging summary — what each customer owes, bucketed by how overdue it is. The collections report. Report parameters are the vendor's own name=value pairs, passed through as a JSON object — for example {"start_date":"2026-01-01","end_date":"2026-03-31"}.

ParamTypeRequiredDefaultDescription
parametersstringnonullReport parameters as a JSON object of the vendor's own name=value pairs, for example {"start_date":"2026-01-01","end_date":"2026-03-31"}. Omit for the report's defaults.

[QuickBooks Online] Customer Balances — the outstanding balance per customer. The vendor's sample names customer and class. Report parameters are the vendor's own name=value pairs, passed through as a JSON object — for example {"start_date":"2026-01-01","end_date":"2026-03-31"}.

ParamTypeRequiredDefaultDescription
parametersstringnonullReport parameters as a JSON object of the vendor's own name=value pairs, for example {"start_date":"2026-01-01","end_date":"2026-03-31"}. Omit for the report's defaults.

[QuickBooks Online] Customer Balance detail — the open transactions making up each customer's balance. Report parameters are the vendor's own name=value pairs, passed through as a JSON object — for example {"start_date":"2026-01-01","end_date":"2026-03-31"}.

ParamTypeRequiredDefaultDescription
parametersstringnonullReport parameters as a JSON object of the vendor's own name=value pairs, for example {"start_date":"2026-01-01","end_date":"2026-03-31"}. Omit for the report's defaults.

[QuickBooks Online] Income by Customer — revenue and expense per customer, the profitability-by-client read. Report parameters are the vendor's own name=value pairs, passed through as a JSON object — for example {"start_date":"2026-01-01","end_date":"2026-03-31"}.

ParamTypeRequiredDefaultDescription
parametersstringnonullReport parameters as a JSON object of the vendor's own name=value pairs, for example {"start_date":"2026-01-01","end_date":"2026-03-31"}. Omit for the report's defaults.

Payables

ToolPlanAccessSummary
qbo_report_ap_aging_detailFreeRead-onlyA/P Aging detail — the individual open bills behind each aging bucket.
qbo_report_ap_aging_summaryFreeRead-onlyA/P Aging summary — what you owe each vendor, bucketed by how overdue it is.
qbo_report_vendor_balanceFreeRead-onlyVendor Balances — the outstanding balance per vendor.
qbo_report_vendor_balance_detailFreeRead-onlyVendor Balance detail — the open transactions making up each vendor's balance.
qbo_report_vendor_expensesFreeRead-onlyExpenses by Vendor — spend per vendor for a period.

[QuickBooks Online] A/P Aging detail — the individual open bills behind each aging bucket. Report parameters are the vendor's own name=value pairs, passed through as a JSON object — for example {"start_date":"2026-01-01","end_date":"2026-03-31"}.

ParamTypeRequiredDefaultDescription
parametersstringnonullReport parameters as a JSON object of the vendor's own name=value pairs, for example {"start_date":"2026-01-01","end_date":"2026-03-31"}. Omit for the report's defaults.

[QuickBooks Online] A/P Aging summary — what you owe each vendor, bucketed by how overdue it is. Report parameters are the vendor's own name=value pairs, passed through as a JSON object — for example {"start_date":"2026-01-01","end_date":"2026-03-31"}.

ParamTypeRequiredDefaultDescription
parametersstringnonullReport parameters as a JSON object of the vendor's own name=value pairs, for example {"start_date":"2026-01-01","end_date":"2026-03-31"}. Omit for the report's defaults.

[QuickBooks Online] Vendor Balances — the outstanding balance per vendor. Report parameters are the vendor's own name=value pairs, passed through as a JSON object — for example {"start_date":"2026-01-01","end_date":"2026-03-31"}.

ParamTypeRequiredDefaultDescription
parametersstringnonullReport parameters as a JSON object of the vendor's own name=value pairs, for example {"start_date":"2026-01-01","end_date":"2026-03-31"}. Omit for the report's defaults.

[QuickBooks Online] Vendor Balance detail — the open transactions making up each vendor's balance. The vendor's sample names vendor and class. Report parameters are the vendor's own name=value pairs, passed through as a JSON object — for example {"start_date":"2026-01-01","end_date":"2026-03-31"}.

ParamTypeRequiredDefaultDescription
parametersstringnonullReport parameters as a JSON object of the vendor's own name=value pairs, for example {"start_date":"2026-01-01","end_date":"2026-03-31"}. Omit for the report's defaults.

[QuickBooks Online] Expenses by Vendor — spend per vendor for a period. Report parameters are the vendor's own name=value pairs, passed through as a JSON object — for example {"start_date":"2026-01-01","end_date":"2026-03-31"}.

ParamTypeRequiredDefaultDescription
parametersstringnonullReport parameters as a JSON object of the vendor's own name=value pairs, for example {"start_date":"2026-01-01","end_date":"2026-03-31"}. Omit for the report's defaults.

Sales analysis

ToolPlanAccessSummary
qbo_report_sales_by_classFreeRead-onlySales by Class summary — revenue per class.
qbo_report_sales_by_customerFreeRead-onlySales by Customer — revenue per customer for a period.
qbo_report_sales_by_departmentFreeRead-onlySales by Department — revenue per location or department.
qbo_report_sales_by_productFreeRead-onlySales by Product/Service — revenue and quantity per item.

[QuickBooks Online] Sales by Class summary — revenue per class. Report parameters are the vendor's own name=value pairs, passed through as a JSON object — for example {"start_date":"2026-01-01","end_date":"2026-03-31"}.

ParamTypeRequiredDefaultDescription
parametersstringnonullReport parameters as a JSON object of the vendor's own name=value pairs, for example {"start_date":"2026-01-01","end_date":"2026-03-31"}. Omit for the report's defaults.

[QuickBooks Online] Sales by Customer — revenue per customer for a period. The vendor's sample names customer and class. Report parameters are the vendor's own name=value pairs, passed through as a JSON object — for example {"start_date":"2026-01-01","end_date":"2026-03-31"}.

ParamTypeRequiredDefaultDescription
parametersstringnonullReport parameters as a JSON object of the vendor's own name=value pairs, for example {"start_date":"2026-01-01","end_date":"2026-03-31"}. Omit for the report's defaults.

[QuickBooks Online] Sales by Department — revenue per location or department. Report parameters are the vendor's own name=value pairs, passed through as a JSON object — for example {"start_date":"2026-01-01","end_date":"2026-03-31"}.

ParamTypeRequiredDefaultDescription
parametersstringnonullReport parameters as a JSON object of the vendor's own name=value pairs, for example {"start_date":"2026-01-01","end_date":"2026-03-31"}. Omit for the report's defaults.

[QuickBooks Online] Sales by Product/Service — revenue and quantity per item. Report parameters are the vendor's own name=value pairs, passed through as a JSON object — for example {"start_date":"2026-01-01","end_date":"2026-03-31"}.

ParamTypeRequiredDefaultDescription
parametersstringnonullReport parameters as a JSON object of the vendor's own name=value pairs, for example {"start_date":"2026-01-01","end_date":"2026-03-31"}. Omit for the report's defaults.

Transaction lists

ToolPlanAccessSummary
qbo_report_transaction_listFreeRead-onlyTransaction List — every transaction in a period, across types.
qbo_report_transaction_list_by_customerFreeRead-onlyTransaction List by Customer — every transaction grouped by customer.
qbo_report_transaction_list_by_vendorFreeRead-onlyTransaction List by Vendor — every transaction grouped by vendor.
qbo_report_transaction_list_with_splitsFreeRead-onlyTransaction List with Splits — transactions with each of their ledger splits.

[QuickBooks Online] Transaction List — every transaction in a period, across types. Report parameters are the vendor's own name=value pairs, passed through as a JSON object — for example {"start_date":"2026-01-01","end_date":"2026-03-31"}.

ParamTypeRequiredDefaultDescription
parametersstringnonullReport parameters as a JSON object of the vendor's own name=value pairs, for example {"start_date":"2026-01-01","end_date":"2026-03-31"}. Omit for the report's defaults.

[QuickBooks Online] Transaction List by Customer — every transaction grouped by customer. Report parameters are the vendor's own name=value pairs, passed through as a JSON object — for example {"start_date":"2026-01-01","end_date":"2026-03-31"}.

ParamTypeRequiredDefaultDescription
parametersstringnonullReport parameters as a JSON object of the vendor's own name=value pairs, for example {"start_date":"2026-01-01","end_date":"2026-03-31"}. Omit for the report's defaults.

[QuickBooks Online] Transaction List by Vendor — every transaction grouped by vendor. Report parameters are the vendor's own name=value pairs, passed through as a JSON object — for example {"start_date":"2026-01-01","end_date":"2026-03-31"}.

ParamTypeRequiredDefaultDescription
parametersstringnonullReport parameters as a JSON object of the vendor's own name=value pairs, for example {"start_date":"2026-01-01","end_date":"2026-03-31"}. Omit for the report's defaults.

[QuickBooks Online] Transaction List with Splits — transactions with each of their ledger splits. Report parameters are the vendor's own name=value pairs, passed through as a JSON object — for example {"start_date":"2026-01-01","end_date":"2026-03-31"}.

ParamTypeRequiredDefaultDescription
parametersstringnonullReport parameters as a JSON object of the vendor's own name=value pairs, for example {"start_date":"2026-01-01","end_date":"2026-03-31"}. Omit for the report's defaults.

Inventory and tax

ToolPlanAccessSummary
qbo_report_inventory_valuation_detailFreeRead-onlyInventory Valuation detail — the movements behind each item's valuation.
qbo_report_inventory_valuation_summaryFreeRead-onlyInventory Valuation summary — quantity on hand and asset value per inventory item.
qbo_report_tax_summaryFreeRead-onlyTax Summary.

[QuickBooks Online] Inventory Valuation detail — the movements behind each item's valuation. Report parameters are the vendor's own name=value pairs, passed through as a JSON object — for example {"start_date":"2026-01-01","end_date":"2026-03-31"}.

ParamTypeRequiredDefaultDescription
parametersstringnonullReport parameters as a JSON object of the vendor's own name=value pairs, for example {"start_date":"2026-01-01","end_date":"2026-03-31"}. Omit for the report's defaults.

[QuickBooks Online] Inventory Valuation summary — quantity on hand and asset value per inventory item. Report parameters are the vendor's own name=value pairs, passed through as a JSON object — for example {"start_date":"2026-01-01","end_date":"2026-03-31"}.

ParamTypeRequiredDefaultDescription
parametersstringnonullReport parameters as a JSON object of the vendor's own name=value pairs, for example {"start_date":"2026-01-01","end_date":"2026-03-31"}. Omit for the report's defaults.

[QuickBooks Online] Tax Summary. Applicable to NON-US companies only — a US company gets an error rather than an empty report. Report parameters are the vendor's own name=value pairs, passed through as a JSON object — for example {"start_date":"2026-01-01","end_date":"2026-03-31"}.

ParamTypeRequiredDefaultDescription
parametersstringnonullReport parameters as a JSON object of the vendor's own name=value pairs, for example {"start_date":"2026-01-01","end_date":"2026-03-31"}. Omit for the report's defaults.

Customers

ToolPlanAccessSummary
qbo_create_customerProWriteCreate a customer.
qbo_full_update_customerProDestructiveFULL update of a customer.
qbo_get_customerFreeRead-onlyRead one customer by its QuickBooks Id, including the SyncToken every update must echo back.
qbo_get_customer_typeFreeRead-onlyRead one customer type by its QuickBooks Id.
qbo_list_customer_typesFreeRead-onlyList customer types with an optional WHERE clause.
qbo_list_customersFreeRead-onlyList customers with an optional WHERE clause.
qbo_update_customerProWriteSPARSE update of a customer — only the fields you send are changed and every omitted field is left alone.

[QuickBooks Online] Create a customer. A customer is the company or person you invoice. The record carries the billing and shipping addresses, terms, tax code, currency, notes and the running Balance. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] FULL update of a customer. DATA LOSS WARNING: QuickBooks sets every writable field you omit to NULL, so the body must repeat the whole record exactly as a read returned it. Prefer qbo_update_customer, which changes only what you send. A customer is the company or person you invoice. The record carries the billing and shipping addresses, terms, tax code, currency, notes and the running Balance. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The COMPLETE record as a JSON object, including its Id and current SyncToken. Every writable field you omit is set to NULL by QuickBooks.

[QuickBooks Online] Read one customer by its QuickBooks Id, including the SyncToken every update must echo back. A customer is the company or person you invoice. The record carries the billing and shipping addresses, terms, tax code, currency, notes and the running Balance.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] Read one customer type by its QuickBooks Id. A customer type categorizes customers the way the business thinks of them - by industry, by region, or by how they found you - for reporting and mailings. READ-ONLY through the API: Intuit publishes no create, update or delete for this resource.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] List customer types with an optional WHERE clause. A customer type categorizes customers the way the business thinks of them - by industry, by region, or by how they found you - for reporting and mailings. READ-ONLY through the API: Intuit publishes no create, update or delete for this resource. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

[QuickBooks Online] List customers with an optional WHERE clause. A customer is the company or person you invoice. The record carries the billing and shipping addresses, terms, tax code, currency, notes and the running Balance. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

[QuickBooks Online] SPARSE update of a customer — only the fields you send are changed and every omitted field is left alone. This is the safe update and the one to reach for. A customer is the company or person you invoice. The record carries the billing and shipping addresses, terms, tax code, currency, notes and the running Balance. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. A JSON object carrying the record's Id, its current SyncToken, and ONLY the fields to change. Everything omitted is left exactly as it is.

Invoices

ToolPlanAccessSummary
qbo_create_invoiceProWriteCreate an invoice.
qbo_delete_invoiceProDestructiveDelete an invoice.
qbo_full_update_invoiceProDestructiveFULL update of an invoice.
qbo_get_invoiceFreeRead-onlyRead one invoice by its QuickBooks Id, including the SyncToken every update must echo back.
qbo_get_invoice_pdfProRead-onlyDownload the rendered PDF of an invoice.
qbo_list_invoicesFreeRead-onlyList invoices with an optional WHERE clause.
qbo_send_invoiceProDestructiveEMAIL the invoice to a real person.
qbo_update_invoiceProWriteSPARSE update of an invoice — only the fields you send are changed and every omitted field is left alone.
qbo_void_invoiceProDestructiveVoid an invoice.

[QuickBooks Online] Create an invoice. An invoice is a sale on credit — what a customer owes you and when. Line items reference Items, and the Balance field is what is still outstanding. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] Delete an invoice. This removes the transaction from the company's books and cannot be undone; where the entity can be VOIDED instead, voiding keeps the audit trail and is usually what an accountant wants. An invoice is a sale on credit — what a customer owes you and when. Line items reference Items, and the Balance field is what is still outstanding. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.
syncTokenstringyesREQUIRED. The SyncToken from the most recent read of this record.

[QuickBooks Online] FULL update of an invoice. DATA LOSS WARNING: QuickBooks sets every writable field you omit to NULL, so the body must repeat the whole record exactly as a read returned it. Prefer qbo_update_invoice, which changes only what you send. An invoice is a sale on credit — what a customer owes you and when. Line items reference Items, and the Balance field is what is still outstanding. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The COMPLETE record as a JSON object, including its Id and current SyncToken. Every writable field you omit is set to NULL by QuickBooks.

[QuickBooks Online] Read one invoice by its QuickBooks Id, including the SyncToken every update must echo back. An invoice is a sale on credit — what a customer owes you and when. Line items reference Items, and the Balance field is what is still outstanding.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] Download the rendered PDF of an invoice. A file cannot cross the tool surface, so the answer is a JSON envelope carrying a TEMPORARY download link valid for 15 minutes, the content type, a suggested file name, the exact byte count and the expiry — fetch the link before it expires, because StackJack keeps no other copy. QuickBooks renders the document on demand from the transaction as it stands now and the company's current template, so it is a render rather than a stored copy.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The document's QuickBooks Id.

[QuickBooks Online] List invoices with an optional WHERE clause. An invoice is a sale on credit — what a customer owes you and when. Line items reference Items, and the Balance field is what is still outstanding. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

[QuickBooks Online] EMAIL the invoice to a real person. QuickBooks sends it immediately and there is no recall. Omit sendTo to use the email address stored on the document; supply sendTo to override it. Sending also stamps the document EmailSent.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The document's QuickBooks Id.
sendTostringnonullEmail address to send to. Omit to use the address stored on the document.

[QuickBooks Online] SPARSE update of an invoice — only the fields you send are changed and every omitted field is left alone. This is the safe update and the one to reach for. An invoice is a sale on credit — what a customer owes you and when. Line items reference Items, and the Balance field is what is still outstanding. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. A JSON object carrying the record's Id, its current SyncToken, and ONLY the fields to change. Everything omitted is left exactly as it is.

[QuickBooks Online] Void an invoice. The record stays in the books with zero amounts and a Voided stamp, which preserves the audit trail — but the amounts are gone and it cannot be undone. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.
syncTokenstringyesREQUIRED. The SyncToken from the most recent read of this record.

Estimates

ToolPlanAccessSummary
qbo_create_estimateProWriteCreate an estimate.
qbo_delete_estimateProDestructiveDelete an estimate.
qbo_full_update_estimateProDestructiveFULL update of an estimate.
qbo_get_estimateFreeRead-onlyRead one estimate by its QuickBooks Id, including the SyncToken every update must echo back.
qbo_get_estimate_pdfProRead-onlyDownload the rendered PDF of an estimate.
qbo_list_estimatesFreeRead-onlyList estimates with an optional WHERE clause.
qbo_send_estimateProDestructiveEMAIL the estimate to a real person.
qbo_update_estimateProWriteSPARSE update of an estimate — only the fields you send are changed and every omitted field is left alone.

[QuickBooks Online] Create an estimate. An estimate is a quote. It does not post to the ledger until it is converted to an invoice. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] Delete an estimate. This removes the transaction from the company's books and cannot be undone; where the entity can be VOIDED instead, voiding keeps the audit trail and is usually what an accountant wants. An estimate is a quote. It does not post to the ledger until it is converted to an invoice. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.
syncTokenstringyesREQUIRED. The SyncToken from the most recent read of this record.

[QuickBooks Online] FULL update of an estimate. DATA LOSS WARNING: QuickBooks sets every writable field you omit to NULL, so the body must repeat the whole record exactly as a read returned it. Prefer qbo_update_estimate, which changes only what you send. An estimate is a quote. It does not post to the ledger until it is converted to an invoice. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The COMPLETE record as a JSON object, including its Id and current SyncToken. Every writable field you omit is set to NULL by QuickBooks.

[QuickBooks Online] Read one estimate by its QuickBooks Id, including the SyncToken every update must echo back. An estimate is a quote. It does not post to the ledger until it is converted to an invoice.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] Download the rendered PDF of an estimate. A file cannot cross the tool surface, so the answer is a JSON envelope carrying a TEMPORARY download link valid for 15 minutes, the content type, a suggested file name, the exact byte count and the expiry — fetch the link before it expires, because StackJack keeps no other copy. QuickBooks renders the document on demand from the transaction as it stands now and the company's current template, so it is a render rather than a stored copy.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The document's QuickBooks Id.

[QuickBooks Online] List estimates with an optional WHERE clause. An estimate is a quote. It does not post to the ledger until it is converted to an invoice. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

[QuickBooks Online] EMAIL the estimate to a real person. QuickBooks sends it immediately and there is no recall. Omit sendTo to use the email address stored on the document; supply sendTo to override it. Sending also stamps the document EmailSent.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The document's QuickBooks Id.
sendTostringnonullEmail address to send to. Omit to use the address stored on the document.

[QuickBooks Online] SPARSE update of an estimate — only the fields you send are changed and every omitted field is left alone. This is the safe update and the one to reach for. An estimate is a quote. It does not post to the ledger until it is converted to an invoice. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. A JSON object carrying the record's Id, its current SyncToken, and ONLY the fields to change. Everything omitted is left exactly as it is.

Sales receipts

ToolPlanAccessSummary
qbo_create_sales_receiptProWriteCreate a sales receipt.
qbo_delete_sales_receiptProDestructiveDelete a sales receipt.
qbo_full_update_sales_receiptProDestructiveFULL update of a sales receipt.
qbo_get_sales_receiptFreeRead-onlyRead one sales receipt by its QuickBooks Id, including the SyncToken every update must echo back.
qbo_get_sales_receipt_pdfProRead-onlyDownload the rendered PDF of a sales receipt.
qbo_list_sales_receiptsFreeRead-onlyList sales receipts with an optional WHERE clause.
qbo_send_sales_receiptProDestructiveEMAIL the sales receipt to a real person.
qbo_update_sales_receiptProWriteSPARSE update of a sales receipt — only the fields you send are changed and every omitted field is left alone.
qbo_void_sales_receiptProDestructiveVoid a sales receipt.

[QuickBooks Online] Create a sales receipt. A sales receipt is a sale that was paid at the time — no receivable is created. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] Delete a sales receipt. This removes the transaction from the company's books and cannot be undone; where the entity can be VOIDED instead, voiding keeps the audit trail and is usually what an accountant wants. A sales receipt is a sale that was paid at the time — no receivable is created. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.
syncTokenstringyesREQUIRED. The SyncToken from the most recent read of this record.

[QuickBooks Online] FULL update of a sales receipt. DATA LOSS WARNING: QuickBooks sets every writable field you omit to NULL, so the body must repeat the whole record exactly as a read returned it. Prefer qbo_update_sales_receipt, which changes only what you send. A sales receipt is a sale that was paid at the time — no receivable is created. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The COMPLETE record as a JSON object, including its Id and current SyncToken. Every writable field you omit is set to NULL by QuickBooks.

[QuickBooks Online] Read one sales receipt by its QuickBooks Id, including the SyncToken every update must echo back. A sales receipt is a sale that was paid at the time — no receivable is created.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] Download the rendered PDF of a sales receipt. A file cannot cross the tool surface, so the answer is a JSON envelope carrying a TEMPORARY download link valid for 15 minutes, the content type, a suggested file name, the exact byte count and the expiry — fetch the link before it expires, because StackJack keeps no other copy. QuickBooks renders the document on demand from the transaction as it stands now and the company's current template, so it is a render rather than a stored copy.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The document's QuickBooks Id.

[QuickBooks Online] List sales receipts with an optional WHERE clause. A sales receipt is a sale that was paid at the time — no receivable is created. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

[QuickBooks Online] EMAIL the sales receipt to a real person. QuickBooks sends it immediately and there is no recall. Omit sendTo to use the email address stored on the document; supply sendTo to override it. Sending also stamps the document EmailSent.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The document's QuickBooks Id.
sendTostringnonullEmail address to send to. Omit to use the address stored on the document.

[QuickBooks Online] SPARSE update of a sales receipt — only the fields you send are changed and every omitted field is left alone. This is the safe update and the one to reach for. A sales receipt is a sale that was paid at the time — no receivable is created. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. A JSON object carrying the record's Id, its current SyncToken, and ONLY the fields to change. Everything omitted is left exactly as it is.

[QuickBooks Online] Void a sales receipt. The record stays in the books with zero amounts and a Voided stamp, which preserves the audit trail — but the amounts are gone and it cannot be undone. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.
syncTokenstringyesREQUIRED. The SyncToken from the most recent read of this record.

Customer payments

ToolPlanAccessSummary
qbo_create_paymentProWriteCreate a payment.
qbo_delete_paymentProDestructiveDelete a payment.
qbo_full_update_paymentProDestructiveFULL update of a payment.
qbo_get_paymentFreeRead-onlyRead one payment by its QuickBooks Id, including the SyncToken every update must echo back.
qbo_get_payment_pdfProRead-onlyDownload the rendered PDF of a payment.
qbo_list_paymentsFreeRead-onlyList payments with an optional WHERE clause.
qbo_send_paymentProDestructiveEMAIL the payment receipt to a real person.
qbo_void_paymentProDestructiveVoid a payment.

[QuickBooks Online] Create a payment. A payment records money received from a customer and, through its Line entries, which invoices it settles. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] Delete a payment. This removes the transaction from the company's books and cannot be undone; where the entity can be VOIDED instead, voiding keeps the audit trail and is usually what an accountant wants. A payment records money received from a customer and, through its Line entries, which invoices it settles. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.
syncTokenstringyesREQUIRED. The SyncToken from the most recent read of this record.

[QuickBooks Online] FULL update of a payment. DATA LOSS WARNING: QuickBooks sets every writable field you omit to NULL, so the body must repeat the whole record exactly as a read returned it. This entity offers no sparse update, so read the record first and echo every writable field back. A payment records money received from a customer and, through its Line entries, which invoices it settles. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The COMPLETE record as a JSON object, including its Id and current SyncToken. Every writable field you omit is set to NULL by QuickBooks.

[QuickBooks Online] Read one payment by its QuickBooks Id, including the SyncToken every update must echo back. A payment records money received from a customer and, through its Line entries, which invoices it settles.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] Download the rendered PDF of a payment. A file cannot cross the tool surface, so the answer is a JSON envelope carrying a TEMPORARY download link valid for 15 minutes, the content type, a suggested file name, the exact byte count and the expiry — fetch the link before it expires, because StackJack keeps no other copy. QuickBooks renders the document on demand from the transaction as it stands now and the company's current template, so it is a render rather than a stored copy.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The document's QuickBooks Id.

[QuickBooks Online] List payments with an optional WHERE clause. A payment records money received from a customer and, through its Line entries, which invoices it settles. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

[QuickBooks Online] EMAIL the payment receipt to a real person. QuickBooks sends it immediately and there is no recall. Omit sendTo to use the email address stored on the document; supply sendTo to override it. Sending also stamps the document EmailSent.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The document's QuickBooks Id.
sendTostringnonullEmail address to send to. Omit to use the address stored on the document.

[QuickBooks Online] Void a payment. The record stays in the books with zero amounts and a Voided stamp, which preserves the audit trail — but the amounts are gone and it cannot be undone. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.
syncTokenstringyesREQUIRED. The SyncToken from the most recent read of this record.

Credit memos

ToolPlanAccessSummary
qbo_create_credit_memoProWriteCreate a credit memo.
qbo_delete_credit_memoProDestructiveDelete a credit memo.
qbo_full_update_credit_memoProDestructiveFULL update of a credit memo.
qbo_get_credit_memoFreeRead-onlyRead one credit memo by its QuickBooks Id, including the SyncToken every update must echo back.
qbo_get_credit_memo_pdfProRead-onlyDownload the rendered PDF of a credit memo.
qbo_list_credit_memosFreeRead-onlyList credit memos with an optional WHERE clause.
qbo_send_credit_memoProDestructiveEMAIL the credit memo to a real person.

[QuickBooks Online] Create a credit memo. A credit memo is a refund or credit of payment, or part of a payment, for goods or services already sold. It reduces what the customer owes. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] Delete a credit memo. This removes the transaction from the company's books and cannot be undone; where the entity can be VOIDED instead, voiding keeps the audit trail and is usually what an accountant wants. A credit memo is a refund or credit of payment, or part of a payment, for goods or services already sold. It reduces what the customer owes. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.
syncTokenstringyesREQUIRED. The SyncToken from the most recent read of this record.

[QuickBooks Online] FULL update of a credit memo. DATA LOSS WARNING: QuickBooks sets every writable field you omit to NULL, so the body must repeat the whole record exactly as a read returned it. This entity offers no sparse update, so read the record first and echo every writable field back. A credit memo is a refund or credit of payment, or part of a payment, for goods or services already sold. It reduces what the customer owes. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The COMPLETE record as a JSON object, including its Id and current SyncToken. Every writable field you omit is set to NULL by QuickBooks.

[QuickBooks Online] Read one credit memo by its QuickBooks Id, including the SyncToken every update must echo back. A credit memo is a refund or credit of payment, or part of a payment, for goods or services already sold. It reduces what the customer owes.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] Download the rendered PDF of a credit memo. A file cannot cross the tool surface, so the answer is a JSON envelope carrying a TEMPORARY download link valid for 15 minutes, the content type, a suggested file name, the exact byte count and the expiry — fetch the link before it expires, because StackJack keeps no other copy. QuickBooks renders the document on demand from the transaction as it stands now and the company's current template, so it is a render rather than a stored copy.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The document's QuickBooks Id.

[QuickBooks Online] List credit memos with an optional WHERE clause. A credit memo is a refund or credit of payment, or part of a payment, for goods or services already sold. It reduces what the customer owes. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

[QuickBooks Online] EMAIL the credit memo to a real person. QuickBooks sends it immediately and there is no recall. Omit sendTo to use the email address stored on the document; supply sendTo to override it. Sending also stamps the document EmailSent.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The document's QuickBooks Id.
sendTostringnonullEmail address to send to. Omit to use the address stored on the document.

Refund receipts

ToolPlanAccessSummary
qbo_create_refund_receiptProWriteCreate a refund receipt.
qbo_delete_refund_receiptProDestructiveDelete a refund receipt.
qbo_full_update_refund_receiptProDestructiveFULL update of a refund receipt.
qbo_get_refund_receiptFreeRead-onlyRead one refund receipt by its QuickBooks Id, including the SyncToken every update must echo back.
qbo_get_refund_receipt_pdfProRead-onlyDownload the rendered PDF of a refund receipt.
qbo_list_refund_receiptsFreeRead-onlyList refund receipts with an optional WHERE clause.
qbo_send_refund_receiptProDestructiveEMAIL the refund receipt to a real person.
qbo_update_refund_receiptProWriteSPARSE update of a refund receipt — only the fields you send are changed and every omitted field is left alone.

[QuickBooks Online] Create a refund receipt. A refund receipt records money given back to a customer for a product or service that was provided. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] Delete a refund receipt. This removes the transaction from the company's books and cannot be undone; where the entity can be VOIDED instead, voiding keeps the audit trail and is usually what an accountant wants. A refund receipt records money given back to a customer for a product or service that was provided. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.
syncTokenstringyesREQUIRED. The SyncToken from the most recent read of this record.

[QuickBooks Online] FULL update of a refund receipt. DATA LOSS WARNING: QuickBooks sets every writable field you omit to NULL, so the body must repeat the whole record exactly as a read returned it. Prefer qbo_update_refund_receipt, which changes only what you send. A refund receipt records money given back to a customer for a product or service that was provided. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The COMPLETE record as a JSON object, including its Id and current SyncToken. Every writable field you omit is set to NULL by QuickBooks.

[QuickBooks Online] Read one refund receipt by its QuickBooks Id, including the SyncToken every update must echo back. A refund receipt records money given back to a customer for a product or service that was provided.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] Download the rendered PDF of a refund receipt. A file cannot cross the tool surface, so the answer is a JSON envelope carrying a TEMPORARY download link valid for 15 minutes, the content type, a suggested file name, the exact byte count and the expiry — fetch the link before it expires, because StackJack keeps no other copy. QuickBooks renders the document on demand from the transaction as it stands now and the company's current template, so it is a render rather than a stored copy.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The document's QuickBooks Id.

[QuickBooks Online] List refund receipts with an optional WHERE clause. A refund receipt records money given back to a customer for a product or service that was provided. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

[QuickBooks Online] EMAIL the refund receipt to a real person. QuickBooks sends it immediately and there is no recall. Omit sendTo to use the email address stored on the document; supply sendTo to override it. Sending also stamps the document EmailSent.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The document's QuickBooks Id.
sendTostringnonullEmail address to send to. Omit to use the address stored on the document.

[QuickBooks Online] SPARSE update of a refund receipt — only the fields you send are changed and every omitted field is left alone. This is the safe update and the one to reach for. A refund receipt records money given back to a customer for a product or service that was provided. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. A JSON object carrying the record's Id, its current SyncToken, and ONLY the fields to change. Everything omitted is left exactly as it is.

Change orders

ToolPlanAccessSummary
qbo_create_change_orderProWriteCreate a change order.
qbo_delete_change_orderProDestructiveDelete a change order.
qbo_full_update_change_orderProDestructiveFULL update of a change order.
qbo_get_change_orderFreeRead-onlyRead one change order by its QuickBooks Id, including the SyncToken every update must echo back.

[QuickBooks Online] Create a change order. A change order is a modification to the scope of work on an existing project estimate - additions or deletions to the contracted work that roll up into the project's total budget alongside the parent estimate. PRODUCT-GATED: US companies on QuickBooks Online Advanced with the Construction Pack, or Intuit Enterprise Suite, with the Projects feature enabled. Other companies get an error rather than an empty result. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] Delete a change order. This removes the transaction from the company's books and cannot be undone; where the entity can be VOIDED instead, voiding keeps the audit trail and is usually what an accountant wants. A change order is a modification to the scope of work on an existing project estimate - additions or deletions to the contracted work that roll up into the project's total budget alongside the parent estimate. PRODUCT-GATED: US companies on QuickBooks Online Advanced with the Construction Pack, or Intuit Enterprise Suite, with the Projects feature enabled. Other companies get an error rather than an empty result. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.
syncTokenstringyesREQUIRED. The SyncToken from the most recent read of this record.

[QuickBooks Online] FULL update of a change order. DATA LOSS WARNING: QuickBooks sets every writable field you omit to NULL, so the body must repeat the whole record exactly as a read returned it. This entity offers no sparse update, so read the record first and echo every writable field back. A change order is a modification to the scope of work on an existing project estimate - additions or deletions to the contracted work that roll up into the project's total budget alongside the parent estimate. PRODUCT-GATED: US companies on QuickBooks Online Advanced with the Construction Pack, or Intuit Enterprise Suite, with the Projects feature enabled. Other companies get an error rather than an empty result. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The COMPLETE record as a JSON object, including its Id and current SyncToken. Every writable field you omit is set to NULL by QuickBooks.

[QuickBooks Online] Read one change order by its QuickBooks Id, including the SyncToken every update must echo back. A change order is a modification to the scope of work on an existing project estimate - additions or deletions to the contracted work that roll up into the project's total budget alongside the parent estimate. PRODUCT-GATED: US companies on QuickBooks Online Advanced with the Construction Pack, or Intuit Enterprise Suite, with the Projects feature enabled. Other companies get an error rather than an empty result.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

Terms and payment methods

ToolPlanAccessSummary
qbo_create_payment_methodProWriteCreate a payment method.
qbo_create_termProWriteCreate a term.
qbo_full_update_payment_methodProDestructiveFULL update of a payment method.
qbo_full_update_termProDestructiveFULL update of a term.
qbo_get_payment_methodFreeRead-onlyRead one payment method by its QuickBooks Id, including the SyncToken every update must echo back.
qbo_get_termFreeRead-onlyRead one term by its QuickBooks Id, including the SyncToken every update must echo back.
qbo_list_payment_methodsFreeRead-onlyList payment methods with an optional WHERE clause.
qbo_list_termsFreeRead-onlyList terms with an optional WHERE clause.

[QuickBooks Online] Create a payment method. A payment method is how money was received (cash, cheque, a card type). It cannot be deleted: set Active to false in an update to hide it, which leaves references to it intact. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] Create a term. A term is the sales terms a document is issued under - net 30, or 2%/15 net 60, or an absolute due date - including any early-payment discount. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] FULL update of a payment method. DATA LOSS WARNING: QuickBooks sets every writable field you omit to NULL, so the body must repeat the whole record exactly as a read returned it. This entity offers no sparse update, so read the record first and echo every writable field back. A payment method is how money was received (cash, cheque, a card type). It cannot be deleted: set Active to false in an update to hide it, which leaves references to it intact. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The COMPLETE record as a JSON object, including its Id and current SyncToken. Every writable field you omit is set to NULL by QuickBooks.

[QuickBooks Online] FULL update of a term. DATA LOSS WARNING: QuickBooks sets every writable field you omit to NULL, so the body must repeat the whole record exactly as a read returned it. This entity offers no sparse update, so read the record first and echo every writable field back. A term is the sales terms a document is issued under - net 30, or 2%/15 net 60, or an absolute due date - including any early-payment discount. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The COMPLETE record as a JSON object, including its Id and current SyncToken. Every writable field you omit is set to NULL by QuickBooks.

[QuickBooks Online] Read one payment method by its QuickBooks Id, including the SyncToken every update must echo back. A payment method is how money was received (cash, cheque, a card type). It cannot be deleted: set Active to false in an update to hide it, which leaves references to it intact.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] Read one term by its QuickBooks Id, including the SyncToken every update must echo back. A term is the sales terms a document is issued under - net 30, or 2%/15 net 60, or an absolute due date - including any early-payment discount.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] List payment methods with an optional WHERE clause. A payment method is how money was received (cash, cheque, a card type). It cannot be deleted: set Active to false in an update to hide it, which leaves references to it intact. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

[QuickBooks Online] List terms with an optional WHERE clause. A term is the sales terms a document is issued under - net 30, or 2%/15 net 60, or an absolute due date - including any early-payment discount. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

Reimbursable charges

ToolPlanAccessSummary
qbo_get_reimburse_chargeFreeRead-onlyRead one reimbursable charge by its QuickBooks Id.
qbo_list_reimburse_chargesFreeRead-onlyList reimburse charges with an optional WHERE clause.

[QuickBooks Online] Read one reimbursable charge by its QuickBooks Id. A reimbursable charge is a billable expense - an expense or bill line marked Billable to a customer, waiting to be invoiced. READ-ONLY through the API.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] List reimburse charges with an optional WHERE clause. A reimbursable charge is a billable expense - an expense or bill line marked Billable to a customer, waiting to be invoiced. READ-ONLY through the API. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

Vendors

ToolPlanAccessSummary
qbo_create_vendorProWriteCreate a vendor.
qbo_full_update_vendorProDestructiveFULL update of a vendor.
qbo_get_vendorFreeRead-onlyRead one vendor by its QuickBooks Id, including the SyncToken every update must echo back.
qbo_list_vendorsFreeRead-onlyList vendors with an optional WHERE clause.

[QuickBooks Online] Create a vendor. A vendor is someone you buy from. The record carries the remit-to address, terms, tax id and the running Balance. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] FULL update of a vendor. DATA LOSS WARNING: QuickBooks sets every writable field you omit to NULL, so the body must repeat the whole record exactly as a read returned it. This entity offers no sparse update, so read the record first and echo every writable field back. A vendor is someone you buy from. The record carries the remit-to address, terms, tax id and the running Balance. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The COMPLETE record as a JSON object, including its Id and current SyncToken. Every writable field you omit is set to NULL by QuickBooks.

[QuickBooks Online] Read one vendor by its QuickBooks Id, including the SyncToken every update must echo back. A vendor is someone you buy from. The record carries the remit-to address, terms, tax id and the running Balance.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] List vendors with an optional WHERE clause. A vendor is someone you buy from. The record carries the remit-to address, terms, tax id and the running Balance. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

Bills

ToolPlanAccessSummary
qbo_create_billProWriteCreate a bill.
qbo_delete_billProDestructiveDelete a bill.
qbo_full_update_billProDestructiveFULL update of a bill.
qbo_get_billFreeRead-onlyRead one bill by its QuickBooks Id, including the SyncToken every update must echo back.
qbo_list_billsFreeRead-onlyList bills with an optional WHERE clause.

[QuickBooks Online] Create a bill. A bill is a purchase on credit — what you owe a vendor and when. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] Delete a bill. This removes the transaction from the company's books and cannot be undone; where the entity can be VOIDED instead, voiding keeps the audit trail and is usually what an accountant wants. A bill is a purchase on credit — what you owe a vendor and when. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.
syncTokenstringyesREQUIRED. The SyncToken from the most recent read of this record.

[QuickBooks Online] FULL update of a bill. DATA LOSS WARNING: QuickBooks sets every writable field you omit to NULL, so the body must repeat the whole record exactly as a read returned it. This entity offers no sparse update, so read the record first and echo every writable field back. A bill is a purchase on credit — what you owe a vendor and when. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The COMPLETE record as a JSON object, including its Id and current SyncToken. Every writable field you omit is set to NULL by QuickBooks.

[QuickBooks Online] Read one bill by its QuickBooks Id, including the SyncToken every update must echo back. A bill is a purchase on credit — what you owe a vendor and when.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] List bills with an optional WHERE clause. A bill is a purchase on credit — what you owe a vendor and when. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

Bill payments

ToolPlanAccessSummary
qbo_create_bill_paymentProWriteCreate a bill payment.
qbo_delete_bill_paymentProDestructiveDelete a bill payment.
qbo_full_update_bill_paymentProDestructiveFULL update of a bill payment.
qbo_get_bill_paymentFreeRead-onlyRead one bill payment by its QuickBooks Id, including the SyncToken every update must echo back.
qbo_list_bill_paymentsFreeRead-onlyList bill payments with an optional WHERE clause.
qbo_void_bill_paymentProDestructiveVoid a bill payment.

[QuickBooks Online] Create a bill payment. A bill payment records money paid to a vendor and, through its Line entries, which bills it settles. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] Delete a bill payment. This removes the transaction from the company's books and cannot be undone; where the entity can be VOIDED instead, voiding keeps the audit trail and is usually what an accountant wants. A bill payment records money paid to a vendor and, through its Line entries, which bills it settles. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.
syncTokenstringyesREQUIRED. The SyncToken from the most recent read of this record.

[QuickBooks Online] FULL update of a bill payment. DATA LOSS WARNING: QuickBooks sets every writable field you omit to NULL, so the body must repeat the whole record exactly as a read returned it. This entity offers no sparse update, so read the record first and echo every writable field back. A bill payment records money paid to a vendor and, through its Line entries, which bills it settles. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The COMPLETE record as a JSON object, including its Id and current SyncToken. Every writable field you omit is set to NULL by QuickBooks.

[QuickBooks Online] Read one bill payment by its QuickBooks Id, including the SyncToken every update must echo back. A bill payment records money paid to a vendor and, through its Line entries, which bills it settles.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] List bill payments with an optional WHERE clause. A bill payment records money paid to a vendor and, through its Line entries, which bills it settles. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

[QuickBooks Online] Void a bill payment. The record stays in the books with zero amounts and a Voided stamp, which preserves the audit trail — but the amounts are gone and it cannot be undone. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.
syncTokenstringyesREQUIRED. The SyncToken from the most recent read of this record.

Expenses and purchases

ToolPlanAccessSummary
qbo_create_purchaseProWriteCreate a purchase.
qbo_delete_purchaseProDestructiveDelete a purchase.
qbo_full_update_purchaseProDestructiveFULL update of a purchase.
qbo_get_purchaseFreeRead-onlyRead one purchase by its QuickBooks Id, including the SyncToken every update must echo back.
qbo_list_purchasesFreeRead-onlyList purchases with an optional WHERE clause.

[QuickBooks Online] Create a purchase. A purchase is an expense paid at the time - by cash, cheque or credit card, set by PaymentType. Every purchase must name an AccountRef, and TotalAmt must equal the sum of its line amounts. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] Delete a purchase. This removes the transaction from the company's books and cannot be undone; where the entity can be VOIDED instead, voiding keeps the audit trail and is usually what an accountant wants. A purchase is an expense paid at the time - by cash, cheque or credit card, set by PaymentType. Every purchase must name an AccountRef, and TotalAmt must equal the sum of its line amounts. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.
syncTokenstringyesREQUIRED. The SyncToken from the most recent read of this record.

[QuickBooks Online] FULL update of a purchase. DATA LOSS WARNING: QuickBooks sets every writable field you omit to NULL, so the body must repeat the whole record exactly as a read returned it. This entity offers no sparse update, so read the record first and echo every writable field back. A purchase is an expense paid at the time - by cash, cheque or credit card, set by PaymentType. Every purchase must name an AccountRef, and TotalAmt must equal the sum of its line amounts. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The COMPLETE record as a JSON object, including its Id and current SyncToken. Every writable field you omit is set to NULL by QuickBooks.

[QuickBooks Online] Read one purchase by its QuickBooks Id, including the SyncToken every update must echo back. A purchase is an expense paid at the time - by cash, cheque or credit card, set by PaymentType. Every purchase must name an AccountRef, and TotalAmt must equal the sum of its line amounts.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] List purchases with an optional WHERE clause. A purchase is an expense paid at the time - by cash, cheque or credit card, set by PaymentType. Every purchase must name an AccountRef, and TotalAmt must equal the sum of its line amounts. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

Purchase orders

ToolPlanAccessSummary
qbo_create_purchase_orderProWriteCreate a purchase order.
qbo_delete_purchase_orderProDestructiveDelete a purchase order.
qbo_full_update_purchase_orderProDestructiveFULL update of a purchase order.
qbo_get_purchase_orderFreeRead-onlyRead one purchase order by its QuickBooks Id, including the SyncToken every update must echo back.
qbo_get_purchase_order_pdfProRead-onlyDownload the rendered PDF of a purchase order.
qbo_list_purchase_ordersFreeRead-onlyList purchase orders with an optional WHERE clause.
qbo_send_purchase_orderProDestructiveEMAIL the purchase order to a real person.

[QuickBooks Online] Create a purchase order. A purchase order is a NON-POSTING request to buy goods or services from a third party. It changes no balance until it is matched to a bill. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] Delete a purchase order. This removes the transaction from the company's books and cannot be undone; where the entity can be VOIDED instead, voiding keeps the audit trail and is usually what an accountant wants. A purchase order is a NON-POSTING request to buy goods or services from a third party. It changes no balance until it is matched to a bill. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.
syncTokenstringyesREQUIRED. The SyncToken from the most recent read of this record.

[QuickBooks Online] FULL update of a purchase order. DATA LOSS WARNING: QuickBooks sets every writable field you omit to NULL, so the body must repeat the whole record exactly as a read returned it. This entity offers no sparse update, so read the record first and echo every writable field back. A purchase order is a NON-POSTING request to buy goods or services from a third party. It changes no balance until it is matched to a bill. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The COMPLETE record as a JSON object, including its Id and current SyncToken. Every writable field you omit is set to NULL by QuickBooks.

[QuickBooks Online] Read one purchase order by its QuickBooks Id, including the SyncToken every update must echo back. A purchase order is a NON-POSTING request to buy goods or services from a third party. It changes no balance until it is matched to a bill.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] Download the rendered PDF of a purchase order. A file cannot cross the tool surface, so the answer is a JSON envelope carrying a TEMPORARY download link valid for 15 minutes, the content type, a suggested file name, the exact byte count and the expiry — fetch the link before it expires, because StackJack keeps no other copy. QuickBooks renders the document on demand from the transaction as it stands now and the company's current template, so it is a render rather than a stored copy.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The document's QuickBooks Id.

[QuickBooks Online] List purchase orders with an optional WHERE clause. A purchase order is a NON-POSTING request to buy goods or services from a third party. It changes no balance until it is matched to a bill. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

[QuickBooks Online] EMAIL the purchase order to a real person. QuickBooks sends it immediately and there is no recall. Omit sendTo to use the email address stored on the document; supply sendTo to override it. Sending also stamps the document EmailSent. The recipient of this one is your VENDOR, not a customer.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The document's QuickBooks Id.
sendTostringnonullEmail address to send to. Omit to use the address stored on the document.

Vendor credits

ToolPlanAccessSummary
qbo_create_vendor_creditProWriteCreate a vendor credit.
qbo_delete_vendor_creditProDestructiveDelete a vendor credit.
qbo_full_update_vendor_creditProDestructiveFULL update of a vendor credit.
qbo_get_vendor_creditFreeRead-onlyRead one vendor credit by its QuickBooks Id, including the SyncToken every update must echo back.
qbo_list_vendor_creditsFreeRead-onlyList vendor credits with an optional WHERE clause.

[QuickBooks Online] Create a vendor credit. A vendor credit is an accounts-payable transaction recording a refund or credit a vendor owes you - an overpaid bill, returned merchandise, and so on. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] Delete a vendor credit. This removes the transaction from the company's books and cannot be undone; where the entity can be VOIDED instead, voiding keeps the audit trail and is usually what an accountant wants. A vendor credit is an accounts-payable transaction recording a refund or credit a vendor owes you - an overpaid bill, returned merchandise, and so on. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.
syncTokenstringyesREQUIRED. The SyncToken from the most recent read of this record.

[QuickBooks Online] FULL update of a vendor credit. DATA LOSS WARNING: QuickBooks sets every writable field you omit to NULL, so the body must repeat the whole record exactly as a read returned it. This entity offers no sparse update, so read the record first and echo every writable field back. A vendor credit is an accounts-payable transaction recording a refund or credit a vendor owes you - an overpaid bill, returned merchandise, and so on. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The COMPLETE record as a JSON object, including its Id and current SyncToken. Every writable field you omit is set to NULL by QuickBooks.

[QuickBooks Online] Read one vendor credit by its QuickBooks Id, including the SyncToken every update must echo back. A vendor credit is an accounts-payable transaction recording a refund or credit a vendor owes you - an overpaid bill, returned merchandise, and so on.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] List vendor credits with an optional WHERE clause. A vendor credit is an accounts-payable transaction recording a refund or credit a vendor owes you - an overpaid bill, returned merchandise, and so on. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

Chart of accounts

ToolPlanAccessSummary
qbo_create_accountProWriteCreate an account.
qbo_full_update_accountProDestructiveFULL update of an account.
qbo_get_accountFreeRead-onlyRead one account by its QuickBooks Id, including the SyncToken every update must echo back.
qbo_list_accountsFreeRead-onlyList accounts with an optional WHERE clause.

[QuickBooks Online] Create an account. An account is a line in the chart of accounts. Deleting one is NOT possible: set Active to false with an update instead, which hides it without removing its history. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] FULL update of an account. DATA LOSS WARNING: QuickBooks sets every writable field you omit to NULL, so the body must repeat the whole record exactly as a read returned it. This entity offers no sparse update, so read the record first and echo every writable field back. An account is a line in the chart of accounts. Deleting one is NOT possible: set Active to false with an update instead, which hides it without removing its history. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The COMPLETE record as a JSON object, including its Id and current SyncToken. Every writable field you omit is set to NULL by QuickBooks.

[QuickBooks Online] Read one account by its QuickBooks Id, including the SyncToken every update must echo back. An account is a line in the chart of accounts. Deleting one is NOT possible: set Active to false with an update instead, which hides it without removing its history.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] List accounts with an optional WHERE clause. An account is a line in the chart of accounts. Deleting one is NOT possible: set Active to false with an update instead, which hides it without removing its history. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

Journal entries

ToolPlanAccessSummary
qbo_create_journal_entryProWriteCreate a journal entry.
qbo_delete_journal_entryProDestructiveDelete a journal entry.
qbo_full_update_journal_entryProDestructiveFULL update of a journal entry.
qbo_get_journal_entryFreeRead-onlyRead one journal entry by its QuickBooks Id, including the SyncToken every update must echo back.
qbo_list_journal_entriesFreeRead-onlyList journal entries with an optional WHERE clause.
qbo_update_journal_entryProWriteSPARSE update of a journal entry — only the fields you send are changed and every omitted field is left alone.

[QuickBooks Online] Create a journal entry. A journal entry posts debits and credits directly to accounts. Totals must balance or QuickBooks rejects it. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] Delete a journal entry. This removes the transaction from the company's books and cannot be undone; where the entity can be VOIDED instead, voiding keeps the audit trail and is usually what an accountant wants. A journal entry posts debits and credits directly to accounts. Totals must balance or QuickBooks rejects it. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.
syncTokenstringyesREQUIRED. The SyncToken from the most recent read of this record.

[QuickBooks Online] FULL update of a journal entry. DATA LOSS WARNING: QuickBooks sets every writable field you omit to NULL, so the body must repeat the whole record exactly as a read returned it. Prefer qbo_update_journal_entry, which changes only what you send. A journal entry posts debits and credits directly to accounts. Totals must balance or QuickBooks rejects it. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The COMPLETE record as a JSON object, including its Id and current SyncToken. Every writable field you omit is set to NULL by QuickBooks.

[QuickBooks Online] Read one journal entry by its QuickBooks Id, including the SyncToken every update must echo back. A journal entry posts debits and credits directly to accounts. Totals must balance or QuickBooks rejects it.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] List journal entries with an optional WHERE clause. A journal entry posts debits and credits directly to accounts. Totals must balance or QuickBooks rejects it. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

[QuickBooks Online] SPARSE update of a journal entry — only the fields you send are changed and every omitted field is left alone. This is the safe update and the one to reach for. A journal entry posts debits and credits directly to accounts. Totals must balance or QuickBooks rejects it. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. A JSON object carrying the record's Id, its current SyncToken, and ONLY the fields to change. Everything omitted is left exactly as it is.

Items and services

ToolPlanAccessSummary
qbo_create_itemProWriteCreate an item.
qbo_full_update_itemProDestructiveFULL update of an item.
qbo_get_itemFreeRead-onlyRead one item by its QuickBooks Id, including the SyncToken every update must echo back.
qbo_list_itemsFreeRead-onlyList items with an optional WHERE clause.

[QuickBooks Online] Create an item. An item is a product or service you sell or buy. Categories and bundles are Items too — they differ only by the Type field on the same endpoint. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] FULL update of an item. DATA LOSS WARNING: QuickBooks sets every writable field you omit to NULL, so the body must repeat the whole record exactly as a read returned it. This entity offers no sparse update, so read the record first and echo every writable field back. An item is a product or service you sell or buy. Categories and bundles are Items too — they differ only by the Type field on the same endpoint. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The COMPLETE record as a JSON object, including its Id and current SyncToken. Every writable field you omit is set to NULL by QuickBooks.

[QuickBooks Online] Read one item by its QuickBooks Id, including the SyncToken every update must echo back. An item is a product or service you sell or buy. Categories and bundles are Items too — they differ only by the Type field on the same endpoint.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] List items with an optional WHERE clause. An item is a product or service you sell or buy. Categories and bundles are Items too — they differ only by the Type field on the same endpoint. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

Classes and departments

ToolPlanAccessSummary
qbo_create_classProWriteCreate a class.
qbo_create_departmentProWriteCreate a department.
qbo_full_update_classProDestructiveFULL update of a class.
qbo_full_update_departmentProDestructiveFULL update of a department.
qbo_get_classFreeRead-onlyRead one class by its QuickBooks Id, including the SyncToken every update must echo back.
qbo_get_departmentFreeRead-onlyRead one department by its QuickBooks Id, including the SyncToken every update must echo back.
qbo_list_classesFreeRead-onlyList classes with an optional WHERE clause.
qbo_list_departmentsFreeRead-onlyList departments with an optional WHERE clause.

[QuickBooks Online] Create a class. A class tracks a segment of the business that is not tied to one client or project, so income and expense can be broken down by segment. A class applies to a whole transaction or to individual lines. Requires class tracking to be switched on in the company's preferences. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] Create a department. A department tracks transactions by physical location - a store, a sales region, a country. It cannot be deleted: set Active to false in an update, which hides it and leaves references intact. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] FULL update of a class. DATA LOSS WARNING: QuickBooks sets every writable field you omit to NULL, so the body must repeat the whole record exactly as a read returned it. This entity offers no sparse update, so read the record first and echo every writable field back. A class tracks a segment of the business that is not tied to one client or project, so income and expense can be broken down by segment. A class applies to a whole transaction or to individual lines. Requires class tracking to be switched on in the company's preferences. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The COMPLETE record as a JSON object, including its Id and current SyncToken. Every writable field you omit is set to NULL by QuickBooks.

[QuickBooks Online] FULL update of a department. DATA LOSS WARNING: QuickBooks sets every writable field you omit to NULL, so the body must repeat the whole record exactly as a read returned it. This entity offers no sparse update, so read the record first and echo every writable field back. A department tracks transactions by physical location - a store, a sales region, a country. It cannot be deleted: set Active to false in an update, which hides it and leaves references intact. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The COMPLETE record as a JSON object, including its Id and current SyncToken. Every writable field you omit is set to NULL by QuickBooks.

[QuickBooks Online] Read one class by its QuickBooks Id, including the SyncToken every update must echo back. A class tracks a segment of the business that is not tied to one client or project, so income and expense can be broken down by segment. A class applies to a whole transaction or to individual lines. Requires class tracking to be switched on in the company's preferences.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] Read one department by its QuickBooks Id, including the SyncToken every update must echo back. A department tracks transactions by physical location - a store, a sales region, a country. It cannot be deleted: set Active to false in an update, which hides it and leaves references intact.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] List classes with an optional WHERE clause. A class tracks a segment of the business that is not tied to one client or project, so income and expense can be broken down by segment. A class applies to a whole transaction or to individual lines. Requires class tracking to be switched on in the company's preferences. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

[QuickBooks Online] List departments with an optional WHERE clause. A department tracks transactions by physical location - a store, a sales region, a country. It cannot be deleted: set Active to false in an update, which hides it and leaves references intact. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

Banking

ToolPlanAccessSummary
qbo_create_credit_card_paymentProWriteCreate a credit card payment.
qbo_create_depositProWriteCreate a deposit.
qbo_create_transferProWriteCreate a transfer.
qbo_delete_credit_card_paymentProDestructiveDelete a credit card payment.
qbo_delete_depositProDestructiveDelete a deposit.
qbo_delete_transferProDestructiveDelete a transfer.
qbo_full_update_credit_card_paymentProDestructiveFULL update of a credit card payment.
qbo_full_update_depositProDestructiveFULL update of a deposit.
qbo_full_update_transferProDestructiveFULL update of a transfer.
qbo_get_credit_card_paymentFreeRead-onlyRead one credit card payment by its QuickBooks Id, including the SyncToken every update must echo back.
qbo_get_depositFreeRead-onlyRead one deposit by its QuickBooks Id, including the SyncToken every update must echo back.
qbo_get_transferFreeRead-onlyRead one transfer by its QuickBooks Id, including the SyncToken every update must echo back.
qbo_list_credit_card_paymentsFreeRead-onlyList credit card payments with an optional WHERE clause.
qbo_list_depositsFreeRead-onlyList deposits with an optional WHERE clause.
qbo_list_transfersFreeRead-onlyList transfers with an optional WHERE clause.
qbo_update_credit_card_paymentProWriteSPARSE update of a credit card payment — only the fields you send are changed and every omitted field is left alone.
qbo_update_depositProWriteSPARSE update of a deposit — only the fields you send are changed and every omitted field is left alone.
qbo_update_transferProWriteSPARSE update of a transfer — only the fields you send are changed and every omitted field is left alone.

[QuickBooks Online] Create a credit card payment. A credit card payment moves money from a bank account to a credit card account to pay down its balance. It is a more limited form of a transfer. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] Create a deposit. A deposit records money banked: customer payments held in Undeposited Funds moved into an asset account, or direct deposits recorded on their own lines. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] Create a transfer. A transfer moves funds between two accounts in the company's own chart of accounts. It is not a payment to anyone. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] Delete a credit card payment. This removes the transaction from the company's books and cannot be undone; where the entity can be VOIDED instead, voiding keeps the audit trail and is usually what an accountant wants. A credit card payment moves money from a bank account to a credit card account to pay down its balance. It is a more limited form of a transfer. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.
syncTokenstringyesREQUIRED. The SyncToken from the most recent read of this record.

[QuickBooks Online] Delete a deposit. This removes the transaction from the company's books and cannot be undone; where the entity can be VOIDED instead, voiding keeps the audit trail and is usually what an accountant wants. A deposit records money banked: customer payments held in Undeposited Funds moved into an asset account, or direct deposits recorded on their own lines. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.
syncTokenstringyesREQUIRED. The SyncToken from the most recent read of this record.

[QuickBooks Online] Delete a transfer. This removes the transaction from the company's books and cannot be undone; where the entity can be VOIDED instead, voiding keeps the audit trail and is usually what an accountant wants. A transfer moves funds between two accounts in the company's own chart of accounts. It is not a payment to anyone. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.
syncTokenstringyesREQUIRED. The SyncToken from the most recent read of this record.

[QuickBooks Online] FULL update of a credit card payment. DATA LOSS WARNING: QuickBooks sets every writable field you omit to NULL, so the body must repeat the whole record exactly as a read returned it. Prefer qbo_update_credit_card_payment, which changes only what you send. A credit card payment moves money from a bank account to a credit card account to pay down its balance. It is a more limited form of a transfer. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The COMPLETE record as a JSON object, including its Id and current SyncToken. Every writable field you omit is set to NULL by QuickBooks.

[QuickBooks Online] FULL update of a deposit. DATA LOSS WARNING: QuickBooks sets every writable field you omit to NULL, so the body must repeat the whole record exactly as a read returned it. Prefer qbo_update_deposit, which changes only what you send. A deposit records money banked: customer payments held in Undeposited Funds moved into an asset account, or direct deposits recorded on their own lines. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The COMPLETE record as a JSON object, including its Id and current SyncToken. Every writable field you omit is set to NULL by QuickBooks.

[QuickBooks Online] FULL update of a transfer. DATA LOSS WARNING: QuickBooks sets every writable field you omit to NULL, so the body must repeat the whole record exactly as a read returned it. Prefer qbo_update_transfer, which changes only what you send. A transfer moves funds between two accounts in the company's own chart of accounts. It is not a payment to anyone. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The COMPLETE record as a JSON object, including its Id and current SyncToken. Every writable field you omit is set to NULL by QuickBooks.

[QuickBooks Online] Read one credit card payment by its QuickBooks Id, including the SyncToken every update must echo back. A credit card payment moves money from a bank account to a credit card account to pay down its balance. It is a more limited form of a transfer.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] Read one deposit by its QuickBooks Id, including the SyncToken every update must echo back. A deposit records money banked: customer payments held in Undeposited Funds moved into an asset account, or direct deposits recorded on their own lines.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] Read one transfer by its QuickBooks Id, including the SyncToken every update must echo back. A transfer moves funds between two accounts in the company's own chart of accounts. It is not a payment to anyone.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] List credit card payments with an optional WHERE clause. A credit card payment moves money from a bank account to a credit card account to pay down its balance. It is a more limited form of a transfer. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

[QuickBooks Online] List deposits with an optional WHERE clause. A deposit records money banked: customer payments held in Undeposited Funds moved into an asset account, or direct deposits recorded on their own lines. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

[QuickBooks Online] List transfers with an optional WHERE clause. A transfer moves funds between two accounts in the company's own chart of accounts. It is not a payment to anyone. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

[QuickBooks Online] SPARSE update of a credit card payment — only the fields you send are changed and every omitted field is left alone. This is the safe update and the one to reach for. A credit card payment moves money from a bank account to a credit card account to pay down its balance. It is a more limited form of a transfer. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. A JSON object carrying the record's Id, its current SyncToken, and ONLY the fields to change. Everything omitted is left exactly as it is.

[QuickBooks Online] SPARSE update of a deposit — only the fields you send are changed and every omitted field is left alone. This is the safe update and the one to reach for. A deposit records money banked: customer payments held in Undeposited Funds moved into an asset account, or direct deposits recorded on their own lines. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. A JSON object carrying the record's Id, its current SyncToken, and ONLY the fields to change. Everything omitted is left exactly as it is.

[QuickBooks Online] SPARSE update of a transfer — only the fields you send are changed and every omitted field is left alone. This is the safe update and the one to reach for. A transfer moves funds between two accounts in the company's own chart of accounts. It is not a payment to anyone. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. A JSON object carrying the record's Id, its current SyncToken, and ONLY the fields to change. Everything omitted is left exactly as it is.

Budgets

ToolPlanAccessSummary
qbo_create_budgetProWriteCreate a budget.
qbo_delete_budgetProDestructiveDelete a budget.
qbo_full_update_budgetProDestructiveFULL update of a budget.
qbo_get_budgetFreeRead-onlyRead one budget by its QuickBooks Id, including the SyncToken every update must echo back.
qbo_list_budgetsFreeRead-onlyList budgets with an optional WHERE clause.

[QuickBooks Online] Create a budget. A budget assigns an expected amount to an account or customer per month, quarter or year, which is what the budget-versus-actual reports measure against. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] Delete a budget. This removes the budget and the figures in it and cannot be undone; the transactions it was measured against are untouched. A budget assigns an expected amount to an account or customer per month, quarter or year, which is what the budget-versus-actual reports measure against. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.
syncTokenstringyesREQUIRED. The SyncToken from the most recent read of this record.

[QuickBooks Online] FULL update of a budget. DATA LOSS WARNING: QuickBooks sets every writable field you omit to NULL, so the body must repeat the whole record exactly as a read returned it. This entity offers no sparse update, so read the record first and echo every writable field back. A budget assigns an expected amount to an account or customer per month, quarter or year, which is what the budget-versus-actual reports measure against. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The COMPLETE record as a JSON object, including its Id and current SyncToken. Every writable field you omit is set to NULL by QuickBooks.

[QuickBooks Online] Read one budget by its QuickBooks Id, including the SyncToken every update must echo back. A budget assigns an expected amount to an account or customer per month, quarter or year, which is what the budget-versus-actual reports measure against.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] List budgets with an optional WHERE clause. A budget assigns an expected amount to an account or customer per month, quarter or year, which is what the budget-versus-actual reports measure against. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

Recurring transactions

ToolPlanAccessSummary
qbo_create_recurring_transactionProWriteCreate a recurring transaction.
qbo_delete_recurring_transactionProDestructiveDelete a recurring transaction.
qbo_get_recurring_transactionFreeRead-onlyRead one recurring transaction by its QuickBooks Id.
qbo_list_recurring_transactionsFreeRead-onlyList recurring transactions with an optional WHERE clause.

[QuickBooks Online] Create a recurring transaction. A recurring transaction is a scheduled template - a transaction QuickBooks creates on a schedule, a reminder, or a template kept for later use. PRODUCT-GATED: QuickBooks Online Essentials and Plus. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] Delete a recurring transaction. This removes the TEMPLATE and its schedule and cannot be undone, so QuickBooks creates no further transactions from it; transactions it has already created stay in the books. A recurring transaction is a scheduled template - a transaction QuickBooks creates on a schedule, a reminder, or a template kept for later use. PRODUCT-GATED: QuickBooks Online Essentials and Plus. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.
syncTokenstringyesREQUIRED. The SyncToken from the most recent read of this record.

[QuickBooks Online] Read one recurring transaction by its QuickBooks Id. A recurring transaction is a scheduled template - a transaction QuickBooks creates on a schedule, a reminder, or a template kept for later use. PRODUCT-GATED: QuickBooks Online Essentials and Plus.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] List recurring transactions with an optional WHERE clause. A recurring transaction is a scheduled template - a transaction QuickBooks creates on a schedule, a reminder, or a template kept for later use. PRODUCT-GATED: QuickBooks Online Essentials and Plus. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

Inventory

ToolPlanAccessSummary
qbo_create_inventory_adjustmentProWriteCreate an inventory adjustment.
qbo_delete_inventory_adjustmentProDestructiveDelete an inventory adjustment.
qbo_get_inventory_adjustmentFreeRead-onlyRead one inventory adjustment by its QuickBooks Id, including the SyncToken every update must echo back.
qbo_update_inventory_adjustmentProWriteSPARSE update of an inventory adjustment — only the fields you send are changed and every omitted field is left alone.

[QuickBooks Online] Create an inventory adjustment. An inventory adjustment changes the quantity on hand of inventory items for damage, write-off, shrinkage or expiry, and handles the underlying accounting and valuation itself. PRODUCT-GATED: US companies on QuickBooks Online Plus or Advanced. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] Delete an inventory adjustment. This removes the transaction from the company's books and cannot be undone; where the entity can be VOIDED instead, voiding keeps the audit trail and is usually what an accountant wants. An inventory adjustment changes the quantity on hand of inventory items for damage, write-off, shrinkage or expiry, and handles the underlying accounting and valuation itself. PRODUCT-GATED: US companies on QuickBooks Online Plus or Advanced. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.
syncTokenstringyesREQUIRED. The SyncToken from the most recent read of this record.

[QuickBooks Online] Read one inventory adjustment by its QuickBooks Id, including the SyncToken every update must echo back. An inventory adjustment changes the quantity on hand of inventory items for damage, write-off, shrinkage or expiry, and handles the underlying accounting and valuation itself. PRODUCT-GATED: US companies on QuickBooks Online Plus or Advanced.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] SPARSE update of an inventory adjustment — only the fields you send are changed and every omitted field is left alone. This is the safe update and the one to reach for. An inventory adjustment changes the quantity on hand of inventory items for damage, write-off, shrinkage or expiry, and handles the underlying accounting and valuation itself. PRODUCT-GATED: US companies on QuickBooks Online Plus or Advanced. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. A JSON object carrying the record's Id, its current SyncToken, and ONLY the fields to change. Everything omitted is left exactly as it is.

Currency

ToolPlanAccessSummary
qbo_create_company_currencyProWriteCreate a company currency.
qbo_full_update_company_currencyProDestructiveFULL update of a company currency.
qbo_get_company_currencyFreeRead-onlyRead one company currency by its QuickBooks Id, including the SyncToken every update must echo back.
qbo_get_exchange_rateFreeRead-onlyRead the rate held for ONE source currency, optionally as at a date.
qbo_list_company_currenciesFreeRead-onlyList company currencies with an optional WHERE clause.
qbo_list_exchange_ratesFreeRead-onlyList exchange rates with an optional WHERE clause.
qbo_update_exchange_rateProDestructiveSet the rate for a source currency as at a date.

[QuickBooks Online] Create a company currency. A company currency is a currency active in this QuickBooks company - the list the Currency Center shows. PRODUCT-GATED: only companies with multicurrency enabled have any. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] FULL update of a company currency. DATA LOSS WARNING: QuickBooks sets every writable field you omit to NULL, so the body must repeat the whole record exactly as a read returned it. This entity offers no sparse update, so read the record first and echo every writable field back. A company currency is a currency active in this QuickBooks company - the list the Currency Center shows. PRODUCT-GATED: only companies with multicurrency enabled have any. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The COMPLETE record as a JSON object, including its Id and current SyncToken. Every writable field you omit is set to NULL by QuickBooks.

[QuickBooks Online] Read one company currency by its QuickBooks Id, including the SyncToken every update must echo back. A company currency is a currency active in this QuickBooks company - the list the Currency Center shows. PRODUCT-GATED: only companies with multicurrency enabled have any.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] Read the rate held for ONE source currency, optionally as at a date. This is a bespoke route, not the query one: the query lists stored Exchangerate objects, while this answers the rate in force for a currency — today's, when asOfDate is omitted. An exchange rate is the rate held for a source currency against the company's home currency on a date. PRODUCT-GATED: only companies with multicurrency enabled have any.

ParamTypeRequiredDefaultDescription
asOfDatestringnonullEffective date as yyyy-MM-dd. Omit for today's rate.
sourceCurrencyCodestringyesREQUIRED. The source currency's three-letter code, for example EUR.

[QuickBooks Online] List company currencies with an optional WHERE clause. A company currency is a currency active in this QuickBooks company - the list the Currency Center shows. PRODUCT-GATED: only companies with multicurrency enabled have any. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

[QuickBooks Online] List exchange rates with an optional WHERE clause. An exchange rate is the rate held for a source currency against the company's home currency on a date. PRODUCT-GATED: only companies with multicurrency enabled have any. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

[QuickBooks Online] Set the rate for a source currency as at a date. This REPLACES the rate held for that currency and date: the previous value is not kept, the change cannot be undone, and every conversion made afterwards uses the new rate. SourceCurrencyCode, Rate and AsOfDate are mandatory; TargetCurrencyCode defaults to the home currency. A rate where source and target are the same is forced to 1, and setting a rate for the home currency itself is a validation error. An exchange rate is the rate held for a source currency against the company's home currency on a date. PRODUCT-GATED: only companies with multicurrency enabled have any. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The record as a JSON object. For an exchange rate: SourceCurrencyCode, Rate and AsOfDate are mandatory and TargetCurrencyCode defaults to the home currency.

Tax codes and rates

ToolPlanAccessSummary
qbo_create_tax_serviceProWriteCreate a tax service.
qbo_get_tax_codeFreeRead-onlyRead one tax code by its QuickBooks Id.
qbo_get_tax_rateFreeRead-onlyRead one tax rate by its QuickBooks Id.
qbo_list_tax_codesFreeRead-onlyList tax codes with an optional WHERE clause.
qbo_list_tax_ratesFreeRead-onlyList tax rates with an optional WHERE clause.

[QuickBooks Online] Create a tax service. The tax service is the ONLY way to create sales-tax setup through the API: it creates a new tax code together with the tax rates attached to it, minting a rate dynamically when the rate you name does not exist yet. body is the taxservice request as a JSON object: TaxCodeName plus a TaxRateDetails array, each entry naming an existing rate or the name, rate value and agency of one to mint.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] Read one tax code by its QuickBooks Id. A tax code tracks the taxable or non-taxable status of a product, a service or a customer, and is what the tax reports group by. READ-ONLY through this resource: a tax code is CREATED through the tax service (qbo_create_tax_service).

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] Read one tax rate by its QuickBooks Id. A tax rate is the percentage applied to calculate a tax liability, tied to the agency that collects it. READ-ONLY through this resource: a tax rate is CREATED through the tax service (qbo_create_tax_service).

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] List tax codes with an optional WHERE clause. A tax code tracks the taxable or non-taxable status of a product, a service or a customer, and is what the tax reports group by. READ-ONLY through this resource: a tax code is CREATED through the tax service (qbo_create_tax_service). The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

[QuickBooks Online] List tax rates with an optional WHERE clause. A tax rate is the percentage applied to calculate a tax liability, tied to the agency that collects it. READ-ONLY through this resource: a tax rate is CREATED through the tax service (qbo_create_tax_service). The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

Tax classifications

ToolPlanAccessSummary
qbo_get_tax_classificationFreeRead-onlyRead one tax classification by its QuickBooks Id.
qbo_list_tax_classification_childrenFreeRead-onlyList the direct children of one tax classification — the way down the tree from a parent you already have.
qbo_list_tax_classificationsFreeRead-onlyList EVERY tax classification in the company.
qbo_list_tax_classifications_by_levelFreeRead-onlyList the tax classifications at ONE level of the hierarchy — the way to see the top of the tree without pulling all of it.

[QuickBooks Online] Read one tax classification by its QuickBooks Id. A tax classification is the category an item belongs to for tax purposes - 'Fuel', 'Garments', 'Soft drinks' - and is one of the inputs that decides the tax on a transaction involving that item. The classifications come from the tax authority or a tax service, not from the company, and they form a HIERARCHY rather than a flat list.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] List the direct children of one tax classification — the way down the tree from a parent you already have. No paging: the children come back whole. A tax classification is the category an item belongs to for tax purposes - 'Fuel', 'Garments', 'Soft drinks' - and is one of the inputs that decides the tax on a transaction involving that item. The classifications come from the tax authority or a tax service, not from the company, and they form a HIERARCHY rather than a flat list.

ParamTypeRequiredDefaultDescription
parentIdstringyesREQUIRED. The parent tax classification's Id.

[QuickBooks Online] List EVERY tax classification in the company. This route takes no filter and NO PAGING — Intuit answers the whole collection in one response, so a company with a large classification tree returns a large body. Narrow it with qbo_list_tax_classifications_by_level, or walk the tree a level at a time with qbo_list_tax_classification_children. A tax classification is the category an item belongs to for tax purposes - 'Fuel', 'Garments', 'Soft drinks' - and is one of the inputs that decides the tax on a transaction involving that item. The classifications come from the tax authority or a tax service, not from the company, and they form a HIERARCHY rather than a flat list.

[QuickBooks Online] List the tax classifications at ONE level of the hierarchy — the way to see the top of the tree without pulling all of it. No paging: the level comes back whole. A tax classification is the category an item belongs to for tax purposes - 'Fuel', 'Garments', 'Soft drinks' - and is one of the inputs that decides the tax on a transaction involving that item. The classifications come from the tax authority or a tax service, not from the company, and they form a HIERARCHY rather than a flat list.

ParamTypeRequiredDefaultDescription
levelstringyesREQUIRED. The hierarchy level to list, as the vendor numbers it.

Tax agencies

ToolPlanAccessSummary
qbo_create_tax_agencyProWriteCreate a tax agency.
qbo_get_tax_agencyFreeRead-onlyRead one tax agency by its QuickBooks Id.
qbo_list_tax_agenciesFreeRead-onlyList tax agencies with an optional WHERE clause.

[QuickBooks Online] Create a tax agency. A tax agency is the body that collects a tax rate's tax. US companies see only agencies QuickBooks created itself. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] Read one tax agency by its QuickBooks Id. A tax agency is the body that collects a tax rate's tax. US companies see only agencies QuickBooks created itself.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] List tax agencies with an optional WHERE clause. A tax agency is the body that collects a tax rate's tax. US companies see only agencies QuickBooks created itself. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

Tax payments

ToolPlanAccessSummary
qbo_get_tax_paymentFreeRead-onlyRead one tax payment by its QuickBooks Id.
qbo_list_tax_paymentsFreeRead-onlyList tax payments with an optional WHERE clause.

[QuickBooks Online] Read one tax payment by its QuickBooks Id. A tax payment is a payment or refund made against a filed tax return. PRODUCT-GATED: AU, CA and UK companies only. READ-ONLY through the API.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] List tax payments with an optional WHERE clause. A tax payment is a payment or refund made against a filed tax return. PRODUCT-GATED: AU, CA and UK companies only. READ-ONLY through the API. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

Time activities

ToolPlanAccessSummary
qbo_create_time_activityProWriteCreate a time activity.
qbo_delete_time_activityProDestructiveDelete a time activity.
qbo_full_update_time_activityProDestructiveFULL update of a time activity.
qbo_get_time_activityFreeRead-onlyRead one time activity by its QuickBooks Id, including the SyncToken every update must echo back.
qbo_list_time_activitiesFreeRead-onlyList time activities with an optional WHERE clause.

[QuickBooks Online] Create a time activity. A time activity is a record of time worked by an employee or a vendor - the timesheet line that becomes billable time on an invoice. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] Delete a time activity. This removes the transaction from the company's books and cannot be undone; where the entity can be VOIDED instead, voiding keeps the audit trail and is usually what an accountant wants. A time activity is a record of time worked by an employee or a vendor - the timesheet line that becomes billable time on an invoice. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.
syncTokenstringyesREQUIRED. The SyncToken from the most recent read of this record.

[QuickBooks Online] FULL update of a time activity. DATA LOSS WARNING: QuickBooks sets every writable field you omit to NULL, so the body must repeat the whole record exactly as a read returned it. This entity offers no sparse update, so read the record first and echo every writable field back. A time activity is a record of time worked by an employee or a vendor - the timesheet line that becomes billable time on an invoice. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The COMPLETE record as a JSON object, including its Id and current SyncToken. Every writable field you omit is set to NULL by QuickBooks.

[QuickBooks Online] Read one time activity by its QuickBooks Id, including the SyncToken every update must echo back. A time activity is a record of time worked by an employee or a vendor - the timesheet line that becomes billable time on an invoice.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] List time activities with an optional WHERE clause. A time activity is a record of time worked by an employee or a vendor - the timesheet line that becomes billable time on an invoice. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

Employees

ToolPlanAccessSummary
qbo_create_employeeProWriteCreate an employee.
qbo_full_update_employeeProDestructiveFULL update of an employee.
qbo_get_employeeFreeRead-onlyRead one employee by its QuickBooks Id, including the SyncToken every update must echo back.
qbo_list_employeesFreeRead-onlyList employees with an optional WHERE clause.

[QuickBooks Online] Create an employee. An employee is a person working for the company. DisplayName must be unique across every customer, vendor and employee, GivenName and FamilyName are required, and none of the name fields may contain a colon, tab or newline. When QuickBooks Payroll is enabled some attributes become read-only. A contractor is NOT an employee: create a vendor with Vendor1099 set to true. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] FULL update of an employee. DATA LOSS WARNING: QuickBooks sets every writable field you omit to NULL, so the body must repeat the whole record exactly as a read returned it. This entity offers no sparse update, so read the record first and echo every writable field back. An employee is a person working for the company. DisplayName must be unique across every customer, vendor and employee, GivenName and FamilyName are required, and none of the name fields may contain a colon, tab or newline. When QuickBooks Payroll is enabled some attributes become read-only. A contractor is NOT an employee: create a vendor with Vendor1099 set to true. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The COMPLETE record as a JSON object, including its Id and current SyncToken. Every writable field you omit is set to NULL by QuickBooks.

[QuickBooks Online] Read one employee by its QuickBooks Id, including the SyncToken every update must echo back. An employee is a person working for the company. DisplayName must be unique across every customer, vendor and employee, GivenName and FamilyName are required, and none of the name fields may contain a colon, tab or newline. When QuickBooks Payroll is enabled some attributes become read-only. A contractor is NOT an employee: create a vendor with Vendor1099 set to true.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] List employees with an optional WHERE clause. An employee is a person working for the company. DisplayName must be unique across every customer, vendor and employee, GivenName and FamilyName are required, and none of the name fields may contain a colon, tab or newline. When QuickBooks Payroll is enabled some attributes become read-only. A contractor is NOT an employee: create a vendor with Vendor1099 set to true. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

Company profile

ToolPlanAccessSummary
qbo_full_update_company_infoProDestructiveFULL update of the company profile.
qbo_full_update_preferencesProDestructiveFULL update of the company's preferences.
qbo_get_company_infoFreeRead-onlyRead the connected QuickBooks company: legal and trading name, addresses, fiscal year start, country and the company's own Id (the realm).
qbo_get_entitlementsFreeRead-onlyRead which QuickBooks features this company is entitled to — the superset of what its subscription carries, before preferences and per-user permissions narrow it further.
qbo_get_preferencesFreeRead-onlyRead the company's preference settings — which features are on, the numbering and default terms, sales-form and tax behavior.
qbo_update_company_infoProWriteSPARSE update of the company profile — only the fields you send are changed.

[QuickBooks Online] FULL update of the company profile. DATA LOSS WARNING: every writable field omitted from the body is set to NULL, and this record is the company's own identity — prefer qbo_update_company_info. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The COMPLETE record as a JSON object, including its Id and current SyncToken. Every writable field you omit is set to NULL by QuickBooks.

[QuickBooks Online] FULL update of the company's preferences. DATA LOSS WARNING: this entity offers NO sparse update, so every writable field omitted from the body is set to NULL — read qbo_get_preferences first and echo the whole record back. Preferences change how the company behaves for every user, not just for the API. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The COMPLETE record as a JSON object, including its Id and current SyncToken. Every writable field you omit is set to NULL by QuickBooks.

[QuickBooks Online] Read the connected QuickBooks company: legal and trading name, addresses, fiscal year start, country and the company's own Id (the realm). This is also the credential-validation call, so it is the cheapest way to confirm a connection is alive.

[QuickBooks Online] Read which QuickBooks features this company is entitled to — the superset of what its subscription carries, before preferences and per-user permissions narrow it further. This is the read that answers WHY a product-gated entity refuses a call: change orders, inventory adjustments, recurring transactions and everything multicurrency are all subscription-gated. TWO oddities, both Intuit's: the response is XML rather than JSON, because this resource accepts no application/json header at all, and the route lives outside the /v3/company/ path every other call uses.

[QuickBooks Online] Read the company's preference settings — which features are on, the numbering and default terms, sales-form and tax behavior. Read this before writing transactions: it tells you whether classes, departments, multi-currency or inventory are even enabled in this company.

[QuickBooks Online] SPARSE update of the company profile — only the fields you send are changed. Most of the record is read-only in the API; addresses and contact details are the practical targets. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. A JSON object carrying the record's Id, its current SyncToken, and ONLY the fields to change. Everything omitted is left exactly as it is.

Sync

ToolPlanAccessSummary
qbo_get_changed_entitiesFreeRead-onlyChange Data Capture — everything of the named entity types created, updated or deleted since a timestamp.
qbo_queryFreeRead-onlyRun a QuickBooks query against any entity.

[QuickBooks Online] Change Data Capture — everything of the named entity types created, updated or deleted since a timestamp. This is the incremental-sync primitive: use it instead of re-listing whole entities to answer 'what changed'. The window reaches back at most 30 days. entities is a comma-separated list of QuickBooks entity names (case sensitive, for example "Customer,Invoice,Payment") and changedSince is an ISO-8601 timestamp no more than 30 days old.

ParamTypeRequiredDefaultDescription
changedSincestringyesREQUIRED. ISO-8601 timestamp to report changes since. QuickBooks looks back at most 30 days.
entitiesstringyesREQUIRED. Comma-separated QuickBooks entity names, case sensitive — for example Customer,Invoice,Payment.

[QuickBooks Online] Run a QuickBooks query against any entity. The query language is NOT SQL: SELECT * or SELECT count(*) only (no projections), no OR in a WHERE clause, no JOIN, no GROUP BY, LIKE supports only the % wildcard, Id accepts only = and IN, null is written as ' ' (a space in single quotes), entity names are CASE SENSITIVE, and one query covers exactly one entity. Page with STARTPOSITION n MAXRESULTS n (maximum 1000); a page shorter than MAXRESULTS is the last one.

ParamTypeRequiredDefaultDescription
querystringyesREQUIRED. The full statement, for example SELECT * FROM Customer WHERE Active = true MAXRESULTS 50, or SELECT count(*) FROM Invoice.

Attachments

ToolPlanAccessSummary
qbo_create_attachmentProWriteCreate an attachment.
qbo_delete_attachmentProDestructiveDelete an attachment.
qbo_full_update_attachmentProDestructiveFULL update of an attachment.
qbo_get_attachmentFreeRead-onlyRead one attachment by its QuickBooks Id, including the SyncToken every update must echo back.
qbo_get_attachment_download_urlFreeRead-onlyGet a temporary download URL for one attachment.
qbo_list_attachmentsFreeRead-onlyList attachments with an optional WHERE clause.
qbo_upload_attachmentProWriteUpload a FILE to the company's attachment list and, optionally, link it to a transaction or an item in the same call.

[QuickBooks Online] Create an attachment. An attachment is supplemental information linked to a transaction or an item - a file, a note, or both. A NOTE is created with qbo_create_attachment; a FILE is uploaded with qbo_upload_attachment, which is the only route that carries bytes. body is the entity record as a JSON object, the same shape a read returns.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The new record as a JSON object, the same shape a read returns.

[QuickBooks Online] Delete an attachment. This removes the attachment itself and cannot be undone; the transaction or item it was linked to is untouched. An attachment is supplemental information linked to a transaction or an item - a file, a note, or both. A NOTE is created with qbo_create_attachment; a FILE is uploaded with qbo_upload_attachment, which is the only route that carries bytes. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.
syncTokenstringyesREQUIRED. The SyncToken from the most recent read of this record.

[QuickBooks Online] FULL update of an attachment. DATA LOSS WARNING: QuickBooks sets every writable field you omit to NULL, so the body must repeat the whole record exactly as a read returned it. This entity offers no sparse update, so read the record first and echo every writable field back. An attachment is supplemental information linked to a transaction or an item - a file, a note, or both. A NOTE is created with qbo_create_attachment; a FILE is uploaded with qbo_upload_attachment, which is the only route that carries bytes. body is the entity record as a JSON object, the same shape a read returns. The body must carry the record's Id and SyncToken. Send the SyncToken from the most recent read of this record; an older one is rejected, and the fix is to re-read and retry rather than to retry the same body.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The COMPLETE record as a JSON object, including its Id and current SyncToken. Every writable field you omit is set to NULL by QuickBooks.

[QuickBooks Online] Read one attachment by its QuickBooks Id, including the SyncToken every update must echo back. An attachment is supplemental information linked to a transaction or an item - a file, a note, or both. A NOTE is created with qbo_create_attachment; a FILE is uploaded with qbo_upload_attachment, which is the only route that carries bytes.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The record's QuickBooks Id.

[QuickBooks Online] Get a temporary download URL for one attachment. The response is the URL ITSELF as plain text — not JSON, and not the file, which is downloaded as a separate step. The URL EXPIRES AFTER 15 MINUTES and anyone holding it can read that file until it does, so fetch it straight away and do not cache it, log it or pass it on.

ParamTypeRequiredDefaultDescription
idstringyesREQUIRED. The attachment's QuickBooks Id (the Attachable Id a read or list returns).

[QuickBooks Online] List attachments with an optional WHERE clause. An attachment is supplemental information linked to a transaction or an item - a file, a note, or both. A NOTE is created with qbo_create_attachment; a FILE is uploaded with qbo_upload_attachment, which is the only route that carries bytes. The WHERE fragment is QuickBooks query syntax, not SQL: no OR, no JOIN, LIKE with only the % wildcard, Id only with = or IN, and string literals in single quotes. Paging is STARTPOSITION/MAXRESULTS inside the query — there is no cursor and no total, so a page shorter than maxResults is the last one. maxResults is capped at 1000.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullRecords per page, 1-1000. Defaults to 100.
orderBystringnonullOptional ORDERBY fragment without the ORDERBY keyword, for example MetaData.LastUpdatedTime DESC.
startPositionintegernonull1-based index of the first record to return. Omit for the first page; pass previous start + page size for the next one.
wherestringnonullOptional WHERE fragment in QuickBooks query syntax, without the WHERE keyword — for example Active = true, or MetaData.LastUpdatedTime > '2026-01-01T00:00:00-07:00'.

[QuickBooks Online] Upload a FILE to the company's attachment list and, optionally, link it to a transaction or an item in the same call. Provide the file EITHER as base64 in contentBase64 OR as a public https URL in sourceUrl — exactly one of the two, never both. Supply attachableMetadata to say what the file attaches to (an Attachable record carrying AttachableRef.EntityRef with the target's type and Id); omit it and QuickBooks creates the metadata itself and the file is linked to nothing. This is the only QuickBooks route that carries bytes — a NOTE attachment is qbo_create_attachment instead. Maximum 25 MB decoded. StackJack fetches an https sourceUrl server-side and refuses a non-https URL, a redirect that changes host, or anything over the cap. attachableMetadata, when supplied, is an Attachable record as a JSON object.

ParamTypeRequiredDefaultDescription
attachableMetadatastringnonullOptional Attachable record as a JSON object saying what the file attaches to, for example {"AttachableRef":[{"EntityRef":{"type":"Invoice","value":"95"}}]}. Omit to store the file linked to nothing.
contentBase64stringnonullThe file's bytes as base64. Provide this OR sourceUrl, not both. Maximum 25 MB decoded.
fileNamestringyesREQUIRED. File name to store the upload under, including its extension (for example receipt.pdf).
sourceUrlstringnonullPublic https URL StackJack downloads the file from. Provide this OR contentBase64, not both. Maximum 25 MB.

Platform operations

ToolPlanAccessSummary
qbo_batchProDestructiveRun up to 30 QuickBooks operations in ONE request.

[QuickBooks Online] Run up to 30 QuickBooks operations in ONE request. DESTRUCTIVE BY CONSTRUCTION: a batch item may be ANY operation — a create, a full update that NULLs every omitted field, a delete, a void — and StackJack does not inspect the payload, so one approval of this tool covers whatever the items turn out to be, and what they do cannot be undone. Reach for it when the round trips are the problem, and prefer the typed tool for a single operation, which states its own consequence. The body is {"BatchItemRequest":[...]} with each entry carrying its own bId, the operation and the entity. A batch answers 200 EVEN WHEN ITEMS FAIL — a failed entry carries a Fault inside its BatchItemResponse, so check every entry rather than the status code. Intuit budgets batch separately: 40 batch calls per minute per company. body is the batch request as a JSON object: {"BatchItemRequest":[{"bId":"1", …}]}.

ParamTypeRequiredDefaultDescription
bodystringyesREQUIRED. The batch request as a JSON object: {"BatchItemRequest":[ … ]}, at most 30 entries, each with its own bId and one operation.