Contents
On this page

Update Adjustment - Plugixa Inventory

PUT /plugixa-inventory/v1/adjustments/{id}

Change a draft adjustment, or replace its lines. PATCH does the same.

The user needs the plugixa_inventory_edit capability (administrators have every inventory capability). With Pro Roles and permissions enforcing, their role must also allow editing this adjustment. Needs Plugixa Inventory Pro with the Inventory adjustments app on in Plugixa Inventory -> App Manager; with it off, this route answers 404.

Note. Only the fields you send change, but lines is all or nothing: sending it deletes the existing lines and writes the new list.

A finalized document is frozen. Only reference, reason, details and assigned_user_id can still change. Anything else, including the lines, is refused with 409: post a reversing document instead.

Request

PUT https://your-site.example/wp-json/plugixa-inventory/v1/adjustments/9

Path parameters

Name Type Description
id integer The adjustment’s id

Request body

Content type: application/json

Field Type Required Description
adjustment_type string No addition (the default), damage or subtraction.
warehouse_id integer No A live warehouse.
adjustment_date string No YYYY-MM-DD, optionally followed by a time (HH:MM or HH:MM:SS), in the site’s timezone. Defaults to now. It becomes the date of the ledger rows.
reason string No Plain text, line breaks kept. Becomes the reason on the ledger rows.
reference string No Your own reference, at most 50 characters. Left empty, the document gets ADJ-YYYY-NNNN (year of the document date, id padded to four digits) when it is finalized.
details string No HTML.
assigned_user_id integer No A WordPress user id. Not checked.
lines array No When present, replaces every line. Leave it out to keep the lines as they are.
modified_at string No The modified_at you last read. When the stored value differs, the update is refused with 409 because someone else saved in between. Leave it out to skip the check.

Lines take the same fields as in Create Adjustment.

{
  "reason": "Leak in aisle 4, reported by the night shift",
  "modified_at": "2026-11-12 09:30:00"
}

Responses

200 OK. data is the adjustment with its lines.

{
  "success": true,
  "data": {
    "id": 9,
    "reference": "",
    "adjustment_type": "damage",
    "warehouse_id": 1,
    "adjustment_date": "2026-11-12 10:30:00",
    "status": "draft",
    "finalized_at": null,
    "finalized_by": null,
    "batch_id": "",
    "line_count": 1,
    "total_quantity": 0.0,
    "total_cost": 0.0,
    "reason": "Leak in aisle 4, reported by the night shift",
    "details": "",
    "attachments": null,
    "assigned_user_id": null,
    "created_by": 1,
    "modified_by": 1,
    "created_at": "2026-11-12 09:30:00",
    "modified_at": "2026-11-12 10:15:00",
    "deleted_at": null,
    "lines": [
      {
        "id": 31,
        "adjustment_id": 9,
        "item_id": 42,
        "unit_id": null,
        "quantity": 3.0,
        "cost_per_unit": 4.2,
        "total_cost": 0.0,
        "transaction_id": 0,
        "notes": "Water damage",
        "position": 1,
        "created_by": "1",
        "modified_by": "1",
        "created_at": "2026-11-12 09:30:00",
        "modified_at": "2026-11-12 09:30:00",
        "deleted_at": null,
        "item_name": "Printer paper A4",
        "item_sku": "PAP-A4",
        "item_type": "consumable",
        "unit_code": null
      }
    ],
    "warehouse_name": "Main warehouse"
  }
}
Field Type Meaning
data.lines array The lines as now stored
data.modified_at string UTC datetime of this change

Errors

Status Code When
404 plugixa_inventory_not_found No document with that id, or it is in the trash.
409 plugixa_inventory_document_finalized The document is finalized and the request changes a frozen field or the lines. data.fields lists the frozen fields sent.
422 plugixa_inventory_invalid_choice adjustment_type is not one of the allowed values. data.allowed lists them.
422 plugixa_inventory_invalid_date adjustment_date is not a real date in the accepted form.
422 plugixa_inventory_missing_warehouse warehouse_id is missing.
422 plugixa_inventory_unknown_warehouse warehouse_id is not a live warehouse.
422 plugixa_inventory_too_long A text field is longer than its column. data.field names it and data.max gives the limit.
422 plugixa_inventory_line_needs_item A line has a quantity but no item_id.
422 plugixa_inventory_line_needs_quantity A line has an item_id but no quantity above zero. data.item_id names it.
422 plugixa_inventory_not_a_number A line’s number is not a number. data.line (from 1) and data.item_id say which.
422 plugixa_inventory_negative_number A line’s cost_per_unit (or weight) is negative.
409 plugixa_inventory_conflict You sent modified_at and the record has changed since. data.expected and data.current carry both values.

Plus the errors every endpoint can return.

Examples

curl -s -X PUT "https://your-site.example/wp-json/plugixa-inventory/v1/adjustments/9" \
  -u "admin:$WP_APP_PASSWORD" \
  -H "Content-Type: application/json" \
  -d '{"reason":"Leak in aisle 4, reported by the night shift","modified_at":"2026-11-12 09:30:00"}'
<?php
$ch = curl_init('https://your-site.example/wp-json/plugixa-inventory/v1/adjustments/9');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_USERPWD        => 'admin:' . getenv('WP_APP_PASSWORD'),
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode([
        'reason'      => 'Leak in aisle 4, reported by the night shift',
        'modified_at' => '2026-11-12 09:30:00',
    ]),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
const auth = 'Basic ' + btoa(`admin:${process.env.WP_APP_PASSWORD}`);
const response = await fetch('https://your-site.example/wp-json/plugixa-inventory/v1/adjustments/9', {
  method: 'PUT',
  headers: { 'Authorization': auth, 'Content-Type': 'application/json' },
  body: JSON.stringify({
    reason: 'Leak in aisle 4, reported by the night shift',
    modified_at: '2026-11-12 09:30:00',
  }),
});
const { data } = await response.json();

Quick Links

Share