Staging: carrier-integration-api main at 10b123d. Carriers do not see this version yet.
Introduction

Shipment Statuses

This reference describes all shipment statuses used in the OOH platform. Statuses are emitted in real time as parcels move through the locker lifecycle. Subscribe to status webhooks to track parcel progress and drive your downstream systems accordingly.

Statuses marked ✦ FINAL are terminal — no further transitions will occur once a shipment reaches these states.

1. Booking

These statuses represent the booking request and validation lifecycle, from submission through acceptance or rejection.

BOOKING_PRE_CHECK

The carrier submitted a pre-check probe rather than a full booking request. The platform evaluated locker eligibility but no compartment was reserved and no booking was created. This status exists only to record the probe — it does not initiate a shipment lifecycle. To proceed, a full booking request must be submitted separately.

BOOKING_REQUESTED

The carrier has submitted a booking request. The platform has received it and processing has begun. This is the initial status for every new shipment.

BOOKING_CREATED

The booking was accepted and is now active. For hard-reservation lockers, a compartment is reserved immediately. For soft-reservation lockers, compartment assignment happens at the time of deposit.

BOOKING_CANCELLATION_FAILED

A cancellation request was submitted but could not be completed — for example, because the locker provider rejected it due to a missing compartment reference or a provider-side error. The booking remains active. Retry the cancellation. If failures persist, contact platform support.

BOOKING_EXPIRED

The booking was never acted upon within the allowed window and has expired automatically. The compartment has been released. This typically occurs when the courier never attempted delivery and no explicit cancellation was made. Next event in the history should be BOOKING_CANCELLED.

BOOKING_CANCELLED ✦ FINAL

The booking was successfully cancelled. Any reserved compartment has been released. No further operations are possible on this shipment.


2. Booking Rejections

The booking request was evaluated and rejected. Rejection statuses fall into two groups: non-final rejections allow the same shipment to be corrected and re-evaluated (returning to BOOKING_PRE_CHECK or proceeding to BOOKING_REQUESTED), while final rejections indicate a condition that cannot be resolved within the current booking flow — a new booking request must be submitted.

BOOKING_REJECTED_DIMENSIONS_EXCEED

The parcel dimensions exceed the maximum compartment size available at this locker. No compartment can accommodate this parcel. This is a non-final status — verify the dimensions are in millimetres, correct the shipment data, and resubmit through pre-check or booking request.

BOOKING_REJECTED_INVALID_CONSIGNEE

The consignee data in the booking request is missing or invalid. This is a non-final status — verify that all required consignee fields (name, contact details) are correctly populated and resubmit through pre-check or booking request.

BOOKING_REJECTED_INVALID_LOCKER

The requested locker is not valid — it may not exist on the platform, may have been deactivated, or may not be configured for use by this carrier. This is a non-final status — verify the locker ID and your carrier configuration, then resubmit through pre-check or booking request.

BOOKING_REJECTED_LOCKER_UNAVAILABLE

The locker exists and may have free compartments, but is not currently accepting bookings — for example, it has not been activated for this carrier, is temporarily offline, or has been suspended. This is distinct from the locker being full. This is a non-final status — check the locker's activation status in your carrier portal and resubmit through pre-check or booking request.

BOOKING_REJECTED_NO_ACCESSIBLE_COMPARTMENT

No compartment meeting accessibility requirements is available at this locker. This applies when the booking includes constraints such as maximum height or reach requirements for the consignee. This is a non-final status — the shipment can be resubmitted through pre-check or booking request with a different locker or updated constraints.

BOOKING_REJECTED_LOCKER_IS_FULL ✦ FINAL

All compartments at the locker are currently occupied. No capacity is available for new bookings. Try a different locker, or submit a new booking later once capacity is freed.

BOOKING_REJECTED_NO_FREE_FITTING_COMPARTMENT ✦ FINAL

The locker has general capacity, but no compartment of a suitable size for this parcel's dimensions is currently free. Note that smaller or larger compartments may be available — this rejection is size-specific, not a full-capacity state. Verify dimensions are submitted in millimetres and accurately reflect the parcel. Submit a new booking later when an appropriately sized compartment becomes available.

BOOKING_REJECTED_PROVIDER_ERROR ✦ FINAL

The booking was rejected due to an error on the locker provider's side (e.g. provider API unavailable, circuit breaker open after repeated failures). This is a transient condition — the platform processed the request correctly. Submit a new booking after a short delay. If rejections continue, the provider may be experiencing an outage.


3. Delivery to Locker

These statuses cover the phase where a courier deposits a parcel into the locker (last-mile), or a consignee drops off a return or first-mile parcel.

