---
title: "Appends line items to an existing invoice WITHOUT modifying or deleting its other line items (unlike PUT /api/Invoice, which replaces the full line item collection). Each line item may optionally link uninvoiced timesheets, expenses or a fixed amount via TimesheetEntryIDs / ExpenseIDs / FixedAmountIDs; quantities, prices, descriptions and taxes are calculated from the linked records unless supplied, and the linked records are marked as invoiced. The request is atomic: if any line item or link is invalid, nothing is added. The invoice must not be Void; totals, balance and status are recalculated (e.g. a Paid invoice becomes Partial when its total grows)."
method: POST
path: "/api/Invoice/AddLineItems"
tags: ["Invoice"]
---

# Appends line items to an existing invoice WITHOUT modifying or deleting its other line items (unlike PUT /api/Invoice, which replaces the full line item collection). Each line item may optionally link uninvoiced timesheets, expenses or a fixed amount via TimesheetEntryIDs / ExpenseIDs / FixedAmountIDs; quantities, prices, descriptions and taxes are calculated from the linked records unless supplied, and the linked records are marked as invoiced. The request is atomic: if any line item or link is invalid, nothing is added. The invoice must not be Void; totals, balance and status are recalculated (e.g. a Paid invoice becomes Partial when its total grows).

`POST /api/Invoice/AddLineItems`

## Request body

