python-quickbooks — the community client the ecosystem uses — and drives the container through the sequence a bookkeeping integration actually runs.
Slug: quickbooks
The company is in the path
QuickBooks does not put the company in the token. Every path is/v3/company/{realmId}/{entity}, so a caller needs the realm before it can make a single call, and a token that does not belong to the realm it is addressing is a 401 rather than a 404. One container serves one company, and its realm is 9341454816836284.
What it models
Advancing the sandbox runs the arithmetic of the books again: an invoice against its lines and payments, a customer against its unpaid invoices, and whether a due date has passed. It is what settles a record edited by hand, and a second advance at the same instant moves nothing.
Scenarios
overdue-receivables, throttled.
Not modelled
The OAuth authorization code flow, token refresh and revocation — the twin is handed a live token. Vendors, bills, purchases, estimates, credit memos, sales receipts, journal entries and the rest of the ledger beyond receivables. Taxes:TxnTaxDetail is stored and never computed. Reports, attachments, PDFs, sending a form by email, webhooks, the Payments API and the Payroll API. Inventory items, multi-currency, and more than one company per container. Voiding or deleting a payment, and deactivating a customer, an account or an item.
Nobody who built this twin had an Intuit sandbox company, so a handful of faults had to be chosen from Intuit’s documentation rather than read off a live one — the throttle envelope, the refusal for over-applying a payment, and the fault a batch over the limit is refused with. The twin’s own README lists them under Where the docs do not reach.