---
title: "Picks one more unit of a line (the Fulfill page's per-line \"Pick\")."
method: POST
path: "/api/v1/sales-orders/{id}/lines/{lineId}/pick"
tags: ["SalesOrders"]
---

# Picks one more unit of a line (the Fulfill page's per-line "Pick").

`POST /api/v1/sales-orders/{id}/lines/{lineId}/pick`

## Request

- Base URL: `https://app.flexonthejob.com`
- URL: `https://app.flexonthejob.com/api/v1/sales-orders/{id}/lines/{lineId}/pick`
- Auth: HTTP bearer

Requires `ManageSalesOrders` and an `Idempotency-Key` header; no body. Adds 1 to
the line's `quantityPicked` — a line-level count only: no stock unit or transfer
changes (the transfer scan flow is `/pick`). Refused once the line is picked in full.
`orderComplete` says whether every line is now picked.

## Path parameters

- `id` integer, required
- `lineId` integer, required

## Response `200`

Picked; the line's quantities.

- SalesOrderLinePickResponse: Response of the line-level pick endpoints (`/scan`, `/lines/{lineId}/pick`, `/lines/pick-all`, `/lines/{lineId}/picked-quantity`).
  - `salesOrderId` integer: The sales order's id. Example: `318`.
  - `lineId` integer, nullable: The line picked; null for `/lines/pick-all`. Example: `1502`.
  - `itemName` string, nullable: The picked item's name; null for `/lines/pick-all`. Example: `Copper 12/2 Romex`.
  - `quantityPicked` number, double: The line's picked quantity after the call (0 for `/lines/pick-all`). Example: `3`.
  - `quantityOrdered` number, double: The line's ordered quantity (0 for `/lines/pick-all`). Example: `10`.
  - `orderComplete` boolean: `/scan`, `/lines/{lineId}/pick`, `/lines/pick-all`: every line of the order is now picked in full. Always `false` for `picked-quantity`. Example: `false`.
  - `linesUpdated` integer: `/lines/pick-all`: lines raised to their ordered quantity (0 = all were already picked). Example: `2`.
  - `unitsAdded` number, double: `/lines/pick-all`: units added across those lines. Example: `7`.
  - `status` string: The order's status after the call (line picks never change it). Example: `Picking`.
  - `message` string, nullable: Human-readable confirmation, as the app shows it; null for a single scan / pick. Example: `Picking progress saved`.

## Other responses

- `400`: Missing `Idempotency-Key`.
- `401`: Unauthorized
- `403`: Forbidden
- `404`: No such sales order in this organization, or the line is not one of its live lines.
- `409`: The order is `Complete` or `Cancelled` (detail: `Sales order is Cancelled; picking is closed.`), the line is already fully picked (detail: `Item '…' is already fully picked (10/10)`), or the key's creator is unknown.
- `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)
