Building invoicing into your app sounds straightforward—until you open the QuickBooks API docs.

Nested objects three levels deep. Fields named SalesItemLineDetail inside DetailType inside Line. A SyncToken you need to track for every update. Error code 5010 when someone else touched the record 200ms before you did.

The QuickBooks Invoice API is...