Skip to main content

PATCH API

Learn how to make partial updates to Product and Shipment Order records using the Patch API. Covers JSON Patch operations, field editability rules, and request examples for single and bulk endpoints.

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

op

Operation type: add, remove, replace, move, copy, test

path

JSON Pointer to the target field — e.g. /SKU

value

New value (required for add, replace, copy)

from

Source path (required for move, copy)

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

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

identifier

Mandatory

Must be the first operation in every request

clientIdentifier / client

✗

sku

✅

name

✅

description

✅

isActive

✅

kitTypeId

✅

isPackagingMaterial

✗

isDigitalProduct

✗

Pricing & Classification

Field

Patchable

productGroupName

✅

productTypeName

✅

currencyId

✅

purchasePrice

✅

salesPrice

✅

taxRate

✅

minimumSafetyStock

✅

Pack Type & Dimensions (UOM)

Field

Patchable

Notes

uomPackTypeName

⚠️

Not editable if stock exists or if the product-pack type combination is present in an open SO/PO line

uomPackTypeVolumeUnitId

✅

uomPackTypeVolume

✅

uomPackTypeWeightUnitId

✅

uomPackTypeWeight

✅

uomPackTypeDimensionUnitId

✅

uomPackTypeLength

✅

uomPackTypeWidth

✅

uomPackTypeHeight

✅

carrierPackageIdentifier

✅

Packing Settings

Field

Patchable

packingSettings

✅

packingInstructions

✅

isFragile

✅

isOversized

✅

isPoster

✅

isLiquid

✅

isFoldable

✅

isStackable

✅

isUseItemsOwnBoxForShipping

✅

imageList / imageLink

✅

Lot/Batch, Expiry & Production Date Settings

Field

Patchable

Notes

lotBatchNumberSettings

⚠️

Not editable if stock exists or if the product-pack type combination is present in an open SO/PO line

expiryDateSettings

⚠️

Not editable if stock exists or if the product-pack type combination is present in an open SO/PO line

productionDateSettings

⚠️

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

serialNumberSettings

✅

isTrackSerialNumber

✅

isScanSerialNumberDuringPackingOnly

✅

isScanSerialNumberDuringReceivingAndPacking

✅

isScanSecondarySerialNumber

✅

serialNumberRegex

✅

isSkipScanSerialNumber

✅

Kit & Components

Field

Patchable

Notes

kitComponentList

⚠️

Editable for kit products only

componentProductIdentifier

⚠️

Editable for kit products only

quantity

⚠️

Editable for kit products only

kittingInstructions

⚠️

Kit to Stock products only

kittingInstructionsFileUrlList

⚠️

Kit to Stock products only

Irregular Pack Type List

Field

Patchable

Notes

packTypeName

⚠️

Not editable if stock exists or if the product-pack type combination is present in an open SO/PO line

uomRatio

⚠️

Not editable if stock exists or if the product-pack type combination is present in an open SO/PO line

packTypeWeightUnitId / packTypeWeight

✅

packTypeDimensionUnitId / packTypeLength / packTypeWidth / packTypeHeight

✅

packTypeVolumeUnitId / packTypeVolume

✅

upcList

✅

carrierPackageIdentifier

✅

isUseItemsOwnBoxForShipping

✅

Hierarchical Pack Type List

Field

Patchable

Notes

packTypeName

⚠️

Not editable if stock exists or if the product-pack type combination is present in an open SO/PO line

childPackTypeName

⚠️

Not editable if stock exists or if the product-pack type combination is present in an open SO/PO line

childRatio

⚠️

Not editable if stock exists or if the product-pack type combination is present in an open SO/PO line

uomRatio

⚠️

Not editable if stock exists or if the product-pack type combination is present in an open SO/PO line

packTypeWeightUnitId / packTypeWeight

✅

packTypeDimensionUnitId / packTypeLength / packTypeWidth / packTypeHeight

✅

packTypeVolumeUnitId / packTypeVolume

✅

upcList

✅

carrierPackageIdentifier

✅

isUseItemsOwnBoxForShipping

✅

Customs Declaration

Field

Patchable

customsDeclaration

✅

declaredValue

✅

hsTariffCode

✅

originCountryCode

