---
title: "New Purchase Order"
method: POST
path: "/v2/po"
tags: ["Routes", "Purchase Orders"]
---

# New Purchase Order

`POST /v2/po`

This request creates a new Purchase Order.

Parameter: locationID, Type: Int, Required?: Required, Description: The ID of the location this PO will be created for.
Parameter: vendorID, Type: Int, Required?: Required, Description: The ID of the vendor that this PO will be associated with.
Parameter: userID, Type: Int, Required?: Required, Description: The ID of the user that this PO will be assigned to.
Parameter: taskID, Type: Int, Required?: Optional, Description: The ID of the task that this PO will be associated with.
Parameter: budgetID, Type: Int, Required?: Optional, Description: The ID of the budget that this PO will be associated with. If not provided, this will be the location's default budget.
Parameter: date, Type: Int, Required?: Optional, Description: The start time of the PO -- this can be in the past or the future and will still show up in the UI. Must be a unix timestamp. If not provided, this will default to the current time.
Parameter: expectedDate, Type: Int, Required?: Optional, Description: The expected delivery date of this PO. Must be a unix timestamp.
Parameter: requestDescription, Type: String, Required?: Optional, Description: A description of the "request" for this PO.
Parameter: customField1, Type: String, Required?: Optional, Description: PO custom field, the customer chooses which custom fields are available on all POs.
Parameter: customField2, Type: String, Required?: Optional, Description: PO custom field, the customer chooses which custom fields are available on all POs.
Parameter: customField3, Type: String, Required?: Optional, Description: PO custom field, the customer chooses which custom fields are available on all POs.
Parameter: customField4, Type: String, Required?: Optional, Description: PO custom field, the customer chooses which custom fields are available on all POs.
Parameter: customField5, Type: String, Required?: Optional, Description: PO custom field, the customer chooses which custom fields are available on all POs.
Parameter: customField6, Type: String, Required?: Optional, Description: PO custom field, the customer chooses which custom fields are available on all POs.

## Request body

- object
  - `locationID` integer
  - `vendorID` integer
  - `userID` integer
  - `requestDescription` string
  - `date` integer
  - `expectedDate` integer
  - `budgetID` integer
  - `customField1` string
  - `customField2` string
  - `customField3` string

## Response `201`

New Purchase Order

- object
  - `poID` integer
  - `meta` object
    - `items` string
    - `state` string
    - `stateTransitions` string

## Other responses

- `400` — The request was malformed — either invalid JSON syntax or a validation failure (missing required field, wrong type, etc.).
- `401` — No `Authorization` header was provided on the request.
- `403` — The supplied credentials are invalid, the customer account is inactive, or the credentials do not have permission to perform this action.
- `409` — The request conflicts with the current state of the resource (e.g. a uniqueness constraint or a referenced parent that is in the wrong state).
- `429` — The per-minute or per-hour rate limit for this credential and method has been exhausted. Inspect the `X-RateLimit-*` headers to determine when to retry.
- `500` — An unhandled server-side error. The body message is generic (`System unavailable...`) when the underlying cause is a database fault; otherwise it reflects the raised error.

---

[API](https://skmtc.net/limblecmms/apis/limble-api-v2.md) · [All operations](https://skmtc.net/limblecmms/apis/limble-api-v2/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/limblecmms/limble-api-v2/revisions/20801e23f7f2/schema)
