# `order.shipment.track` Record a carrier state transition (webhook/poll/manual) and aggregate the order's fulfillment status. - **scope**: `orders:write` - **storefront-visible** (bumps the catalog generation): no - **destructive**: no ## Payload | field | type | required | notes | |---|---|---|---| | `shipmentId` | string (/^shp_[a-zA-Z0-9]{1,32}$/) | yes | | | `status` | "label_ready" \| "picked_up" \| "in_transit" \| "out_for_delivery" \| "delivered" \| "undelivered" \| "returned" | yes | | | `providerStatusCode` | string (≤60 chars) | no | | | `occurredAt` | string | no | | ### JSON Schema ```json { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "shipmentId": { "type": "string", "pattern": "^shp_[a-zA-Z0-9]{1,32}$" }, "status": { "type": "string", "enum": [ "label_ready", "picked_up", "in_transit", "out_for_delivery", "delivered", "undelivered", "returned" ] }, "providerStatusCode": { "type": "string", "minLength": 1, "maxLength": 60 }, "occurredAt": { "type": "string" } }, "required": [ "shipmentId", "status" ], "additionalProperties": false } ```