Appearance
Changelog
What changed in the TenkeyBridge API, docs and client, newest first. The per-entity detail is in the compatibility matrix.
2026-10-01
Changed
- OAuth consent page has a Cancel button. Cancel redirects to your
redirect_uriwitherror=access_deniedand yourstate, as Intuit does when a user declines. See Authentication. Invalid authorize links now show a readable error page (same status codes); the token endpoint is unchanged. - Developer portal. A sandbox quickstart (base URL, realm ID, sample call), Web Connector next steps after you create a connection, pending invitations with resend and cancel, and confirmation before revoking a key or deleting a client.
2026-09-30
Added
- Departments (opt-in). Turn on Departments from classes for a company file and the QuickBooks Online
DepartmentAPI reads and writes your QuickBooks classes; a transaction'sDepartmentRefis its class, andTrackDepartmentsreads true. Off by default, and off changes nothing. See Departments. - Header
ClassRefon Invoice, SalesReceipt, Estimate, CreditMemo and PurchaseOrder (read and write); it was line-level only. - Safe retries. QuickBooks Online's
requestidquery parameter on writes and on each write item of a/batch. Retry a timed-out write with the same id and you get the original result, never a second posting. Remembered per company for 7 days. New codesREQUESTID_INVALID,REQUESTID_BODY_MISMATCH,REQUEST_IN_FLIGHT,REQUEST_OUTCOME_UNKNOWN. See Safe retries. - Reports v2: 20 reports. Fifteen new reports (customer and vendor balances and detail, income and expense by customer/vendor, sales by customer and product, inventory valuation, general ledger, journal, transaction list, profit and loss detail, aging detail), plus
summarize_column_byandcustomer/vendor/item/classfilters.CashFlowis not available: QuickBooks Desktop has no cash-flow report to translate. See Reports. - Query language v2.
AND,IN,LIKE,ORDERBY,COUNT(*)and column lists, with the conditions QuickBooks can apply pushed into the request. See Query support. - Items can be created and updated.
Service,NonInventoryandInventoryitems. Desktop other-charge and discount items read asType: "Service". - Employee create and update, including a write-only
SSN(reads returnXXX-XX-1234).DisplayNameis derived by Desktop from the first, middle and last names and cannot be written. InventoryAdjustment(create, read, query, header update, delete) andGET /entitlements.- Custom field writes on Customer, Vendor, Employee, Item, Invoice, SalesReceipt, Estimate, CreditMemo and PurchaseOrder, with new codes
CUSTOM_FIELD_UNKNOWN,CUSTOM_FIELD_WRITE_FAILED,CUSTOM_FIELD_READBACK_FAILED. See Custom fields. - Line updates that keep line identity on Invoice, Estimate, SalesReceipt, CreditMemo, PurchaseOrder, JournalEntry and Deposit: send a line's
Idto keep it. See Line-level updates. - Sales forms: percent discounts (
PercentBasedwithDiscountPercent), credit-memo applications on a Payment (extraCreditMemoLinkedTxnentries on the invoice's line), and the Estimate lifecycle (ExpirationDate, andTxnStatusPendingorClosed). PurchaseOrderclose and reopen withPOStatusClosed/Open.X-TKB-Warningresponse header for non-fatal conditions. See Warnings.- Error code
QB_NOT_OPEN(503): the Windows edge agent is connected but QuickBooks is not open in its session. Nothing was sent, so it is always safe to retry; a live Web Connector for the realm is tried automatically first. The Web Connector remains the default way to connect. - Node.js client 0.3.0 (published to npm 2026-09-30):
void()oninvoice,salesReceipt,purchaseandbillPayment, anisVoided()helper, and arequestIdwrite option. See Node.js client. - New compatibility entries for gaps:
CreditCardPayment,Tag,VendorType, andTaxPayment(planned).
Changed
TxnTaxDetail.TotalTaxwithout aTxnTaxCodeRefis now accepted instead of refused. It is not sent: QuickBooks computes the tax, and anX-TKB-Warningheader reports a difference from your figure.- A sales-form update with
Lineno longer renumbers every line: lines sent with theirIdkeep it, lines you omit are deleted. Sparse updates still need the fullLinearray. - A discount line must name its Desktop discount item (
DiscountLineDetail.ItemRef, byvalueor by full name). TenkeyBridge does not pick one for you. - The void guide now describes the journal entries QuickBooks posts when a check is voided: one dated the check's own date and one, reversing it, dated the day of the void.
2026-09-29
Added
- Void for Invoice, SalesReceipt, Purchase (check and credit-card families) and BillPayment:
POST /{entity}?operation=voidwithIdandSyncToken. In a batch, useoperation: "update"withoptionsData: "void". CodeVOID_APPLIED_READBACK_FAILED. See Voids. - Node.js client and MCP server 0.2.0:
Retry-Afteron errors,qboStringforWHEREvalues, and 503/504 outcome semantics. - Developer sandbox reports replay real QuickBooks captures of the ExampleCo sample company. See Sandbox.
Changed
503 AGENT_OFFLINEnow always means the request was never sent. A request lost after it was sent is504 AGENT_TIMEOUT, an unknown outcome: check before retrying, or use arequestid.
Fixed
- A
DocNumberlonger than QuickBooks allows is now refused up front, and\'escapes work inquerystring literals.

