What is the Patch API?
The Patch API enables partial updates to a resource without replacing the entire record. Instead of sending a complete object, you send only the operations you want to apply, expressed as an ordered array of JSON Patch operations.
Logiwa IO's Patch API follows the JSON Patch standard defined in RFC 6902. Each request body is an array of operation objects that describe exactly what to modify on the target record.
PATCH vs. PUT(Update) — What's the Difference?
| PUT | PATCH |
Sends | The entire updated resource | Only the fields to change |
Missing fields | Overwritten with null / default | Left untouched |
Payload size | Full document every time | Minimal, only what changes |
Use case | Full replacement of a record | Targeted updates to specific fields |
Request Body Structure
Every Patch request body is an array of operation objects. Each object includes:
Field | Description |
| Operation type: |
| JSON Pointer to the target field — e.g. |
| New value (required for |
| Source path (required for |
Operation Types
add / replace - Set a field value (functionally identical in Logiwa)
For add / replace operation types:
Sending an empty value ("", null, or []) clears the field.
For array fields (e.g. imageList, upcList, kitComponentList):
The value you send replaces the entire array.
If you want to add a new item, you must include the existing items alongside the new one — otherwise they will be removed.
[
{
"op": "replace",
"path": "/Identifier",
"value": "3b5bac6b-b0d9-489e-b48e-58c179a8a7d5"
},
{
"op": "replace",
"path": "/FNSKU",
"value": "X001ABC123"
}
]
remove - Clear a field value
[
{
"op": "replace",
"path": "/Identifier",
"value": "3b5bac6b-b0d9-489e-b48e-58c179a8a7d5"
},
{
"op": "remove",
"path": "/FNSKU"
}
]
move - Move a value from one path to another
[
{
"op": "replace",
"path": "/Identifier",
"value": "3b5bac6b-b0d9-489e-b48e-58c179a8a7d5"
},
{
"op": "move",
"from": "/FNSKU",
"path": "/barcode"
}
]
copy - Copy a value from one path to another
[
{
"op": "replace",
"path": "/Identifier",
"value": "3b5bac6b-b0d9-489e-b48e-58c179a8a7d5"
},
{
"op": "copy",
"from": "/description",
"path": "/additionalDescription"
}
]
test - Verify a field value before applying the patch. If the verification fails, the entire patch is rejected.
json
[
{
"op": "replace",
"path": "/Identifier",
"value": "3b5bac6b-b0d9-489e-b48e-58c179a8a7d5"
},
{
"op": "test",
"path": "/isActive",
"value": "true"
},
{
"op": "replace",
"path": "/FNSKU",
"value": "X001ABC123"
}
]
Patch Product
Endpoint: PATCH https://myapi.logiwa.com/v3.1/Product/patch
Use this endpoint to update specific fields on a product record. The target product is identified by including the /Identifier field inside the request body as the first operation.
Example - Identify the product and update FNSKU and active status:
[
{
"value": "3b5bac6b-b0d9-489e-b48e-58c179a8a7d5",
"path": "/Identifier",
"op": "replace"
},
{
"op": "replace",
"path": "/FNSKU",
"value": "X001ABC123"
},
{
"op":
"replace",
"path": "/isActive",
"value": "true"
}
]
Patchable Fields
Legend:
✅ Patchable
✗ Not supported
⚠️ Conditional (see note)
Identification
Field | Patchable | Notes |
| Mandatory | Must be the first operation in every request |
| ✗ |
|
| ✅ |
|
| ✅ |
|
| ✅ |
|
| ✅ |
|
| ✅ |
|
| ✗ |
|
| ✗ |
|
Pricing & Classification
Field | Patchable |
| ✅ |
| ✅ |
| ✅ |
| ✅ |
| ✅ |
| ✅ |
| ✅ |
Pack Type & Dimensions (UOM)
Field | Patchable | Notes |
| ⚠️ | Not editable if stock exists or if the product-pack type combination is present in an open SO/PO line |
| ✅ |
|
| ✅ |
|
| ✅ |
|
| ✅ |
|
| ✅ |
|
| ✅ |
|
| ✅ |
|
| ✅ |
|
| ✅ |
|
Packing Settings
Field | Patchable |
| ✅ |
| ✅ |
| ✅ |
| ✅ |
| ✅ |
| ✅ |
| ✅ |
| ✅ |
| ✅ |
| ✅ |
Lot/Batch, Expiry & Production Date Settings
Field | Patchable | Notes |
| ⚠️ | Not editable if stock exists or if the product-pack type combination is present in an open SO/PO line |
| ⚠️ | Not editable if stock exists or if the product-pack type combination is present in an open SO/PO line |
| ⚠️ | Not editable if stock exists or if the product-pack type combination is present in an open SO/PO line |
Serial Number Settings
Field | Patchable |
| ✅ |
| ✅ |
| ✅ |
| ✅ |
| ✅ |
| ✅ |
| ✅ |
Kit & Components
Field | Patchable | Notes |
| ⚠️ | Editable for kit products only |
| ⚠️ | Editable for kit products only |
| ⚠️ | Editable for kit products only |
| ⚠️ | Kit to Stock products only |
| ⚠️ | Kit to Stock products only |
Irregular Pack Type List
Field | Patchable | Notes |
| ⚠️ | Not editable if stock exists or if the product-pack type combination is present in an open SO/PO line |
| ⚠️ | Not editable if stock exists or if the product-pack type combination is present in an open SO/PO line |
| ✅ |
|
| ✅ |
|
| ✅ |
|
| ✅ |
|
| ✅ |
|
| ✅ |
|
Hierarchical Pack Type List
Field | Patchable | Notes |
| ⚠️ | Not editable if stock exists or if the product-pack type combination is present in an open SO/PO line |
| ⚠️ | Not editable if stock exists or if the product-pack type combination is present in an open SO/PO line |
| ⚠️ | Not editable if stock exists or if the product-pack type combination is present in an open SO/PO line |
| ⚠️ | Not editable if stock exists or if the product-pack type combination is present in an open SO/PO line |
| ✅ |
|
| ✅ |
|
| ✅ |
|
| ✅ |
|
| ✅ |
|
| ✅ |
|
Customs Declaration
Field | Patchable |
| ✅ |
| ✅ |
| ✅ |
| ✅ |
| ✅ |
| ✅ |
| ✅ |
Hazmat
Field | Patchable | Notes |
| ✅ |
|
| ✅ |
|
| ✅ |
|
| ✅ |
|
| ✅ | Values: |
| ✅ | Values: |
| ✅ | Values: |
| ✅ | Values: |
| ✅ | Values: |
| ✅ |
|
Custom Fields & Replenishment
Field | Patchable | Notes |
| ✅ |
|
| ✅ |
|
| ✅ |
|
| ✅ |
|
| ✅ |
|
| ✅ |
|
| ✅ |
|
| ✅ |
|
| ✅ | Values: |
| ✅ |
|
| ✅ |
|
| ✅ |
|
Patch Product Bulk
Endpoint: PATCH https://myapi.logiwa.com/v3.1/Product/patch/bulk
Update fields across multiple products in a single call. Each product is a separate array of operations with /Identifier embedded inside.
Example:
[
[
{ "op": "replace",
"path": "/Identifier",
"value": "3b5bac6b-b0d9-489e-b48e-58c179a8a7d5" },
{ "op": "replace", "path": "/FNSKU",
"value": "X001ABC" }
],
[
{
"op": "replace", "path": "/Identifier",
"value": "a1b2c3d4-0000-1111-2222-abcdef012345" },
{ "op": "replace", "path": "/isActive",
"value": "true"
}
]
]
Patch Shipment Order
Endpoint: PATCH https://myapi.logiwa.com/v3.1/ShipmentOrder/patch/{identifier}
Use this endpoint to update specific fields on a single Shipment Order. The Shipment Order identifier (GUID) is passed directly in the URL path.
Example:
[
{ "op": "replace",
"path": "/carrierId",
"value": "fedex-ground"
},
{
"op": "replace",
"path": "/expectedShipmentDate",
"value": "2026-06-01"
}
]
Editable Fields by Order & Label Status
Field | Open / On Hold | Ready to Pick → Shipped | Label = False | Label = True |
| Non-Editable | Non-Editable | Non-Editable | Non-Editable |
| ✅ | ✅ | ✅ | ✅ |
| ✅ | Non-Editable | ✅ | ✅ |
| ✅ | ✅ | ✅ | Non-Editable |
| ✅ | ✅ | ✅ | Non-Editable |
| ✅ | ✅ | ✅ | Non-Editable |
| ✅ | ✅ | ✅ | Non-Editable |
| ✅ | ✅ | ✅ | ✅ |
| ✅ | ✅ | ✅ | ✅ |
| ✅ | ✅ | ✅ | ✅ |
| ✅ | ✅ | ✅ | ✅ |
| ✅ | ✅ | ✅ | ✅ |
| ✅ | ✅ | ✅ | ✅ |
| ✅ | ✅ | ✅ | ✅ |
| ✅ | ✅ | ✅ | Non-Editable |
| ✅ | ✅ | ✅ | Non-Editable |
| ✅ | Non-Editable | ✅ | Non-Editable |
| ✅ | Non-Editable | ✅ | Non-Editable |
| ✅ | ✅ | ✅ | Non-Editable |
| ✅ | Non-Editable | ✅ | Non-Editable |
| ✅ | Non-Editable | ✅ | Non-Editable |
| ✅ | Non-Editable | ✅ | Non-Editable |
| ✅ | ✅ | ✅ | ✅ |
| ✅ | ✅ | ✅ | ✅ |
| ✅ | ✅ | ✅ | Non-Editable |
| ✅ | ✅ | ✅ | Non-Editable |
| ✅ | ✅ | ✅ | Non-Editable |
| ✅ | ✅ | ✅ | Non-Editable |
| ✅ | ✅ | ✅ | Non-Editable |
| ✅ | ✅ | ✅ | Non-Editable |
| ✅ | ✅ | ✅ | Non-Editable |
| ✅ | ✅ | ✅ | ✅ |
| ✅ | ✅ | ✅ | ✅ |
| ✅ | ✅ | ✅ | ✅ |
| ✅ | ✅ | ✅ | ✅ |
| ✅ | ✅ | ✅ | ✅ |
| ✅ | ✅ | ✅ | ✅ |
Patch Shipment Order Bulk
Endpoint: PATCH https://myapi.logiwa.com/v3.1/ShipmentOrder/patch/bulk
Update specific fields across multiple Shipment Orders in a single call. Each item includes the identifier as a wrapper field alongside the patch operations array.
Example:
[
{
"identifier": "SO-GUID-0001",
"documents":
[
{
"op": "replace",
"path": "/shippingMethodName",
"value": "Ground"
}
]
},
{
"identifier": "SO-GUID-0002",
"patch":
[
{
"op": "replace",
"path": "/shippingMethodName",
"value": "Express"
}
]
}
]
