order.shipment.update_tracking_status
Record a canonical tracking fact on a parcel — posted, in_transit, out_for_delivery, delivered, failed_attempt or returned — as reported by whoever watches the carrier (a poller or a webhook app; the kernel never talks to a carrier). Append-only: a correction is a NEW fact. Idempotent by (parcel, status, occurred_at), so an at-least-once poller re-reporting the same fact changes nothing. A ‘delivered’ fact stamps the parcel’s delivered_at when it is not already stamped — one fact, two doors, never two truths.
- Scope:
order.write - System: no
- Reachable from:
POST /v1/commands/order.shipment.update_tracking_status(tenant credential) · MCP toolorder.shipment.update_tracking_status· SDKclient.call('order.shipment.update_tracking_status', …) - Events:
shipment.tracking_updated,shipment.delivered,order.preparing,order.shipped,order.delivered
Input (JSON Schema)
Section titled “Input (JSON Schema)”{ "properties": { "note": { "maxLength": 500, "type": "string" }, "occurred_at": { "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$", "type": "string" }, "order_id": { "minLength": 1, "type": "string" }, "shipment_id": { "minLength": 1, "type": "string" }, "status": { "enum": [ "posted", "in_transit", "out_for_delivery", "delivered", "failed_attempt", "returned" ], "type": "string" } }, "required": [ "order_id", "shipment_id", "status", "occurred_at" ], "type": "object"}Result (200)
Section titled “Result (200)”{ "additionalProperties": false, "properties": { "order_id": { "type": "string" }, "recorded": { "type": "boolean" }, "shipment_id": { "type": "string" }, "status": { "type": "string" } }, "required": [ "order_id", "shipment_id", "status", "recorded" ], "type": "object"}Errors
Section titled “Errors”validation_failed (400) · unauthorized (401) · forbidden (403) · conflict (409) · internal (500)