Skip to content
v0.3

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 tool order.shipment.update_tracking_status · SDK client.call('order.shipment.update_tracking_status', …)
  • Events: shipment.tracking_updated, shipment.delivered, order.preparing, order.shipped, order.delivered
{
"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"
}
{
"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"
}

validation_failed (400) · unauthorized (401) · forbidden (403) · conflict (409) · internal (500)