Skip to content

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_uri with error=access_denied and your state, 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 Department API reads and writes your QuickBooks classes; a transaction's DepartmentRef is its class, and TrackDepartments reads true. Off by default, and off changes nothing. See Departments.
  • Header ClassRef on Invoice, SalesReceipt, Estimate, CreditMemo and PurchaseOrder (read and write); it was line-level only.
  • Safe retries. QuickBooks Online's requestid query 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 codes REQUESTID_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_by and customer / vendor / item / class filters. CashFlow is 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, NonInventory and Inventory items. Desktop other-charge and discount items read as Type: "Service".
  • Employee create and update, including a write-only SSN (reads return XXX-XX-1234). DisplayName is derived by Desktop from the first, middle and last names and cannot be written.
  • InventoryAdjustment (create, read, query, header update, delete) and GET /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 Id to keep it. See Line-level updates.
  • Sales forms: percent discounts (PercentBased with DiscountPercent), credit-memo applications on a Payment (extra CreditMemo LinkedTxn entries on the invoice's line), and the Estimate lifecycle (ExpirationDate, and TxnStatus Pending or Closed).
  • PurchaseOrder close and reopen with POStatus Closed / Open.
  • X-TKB-Warning response 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() on invoice, salesReceipt, purchase and billPayment, an isVoided() helper, and a requestId write option. See Node.js client.
  • New compatibility entries for gaps: CreditCardPayment, Tag, VendorType, and TaxPayment (planned).

Changed ​

  • TxnTaxDetail.TotalTax without a TxnTaxCodeRef is now accepted instead of refused. It is not sent: QuickBooks computes the tax, and an X-TKB-Warning header reports a difference from your figure.
  • A sales-form update with Line no longer renumbers every line: lines sent with their Id keep it, lines you omit are deleted. Sparse updates still need the full Line array.
  • A discount line must name its Desktop discount item (DiscountLineDetail.ItemRef, by value or 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=void with Id and SyncToken. In a batch, use operation: "update" with optionsData: "void". Code VOID_APPLIED_READBACK_FAILED. See Voids.
  • Node.js client and MCP server 0.2.0: Retry-After on errors, qboString for WHERE values, and 503/504 outcome semantics.
  • Developer sandbox reports replay real QuickBooks captures of the ExampleCo sample company. See Sandbox.

Changed ​

  • 503 AGENT_OFFLINE now always means the request was never sent. A request lost after it was sent is 504 AGENT_TIMEOUT, an unknown outcome: check before retrying, or use a requestid.

Fixed ​

  • A DocNumber longer than QuickBooks allows is now refused up front, and \' escapes work in query string literals.

TenkeyBridge is an independent product, not affiliated with, endorsed by, or sponsored by Intuit Inc. QuickBooks, QuickBooks Online, and QuickBooks Desktop are trademarks of Intuit Inc., used only to describe compatibility.