Update a purchase order
Scope: inventory:purchase-orders.write https://api.alladdin.com/api/v2/purchase-orders/{purchaseOrderId}
Replaces all mutable fields of an existing purchase order. This is a full replacement — any field you omit will be reset to its default value.
First fetch the purchase order with GET, modify the fields you need, and send back the full object.
Parameters
Path parameters
purchaseOrderId string required
Purchase Order ID (24-char hex ObjectId)
Request body
object number string | null
Custom document number (e.g. the supplier's order reference).
date string<date>
Issue date in ISO 8601 format. Accepts date (YYYY-MM-DD) or datetime (e.g. 2026-01-15T00:00:00+00:00)
due_date string<date> | null
Payment due date in ISO 8601 format. Accepts date (YYYY-MM-DD) or datetime (e.g. 2026-01-15T00:00:00+00:00)
items[] object[]
Line items to include
name string type string | null
Kind of line. product and service are billable lines whose amount (units × price, less discount, plus taxes) is added to the document total. title is a section-header line that shows only its name and carries no amount — it does not contribute to the total. Other values are special-purpose lines. Omit this field for an ordinary priced line item.
Enum: product shipping title rounding refund ecotax wrapping service `` description string | null product_id string | null
Identifier of an existing catalog product to link this line to. The id is stored as a reference associating the line with the product (used for stock and reporting). Each line field (price, taxes, ...) is taken as sent; api2 stores the line values you provide and does not itself read them back from the product record. Leave unset for a free-text line that is not a catalog product.
variant_id string | null
Identifier of the variant of product_id to link this line to. Requires product_id. Leave unset for a line without variant.
units number | null price number | null discount number | null taxes[] string[] | null
Tax keys applied to this line. When omitted, the contact default tax applies, or, if the contact has none, the account default tax when the request asks for it, else no tax.
sku string | null account string | null project_id string | null unit_type string | null supplied boolean | null
Whether this line is a supply expense (suplido) paid on behalf of the client. Excluded from the tax base.
Request
import requests
url = "https://api.alladdin.com/api/v2/purchase-orders/{purchaseOrderId}"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Accept": "application/json",
}
payload = {
"number": "string",
"date": "2026-01-15",
"due_date": "2026-01-31",
"items": [
{
"name": "string",
"type": "product",
"description": "string",
"product_id": "string",
"variant_id": "string",
"units": 0,
"price": 0,
"discount": 0,
"taxes": [
"s_iva_21"
],
"sku": "string",
"account": "string",
"project_id": "string",
"unit_type": "string",
"supplied": false
}
]
}
response = requests.put(url, headers=headers, json=payload)
print(response.json())Responses
Response
{
"id": "string"
}Success responses
200 Purchase order updated application/json object id string
Error responses
400 Bad request application/json 401 Invalid or missing API key application/json 403 Insufficient permissions application/json 404 Purchase order not found application/json 429 Rate limit exceeded application/json
