Loopfour
Integrations

QuickBooks Online actions

Reference for the QuickBooks Online actions: the connection type, each action and what it does, its inputs and outputs, and the live catalog call.

The QuickBooks block reads and writes records in a QuickBooks Online company. For the plain-language overview, see QuickBooks Online.

When to use it

Use a QuickBooks step to create or look up customers, invoices, payments, vendor bills and journal entries, to run a QuickBooks report, or to move documents and PDFs in and out of QuickBooks. Every action in the Studio Action list has an executor, so a step built in the editor and a step written in a workflow definition run the same code.

Connection

ItemValue
Block typequickbooks
ConnectionOAuth sign-in from Integrations (provider id quickbooks)
Account pinconfig.connection, the connection row id. Without it the step uses the company's default QuickBooks connection
Companyconfig.realmId, the QuickBooks company (realm) id. Required on every action; digits only on the newer record actions

If config.connection names a connection that no longer resolves, the run stops at that step instead of falling back to the default account.

Step settings

These fields are shared across the original actions. The Studio form shows each one only for the actions that read it.

FieldTypeUsed byMeaning
realmIdstringAllQuickBooks company (realm) id
customerIdstringgetCustomer, updateCustomer, createInvoice, listInvoices, upsertInvoiceByDocNumber, createPayment, listPaymentsCustomer id
invoiceIdstringgetInvoice, sendInvoice, voidInvoice, updateInvoice, upsertInvoiceByDocNumberInvoice id. On the upsert, the id stored from an earlier sync
linesJSON arraycreateInvoice, updateInvoice, upsertInvoiceByDocNumber, createBill, updateBillLine items. Each line needs a numeric amount; invoice lines also take description, quantity, unitPrice, itemId, taxCodeId; bill lines take description, accountId, customerId, billableStatus
journalLinesJSON arraycreateJournalEntry, updateJournalEntry, upsertJournalEntryByDocNumberDebit and credit lines (see below). lines is read when journalLines is absent
docNumberstringFind, upsert and journal-entry actionsQuickBooks reference number, at most 21 characters on a journal entry
txnDatestringJournal-entry writesTransaction date, YYYY-MM-DD
adjustmentbooleancreateJournalEntry, updateJournalEntryMark the entry as adjusting
privateNotestringInvoice, payment, bill and journal-entry writesInternal memo stored on the record
txnTaxDetailJSONInvoice writes{ totalTax, txnTaxCodeId } for tax calculated outside QuickBooks
shipAddr, billAddrJSONInvoice writesAddress objects
allowOnlineCreditCardPayment, allowOnlineACHPaymentbooleancreateInvoice, updateInvoice, upsertInvoiceByDocNumberQuickBooks AllowOnlineCreditCardPayment and AllowOnlineACHPayment. Sent only when set; left blank, QuickBooks applies the company default
emailStatusstringcreateInvoice, updateInvoice, upsertInvoiceByDocNumberNotSet, NeedToSend or EmailSent. createInvoice sends NotSet when blank; the update and upsert send nothing
emailstringCustomer and vendor writes, createInvoice, updateInvoice, upsertInvoiceByDocNumber, sendInvoicePrimary email on a customer or vendor; BillEmail on an invoice write; the recipient on sendInvoice
invoiceDate, dueDatestringInvoice and bill writesYYYY-MM-DD
amountnumbercreatePaymentPayment amount
invoiceIdsJSON arraycreatePaymentOne invoice id the payment applies to
vendorIdstringcreateBill, listBills, getVendorVendor id
billIdstringgetBill, updateBill, deleteBillBill id
journalEntryIdstringgetJournalEntry, updateJournalEntry, deleteJournalEntry, upsertJournalEntryByDocNumberJournal entry id
txnDateAfter, txnDateBeforestringList actionsDate filters
limit, offsetnumberList actionsPage size (default 100) and offset (default 0)
reportTypestringrunReportReport name (list below)
querystringqueryA QuickBooks query statement

The newer record actions (for example createEstimate or getPurchaseOrder) take Intuit's own field names:

FieldTypeMeaning
recordIdstringRecord id for get, PDF and send actions (a currency code for company currencies)
dataJSON objectThe QuickBooks request body. Updates and deletes need the current Id and SyncToken. A full update replaces fields you leave out; sparse: true is accepted only where Intuit supports a sparse update
limit, offsetnumberList page size, 1 to 1000 (default 100), and zero-based offset

Actions

The action id is quickbooks.<action>. All of these appear in the Studio Action list.