✅

isIgnoreCustomsDeclaration

✅

customsDescription

✅

manufacturer

✅

Hazmat

Field

Patchable

Notes

isHazardous

✅

hazmatIdentificationNumber

✅

hazmatShippingName

✅

hazmatQuantity

✅

hazmatQuantityTypeName

✅

Values: Gross or Net

hazmatQuantityUnitTypeName

✅

Values: Pound, Ounce, Kilogram, Gram, Milliliter, Liter

hazmatTypeName

✅

Values: FR, EQ, LR, LQ, BATTERY, ORMD

hazmatAttributeTypeName

✅

Values: Contains Lithium Ion, Contains Lithium Metal, Packaged Lithium Ion, Packaged Lithium Metal, Lithium Ion Battery Only, Lithium Metal Battery Only

hazmatContainerTypeName

✅

Values: Fiberboard Box, Wooden Box, Plastic Jerrican, Metal Box, Steel Drum, Plastic Box, Plastic Drum, Other, Styrofoam Box, Cylinder, Envirotainer, Plywood Box, Aluminum Drum, Aluminum Cylinder, Plastic Pail, Plywood Drum, Fiber Drum, Steel Jerrican, Aluminum Jerrican, Steel Box, Carton, Aluminum Box

hazmatClassDivisionNumber

✅

Custom Fields & Replenishment

Field

Patchable

Notes

customFieldDateTime1 / 2 / 3

✅

customFieldToggle1 / 2

✅

customFieldDropDown1 / 2

✅

customFieldTextBox1 / 2 / 3

✅

isNonReturnable

✅

returnInstructions

✅

maxReplenishmentLevel

✅

minReplenishmentLevel

✅

replenishmentStrategyName

✅

Values: Global or Per Warehouse

warehouseReplenishmentLevels

✅

warehouseCode

✅

isInsert

✅

Patch Product 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

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

identifier / code / warehouse

Non-Editable

Non-Editable

Non-Editable

Non-Editable

tags

✅

✅

✅

✅

shipmentOrderType

✅

Non-Editable

✅

✅

shipmentAddress

✅

✅

✅

Non-Editable

billingAddress

✅

✅

✅

Non-Editable

customer (Name, Email)

✅

✅

✅

Non-Editable

companyName

✅

✅

✅

Non-Editable

shipmentOrderDate

✅

✅

✅

✅

expectedShipmentDate

✅

✅

✅

✅

expectedDeliveryDate

✅

✅

✅

✅

clientReferenceCode

✅

✅

✅

✅

note / extraNote (1–5)

✅

✅

✅

✅

gift / giftNote

✅

✅

✅

✅

fraud

✅

✅

✅

✅

isSkipAddressVerification

✅

✅

✅

Non-Editable

currencyId

✅

✅

✅

Non-Editable

sku / packType (Line)

✅

Non-Editable

✅

Non-Editable

packQuantity

✅

Non-Editable

✅

Non-Editable

unitPrice / discount / tax

✅

✅

✅

Non-Editable

lotBatchNumber / expiryDate

✅

Non-Editable

✅

Non-Editable

productionDate

✅

Non-Editable

✅

Non-Editable

warehouseLocationCode / licensePlate

✅

Non-Editable

✅

Non-Editable

lineNotes1-3

✅

✅

✅

✅

isPrimeOrder

✅

✅

✅

✅

carrierId / carrier

✅

✅

✅

Non-Editable

shippingOptionIdentifier

✅

✅

✅

Non-Editable

carrierSetupIdentifier

✅

✅

✅

Non-Editable

carrierPackageIdentifier / name

✅

✅

✅

Non-Editable

trackingNumbers

(manual)

✅

✅

✅

Non-Editable

carrierBillingType / account

✅

✅

✅

Non-Editable

taxId / taxTypeName

✅

✅

✅

Non-Editable

retailerDetails

✅

✅

✅

✅

returnInstructions

✅

✅

✅

✅

priority

✅

✅

✅

✅

customFields 1-3

✅

✅

✅

✅

packingInstructions

✅

✅

✅

✅

packingWarningType

✅

✅

✅

✅


Patch Shipment Order 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"
}
]
}
]
Did this answer your question?