Skip to main content

Line Items API

Add, update, duplicate, reorder, and copy invoice line items with server-recalculated totals.

Line-item operations update the invoice composition. They always return recalculated invoice totals. JSON request fields use numbers for quantity, price, and tax inputs. Mutation response totals use decimal strings.

/v1/receivables/line-items

Endpoints and Schemas

MethodPathRequest schemaSuccess response
POST/invoice/{invoiceId}AddLineItemRequestLineItemMutationResponse
POST/invoice/{invoiceId}/bulkBulkAddLineItemsRequestBulkAddLineItemsResponse
PATCH/{id}UpdateLineItemBodyLineItemMutationResponse
DELETE/{id}DeleteLineItemRequestDeleteLineItemResponse
POST/{id}/duplicateDuplicateLineItemRequestDuplicateLineItemResponse
POST/invoice/{invoiceId}/reorderReorderLineItemsRequestReorderLineItemsResponse
POST/invoice/{invoiceId}/copy-from-productCopyFromProductRequestCopyFromProductResponse
POST/invoice/{invoiceId}/copy-from-invoiceCopyFromInvoiceRequestCopyFromInvoiceResponse

Line Item Input

FieldTypeNeededConstraints
namestringyes1–500 characters.
descriptionstringnoMaximum 2,000 characters.
quantitynumberyesMust be zero or greater.
pricenumberyesUnit price for one item.
unitPricenumbernoLegacy alias; use price for new integrations.
unitstringnoMaximum 50 characters, such as hour or project.
taxRatenumbernoPercentage from 0 through 100.
vatnumbernoExplicit VAT amount override.
taxnumbernoExplicit tax amount override.
productIdUUID stringnoLinks the item to a catalog entry for usage tracking.

To create one item, put it in item:

{
  "item": {
    "name": "Implementation services",
    "description": "Phase one delivery",
    "quantity": 10,
    "price": 150,
    "unit": "hour",
    "taxRate": 8.5
  }
}

Bulk creation accepts items with 1–50 entries and applies them in one transaction.

Update and Ownership

PATCH /{id} needs both the parent invoiceId and an updates object. The request changes only the fields inside updates. Delete and duplicate requests also need invoiceId in the JSON body. The server uses it to check that the line item belongs to that invoice and organization.

Response Contract

LineItemMutationResponse.data contains:

  • success
  • the created or updated item when applicable
  • invoiceId
  • newSubtotal as a decimal string
  • newAmount as a decimal string

Use the returned totals. Do not calculate tax or round values in the client. After any mutation, refresh invoice detail, PDF preview, payment balance, and related analytics.

Reorder and Copy

The reorder request accepts the complete ordered itemIds array for the invoice. Copy-from-product accepts productId and optional quantity (default 1). Copy-from-invoice accepts sourceInvoiceId. The source and destination invoices must be accessible in the same organization.

We use cookies to improve your experience, analyze traffic, and personalize content.