description:'Requires platform:firstleg:ocean-booking:list. Returns only channels with an ACTIVE price row; the selected channel name is frozen server-side when the offline-confirmed booking is registered.'
description:'Requires platform:firstleg:ocean-booking:list. The operational list exposes only CONFIRMED, CHANGE_PENDING, RELEASED and CANCELLED bookings; DRAFT is internal to the create transaction and legacy SUBMITTED/FAILED values are invalid.'
summary:Register an offline-confirmed ocean booking with complete transport snapshots
description:'Requires platform:firstleg:ocean-booking:create. The booking has already been completed offline, so registration persists it directly as CONFIRMED. RELEASED remains a separate later action.'
summary:Release an already registered booking and synchronize associated cabinet transport snapshots
description:'The transport fields were registered at create time. The request must repeat the same bill of lading, vessel, voyage, ETD and ETA values; mismatches are rejected. This action does not create cabinets, change channels, replace cabinetNo, or recreate loading plans.'
customerId:{type:integer, format:int64, minimum:1, nullable:true, description:Optional customer snapshot; must be supplied together with customerName.}
customerName:{type:string, maxLength:128, nullable:true, description:Optional customer snapshot; must be supplied together with customerId.}
channelCode:{type:string, maxLength:64, description:Selected from GET /api/platform/v1/ocean-bookings/channels; server validates it against the current ACTIVE price book and freezes channelName.}
bookingAgentId:{type:integer, format:int64, minimum:1, nullable:true, description:Optional ACTIVE Warehouse supplier ID validated as BOOKING with INTERNATIONAL scope.}
bookingAgentName:{type:string, maxLength:128, nullable:true, description:Optional consistency hint only; the persisted snapshot always comes from Warehouse and cannot be supplied without bookingAgentId.}