RecordActions
AccountcreateAccount, getAccount, getAccountList, updateAccount
AttachablecreateAttachable, deleteAttachable, getAttachable, listAttachables, updateAttachable
Attachment filedownloadAttachment, uploadAttachment
BillcreateBill, deleteBill, getBill, listBills, updateBill
Bill paymentcreateBillPayment, deleteBillPayment, getBillPayment, listBillPayments, updateBillPayment, voidBillPayment
BudgetcreateBudget, deleteBudget, getBudget, listBudgets, updateBudget
Change ordercreateChangeOrder, deleteChangeOrder, getChangeOrder, updateChangeOrder
ClasscreateClass, getClass, listClasses, updateClass
Company currencycreateCompanyCurrency, getCompanyCurrency, listCompanyCurrencies, updateCompanyCurrency
Company infogetCompanyInfo, listCompanyInfo, updateCompanyInfo
Credit card paymentcreateCreditCardPayment, deleteCreditCardPayment, getCreditCardPayment, listCreditCardPayments, updateCreditCardPayment
Credit memocreateCreditMemo, deleteCreditMemo, getCreditMemo, getCreditMemoPdf, listCreditMemos, sendCreditMemo, updateCreditMemo
CustomercreateCustomer, findCustomerByEmail, getCustomer, listCustomers, updateCustomer
Customer typegetCustomerType, listCustomerTypes
DepartmentcreateDepartment, getDepartment, listDepartments, updateDepartment
DepositcreateDeposit, deleteDeposit, getDeposit, listDeposits, updateDeposit
EmployeecreateEmployee, getEmployee, listEmployees, updateEmployee
EntitlementsgetEntitlements
EstimatecreateEstimate, deleteEstimate, getEstimate, getEstimatePdf, listEstimates, sendEstimate, updateEstimate
Exchange rategetExchangeRate, listExchangeRates, updateExchangeRate
Inventory adjustmentcreateInventoryAdjustment, deleteInventoryAdjustment, getInventoryAdjustment, updateInventoryAdjustment
InvoicecreateInvoice, deleteInvoice, findInvoiceByDocNumber, getInvoice, getInvoicePdf, listInvoices, sendInvoice, updateInvoice, upsertInvoiceByDocNumber, voidInvoice
ItemcreateItem, getItem, listItems, updateItem
Journal entrycreateJournalEntry, deleteJournalEntry, findJournalEntryByDocNumber, getJournalEntry, listJournalEntries, updateJournalEntry, upsertJournalEntryByDocNumber
PaymentcreatePayment, deletePayment, getPayment, getPaymentPdf, listPayments, sendPayment, updatePayment, voidPayment
Payment methodcreatePaymentMethod, getPaymentMethod, listPaymentMethods, updatePaymentMethod
PreferencesgetPreferences, listPreferences, updatePreferences
PurchasecreatePurchase, deletePurchase, getPurchase, listPurchases, updatePurchase
Purchase ordercreatePurchaseOrder, deletePurchaseOrder, getPurchaseOrder, getPurchaseOrderPdf, listPurchaseOrders, sendPurchaseOrder, updatePurchaseOrder
Recurring transactioncreateRecurringTransaction, deleteRecurringTransaction, getRecurringTransaction, listRecurringTransactions
Refund receiptcreateRefundReceipt, deleteRefundReceipt, getRefundReceipt, getRefundReceiptPdf, listRefundReceipts, sendRefundReceipt, updateRefundReceipt
Reimburse chargegetReimburseCharge, listReimburseCharges
ReportrunReport
Sales receiptcreateSalesReceipt, deleteSalesReceipt, getSalesReceipt, getSalesReceiptPdf, listSalesReceipts, sendSalesReceipt, updateSalesReceipt, voidSalesReceipt
Tax agencycreateTaxAgency, getTaxAgency, listTaxAgencies
Tax classificationgetTaxClassification, getTaxClassificationChildren, listTaxClassifications
Tax code, rate, payment, servicegetTaxCode, listTaxCodes, getTaxRate, listTaxRates, getTaxPayment, listTaxPayments, createTaxService
TermcreateTerm, getTerm, listTerms, updateTerm
Time activitycreateTimeActivity, deleteTimeActivity, getTimeActivity, listTimeActivities, updateTimeActivity
TransfercreateTransfer, deleteTransfer, getTransfer, listTransfers, updateTransfer
VendorcreateVendor, getVendor, listVendors, updateVendor
Vendor creditcreateVendorCredit, deleteVendorCredit, getVendorCredit, listVendorCredits, updateVendorCredit
Bulk and syncbatch, changeDataCapture, query

