We’ve refined the Safecube application to make it even more user-friendly and focused on what matters most.

  • Decluttered Interface: Shipment List and Alerts filters are now hidden by default, allowing you to focus on key information without distractions.


  • Easier Access to Settings: Find all settings conveniently under "My Account" by clicking your initials in the top-right corner.

  • Clearer Data Retrieval Insights: When data isn't available instantly, you'll now see clearer explanations. More improvements on this are coming soon!

  • Simplified Navigation: The homepage has been removed. If you don’t have any shipments yet, you’ll be directed to the shipment search page. Otherwise, you’ll go straight to your shipment list.

We’d love to hear your thoughts—your feedback helps us improve. 🚀

Add Shipments to Your Webhooks with Instant Response

We’ve introduced a new endpoint in our webhook API: POST /easy-shipment-asynchronous.

Similar to POST /easy-shipment, this endpoint allows you to add shipments for data updates using the same payload. However, the key difference lies in the response behavior:

  • POST /easy-shipment:

    • Responds with HTTP 200 and includes a body containing the full list of all shipments tracked by all your endpoints.
    • This can take time, leading to delays and potential timeouts.
  • POST /easy-shipment-asynchronous:

    • Responds immediately with HTTP 202 and an empty body.
    • You can then monitor shipment additions asynchronously by listening to:
      • "shipment.added.to.endpoint"
      • "shipment.in.error"

Key Benefits:

  • Faster Response Time: Your request is acknowledged instantly.
  • Improved Stability: Eliminates timeouts caused by waiting for initial shipment data.
  • Asynchronous Monitoring: Stay updated on shipment processing via webhook events.

📖 Learn more:

[PLATFORM]

Attach documents to a shipment

The new Documents feature enables users to attach one or multiple documents to a shipment, providing a centralized space for all workspace members to store and share files such as the Bill of Lading, Shipping Line request transcripts, and more.

What's new

NO_CONTAINERS (200) api responses

When sending a tracking request for a BL or BK reference very early on, it is possible that no container is yet attached to the shipping reference. In this case, the api will send a NO_CONTAINERS response with no data in the payload.

In some cases, while no container number is attached to the shipment, the carrier still shares partial key milestone data such as POL and POD or ETD and ETA.

This data will now be contained in the route object of NO_CONTAINERS api responses.

example of a Yang Ming Booking Reference without Container Data

example of a Yang Ming Booking Reference without Container Data

NO_EVENTS (200) api responses

The same logic applies to NO_EVENTS api responses.

Important Notes:

  • Empty Tables:
    Previously, the containers and containers.events tables were never empty in the API response. They can now be empty if no data is available.

  • New Metadata Warnings:
    To keep you informed, we’ve introduced new warnings in the metadata object:

    • NO_EVENTS: The shipping line shared container data but not event details.
    • NO_CONTAINERS: No container information was received from the shipping line.

These updates ensure greater transparency and more meaningful insights, even when shipping data is incomplete.

Examples

NO_EVENTS

Previous Response:

{
    "errorCode": 200,
    "message": "NO_EVENTS",
    "details": [
        "Request completed successfully. The line provided information on containers, but did not provide information on events"
    ],
    "time": "2025-01-20T10:14:27Z"
}

Updated Response:

{
    "metadata": {
        "shipmentType": "CT",
        "shipmentNumber": "DFSU1942290",
        "sealine": "TXZJ",
        "sealineName": "T.S. Lines",
        "shippingStatus": "UNKNOWN",
        "updatedAt": "2025-01-20T09:03:21Z",
        "warnings": [
            "NO_EVENTS",
            "NO_POL",
            "NO_POD"
        ]
    },
    "locations": [],
    "route": {
        "prepol": {
            "location": null,
            "date": null,
            "actual": null,
            "predictiveEta": null
        },
        "pol": {
            "location": null,
            "date": null,
            "actual": null,
            "predictiveEta": null
        },
        "pod": {
            "location": null,
            "date": null,
            "actual": null,
            "predictiveEta": null
        },
        "postpod": {
            "location": null,
            "date": null,
            "actual": null,
            "predictiveEta": null
        }
    },
    "vessels": [],
    "facilities": [],
    "containers": [
        {
            "number": "DFSU1942290",
            "isoCode": null,
            "status": "UNKNOWN",
            "events": []
        }
    ],
    "routeData": {
        "routeSegments": [],
        "coordinates": null,
        "ais": {
            "status": "NOT_ON_BOARD",
            "data": null
        }
    }
}

