2027-01
2027-01 Release Notes
Fulfillments
New Endpoints
- GET /api/2027-01/fulfillments/{fulfillment_id}/packages: Lists packages, their shipping information, state, timestamps, and contents. Requires
sales:readscope. - POST /api/2027-01/fulfillments/{fulfillment_id}/packages/fulfill: Fulfills existing
PACKEDpackages by ID. Requiressales:writescope. - PATCH /api/2027-01/fulfillments/{fulfillment_id}/packages/{package_id}: Updates package shipping information, contents, or delivery state. Requires
sales:writescope. - DELETE /api/2027-01/fulfillments/{fulfillment_id}/packages/{package_id}: Deletes a
PACKEDpackage and reverses its packed quantities. Requiressales:writescope and a JSON body containing the current fulfillmentversion.
Behavior changes
Packages group fulfillment items with optional carrier, service, tracking, label, and weight information.
- POST /api/2027-01/fulfillments/{fulfillment_id}/pack creates a
PACKEDpackage even without the optionalpackageshipping block, and returnsdata.package_id. Each successful pack request using the current fulfillment version creates a new package; retrying with the previous version returns409 Conflict. Negative packing corrections are no longer supported; update or delete the package instead. - POST /api/2027-01/fulfillments/{fulfillment_id}/fulfill fulfills unpacked quantities into a new
FULFILLEDpackage with optional shipping information.source_breakdownno longer acceptsquantity_from_packed; it now requires onlyquantity_from_pickedandquantity_from_not_started. When omitted, quantities come from picked-but-unpacked items first, then not-started items. Fulfill packed quantities usingpackages/fulfill. - POST /api/2027-01/fulfillments/fulfill accepts an optional
packageblock only for a sale with exactly one eligible fulfillment and no existing packages. Without a block, it fulfills existingPACKEDpackages and creates a package for each fulfillment's unpacked remainder. - GET /api/2027-01/fulfillments includes
packagesin each summary. Filters and pagination are unchanged.
Package mutations use the fulfillment version for optimistic locking. PATCH line_items replaces the complete contents and must be non-empty; use DELETE to remove a package. Null clears a shipping field. Contents and non-tracking shipping information are editable only while the resulting state is PACKED; tracking information remains editable afterward.
For request examples, shipping-field rules, and migration guidance, see Fulfillments.
Updated 3 days ago
Did this page help you?
