API Documentation

API Endpoint

Line Items

Line Items

A line item is a component of an invoice which represents an individual entry that details a specific good or service provided by the seller to the buyer.

To find out more about managing invoices and line items, visit our Help documentation: Creating and Managing Invoices.

Following diagram shows line items in our data hierarchy:

Line item diagram

Setting tax data

In an old workflow, adding tax data to a line item requires two values: tax_name and tax_value. For example, if you wanted to add a VAT 15%, you would send tax_name: ‘VAT’ and tax_value: 15.

In a new workflow (available for customers on our BETA program for now), you should send tax_rate_id instead, which points to a Tax rate object. So, in order to set VAT 15% to your line item, you would first need to have a tax rate object with those values and then send its ID to the desired line item.

Supported filter params

  • id

  • invoice_id (array)

  • service_id (array)

  • expense_id (array)

  • creator_id (array)

  • updater_id (array)

  • service_type_id (array)

  • unit_id (array)

  • description

  • discount

  • tax_name

  • tax_value

GET /api/v2/line_items
Requestsreturns line_items

GET  /api/v2/line_items

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Responses200
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
  "data": [
    {
      "id": "4",
      "type": "line_items",
      "attributes": {
        "unit_id": 2,
        "position": 1,
        "quantity": "3.0",
        "discount": null,
        "description": "test name",
        "tax_name": null,
        "tax_value": null,
        "currency": "EUR",
        "currency_default": "USD",
        "currency_normalized": "EUR",
        "unit_price": 5000,
        "unit_price_default": 6250,
        "unit_price_normalized": 5000,
        "amount": 15000,
        "amount_default": 18750,
        "amount_normalized": 15000,
        "amount_tax": 3750,
        "amount_tax_default": 4688,
        "amount_tax_normalized": 3750,
        "amount_with_tax": 18750,
        "amount_with_tax_default": 23438,
        "amount_with_tax_normalized": 18750
      },
      "relationships": {
        "organization": {
          "data": {
            "type": "organizations",
            "id": "693"
          }
        },
        "invoice": {
          "meta": {
            "included": false
          }
        },
        "service": {
          "meta": {
            "included": false
          }
        },
        "expense": {
          "meta": {
            "included": false
          }
        },
        "service_type": {
          "meta": {
            "included": false
          }
        },
        "tax_rate": {
          "meta": {
            "included": false
          }
        }
      }
    }
  ],
  "links": {
    "first": "http://api-test.productive.io/api/v2/line_items?page%5Bnumber%5D=1&page%5Bsize%5D=30",
    "last": "http://api-test.productive.io/api/v2/line_items?page%5Bnumber%5D=1&page%5Bsize%5D=30"
  },
  "meta": {
    "current_page": 1,
    "total_pages": 1,
    "total_count": 1,
    "page_size": 30,
    "max_page_size": 200
  }
}

Get line items
GET/api/v2/line_items


GET /api/v2/line_items/1
Requestsreturns line_item

GET  /api/v2/line_items/5

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Responses200
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
  "data": {
    "id": "5",
    "type": "line_items",
    "attributes": {
      "unit_id": 2,
      "position": 1,
      "quantity": "3.0",
      "discount": null,
      "description": "test name",
      "tax_name": null,
      "tax_value": null,
      "currency": "EUR",
      "currency_default": "USD",
      "currency_normalized": "EUR",
      "unit_price": 5000,
      "unit_price_default": 6250,
      "unit_price_normalized": 5000,
      "amount": 15000,
      "amount_default": 18750,
      "amount_normalized": 15000,
      "amount_tax": 3750,
      "amount_tax_default": 4688,
      "amount_tax_normalized": 3750,
      "amount_with_tax": 18750,
      "amount_with_tax_default": 23438,
      "amount_with_tax_normalized": 18750
    },
    "relationships": {
      "organization": {
        "data": {
          "type": "organizations",
          "id": "694"
        }
      },
      "invoice": {
        "meta": {
          "included": false
        }
      },
      "service": {
        "meta": {
          "included": false
        }
      },
      "expense": {
        "meta": {
          "included": false
        }
      },
      "service_type": {
        "meta": {
          "included": false
        }
      },
      "tax_rate": {
        "meta": {
          "included": false
        }
      }
    }
  },
  "meta": {}
}

Gets a line item
GET/api/v2/line_items/{id}

