OAuth with CSRF protection: a one-time state token is stored before redirecting to Intuit and validated on the way back, so the callback can be proved to answer a request this system initiated. On success the tokens and the company id are stored encrypted and the company name and plan tier are fetched. Disconnect revokes at Intuit first, then wipes locally.
Also called: link quickbooks · authorise quickbooks · disconnect quickbooks · revoke access
- 1Auth start stores a state row and redirects to Intuit with the requested scopes.
- 2The callback validates state and expiry, exchanges the code for tokens, stores them encrypted, fetches company info, deletes the consumed state row and redirects back with a success or error flag.
- 3Missing metadata self-heals: the status endpoint backfills company name and plan tier once if the callback did not capture them.
- 4Disconnect swallows a revoke failure so the user is never left stuck showing 'connected'.
Disconnecting an accounting integration has to actually revoke access, and it has to happen within a day of being asked — so a disconnect completes there and then instead of being queued and hoped for. The optional project-tracking permission is opt-in for a hard reason: if a company file does not have project tracking enabled, asking for it does not degrade gracefully, it rejects the entire connection. The base connection therefore asks only for what every company file can grant.
- A connect flow that fails entirely because of an optional permission.
- Disconnects that only cleaned up locally, leaving access live at Intuit.
- A connection stuck without its company name.
See it on your own jobs
Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.
or keep browsing features →