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?