URI Parameters
HideShow
id
number (required) Example: 1

line item id


POST /api/v2/line_items
Requestscreates line_item with tax ratesreturns error

POST  /api/v2/line_items

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Body
{
  "data": {
    "type": "line_items",
    "attributes": {
      "unit_id": 2,
      "unit_price": "5000.0",
      "quantity": 3,
      "description": "test name",
      "service_type_id": 352,
      "position": 1
    },
    "relationships": {
      "invoice": {
        "data": {
          "type": "invoices",
          "id": "76"
        }
      },
      "tax_rate": {
        "data": {
          "type": "tax_rates",
          "id": "8"
        }
      }
    }
  }
}
Responses201
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
  "data": {
    "id": "7",
    "type": "line_items",
    "attributes": {
      "unit_id": 2,
      "position": 1,
      "quantity": "3.0",
      "discount": null,
      "description": "test name",
      "tax_name": "TaxRate8",
      "tax_value": "25.0",
      "currency": "EUR",
      "currency_default": "USD",
      "currency_normalized": "EUR",
      "unit_price": 5000,
      "unit_price_default": 6250,
      "unit_price_normalized": 5000,
      "amount": 15000,
      "amount_default": 18750,
      "amount_normalized": 15000,
      "amount_tax": 3750,
      "amount_tax_default": 4688,
      "amount_tax_normalized": 3750,
      "amount_with_tax": 18750,
      "amount_with_tax_default": 23438,
      "amount_with_tax_normalized": 18750
    },
    "relationships": {
      "organization": {
        "data": {
          "type": "organizations",
          "id": "695"
        }
      },
      "invoice": {
        "meta": {
          "included": false
        }
      },
      "service": {
        "meta": {
          "included": false
        }
      },
      "expense": {
        "meta": {
          "included": false
        }
      },
      "service_type": {
        "meta": {
          "included": false
        }
      },
      "tax_rate": {
        "meta": {
          "included": false
        }
      }
    }
  },
  "meta": {}
}

POST  /api/v2/line_items

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Body
{
  "data": {
    "type": "line_items",
    "attributes": {
      "unit_id": ""
    }
  }
}
Responses422
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
  "errors": [
    {
      "status": "422",
      "code": "invalid_attribute",
      "title": "Invalid Attribute",
      "detail": "attribute is invalid",
      "source": {
        "pointer": "data/attributes/invoice"
      }
    }
  ]
}

Create a line item
POST/api/v2/line_items

URI Parameters
HideShow
invoice_id
number (required) Example: 1

invoice id

unit_id
number (required) Example: 1

unit id

unit_price
number (required) Example: 100

unit price

quantity
number (required) Example: 10

quantity

description
string (required) Example: Description

description


PATCH /api/v2/line_items/1
Requestsupdates line_itemreturns error

PATCH  /api/v2/line_items/10

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Body
{
  "data": {
    "type": "line_items",
    "attributes": {
      "quantity": 6
    }
  }
}
Responses200
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
  "data": {
    "id": "10",
    "type": "line_items",
    "attributes": {
      "unit_id": 2,
      "position": 1,
      "quantity": "6.0",
      "discount": null,
      "description": "test name",
      "tax_name": null,
      "tax_value": null,
      "currency": "EUR",
      "currency_default": "USD",
      "currency_normalized": "EUR",
      "unit_price": 5000,
      "unit_price_default": 6250,
      "unit_price_normalized": 5000,
      "amount": 30000,
      "amount_default": 37500,
      "amount_normalized": 30000,
      "amount_tax": 7500,
      "amount_tax_default": 9375,
      "amount_tax_normalized": 7500,
      "amount_with_tax": 37500,
      "amount_with_tax_default": 46875,
      "amount_with_tax_normalized": 37500
    },
    "relationships": {
      "organization": {
        "data": {
          "type": "organizations",
          "id": "698"
        }
      },
      "invoice": {
        "meta": {
          "included": false
        }
      },
      "service": {
        "meta": {
          "included": false
        }
      },
      "expense": {
        "meta": {
          "included": false
        }
      },
      "service_type": {
        "meta": {
          "included": false
        }
      },
      "tax_rate": {
        "meta": {
          "included": false
        }
      }
    }
  },
  "meta": {}
}

