---
title: "Create bid line item"
method: POST
path: "/bids/{id}/line-items"
tags: ["Bids"]
---

# Create bid line item

`POST /bids/{id}/line-items`

## Request

- Base URL: `https://app.buildworkpro.com/api/v1`
- URL: `https://app.buildworkpro.com/api/v1/bids/{id}/line-items`
- Auth: HTTP bearer

## Path parameters

- `id` integer, required

## Headers

- `Idempotency-Key` string, uuid

## Request body

- object
  - `productId` integer, nullable
  - `markName` string, nullable
  - `description` string, required
  - `quantity` string, nullable
  - `width` string, nullable
  - `height` string, nullable
  - `depth` string, nullable
  - `area` string, nullable
  - `perimeterLf` string, nullable
  - `volumeCf` string, nullable
  - `buyTaxPercent` string, nullable: Purchase-tax rate on the cost. A percent, not a fraction: 7 means 7% (send 7, not 0.07). 0-100, at most 3 decimal places.
  - `sellTaxPercent` string, nullable: Sales-tax rate for this line. null inherits the bid rate, 0 exempts. A percent, not a fraction: 7 means 7% (send 7, not 0.07). 0-100, at most 3 decimal places.
  - `kind` 'item' | 'section' | 'note': item = priced line; section = header grouping the rows after it; note = customer-visible text.
  - `isOptional` boolean: An optional (alternate) priced line, quoted outside the bid total.
  - `order` integer, nullable
  - `unitPrice` string: Pre-markup direct cost per unit for a flat line with no sublines. Not the customer price — read customerUnitPrice. Ignored once the line has sublines.

## Response `201`

Created

- object
  - `data` BidLineItem, required
    - `id` integer, required
    - `bidId` integer, required
    - `kind` 'item' | 'section' | 'note', required: item = priced line; section = header grouping the rows after it; note = customer-visible text.
    - `isOptional` boolean, required: An optional (alternate) priced line, quoted outside the bid total.
    - `markName` string, nullable, required: Human-friendly mark name, e.g. W-01. Null on section and note rows.
    - `description` string, nullable, required
    - `quantity` string, nullable, required: Quantity. Sections and notes are not priced.
    - `unitPrice` string, nullable, required: Pre-markup direct cost per unit (before margin, overhead, commission, and distributed project costs). Not the customer price — use customerUnitPrice.
    - `total` string, nullable, required: Pre-markup line cost. Summing these does not equal the bid subtotal. Use customerTotal.
    - `customerUnitPrice` string, nullable, required: Customer-facing unit price after markup and this line's share of distributed costs. Null on section and note rows. An optional line is priced on its own and is excluded from the bid subtotal.
    - `customerTotal` string, nullable, required: Customer-facing line total in dollars, reconciled to the cent. Null on section and note rows. The sum over priced, non-optional lines equals the bid's pre-discount subtotal.
    - `sellTaxPercent` string, nullable, required: Per-line sales-tax rate (0–100). Null inherits the bid's tax rate; 0 exempts the line.
    - `buyTaxPercent` string, nullable, required: Per-line purchase-tax rate (0–100) on a flat line's cost. Null inherits the product's rate.
    - `order` integer, nullable, required: Sort position within the bid. A section covers every following row until the next section.
  - `meta` ResponseMeta, required
    - `request_id` string: Server-generated request identifier
    - `pagination` PaginationMeta
      - `cursor` string, nullable, required: Opaque cursor for the next page; null when no more results
      - `has_more` boolean, required: Whether more pages are available after this one
      - `count` integer, required: Items in this page

## Other responses

- `404`: Error
- `409`: Error
- `422`: Error

---

[API](https://skmtc.dev/buildworkpro/apis/buildworkpro-api.md) · [All operations](https://skmtc.dev/buildworkpro/apis/buildworkpro-api/llms.txt) · [OpenAPI document](https://skmtc.dev/buildworkpro/apis/buildworkpro-api/revisions/441cf40012f7?raw)
