Public tools
Two endpoints that need no API key at all — the same ones behind the free tools. Rate limited per IP so you can try them before talking to anyone.
Rate limits are per IP, per day
Tracking allows 5 lookups per IP per 24 hours; HS classification allows 3. Every response tells you where you stand via remaining_lookups and max_lookups. Exceeding the limit returns 429. These are demonstration endpoints — if you need them at volume, talk to us about a keyed plan.
/api/tools/trackNo authLive container tracking straight from the carrier. The carrier is auto-detected from the container prefix when you don't name one.
Body parameters
tracking_numberstringrequiredContainer number, booking reference or bill of lading number. Uppercased before lookup.
carrier_codestringoptionalSkip auto-detection and query a specific carrier, e.g. MSC, MAEU, CMDU, COSU, ONEY, EGLV.
| Name | Type | Description |
|---|---|---|
tracking_number | stringrequired | Container number, booking reference or bill of lading number. Uppercased before lookup. |
carrier_code | string | Skip auto-detection and query a specific carrier, e.g. MSC, MAEU, CMDU, COSU, ONEY, EGLV. |
Request
curl -X POST https://www.cargomo.de/api/tools/track \ -H "Content-Type: application/json" \ -d '{"tracking_number":"MSCU1234567"}'
Response
{
"success": true,
"carrier_code": "MSCU",
"carrier_name": "MSC",
"booking_data": {
"booking_reference": "MSC-4471902",
"port_of_loading": "SGSIN",
"port_of_discharge": "NLRTM",
"vessel_name": "MSC ISABELLA",
"voyage_number": "436W",
"etd": "2026-09-14",
"eta": "2026-10-08",
"shipper_name": null,
"consignee_name": null,
"commodity_description": null
},
"container_data": [
{ "container_number": "MSCU1234567", "container_type": "40HC" }
],
"events": [
{
"event_name": "Gate in at first POL",
"location": "SGSIN",
"event_datetime": "2026-09-11T06:22:00Z",
"actual": true
}
],
"remaining_lookups": 4,
"max_lookups": 5
}Check success, not just the status code. When a carrier's API is unreachable this endpoint still returns 200 with success: false, a null booking_data and an error string — it does not throw.
Commercial fields — shipper, consignee, commodity, incoterms, contract reference — are always null on this public endpoint, even when the carrier returns them. Use the bookings API for your own shipments in full.
/api/tools/classify-hsNo authClassify goods to HS commodity codes with an AI model, returning ranked candidates with the reasoning behind each.
Body parameters
descriptionstringrequiredPlain-language description of the goods. The more specific — material, use, form — the better the classification.
| Name | Type | Description |
|---|---|---|
description | stringrequired | Plain-language description of the goods. The more specific — material, use, form — the better the classification. |
Request
curl -X POST https://www.cargomo.de/api/tools/classify-hs \ -H "Content-Type: application/json" \ -d '{"description":"stainless steel ball bearings for industrial pumps"}'
Response
{
"suggestions": [
{
"code": "8482.10",
"description": "Ball bearings",
"reasoning": "Ball bearings of any material fall under 8482.10 — the heading covers the bearing itself, not the machine it serves.",
"confidence": 92
},
{
"code": "8482.99",
"description": "Parts of ball or roller bearings",
"reasoning": "Applies only if the goods are components (races, balls) rather than complete bearings.",
"confidence": 41
}
],
"remaining_lookups": 2,
"max_lookups": 3,
"model_used": "google/gemini-3-flash-preview",
"tokens_used": 611
}Suggestions, not rulings. Results are ordered by confidence (0–100) and are a starting point for a human classifier — the legally binding code depends on the destination country's tariff schedule and its own rulings. If the model itself is unavailable the endpoint returns 503.