NO_CONTAINERS

Previous Response:

{
    "errorCode": 200,
    "message": "NO_CONTAINERS",
    "details": [
        "Request completed successfully. The line did not provide container information"
    ],
    "time": "2025-01-20T10:16:15Z"
}

Updated Response:

{
    "metadata": {
        "shipmentType": "BL",
        "shipmentNumber": "EUKOULAW1993277",
        "sealine": "EUKO",
        "sealineName": "Eukor",
        "shippingStatus": "DELIVERED",
        "updatedAt": "2025-01-20T08:48:22Z",
        "warnings": [
            "NO_CONTAINERS"
        ]
    },
    "locations": [
        {
            "name": "Ulsan",
            "state": "Ulsan",
            "country": "South Korea",
            "countryCode": "KR",
            "locode": "KRUSN",
            "coordinates": {
                "lat": 35.53722,
                "lng": 129.31667
            },
            "timezone": "Asia/Seoul"
        },
        {
            "name": "Antwerp",
            "state": "Flanders",
            "country": "Belgium",
            "countryCode": "BE",
            "locode": "BEANR",
            "coordinates": {
                "lat": 51.22047,
                "lng": 4.40026
            },
            "timezone": "Europe/Brussels"
        }
    ],
    "route": {
        "prepol": {
            "location": null,
            "date": null,
            "actual": null,
            "predictiveEta": null
        },
        "pol": {
            "location": {
                "name": "Ulsan",
                "state": "Ulsan",
                "country": "South Korea",
                "countryCode": "KR",
                "locode": "KRUSN",
                "coordinates": {
                    "lat": 35.53722,
                    "lng": 129.31667
                },
                "timezone": "Asia/Seoul"
            },
            "date": "2024-11-10T00:00:00+09:00",
            "actual": true,
            "predictiveEta": null
        },
        "pod": {
            "location": {
                "name": "Antwerp",
                "state": "Flanders",
                "country": "Belgium",
                "countryCode": "BE",
                "locode": "BEANR",
                "coordinates": {
                    "lat": 51.22047,
                    "lng": 4.40026
                },
                "timezone": "Europe/Brussels"
            },
            "date": "2024-12-31T00:00:00+01:00",
            "actual": true,
            "predictiveEta": null
        },
        "postpod": {
            "location": null,
            "date": null,
            "actual": null,
            "predictiveEta": null
        }
    },
    "vessels": [],
    "facilities": [],
    "containers": [],
    "routeData": {
        "routeSegments": [],
        "coordinates": null,
        "ais": {
            "status": "NOT_ON_BOARD",
            "data": null
        }
    }
}

💡

These 2 cases will translate to webhooks. shipment.added.to.endpoint and shipment.any.change events will be sent.

[PLATFORM]

Faster Access to Shipments with Grouping

The grouping feature has been enhanced for greater flexibility and efficiency.

Now, you can continue using groups to control which shipments your users can view. Additionally, you can create shipment groups as filters to quickly navigate your shipment list.

👍

Organize shipments by product type or end customer for streamlined daily monitoring.

See documentation : Managing users and groups

Improved Data Collection & Status Updates

We’ve enhanced data collection on our platform to ensure better shipment tracking:

  • If data is unavailable at the time a shipment is created, we will retry frequently over the next 2 days to collect it. This ensures your shipments get tracked, even in the case of temporary data collection disruptions.
  • All delivered shipments will now display a status of "delivered," allowing you to easily track them directly from the shipment list.

[PLATFORM]

Assign specific shipments to a group of users

The new Groups feature allows workspace owners to create groups of users and assign specific shipments to each group.

Users in the group can access the details of the assigned shipments in a view-only capacity.

See documentation : Managing users and groups