PATCH  /api/v2/line_items/12

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Body
{
  "data": {
    "type": "line_items",
    "attributes": {
      "quantity": ""
    }
  }
}
Responses422
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
  "errors": [
    {
      "status": "422",
      "code": "invalid_attribute",
      "title": "Invalid Attribute",
      "detail": "can't be blank",
      "source": {
        "pointer": "data/attributes/quantity"
      }
    },
    {
      "status": "422",
      "code": "invalid_attribute",
      "title": "Invalid Attribute",
      "detail": "is not a number",
      "source": {
        "pointer": "data/attributes/quantity"
      }
    }
  ]
}

Update a line item
PATCH/api/v2/line_items/{id}

URI Parameters
HideShow
id
number (required) Example: 1

line item id


DELETE /api/v2/line_items/1
Requestsarchives line item

DELETE  /api/v2/line_items/18

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Responses204
This response has no content.

Deletes a line item
DELETE/api/v2/line_items/{id}

URI Parameters
HideShow
id
number (required) Example: 1

line item id


POST /api/v2/line_items/generate
Requestsreturns created line itemsreturns error

POST  /api/v2/line_items/generate

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Body
{
  "data": {
    "invoice_id": 91,
    "budget_ids": [
      661
    ],
    "invoicing_method": "percentage",
    "invoicing_by": "budget",
    "percentage": 50,
    "display_format": "{budget}",
    "tax_rate_id": 22
  }
}
Responses200
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
  "data": [
    {
      "id": "21",
      "type": "line_items",
      "attributes": {
        "unit_id": 2,
        "position": 1,
        "quantity": "0.5",
        "discount": null,
        "description": "test name",
        "tax_name": "TaxRate22",
        "tax_value": "25.0",
        "currency": "EUR",
        "currency_default": "USD",
        "currency_normalized": "EUR",
        "unit_price": 100000,
        "unit_price_default": 125000,
        "unit_price_normalized": 100000,
        "amount": 50000,
        "amount_default": 62500,
        "amount_normalized": 50000,
        "amount_tax": 12500,
        "amount_tax_default": 15625,
        "amount_tax_normalized": 12500,
        "amount_with_tax": 62500,
        "amount_with_tax_default": 78125,
        "amount_with_tax_normalized": 62500
      },
      "relationships": {
        "organization": {
          "data": {
            "type": "organizations",
            "id": "708"
          }
        },
        "invoice": {
          "meta": {
            "included": false
          }
        },
        "service": {
          "meta": {
            "included": false
          }
        },
        "expense": {
          "meta": {
            "included": false
          }
        },
        "service_type": {
          "meta": {
            "included": false
          }
        },
        "tax_rate": {
          "meta": {
            "included": false
          }
        }
      }
    }
  ],
  "meta": {}
}

POST  /api/v2/line_items/generate

Headers
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Content-Type: application/vnd.api+json
Body
{
  "data": {
    "invoice_id": 93,
    "budget_ids": [
      662
    ],
    "invoicing_method": "percentage",
    "invoicing_by": "budget",
    "display_format": "{budget}"
  }
}
Responses422
Headers
Content-Type: application/vnd.api+json; charset=utf-8
Body
{
  "errors": [
    {
      "status": "422",
      "code": "invalid_attribute",
      "title": "Invalid Attribute",
      "detail": "can't be blank",
      "source": {
        "pointer": "data/attributes/tax_rate"
      }
    }
  ]
}

Create line items
POST/api/v2/line_items/generate

URI Parameters
HideShow
invoice_id
number (required) Example: 1

invoice id

budget_ids
array (required) Example: %5B1%2C+3%5D

array of budget ids

invoicing_method
string (required) Example: percentage

possible values: uninvoiced_time_and_expenses, uninvoiced_amount, percentage

invoicing_by
string (optional) Example: service

possible values: service/budget; required for invoicing method uninvoiced_amount or percentage

percentage
number (optional) Example: 50

percentage of budget revenue; required for invoicing method percentage

display_format
string (required) Example: %7Bservice%7D

display format

expense_display_format
string (optional) Example: %7Bexpense%7D

display format for expenses

locale
string (optional) Example: en_US

locale; required for invoicing method uninvoiced_time_and_expenses

date_from
date (optional) Example: 2024-04-01

date from

date_to
date (optional) Example: 2024-05-01

date to


Generated by aglio on 02 Aug 2025