COURIER_DELIVERED

The courier successfully deposited the parcel in the locker. The compartment is now occupied and secured. For last-mile shipments, the consignee has been notified and their collection code is now active. The parcel is awaiting consignee collection.

CONSIGNEE_DELIVERED

(First-mile shipments only) The consignee has deposited a first-mile parcel in the locker. The parcel is now awaiting courier collection.

COURIER_DELIVERY_LABEL_SCANNED (GLS Germany and GLS Austria only)

The courier scanned the parcel label at the locker touchscreen. This does not confirm that the parcel was deposited. A deposit is confirmed only upon receipt of COURIER_DELIVERED. If the process is interrupted after the label scan — for example due to a locker error or the courier abandoning the session — the booking may eventually expire without a successful deposit.

DELIVERY_COMPARTMENT_BROKEN (GLS Germany and GLS Austria only)

The compartment assigned to this shipment was found to be broken or malfunctioning during the delivery attempt. The courier was unable to deposit the parcel. Escalate to the locker provider for hardware inspection and repair. A new booking may be required.

DELIVERY_COMPARTMENT_OCCUPIED (GLS Germany and GLS Austria only)

The compartment assigned to this booking was unexpectedly found to be already occupied when the courier attempted delivery. The deposit could not proceed. Escalate to the locker provider to investigate the compartment state.

DELIVERY_NOT_POSSIBLE (GLS Germany and GLS Austria only)

The delivery could not be completed for a reason not covered by a more specific status (e.g. general locker error, door failure during deposit). Check provider-side logs. A new booking may be required once the issue is resolved.

DELIVERY_PARCEL_TOO_BIG (GLS Germany and GLS Austria only)

The parcel does not physically fit in the assigned compartment at the time of deposit — confirmed by the courier report. This can occur when dimensions were submitted in centimetres rather than millimetres (causing the parcel to pass eligibility but fail at the locker), or when the actual parcel size differs from the declared dimensions. Verify the declared dimensions are accurate and in millimetres before resubmitting.


4. Collection from Locker

These statuses cover the phase where a parcel is collected — by the consignee (last-mile), or by a courier (first-mile, or last-mile retrieval after the consignee window has closed).

CONSIGNEE_COLLECTED ✦ FINAL

The consignee successfully collected the parcel from the locker using their access code. The compartment has been released. Shipment complete.

CONSIGNEE_COLLECTION_EXPIRED

The consignee did not collect the parcel within the allowed collection window. The parcel remains physically in the locker and the consignee's access code is still valid. This is not a final state — if a courier retrieves the parcel, the shipment will transition to COURIER_COLLECTED_EXPIRED; if the consignee collects the parcel before the courier retrieves it, the shipment will transition to CONSIGNEE_COLLECTED.

COURIER_COLLECTED ✦ FINAL

(First-mile shipments) The courier successfully collected the first-mile parcel deposited by the consignee. The compartment has been released. Shipment complete.

COURIER_COLLECTED_EXPIRED ✦ FINAL

The consignee did not collect within the collection window, and a courier has since retrieved the parcel from the locker. This is the terminal state for last-mile shipments that exceeded the consignee collection window.

COURIER_COLLECTION_LABEL_SCANNED (GLS Germany and GLS Austria only)

The courier scanned the label at the locker as part of the collection process. This does not confirm the parcel has been physically removed. Collection is confirmed only upon receipt of COURIER_COLLECTED or COURIER_COLLECTED_EXPIRED.

COURIER_COLLECTION_LABEL_NOT_AVAILABLE (GLS Germany and GLS Austria only)

The courier attempted to initiate collection but the required label or access information could not be retrieved at the time of the attempt. This may indicate a data synchronisation issue. Contact platform support with the shipment reference and the timestamp of the attempt.

COLLECTION_COMPARTMENT_BROKEN (GLS Germany and GLS Austria only)

The compartment containing the parcel has been reported as broken or malfunctioning during the active collection window. The consignee (or courier) cannot open the door. Escalate immediately to the locker provider for hardware repair.

COLLECTION_NOT_POSSIBLE (GLS Germany and GLS Austria only)

Collection could not be completed for a reason not covered by a more specific status (e.g. general locker error or access system failure during collection attempt). Escalate to the locker provider with the compartment reference and the time of the failed attempt.

COLLECTION_PARCEL_NOT_AVAILABLE (GLS Germany and GLS Austria only)

The parcel is not available for collection — it may have already been collected, removed, or the locker's internal state is inconsistent with the platform record. Escalate to the locker provider with the compartment reference and access log for investigation.

Last modified on