Behaviour worth knowing

  • createBill always creates a new bill. It has no lookup by bill number, so running it twice creates two bills. Only invoices and journal entries have an upsert.
  • upsertInvoiceByDocNumber and upsertJournalEntryByDocNumber first try the stored id (invoiceId or journalEntryId), then fall back to a lookup by docNumber. A match is updated, carrying the new docNumber onto the existing record; no match creates one. They return a normalized envelope (operation, invoiceId or the journal id, syncToken, docNumber, realmId and the record), not the raw QuickBooks response.
  • findInvoiceByDocNumber, findJournalEntryByDocNumber return { found, id, syncToken, entity }, so a condition step can test found.
  • Journal-entry lines take amount, postingType (debit or credit), and either accountId or accountNumber (resolved against the chart of accounts with one extra request). Optional: description, entityType (Customer, Vendor, Employee) with entityId, classId, departmentId. The step fails before calling QuickBooks when there are fewer than two lines, only debits or only credits, an amount that is not a number, or debits that do not equal credits.
  • createPayment applies the payment to at most one invoice through invoiceIds. To split one payment across invoices, use batch with explicit Line amounts.
  • Invoices billed and collected elsewhere (for example a Stripe invoice mirrored into QuickBooks) should set allowOnlineCreditCardPayment and allowOnlineACHPayment to false, so the QuickBooks copy does not offer a second way to pay. Each of these invoice fields, and emailStatus and email, reaches QuickBooks only when the step sets it, so an existing step keeps sending the request it sent before. An emailStatus outside the three values, a boolean field set to anything but true or false, or an email that is not text stops the step before QuickBooks is called. Field definitions: Intuit Invoice entity.
  • A rejected write names its reason. When QuickBooks refuses a request, the step error carries Intuit's fault type, Message, Detail and code, for example Nango proxy request failed (400): ValidationFault: A business validation error has occurred while processing your request: <detail> (code 6000). The text is capped at 300 characters and scrubbed of tokens and keys.
  • txnTaxDetail carries tax calculated elsewhere (for example by Avalara). Send totalTax and txnTaxCodeId together, and a taxCodeId on every line.
  • PDF actions return contentBase64, contentType (application/pdf) and size. uploadAttachment takes fileName, contentType and contentBase64 (up to 20 MB) plus optional attachmentMetadata.
  • batch takes 1 to 30 batchItems, each with a unique bId. Check every item in the response for Fault. changeDataCapture takes entities (up to 30 names) and a changedSince timestamp within the last 30 days.
  • runReport accepts these reportType values: AccountList, AgedPayableDetail, AgedPayables, AgedReceivableDetail, AgedReceivables, BalanceSheet, CashFlow, CustomerBalance, CustomerBalanceDetail, CustomerIncome, GeneralLedger, InventoryValuationDetail, InventoryValuationSummary, JournalReport, ProfitAndLoss, ProfitAndLossDetail, ClassSales, CustomerSales, DepartmentSales, ItemSales, TaxSummary, TransactionList, TransactionListByVendor, TransactionListByCustomer, TransactionListWithSplits, TrialBalanceFR, TrialBalance, VendorBalance, VendorBalanceDetail, VendorExpenses. The output keeps the report's Header, Columns and nested Rows.

Output

Most actions return the QuickBooks response unchanged, keyed by record name, so a later step reads {{steps.<id>.Invoice.Id}}, {{steps.<id>.Bill.Id}} or {{steps.<id>.JournalEntry.Id}}. The find and upsert actions return the normalized shapes described above, so read {{steps.<id>.found}} or {{steps.<id>.invoiceId}}. Curated input and output examples for each action are in GET /api/v1/blocks/quickbooks/actions/<action>/examples.

Example

A step that posts a balanced month-end accrual. It reads the amount from an earlier step and pins a specific QuickBooks connection.

{
  "id": "post_accrual",
  "type": "action",
  "name": "Post accrual journal entry",
  "action": "quickbooks.createJournalEntry",
  "config": {
    "operation": "createJournalEntry",
    "connection": "<quickbooks-connection-id>",
    "realmId": "9341454792746027",
    "docNumber": "ACCR-2026-10",
    "txnDate": "2026-10-31",
    "privateNote": "October accrued expenses",
    "journalLines": [
      { "accountNumber": "6100", "postingType": "debit", "amount": "{{steps.estimate.total}}", "description": "Accrued expenses" },
      { "accountNumber": "2100", "postingType": "credit", "amount": "{{steps.estimate.total}}", "description": "Accrued liabilities" }
    ]
  }
}

A later step reads the new entry's id as {{steps.post_accrual.JournalEntry.Id}}.

Live catalog

GET /api/v1/blocks/quickbooks returns the block's fields, the action list and the parameter schema of each record action. See Block and action discovery.

Errors and limits

  • realmId is required for QuickBooks API calls: set realmId on the step.
  • <field> must be a QuickBooks identifier: ids accept letters, digits, _ and - only.
  • data.Id and data.SyncToken must be valid QuickBooks identifiers: read the record first and pass its current SyncToken.
  • journal entry does not balance: the debit and credit totals differ; the message shows both totals.
  • QuickBooks errors are returned with Intuit's fault detail. Availability of some records (budgets, inventory, multicurrency) depends on the connected company's subscription and settings.

On this page