September 29, 2025
Get Invoice Data
The Invoice API can now be queried to return all of the Work and Expense details from the invoice data tab by using $expand=Data.
This can also be used in conjunction with the invoice presentation line items and the payments expands:
GET /v3/Invoices/{InvoiceKey}$expand=LineItems,Payments,Data
Add any expand options you need when requesting an individual invoice:
$expand=LineItemsreturns the invoice lines on the Presentation tab$expand=Paymentsreturns the payments showing on the Payments tab$expand=Datareturns information from the Data tab. Ad hoc invoices are broken down into their Work Items & Expenses, and recurring fixed fee invoices provide their Service details.
Refer to the API documentation for examples and more information.
Invoice Tax Location
The Invoice API now includes a new field TaxLocation which sets whether the tax was set on the Presentation tab (current) or the Data tab (new).
- Current ad hoc invoices are
TaxLocation=Presentation - Future ad hoc invoices will be
TaxLocation=Data - All recurring billed invoices are
TaxLocation=Data
Tax details for the lines themselves are included where the tax is set in the UI:
- If
TaxLocation=Presentation, theLineItemsarray has tax info and the tax fields in theDataarray will benull. - If
TaxLocation=Data, theDataarray has tax info and the tax fields in theLineItemsarray will benull.
Example API responses
Example Ad Hoc invoice
Each Data line returns either a Work Item or a Client in the case of Client Time/Expenses.
Each line includes Work and/or Expenses arrays depending on what is billed.
The Services array will always be null.
"Data": [
{
"EntityKey": "M4QTnt1srdD",
"EntityType": "Work Item", // or "Client" or "Service"
"Billed": 800,
"Service": null,
"Work": { ... },
"Expenses": { ... }
}
]
Example Recurring fixed fee invoice
Each Data line returns a Service, and the Work and Expenses arrays are null.
"Data": [
{
"EntityKey": "4lQzzVNBdHwq",
"EntityType": "Service",
"Billed": 150,
"Service": { ... },
"Work": null,
"Expenses": null
}
]