> ## Documentation Index
> Fetch the complete documentation index at: https://docs.proposales.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Multi-Product subrows

> Multi-product rows can be further split into subrows.

```typescript theme={null}
{
  id: string,
  label?: string,
  quantity?: number,
  value?: number,
  valueWithTax?: number,
  tax_rate?: number,
  percent_discount?: number,
  valueWithoutDiscountWithoutTax?: number,
  valueWithoutDiscountWithTax?: number,
  included?: boolean,
  integration?: {
      linkedToRow?: boolean,
      uniqueId: number | string,
      metadata?: Object | string,
    })
}
```

<ResponseField name="id" type="string">
  A id used to uniquely identify the subrow for the lifetime of the proposal. Does not affect the UI.
</ResponseField>

<ResponseField name="label" type="string">
  A short explanation heading to be shown for the item. We don't have a description field for multi-product subrows so this field should be descriptive for what the item represents.

  The label can be missing. In that case the quantity and value will be displayed without a heading.
</ResponseField>

<ResponseField name="quantity" type="number">
  The unit value represents the value for one unit, and will be multiplied by the quantity.

  * if undefined, the amount defaults to 1
</ResponseField>

<ResponseField name="value" type="number">
  The value of one unit of the product excluding tax (after discount if applicable).

  The value can be undefined. In that case it's not shown at all, and the subrow is assumed to be used for the label, as an additional explanation.

  If defined, `valueWithTax` should be defined as well, and vice-versa.

  Saved in cents.
</ResponseField>

<ResponseField name="valueWithTax" type="number">
  The value of one unit of the product including tax (after discount if applicable).

  Saved in cents.
</ResponseField>

<ResponseField name="percent_discount" type="number (0-1)">
  The discount percentage applied to this subrow (e.g., 0.10 for 10% discount).

  If present, `valueWithoutDiscountWithoutTax` and `valueWithoutDiscountWithTax` should contain the original prices before the discount.

  Note: Unlike parent rows which use `discount`, subrows use `percent_discount` for clarity.
</ResponseField>

<ResponseField name="valueWithoutDiscountWithoutTax" type="number">
  The original value of one unit before discount, excluding tax.

  Only populated when a discount is applied. Used to display strikethrough pricing in the UI.

  Saved in cents.
</ResponseField>

<ResponseField name="valueWithoutDiscountWithTax" type="number">
  The original value of one unit before discount, including tax.

  Only populated when a discount is applied. Used to display strikethrough pricing in the UI.

  Saved in cents.
</ResponseField>

<ResponseField name="tax_rate" type="number (0-1)">
  The tax value for the subrow in percentage (1 = 100%).

  Since subrows are a second level split of a product (product -> multi-product rows -> subrows) we assume that package products are no longer necessary at this level and simplify the split to a simple VAT rate.
</ResponseField>

<ResponseField name="included" type="boolean">
  If set to true, the item will be tagged as already included in the parent row value, and the value will be ignored.

  This subrow becomes for all intents and purposes a informational item.
</ResponseField>

<ResponseField name="integration" type="object">
  Information specific to an external integration connected to Proposales.

  `linkedToRow` - The id of a row that the subrow is connected with.

  `uniqueId` - An unique id that the external integration recognizes the subrow by.

  `metadata` - It can be a string or any shape of an object, and used exclusively by external integrations. Proposales does not act on this information.
</ResponseField>
