POST /v1/orders//status
After LMN’s responsibility ends (vessel loaded), only the partner can confirm what happens next. This endpoint accepts post-departure fulfillment updates and the terminaldelivered transition.
| Field | Type | Required | Description |
|---|---|---|---|
status | enum | conditional | New order status. Only delivered is partner-permitted. |
fulfillment_detail | enum | conditional | in_transit or customs (partner-owned values). Only one of status or fulfillment_detail per call. |
occurred_at | ISO 8601 with offset | yes | When the event happened, in the event’s local offset (e.g., +01:00 for Lagos events — never bare Z). |
notes | string | null | no | Free-text context for ops. |
Allowed partner-driven changes
| Path | What it does |
|---|---|
shipping order + fulfillment_detail: in_transit | Sub-status update, no state transition. |
shipping order + fulfillment_detail: customs | Sub-status update, no state transition. |
shipping order + status: delivered | Terminal transition. Mandatory — partner MUST push this to close the lifecycle. |
fulfillment_detail values (export_processing, awaiting_pickup) are managed server-side. Partner attempting them returns 403 invalid_status_transition.
Errors
| Code | HTTP | Condition |
|---|---|---|
missing_idempotency_key | 400 | Header absent. |
validation_error | 400 | Bad enum, occurred_at missing offset, both status and fulfillment_detail provided. |
invalid_status_transition | 403 | Partner attempting LMN-owned fulfillment_detail. |
invalid_status_transition | 409 | status: delivered from non-shipping order. details.current_status shows actual state. |
order_not_found | 404 | Unknown order or wrong key. |
SLA expectation
If ashipping order doesn’t receive a delivered push within 90 days, LMN’s ops sends a daily digest reminder + email to the partner contact. Document your handoff process to make sure the push happens.