PATCH /v1/products/bulk applies partial updates to a batch of existing products in a single request. Each item in the batch identifies one product and carries only the fields that changed, so an integration syncing a few attributes across thousands of products no longer has to send a full record per product or fall back to one request per product.
Use it when you’re updating products that already exist. To create or fully upsert products, use Bulk upsert products (POST /v1/products/bulk); to change a single product, use Patch a product.
Field semantics
Each item updates only the fields it includes:- Omitted fields are left unchanged - you don’t need to resend
sku_name,current_price,unit_cost, or any other field you aren’t changing. 0andfalseare preserved as real values, not treated as empty.- An explicit
nullclears a nullable field; it does not clear non-nullable fields.
Per-item outcomes
The batch returns an explicit outcome per item, so a problem with one product doesn’t sink the rest:- Missing products - an identity that doesn’t exist in your organization is reported, not created.
- Invalid changes - a field that fails validation is reported against that item.
- Duplicate identities - the same product appearing twice in one batch is reported rather than applied twice.
Replay and batch size
Replaying the same batch is safe - re-applying an identical partial update is idempotent. Large batches are processed in bounded chunks, so the database work scales with the number of chunks rather than with individual products. Keep each request within the documented batch limit and split larger syncs across several calls; a retried call can repeat a chunk without creating duplicates. Organization isolation and API-key authorization apply exactly as on the other product endpoints: a batch can only read and update products in the authenticated organization.Related
- Patch a product - update a single product
- Bulk upsert products - create or replace products in bulk
- Imports vs. bulk - when to use CSV imports instead

