Purchase Order Update API
Purchase Order APIs
Purchase Order Update API
Update an existing purchase order by its identifier. Only POs in DRAFTED or DECLINED state can be updated.
Purchase Order Update API
Documentation Index
Fetch the complete documentation index at: https://docs.pazy.io/llms.txt
Use this file to discover all available pages before exploring further.
Authentication
All requests require an API key in the request headers. Headers:Request
Content-Type:application/json
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
poId | string | Yes | The unique slug identifier of the purchase order to update (returned from the PO creation or search API) |
Body Parameters
All body fields are optional. Only the fields you provide will be updated.| Parameter | Type | Required | Description |
|---|---|---|---|
poNumber | string | No | Purchase order number (minimum 1 character) |
lineItems | array | No | List of line items. Replaces all existing line items if provided (minimum 1 item) |
poType | string | No | Purchase order type. Valid values: GOODS, SERVICES |
matchingType | string | No | Matching type. Valid values: TWO_WAY, THREE_WAY |
poDate | string | No | Purchase order date in ISO-8601 format (YYYY-MM-DD) |
vendorId | string | No | Slug identifier of the vendor to link to the PO |
description | string | No | Short description for the purchase order (1-255 characters) |
currency | string | No | ISO 4217 currency code (3 characters, e.g., INR) |
paymentTerms | string | No | Free form outline of the agreed payment terms |
deliveryDate | string | No | Requested delivery date in ISO-8601 format (YYYY-MM-DD) |
termsAndConditions | string | No | Terms and conditions for the purchase order |
additionalNotes | string | No | Additional notes for delivery or special requirements |
state | string | No | Target state: DRAFTED or ACTIVE. When ACTIVE is requested the API validates required fields (merging body with what is already on the PO). If all required fields are present the PO is activated; otherwise it stays in DRAFTED and the response includes submitWarnings. |
Line Items Object
Each item in thelineItems array must contain:
| Parameter | Type | Required | Description |
|---|---|---|---|
quantity | number | Yes | Quantity requested for the line item |
rate | number | Yes | Unit rate to be applied to the line item |
identifier | string | Yes | Free-text label for the line item (minimum 1 character) |
skuCode | string | Required for THREE_WAY | Item code of an existing SKU in your inventory. Takes priority over skuName |
skuName | string | Required for THREE_WAY | Name of an existing SKU in your inventory (used when skuCode is not provided) |
SKU matching (THREE_WAY): When the PO usesTHREE_WAYmatching andlineItemsare included in the update, every line item must provideskuCodeorskuName, and it must resolve to an existing SKU. If any line item is missing both fields or cannot be matched, the request is rejected with a400error and the PO is not updated.
Editable States
A purchase order can only be updated when it is in one of the following states:| State | Description |
|---|---|
DRAFTED | PO is in draft — editable |
DECLINED | PO was declined and returned for revision — editable |
PENDING, APPROVED, CLOSED, ARCHIVED) will return a 400 error.
Code Examples
Success Response
HTTP Status:200 OK
Response Fields:
| Field | Type | Description |
|---|---|---|
ok | boolean | Indicates whether the request was successful |
data | object | Contains the update response data |
data.poId | string | Unique slug identifier of the updated purchase order |
data.state | string | Present when state was requested. ACTIVE if activation succeeded, DRAFTED if it fell back |
data.skuMatchWarnings | array | Present when one or more line items could not be matched to a SKU |
data.submitWarnings | object | Present when state: ACTIVE was requested but required fields were missing |
submitWarnings Object
| Field | Type | Description |
|---|---|---|
po | array of strings | PO-level fields that were missing (e.g. "vendorId", "paymentTerms") |
lineItems | object | Map of line item identifier to missing fields (e.g. "quantity", "rate") |
Response Example — update only (no state change)
Response Example — activated (state: "ACTIVE", all fields present)
Response Example — fell back to draft (state: "ACTIVE", fields missing)
Error Responses
SKU Required (THREE_WAY match)
HTTP Status:400 Bad Request
SKU Not Found (THREE_WAY match)
HTTP Status:400 Bad Request
Purchase Order Not Found
HTTP Status:404 Not Found
Invalid State
HTTP Status:400 Bad Request
Invalid Procurement Type
HTTP Status:400 Bad Request
Invalid Matching Type
HTTP Status:400 Bad Request
Invalid Date
HTTP Status:400 Bad Request
Invalid Currency
HTTP Status:400 Bad Request
Vendor Not Found
HTTP Status:404 Not Found
Authentication Errors
HTTP Status:401 Unauthorized
Permission Errors
HTTP Status:403 Forbidden
Internal Error
HTTP Status:500 Internal Server Error
Best Practices
- Only POs in
DRAFTEDorDECLINEDstate can be updated. Check the PO state first using the Purchase Order Details API - All body fields are optional — send only the fields you want to change
- If you provide
lineItems, the entire list of line items will be replaced; ensure you include all intended line items in the request - Use the
poIdreturned from the Purchase Order Creation API or Purchase Order Search API to obtain the identifier - Use ISO 8601 date format (YYYY-MM-DD) for all date fields
- Pass
state: "ACTIVE"to activate a draft PO in the same request as your field updates. Validation merges the body with what is already stored, so you only need to send the fields that are changing — already-set fields on the PO count toward the activation check - Check
submitWarningsin the response whenstate: "ACTIVE"is sent — it identifies any remaining missing fields that prevented activation