---
title: "Returns one item with its properties, price tiers, barcodes and per-location stock."
method: GET
path: "/api/v1/items/{id}"
tags: ["Items"]
---

# Returns one item with its properties, price tiers, barcodes and per-location stock.

`GET /api/v1/items/{id}`

## Request

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

Requires `ViewInventory`. `id` may be the numeric id or the `syncId`.
Sends a weak `ETag`; repeat with `If-None-Match` to get 304 when unchanged.

## Path parameters

- `id` string, required

## Response `200`

The item.

- ItemDetail: Full item as returned by `GET /api/v1/items/{id}`.
  - `item` ItemSummary: One sellable/stockable item (an `ItemTemplate`) as listed by `GET /api/v1/items`. Physical rows in inventory are instances of a template; the API exposes templates because that is what agents price, sell and reorder.
    - `id` integer: Numeric id, usable in `/api/v1/items/{id}`.
    - `syncId` string, uuid: Stable cross-device id; also the pagination cursor.
    - `name` string: Display name.
    - `description` string, nullable: Free-text description, if any.
    - `categoryId` integer, nullable: Primary category id, if any.
    - `categoryName` string, nullable: Primary category name, if any.
    - `unitPrice` number, double, nullable: Selling price from the template's `Unit Price` property; null when not priced.
    - `cost` number, double, nullable: Purchase cost from the template's `Cost` property; null when unknown.
    - `onHand` number, double: Units on hand across stock locations (job sites excluded). Decimal because items sold by sub-unit report partial rows; negative when the organization allows overselling.
    - `isMiscItem` boolean: True for ad-hoc "misc" items that never carry stock.
    - `isParentTemplate` boolean: True for a grouping template whose children are the stocked variants.
    - `sellByUnits` boolean: True when the item is sold in sub-units of a parent row.
    - `unitName` string, nullable: Name of the sub-unit when SellByUnits is true.
    - `createdAt` string, date-time: UTC creation time.
    - `updatedAt` string, date-time, nullable: UTC last modification time; null when never edited.
    - `preferredVendorId` integer, nullable: Id of the vendor this item is normally reordered from (see `GET /api/v1/vendors`); null when none is set. Set on Item Templates → Edit or with `PATCH /api/v1/items/{id}`. Example: `3`.
    - `preferredVendorName` string, nullable: Name of the preferred vendor; null when none is set. Example: `"Ferguson"`.
    - `vendorPartNumber` string, nullable: The vendor's own part / catalogue number for this item, max 100 characters; null when unknown. Example: `"PX-12C"`.
  - `properties` object: Every template property by name (includes `Unit Price` and `Cost` when set).
  - `priceTiers` ItemPriceTier[]: Quantity-break pricing, ascending by quantity. Empty when the item has a single price.
    - `minQuantity` integer: Smallest quantity at which UnitPrice applies.
    - `unitPrice` number, double: Price per unit at or above MinQuantity.
  - `barcodes` ItemBarcodeDto[]: Barcodes attached to the item.
    - `value` string: Encoded value.
    - `type` string: Symbology (e.g. `UPC`, `Code128`).
    - `isPrimary` boolean: True for the barcode printed on labels.
  - `stock` StockSummary: Stock position of an item.
    - `onHand` number, double: Total on hand; same semantics as `onHand`.
    - `byLocation` LocationStock[]: Per-location breakdown of physical rows. Sums to the row count, which may differ from OnHand for oversold or sub-unit items.
      - `locationId` integer: Location id.
      - `locationName` string: Location name.
      - `quantity` integer: Whole item rows at the location (not deleted, not in a job site).
  - `parentItemId` integer, nullable: Id of the parent template for variant children; null otherwise.

## Other responses

- `304`: Unchanged since the supplied ETag.
- `401`: Unauthorized
- `403`: Forbidden
- `404`: No such item in the calling organization.
- `429`: Too Many Requests

---

[API](https://skmtc.dev/flexonthejob/apis/flex-api.md) · [All operations](https://skmtc.dev/flexonthejob/apis/flex-api/llms.txt) · [OpenAPI document](https://skmtc.dev/flexonthejob/apis/flex-api/revisions/19c8f4d27acf?raw)
