QuickBooks Desktop Rejects Invoices With No Line Items via Web Connector
QuickBooks Desktop returns error 3180 when a qbXML InvoiceAdd request contains no line items, because the application requires at least one entry to save.

Developers integrating external applications with QuickBooks Desktop through the Web Connector have encountered a straightforward but easily overlooked constraint: QuickBooks will not save an invoice that contains zero line items. A request submitted via qbXML to create an otherwise valid invoice — with a customer reference and a template selected — comes back with error code 3180 if the transaction body is empty.
The Problem
The scenario arises when a custom application communicates with QuickBooks Desktop through the Web Connector. A developer builds a web service that the Web Connector calls, and that service generates qbXML requests to create transactions inside the company file. The goal in this case was to generate an invoice carrying only header-level information — a customer and an invoice template — without any itemized lines underneath.
The qbXML request specifies the customer reference and the template name but includes no line-item detail whatsoever. When the Web Connector passes that request to QuickBooks Desktop, the application rejects it and returns a status code of 3180, flagged as an error. The transaction is not created.
What Error 3180 Means Here
Error 3180 in this context signals that the transaction QuickBooks received is incomplete. QuickBooks Desktop enforces the same data-entry rules programmatically that it enforces through its own interface: an invoice must have at least one line entry before it can be saved. The application treats a completely empty invoice as invalid regardless of whether it arrives through the user interface or through an API request.
This is not a bug in the Web Connector or a limitation of the qbXML format itself. It is QuickBooks applying its standard validation logic to a transaction that does not meet the minimum structural requirement for an invoice.
The Accepted Resolution
The verified solution is to include at least one line on the invoice, but that line does not need to contain an item, a quantity, or a dollar amount. A description-only line is sufficient. QuickBooks requires something in the line area, but a text entry in the description column satisfies that requirement.
There is one caveat: a single space character alone will not work. QuickBooks does not treat a blank space as meaningful content. The description needs to contain an actual character — a period, an underscore, or any similar minimal text entry. The line item then carries that description text and nothing else: no item reference, no amount, no quantity.
In practice, the qbXML request adds a description element to the invoice with a single-character value such as a period. That single entry is enough for QuickBooks to accept and save the transaction.
Why This Happens
QuickBooks Desktop models an invoice as a header plus one or more detail lines. The header carries customer information, dates, template selection, and other top-level data. The detail lines carry the actual content of the transaction — items sold, quantities, prices, descriptions, subtotals, and so on. QuickBooks requires at least one detail line because an invoice with only a header has no transactional content to record.
This mirrors what happens when a user manually creates an invoice in the QuickBooks interface. Clicking Save with no lines entered produces a prompt telling the user that the form needs at least one entry. The same rule applies to programmatic requests.
Practical Takeaway
For developers building integrations that generate invoices without traditional line-item detail — such as header-only records, summary invoices, or transactions whose detail lives in an external system — the fix is simple. Add a single description line with a minimal text character. The invoice saves successfully, the customer and template information is preserved, and no item or dollar amount is required on that line.
The approach works across QuickBooks Desktop editions that support the qbXML version in use, and it does not require any changes to the Web Connector configuration or the web service architecture. The adjustment is entirely within the request payload itself.