Migrate from legacy API to 2025-07

This guide helps migrate integrations from legacy version to version 2025-07 of the Commerce API.

  • Set the as-store-id header using store.id from GET /stores on 2025-07.
  • Replace source_id with id where applicable in requests, queries, and responses.
  • Orders: remove deprecated fields, apply field renames, and update items.*.unit_price structure.
  • Move order.shipments to the Fulfillment resource.
  • Stores: rename address_line_* to street_*; move latitude/longitude to coordinate.
  • Apply field constraints (values, formats, lengths) listed below.
  • For GET /orders, rename query parameter source_ids to ids.
  • Stop using POST for upsert; use PATCH /{resource}/{id} to update.

The Base URL for the API has been updated. You must update the version in the URL path for all your API requests.

  • as-store-id: Get store.id via GET /stores (2025-07) and pass it as the value of the as-store-id header.
  • For fetching resources created by the API earlier than 2025-04, use the source_id retrieved from the earlier API as the id when calling the 2025-07 API.
  • Endpoints for creating resources no longer accept an existing id.
  • Affected endpoints: POST /orders, POST /products, POST /stores.
  • To update an existing resource, use PATCH /{resource}/{id}.
  • POST /orders
  • GET /orders
  • GET /orders/{order_id}
  • PATCH /orders/{order_id}
PathApplies To
order.delivery_methodPOST /orders: Request body
PathApplies To
order.shipmentsRequest & Response
order.shipping_address.tax_numberRequest & Response
order.shipping_address.source_idRequest & Response
order.shipping_address.descriptionRequest & Response
order.billing_address.tax_numberRequest & Response
order.billing_address.source_idRequest & Response
order.billing_address.descriptionRequest & Response
order.items.*.fulfillable_quantityRequest & Response
Path (Before)Path (After)Applies To
source_idid(Request/Query) & Response
order.shipping_address.address_line_1order.shipping_address.street_1Request & Response
order.shipping_address.address_line_2order.shipping_address.street_2Request & Response
order.shipping_address.address_line_3order.shipping_address.street_3Request & Response
order.billing_address.address_line_1order.billing_address.street_1Request & Response
order.billing_address.address_line_2order.billing_address.street_2Request & Response
order.billing_address.address_line_3order.billing_address.street_3Request & Response
order.items.*.titleorder.items.*.product_titleRequest & Response
order.items.*.source_idorder.items.*.idRequest & Response
items.*.source_product_iditems.*.product_idRequest & Response
items.*.source_variant_iditems.*.product_variant_idRequest & Response
customer.source_idcustomer.idRequest & Response
PathBeforeAfterApplies To
order.items.*.unit_pricenumber{ currency: string, amount: number }Request & Response
  • POST /products
  • GET /products/{product_id}
  • PATCH /products/{product_id}
Path (Before)Path (After)Applies To
source_ididRequest/Query & Response
variants.*.source_idvariants.*.idRequest & Response
  • Fulfillment resource endpoints (refer to API reference)
Order FieldFulfillment FieldDescription
idorder_idOrder resource ID
shipmentstrackingsShipment information
-idThe original fulfillment ID in your system
-typeUse "shipping" for typical non-BOPIS cases
-statusFulfillment status
-line_itemsItems to be fulfilled
-ship_from_locationShip-from location details
  • POST /stores
PathApplies To
store.plan_nameRequest & Response
Path (Before)Path (After)Applies To
store.address.address_line_1store.address.street_1Request & Response
store.address.address_line_2store.address.street_2Request & Response
store.address.address_line_3store.address.street_3Request & Response
Path (Before)Path (After)Applies To
store.address.latitudestore.address.coordinate.latitudeRequest & Response
store.address.longitudestore.address.coordinate.longitudeRequest & Response
FieldTypeBeforeAfter
order_totalNumberNo specific limitationAccepting values >= 0 only.
shipping_totalNumberNo specific limitationAccepting values >= 0 only.
tax_totalNumberNo specific limitationAccepting values >= 0 only.
discount_totalNumberNo specific limitationAccepting values >= 0 only.
subtotalNumberNo specific limitationAccepting values >= 0 only.
items.*.quantityNumberAccepting values < 0 or > 0Accepting values > 0 only.
items.*.unit_weight.valueNumberNo specific limitationAccepting values >= 0 only.
items.*.unit_price.amountNumberNo specific limitationAccepting values >= 0 only.
items.*.discountNumberNo specific limitationAccepting values >= 0 only.
items.*.taxNumberNo specific limitationAccepting values >= 0 only.
items.*.returnable_quantityNumberNo specific limitationAccepting values >= 0 only.
customer.emails[].*StringNo specific limitationMax string length: 256 ; Must be a valid email address following RFC5322.
shipping_address.emailStringMax string length: 254Max string length: 256 ; Must be a valid email address following RFC5322.
billing_address.emailStringMax string length: 254Max string length: 256 ; Must be a valid email address following RFC5322.
FieldTypeBeforeAfter
variants.*.available_quantityNumberNo specific limitationAccepting values >= 0 only.
variants.*.priceNumberNo specific limitationAccepting values >= 0 only.
variants.*.compare_at_priceNumberNo specific limitationAccepting values >= 0 only.
variants.*.weight.valueNumberNo specific limitationAccepting values >= 0 only.
FieldTypeBeforeAfter
support_emailStringMax string length: 254Max string length: 256 ; Must be a valid email address following RFC5322.
owner_emailStringMax string length: 254Max string length: 256 ; Must be a valid email address following RFC5322.