--- title: po.list | Doing Work API description: List purchase orders for the shop, or for one job or supplier, newest first. Owner or office. url: https://doingwork.work/docs/reference/po-list/ --- # po.list List purchase orders for the shop, or for one job or supplier, newest first. Owner or office. | | | |---|---| | Who | Agents can call this | | REST | `GET /v1/purchase-orders` | | MCP tool | `po_list` | | Writes | no | | Area | [Shop](https://doingwork.work/docs/reference/#shop) | ## When to use it List purchase orders for the shop, or for one job or supplier, newest first. Owner or office. ## What to tell the owner Tell them what you found in plain words. Don't read back raw fields. ## Input | Field | Type | Required | |---|---|---| | `shop_id` | string (uuid) | yes | | `job_id` | string (uuid) | no | | `vendor_id` | string (uuid) | no | | `limit` | integer | no | ## Example ```http GET https://doingwork.work/v1/purchase-orders?shop_id=00000000-0000-4000-8000-000000000000 ``` ## Output | Field | Type | Always there | |---|---|---| | `data` | array | yes | | `data[].po_id` | string (uuid) | yes | | `data[].shop_id` | string (uuid) | yes | | `data[].number` | integer | yes | | `data[].vendor_id` | string (uuid) | yes | | `data[].vendor_name` | string | yes | | `data[].job_id` | string (uuid) | yes | | `data[].status` | string (one of draft, ordered, partial, received, cancelled) | yes | | `data[].note` | ['string', 'null'] | yes | | `data[].ordered_at` | ['string', 'null', ' ', '(', 'd', 'a', 't', 'e', '-', 't', 'i', 'm', 'e', ')'] | yes | | `data[].total_minor` | integer | yes | | `data[].received_cost_minor` | integer | yes | | `data[].bill_minor` | ['integer', 'null'] | yes | | `data[].bill_ref` | ['string', 'null'] | yes | | `data[].bill_difference_minor` | ['integer', 'null'] | yes | | `data[].lines` | array | yes | | `data[].lines[].line_id` | string (uuid) | yes | | `data[].lines[].line_no` | integer | yes | | `data[].lines[].name` | string | yes | | `data[].lines[].unit` | string | yes | | `data[].lines[].quantity` | number | yes | | `data[].lines[].unit_cost_minor` | integer | yes | | `data[].lines[].unit_price_minor` | ['integer', 'null'] | yes | | `data[].lines[].taxable` | boolean | yes | | `data[].lines[].received_quantity` | number | yes | | `data[].lines[].cost_minor` | integer | yes | | `data[].lines[].received_cost_minor` | integer | yes | | `data[].created_at` | string (date-time) | yes | ```json { "data": [ { "po_id": "00000000-0000-4000-8000-000000000000", "shop_id": "00000000-0000-4000-8000-000000000000", "number": 1, "vendor_id": "00000000-0000-4000-8000-000000000000", "vendor_name": "...", "job_id": "00000000-0000-4000-8000-000000000000", "status": "draft", "note": "...", "ordered_at": "...", "total_minor": 50000, "received_cost_minor": 50000, "bill_minor": "...", "bill_ref": "...", "bill_difference_minor": "...", "lines": [ { "line_id": "00000000-0000-4000-8000-000000000000", "line_no": 1, "name": "Ruiz Plumbing", "unit": "...", "quantity": "...", "unit_cost_minor": 50000, "unit_price_minor": "...", "taxable": true, "received_quantity": "...", "cost_minor": 50000, "received_cost_minor": 50000 } ], "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/). |