Product Lines
Product lines represent line items on activities — the individual rows on a quote, sales order, or invoice. Each product line links an activity to a Product, with a quantity, price, discount, and VAT calculation.
Use the ProductLine endpoint to query and manage product lines. You can also access them via the ProductLines navigation property on any activity.
Endpoints
List Product Lines
GET
/v1/odata/ProductLineSingle Product Line
GET
/v1/odata/ProductLine({id})Create Product Line
POST
/v1/odata/ProductLineUpdate Product Line
PUT
/v1/odata/ProductLine({id})Delete Product Line
DELETE
/v1/odata/ProductLine({id})Fields
Product Line Fields
| Field | Type | Description |
|---|---|---|
Description | String | Line item description |
LocalizedDescription | String | Localized description |
ExtraDescription | String | Additional description |
Quantity | Double | Quantity |
Price | Double | Unit price |
PriceInCurrency | Double | Unit price (in currency) |
PurchasePrice | Double | Purchase / cost price |
TotalPurchasePrice | Double | Total purchase price |
DiscountPercentage | Double | Discount percentage |
Currency | String | Currency code (e.g., EUR) |
IsPriceManuallyChanged | Boolean | Whether the price was manually overridden |
IsBilled | Boolean | Whether the line has been invoiced |
IsProcessableInParent | Boolean | Whether processable in parent activity |
Totals
| Field | Type | Description |
|---|---|---|
Total | Double | Line total |
TotalExcludingVat | Double | Total excluding VAT |
TotalIncludingVat | Double | Total including VAT |
TotalInCurrency | Double | Total (in currency) |
TotalExcludingVatInCurrency | Double | Total excluding VAT (in currency) |
TotalIncludingVatInCurrency | Double | Total including VAT (in currency) |
VatPercentage | Double | VAT percentage |
VatAmount | Double | VAT amount |
VatAmountInCurrency | Double | VAT amount (in currency) |
VatAmountIncludingDiscount | Double | VAT amount after discount |
VatAmountIncludingDiscountInCurrency | Double | VAT amount after discount (in currency) |
Date Fields
| Field | Type | Description |
|---|---|---|
StartDate | DateTimeOffset | Start date (for recurring lines) |
EndDate | DateTimeOffset | End date (for recurring lines) |
BilledUntil | DateTimeOffset | Date until which the line has been billed |
Relationships
| Relationship | Target Entity | Cardinality | Description |
|---|---|---|---|
| Activity | Activity | N:1 | Parent activity |
| Product | Product | N:1 | Linked product |
| VatGroup | Datastore.VatGroup | N:1 | VAT group |
| RepeatInterval | DateInterval | N:1 | Repeat interval (for recurring lines) |
| Milestone | ProjectMilestone | N:1 | Project milestone |
| InvoiceProductLine | ProductLine | N:1 | Linked invoice product line |
| ProductLine | ProductLine | N:1 | Parent product line |
| TimeRegistration | TimeRegistration | N:1 | Linked time registration |
| BilledTimeRegistrations | TimeRegistration | 1:N | Billed time registrations |
Expanding Relationships
GET
/v1/odata/ProductLine({id})?$expand=ActivityNavigating Relationships
GET
/v1/odata/ProductLine({id})/ActivityFiltering Examples
GET
/v1/odata/ProductLine?$filter=Activity/ID eq cbf40345-333a-4e5b-a149-276d22c1418d&$top={top}GET
/v1/odata/ProductLine?$filter=contains(Description, '{Description}')&$top={top}GET
/v1/odata/ProductLine?$filter=Quantity gt {Quantity}&$top={top}GET
/v1/odata/ProductLine?$filter=IsBilled eq {IsBilled}&$top={top}GET
/v1/odata/ProductLine?$filter=Price gt {Price}&$top={top}