Update Purchase Order
PUT/api/purchase-orders/:purchase_order
Update an existing purchase order. All fields are optional (sometimes).
purchase-orders:writeGrant this scope to your token under Settings → Developer → Personal Access Tokens.
Authentication: Requires Bearer token.
Note: Updates acquire a Redis lock to serialize concurrent edits to the same PO. The request blocks for up to 10 seconds waiting for the lock; if the lock still cannot be acquired it returns 409 Conflict.
Update-only fields:
- po_number: alias for purchase_order_number
- purchase_order_lines[].id: ID of existing line to update (omit line from array to delete it)
- financial_lines[].id: ID of existing financial line to update
Cannot reduce line quantity below received or invoiced quantity.
Requires permission: purchase_orders.update
Request
Responses
- 200
- 401
- 403
- 404
- 409
- 422
- 429
OK
Response Headers
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Not found — no record with the given identifier (or the route does not exist). Verify the ID before retrying.
Conflict
Response Headers
Validation failed — the body is a field → messages map (Laravel shape) or the platform envelope with a stable machine-readable code. Fix the payload and resubmit.
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.