--- title: stock.moves | Doing Work API description: Stock history for one tracked material, newest first: every count, receipt, use, return, loss and adjustment with who and when. url: https://doingwork.work/docs/reference/stock-moves/ --- # stock.moves Stock history for one tracked material, newest first: every count, receipt, use, return, loss and adjustment with who and when. | | | |---|---| | Who | Agents can call this | | REST | `GET /v1/stock/moves` | | MCP tool | `stock_moves` | | Writes | no | | Area | [Shop](https://doingwork.work/docs/reference/#shop) | ## When to use it Stock history for one tracked material, newest first: every count, receipt, use, return, loss and adjustment with who and when. ## What to tell the owner Tell them what you found in plain words. Don't read back raw fields. ## Input | Field | Type | Required | |---|---|---| | `pricebook_item_id` | string (uuid) | yes | | `limit` | integer | no | ## Example ```http GET https://doingwork.work/v1/stock/moves?pricebook_item_id=00000000-0000-4000-8000-000000000000 ``` ## Output | Field | Type | Always there | |---|---|---| | `item` | object | yes | | `item.pricebook_item_id` | string (uuid) | yes | | `item.shop_id` | string (uuid) | yes | | `item.name` | string | yes | | `item.unit` | string | yes | | `item.on_hand` | number | yes | | `item.low_at` | ['number', 'null'] | yes | | `item.low` | boolean | yes | | `item.archived` | boolean | yes | | `item.updated_by` | ['string', 'null', ' ', '(', 'u', 'u', 'i', 'd', ')'] | yes | | `item.updated_at` | string (date-time) | yes | | `moves` | array | yes | | `moves[].move_id` | string (uuid) | yes | | `moves[].pricebook_item_id` | string (uuid) | yes | | `moves[].kind` | string | yes | | `moves[].delta` | number | yes | | `moves[].on_hand_after` | number | yes | | `moves[].job_id` | ['string', 'null', ' ', '(', 'u', 'u', 'i', 'd', ')'] | yes | | `moves[].note` | ['string', 'null'] | yes | | `moves[].created_by` | ['string', 'null', ' ', '(', 'u', 'u', 'i', 'd', ')'] | yes | | `moves[].created_by_name` | ['string', 'null'] | yes | | `moves[].created_at` | string (date-time) | yes | ```json { "item": { "pricebook_item_id": "00000000-0000-4000-8000-000000000000", "shop_id": "00000000-0000-4000-8000-000000000000", "name": "Ruiz Plumbing", "unit": "...", "on_hand": "...", "low_at": "...", "low": true, "archived": true, "updated_by": "00000000-0000-4000-8000-000000000000", "updated_at": "..." }, "moves": [ { "move_id": "00000000-0000-4000-8000-000000000000", "pricebook_item_id": "00000000-0000-4000-8000-000000000000", "kind": "...", "delta": "...", "on_hand_after": "...", "job_id": "00000000-0000-4000-8000-000000000000", "note": "...", "created_by": "00000000-0000-4000-8000-000000000000", "created_by_name": "...", "created_at": "..." } ] } ``` ## Errors | Code | Status | What to do | |---|---|---| | `invalid_input`, `invalid_token`, `rate_limited` | | Can happen on any call. See [errors](https://doingwork.work/docs/errors/). |