---
title: "Purchase Order - Create"
method: POST
path: "/purchase_order/create"
tags: ["purchase_order"]
---

# Purchase Order - Create

`POST /purchase_order/create`

August 2023: Now supports item_id, kit_id, sku (SKULabs Kit or Item), mpn (Supplier MPN), or barcode (SKULabs Kit or Item barcode) as lookup fields in the item array.

## Request body

- object
  - `number` string, required — PO number
  - `store_id` string — Store ID
  - `distributor_id` string — Distributor ID
  - `warehouse_id` string — Warehouse ID
  - `items` PurchaseOrderItem[] — Line items
    - `item_id` string — Item ID
    - `kit_id` string — Kit ID (when the PO line is a kit)
    - `sku` string — Item SKU
    - `name` string — Item name
    - `quantity` number — Ordered quantity
    - `received` number — Received quantity
    - `cost` number — Unit cost
    - `rate` number — Unit rate
    - `type` 'item' | 'kit' — Line item type
    - `serial_numbers` string[] — Serial/lot numbers received
    - `description` string — Item description/notes
    - `unit` string — Unit of measure
  - `subtotal` number — Subtotal
  - `tax` number — Tax amount
  - `tax_per` number — Tax percentage
  - `total` number — Total
  - `memo` string — Memo
  - `terms` string — Payment terms
  - `shipping` number — Shipping cost
  - `method` string — Payment method
  - `discount` number — Discount amount
  - `discount_per` number — Discount percentage
  - `dropship_address` object — Dropship address
  - `status` 'closed' | 'created' | 'receiving' | 'acknowledged' | 'sent' | 'edited' | 'transit' | 'accepting' — Initial PO status
  - `due_date` string, date — Due date
  - `dropshipped` boolean — Dropshipped flag

## Response `200`

Purchase order created

- object
  - `success` boolean, required — Whether the operation succeeded
  - `_id` string — ID of the created purchase order
  - `number` union — PO number (may be auto-generated)
    - string
    - number
  - `errors` string[] — Array of validation error messages
  - `add_results` unknown[] — Results from auto-adding serial numbers (pallet processing)
    - unknown
  - `skulabs_warning` object — Non-fatal warning from background operations

## Other responses

- `400` — Bad request
- `401` — Unauthorized
- `403` — Forbidden. Insufficient permissions.
- `429` — Too many requests. Rate limit exceeded.
- `500` — Internal server error.

---

[API](https://skmtc.net/skulabs/apis/skulabs-api.md) · [All operations](https://skmtc.net/skulabs/apis/skulabs-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/skulabs/skulabs-api/revisions/4b5ec0ed78a6/schema)