- AddInvoiceLineItemsRequest — Request model for appending line items to an existing invoice without modifying its other line items.
  - `InvoiceID` integer, required — The Transaction ID of the invoice to append line items to. The invoice must not be Void.
  - `LineItems` NewInvoiceLineItem[], required — The line items to append (1-100). Each may optionally link uninvoiced timesheets, expenses or a fixed amount via TimesheetEntryIDs / ExpenseIDs / FixedAmountIDs; amounts and descriptions are calculated from the linked records unless supplied. Existing line items on the invoice are never modified or deleted by this endpoint.
    - `InventoryItemIDFK` integer — If not specified then Inventory Item Name must be specified.
    - `InventoryItemName` string — If not specified then Inventory item ID must be specified. If specified and not matched to any existing inventory items then a new inventory item will be created. Max 200 characters.
    - `Description` string — Plain UTF8 text. (no HTML). When the line item links source records and this is omitted, a description is generated from the linked records.
    - `Quantity` number, double — The quantity for the line item. Required unless the line item links source records (TimesheetEntryIDs / ExpenseIDs / FixedAmountIDs), in which case it is calculated from the linked records when omitted (e.g. total timesheet duration with account rounding applied).
    - `UnitPrice` number, double — The unit price for the lineitem. Required unless the line item links source records, in which case it is calculated from the linked records when omitted (timesheets: the billable rate, blended when rates differ; expenses: converted amount including category markup; fixed amounts: the amount).
    - `TaxIDFK` integer — If specified then it must match an existing Tax ID. If not specified then Tax Name and Tax Percent must be specified - except on a line item linking source records, where the tax is derived from the linked records when omitted.
    - `TaxName` string — Must be specified if the Tax ID is blank. If the Tax Name is specified it will be matched to an existing Tax Name or else a new Tax will be created.
    - `TaxPercent` number, double — The Tax Percent will only be used if a new tax is being created.
    - `Discount` number, double — Enter 10.5 to give a 10.5% discount
    - `ProjectIDFK` integer — Optional. Project ID of an Avaza Project that belongs to this customer, so line item is attributed to that Project for reporting. Must be omitted when the line item links source records (it is derived from them).
    - `TimesheetEntryIDs` integer[] — Optional. IDs of uninvoiced Timesheet entries to link to (invoice with) this line item. All entries must be billable, Approved or AutoApproved, not already invoiced, have no running timer, belong to the invoice's customer, and share a single project. Put one ID per line item for a dedicated line per entry, or several IDs to group them into one line. A line item may link only ONE source type, and InventoryItemIDFK/InventoryItemName/ProjectIDFK must be omitted on linked lines (they are derived from the source records).
    - `ExpenseIDs` integer[] — Optional. IDs of uninvoiced chargeable Expenses (Approved or AutoApproved, belonging to the invoice's customer) to link to this line item. Multiple expenses grouped onto one line must share the same tax. Quantity is 1 and UnitPrice is calculated from the expense amounts (including category markup and currency conversion) unless overridden. A line item may link only ONE source type, and InventoryItemIDFK/InventoryItemName/ProjectIDFK must be omitted on linked lines.
    - `FixedAmountIDs` integer[] — Optional. ID of an uninvoiced Fixed Amount to link to this line item - maximum ONE per line item (fixed amounts are always invoiced on their own line). Quantity is 1 and UnitPrice/Tax/InventoryItem come from the fixed amount unless overridden. A line item may link only ONE source type, and InventoryItemIDFK/InventoryItemName/ProjectIDFK must be omitted on linked lines.
  - `ExpenseExchangeRates` ExpenseExchangeRate[] — Optional exchange-rate overrides applied when linked Expenses are in a currency different from the invoice currency.
    - `CurrencyCode` string, required — ISO standard 3 character currency code of the expense currency.
    - `Rate` number, double, required — The rate that converts 1 unit of the expense currency into the invoice currency. Must be greater than zero.
  - `SendWebhooks` boolean — If true, fires invoice_updated (plus timesheet_updated / expense_updated for linked records) webhook events. Defaults to false.

## Response `200`

Returns the updated invoice, the new TransactionLineItemIDs, and any warnings.

- InvoiceLineItemsResult — Result of appending line items to an invoice.
  - `Invoice` Invoice — A customer invoice including line items, status, amounts, issuer/recipient details, and web links.
    - `TransactionID` integer — Unique identifier for the invoice transaction.
    - `AccountIDFK` integer — The Avaza account this invoice belongs to.
    - `TransactionPrefix` string — Prefix used in the invoice number (e.g. 'INV').
    - `InvoiceNumber` string — The full invoice number including prefix.
    - `CompanyIDFK` integer — The customer company ID this invoice is for.
    - `CompanyName` string — Name of the customer company.
    - `ExternalContactUserIDFK` integer — The external contact user ID associated with this invoice.
    - `Subject` string — Subject line for the invoice.
    - `DateIssued` string, date-time — Date the invoice was issued.
    - `DateSent` string, date-time — Date the invoice was sent to the customer.
    - `DueDate` string, date-time — Payment due date.
    - `TransactionStatusCode` string — Current status. Values: Draft, Sent, Late, Paid, Partial, Void.
    - `TaxAmount` number, double — Total tax amount across all line items.
    - `TransactionTaxConfigCode` string — Tax configuration: 'EX' (exclusive) or 'INC' (inclusive).
    - `Balance` number, double — Outstanding balance remaining on the invoice.
    - `CurrencyCode` string — ISO 3-character currency code for the invoice.
    - `TotalAmount` number, double — Total amount of the invoice including tax.
    - `ExchangeRate` number, double — Exchange rate to the account's base currency. 1.0 if same currency.
    - `Notes` string — Additional notes or comments on the invoice.
    - `CustomerPONumber` string — Customer's purchase order number for reference.
    - `DateCreated` string, date-time — Date and time the record was created.
    - `DateUpdated` string, date-time — Date and time the record was last updated.
    - `LineItems` InvoiceLineItem[] — Line items on this invoice.
      - `TransactionLineItemID` integer — Unique identifier for the line item.
      - `InventoryItemIDFK` integer — The inventory/product item ID for this line item.
      - `InventoryItemName` string — Name of the inventory/product item.
      - `InventoryItemSKU` string — Stock Keeping Unit code for the inventory item.
      - `Description` string — Text description for the line item.
      - `Quantity` number, double — Quantity of items on this line.
      - `UnitPrice` number, double — Price per unit for this line item.
      - `TaxAmount` number, double — Calculated tax amount on this line item.
      - `TaxIDFK` integer — The tax rate ID applied to this line item.
      - `TaxCode` string — Short code for the applied tax rate.
      - `TaxName` string — Name of the applied tax rate.
      - `ProjectIDFK` integer — Optional project ID this line item is attributed to for reporting.
      - `ProjectTitle` string — Title of the associated project.
      - `Amount` number, double — Calculated line total (Quantity x UnitPrice less Discount).
      - `Discount` number, double — Discount percentage applied to this line item.
      - `TimesheetEntryIDs` integer[] — IDs of the Timesheet entries linked to (invoiced by) this line item. Empty when the line item has no linked timesheets.
      - `ExpenseIDs` integer[] — IDs of the Expenses linked to (invoiced by) this line item. Empty when the line item has no linked expenses.
      - `FixedAmountIDs` integer[] — IDs of the Fixed Amounts linked to (invoiced by) this line item. Empty when the line item has no linked fixed amounts.
    - `Links` InvoiceLinks — URLs for client-facing view, internal view, and editing an invoice in the Avaza web application.
      - `ClientView` string — URL for the customer to view and pay the invoice online.
      - `View` string — URL for viewing the invoice in the Avaza application.
      - `Edit` string — URL for editing the invoice in the Avaza application.
    - `Issuer` IssuerDetails — Billing address and tax details for the Avaza account (the party issuing an invoice or estimate).
      - `BillingAddress` string — Formatted multi-line billing address.
      - `BillingAddressLine` string — Street address line of the billing address.
      - `BillingAddressCity` string — City/suburb of the billing address.
      - `BillingAddressState` string — State/province of the billing address.
      - `BillingAddressPostCode` string — Postal/ZIP code of the billing address.
      - `BillingCountryCode` string — ISO 3166-1 alpha-2 country code of the billing address.
      - `TaxNumber` string — Tax registration number (e.g. VAT number, ABN, EIN).
    - `Recipient` RecipientDetails — Billing address details for the customer receiving an invoice or estimate.
      - `CompanyIDFK` integer — The customer company ID.
      - `CompanyName` string — Name of the customer company.
      - `RecipientFormattedBillingAddress` string — Pre-formatted multi-line billing address for the recipient.
      - `RecipientBillingAddressLine` string — Street address line for the recipient.
      - `RecipientBillingAddressCity` string — City/suburb for the recipient.
      - `RecipientBillingAddressState` string — State/province for the recipient.
      - `RecipientBillingAddressPostCode` string — Postal/ZIP code for the recipient.
      - `RecipientBillingAddressCountryCode` string — ISO country code for the recipient.
  - `AddedTransactionLineItemIDs` integer[] — The TransactionLineItemIDs of the newly created line items, in request order.
  - `Warnings` string[] — Non-fatal notices about the operation (e.g. an invoice status change caused by the new total).

## Other responses

- `400` — A line item or source link failed validation. The response details every problem; nothing was changed.
- `404` — No invoice with that ID exists.
- `409` — A linked record was invoiced concurrently by another request; nothing was changed.

## Changes

- **2026-08-30** `e99843f3c878` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/avaza/apis/avaza-api-documentation/changes/api/Invoice/AddLineItems/post.md)

---

[API](https://skmtc.dev/avaza/apis/avaza-api-documentation.md) · [All operations](https://skmtc.dev/avaza/apis/avaza-api-documentation/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/avaza/avaza-api-documentation/revisions/e99843f3c878/schema)
