---
title: "Bulk Create Purchase Order"
method: POST
path: "/purchase_orders/bulk"
---

# Bulk Create Purchase Order

`POST /purchase_orders/bulk`

## Request

- Base URL: `https://dc-region.zuperpro.com/api`
- URL: `https://dc-region.zuperpro.com/api/purchase_orders/bulk`
- Auth: API key in header `x-api-key`

Operates on Purchase Orders. In the Zuper client app this module is labeled "Purchase Order" for most companies, and "Material Order" for companies in the roofing industry — the API and data shape are identical either way. Purchase Orders and Work Orders (Service Orders) share the exact same underlying schema and endpoints; they're distinguished only by the `purchase_order_type` field (`PURCHASE_ORDER` here) and the `/purchase_orders` vs `/service_orders` route prefix. Creates multiple orders in one call. Each item in `purchase_orders` uses the exact same field shape as the single Create endpoint's `purchase_order` object (see Create Purchase Order / Create Work Order), just without the outer wrapper key.

## Request body

- object
  - `purchase_orders` object[], required: Non-empty array required.
    - `purchase_order_title` string, required: Required.
    - `vendor` string, required: Vendor UID, required.
    - `payment_term` string, required: Payment term UID, required.
    - `due_date` string, date, required: Required.
    - `line_items` object[], required: Required, non-empty.
    - `delivery_method` 'JOB_ADDRESS' | 'WAREHOUSE' | 'PICKUP': Required for Purchase Order, not required for Work Order.
    - `job` string
    - `estimate` string
    - `asset` string
    - `project` string
    - `material_request` string
    - `parent_po` string
    - `template` string
    - `reference_number` string
    - `remarks` string
    - `purchase_order_date` string, date
    - `delivery_time` 'ANYTIME' | 'MORNING' | 'AFTERNOON' | 'SPECIAL_REQUEST'
    - `ship_to` object
    - `billing_address` object

## Response `200`

200

- object
  - `type` 'success'
  - `title` string: Exact wording is "Purchase Order" for most companies, or "Material Order" for roofing-industry companies.
  - `message` string: Exact wording is "Purchase Order" for most companies, or "Material Order" for roofing-industry companies.
  - `data` object
    - `purchase_order_uids` string[]

## Changes

- **2026-11-03** `3c21bc232e16`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/zuper/apis/zuper-pro-api/changes/purchase_orders/bulk/post.md)

---

[API](https://skmtc.dev/zuper/apis/zuper-pro-api.md) - [All operations](https://skmtc.dev/zuper/apis/zuper-pro-api/llms.txt) - [OpenAPI document](https://skmtc.dev/zuper/apis/zuper-pro-api/revisions/3c21bc232e16?raw)
