> ## Documentation Index
> Fetch the complete documentation index at: https://terminal49.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Ocean carriers

> Ocean carriers (shipping lines / VOCCs) Terminal49 integrates with directly, including SCAC, track-by type, account-enabled lines, and known field gaps.

export const CarrierCoverageTable = ({carriers, access}) => {
  const [query, setQuery] = useState("");
  const [trackBy, setTrackBy] = useState("all");
  const chipClass = isActive => `rounded-full px-3 py-1 text-sm font-medium transition-colors ${isActive ? "bg-green-600 text-white shadow-sm dark:bg-green-500 dark:text-white" : "bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-white/10 dark:text-white/80 dark:hover:bg-white/20"}`;
  const rows = carriers.filter(carrier => access ? carrier.access === access : true).filter(carrier => {
    const haystack = [carrier.name, carrier.legalName, carrier.scac, ...carrier.alternativeScacs || []].join(" ").toLowerCase();
    const matchesQuery = query.trim().length === 0 || haystack.includes(query.trim().toLowerCase());
    const matchesTrack = trackBy === "all" || carrier[trackBy] === true;
    return matchesQuery && matchesTrack;
  });
  const trackByOptions = [{
    key: "all",
    label: "All"
  }, {
    key: "billOfLading",
    label: "Bill of lading"
  }, {
    key: "bookingNumber",
    label: "Booking"
  }, {
    key: "containerNumber",
    label: "Container"
  }];
  const trackBadge = (label, supported) => supported ? <span className="inline-flex items-center rounded-full bg-green-50 px-2 py-0.5 text-xs font-medium text-green-700 dark:bg-green-500/10 dark:text-green-400">
        {label}
      </span> : null;
  return <div className="not-prose space-y-4">
      <input type="search" value={query} onChange={event => setQuery(event.target.value)} placeholder="Search carrier name or SCAC" className="w-full rounded-lg border border-gray-200 bg-white px-3 py-2 text-sm text-gray-900 dark:border-white/10 dark:bg-white/5 dark:text-white" />
      <div className="flex flex-wrap items-center gap-2">
        <span className="text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-white/50">
          Track by
        </span>
        {trackByOptions.map(option => <button key={option.key} type="button" aria-pressed={trackBy === option.key} className={chipClass(trackBy === option.key)} onClick={() => setTrackBy(option.key)}>
            {option.label}
          </button>)}
      </div>
      <p className="text-sm text-gray-500 dark:text-white/50">
        Showing {rows.length} of {carriers.filter(carrier => access ? carrier.access === access : true).length} carriers
      </p>
      <div className="overflow-x-auto rounded-lg border border-gray-200 dark:border-white/10">
        <table className="w-full text-left text-sm">
          <thead className="bg-gray-50 text-gray-600 dark:bg-white/5 dark:text-white/70">
            <tr>
              <th className="px-3 py-2 font-medium">Carrier</th>
              <th className="px-3 py-2 font-medium">SCAC</th>
              <th className="px-3 py-2 font-medium">Track by</th>
            </tr>
          </thead>
          <tbody>
            {rows.map(row => <tr key={row.scac} className="border-t border-gray-100 align-top dark:border-white/10">
                <td className="px-3 py-2">
                  <div className="font-medium text-gray-900 dark:text-white">{row.name}</div>
                  {row.legalName !== row.name ? <div className="text-xs text-gray-500 dark:text-white/50">{row.legalName}</div> : null}
                </td>
                <td className="px-3 py-2">
                  <div className="font-mono text-xs text-gray-900 dark:text-white">{row.scac}</div>
                  {row.alternativeScacs.length > 0 ? <div className="text-xs text-gray-500 dark:text-white/50">
                      Also {row.alternativeScacs.join(", ")}
                    </div> : null}
                </td>
                <td className="px-3 py-2">
                  <div className="flex flex-wrap gap-1">
                    {trackBadge("BOL", row.billOfLading)}
                    {trackBadge("Booking", row.bookingNumber)}
                    {trackBadge("Container", row.containerNumber)}
                  </div>
                </td>
              </tr>)}
          </tbody>
        </table>
      </div>
    </div>;
};

export const carriers = [{
  "name": "ANL",
  "legalName": "Australia National Line",
  "scac": "ANNU",
  "alternativeScacs": [],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": true
}, {
  "name": "APL",
  "legalName": "American President Lines",
  "scac": "APLU",
  "alternativeScacs": [],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": true
}, {
  "name": "Arkas",
  "legalName": "Arkas Container Transport",
  "scac": "ARKU",
  "alternativeScacs": [],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": true
}, {
  "name": "Atlantic Container Line",
  "legalName": "Atlantic Container Line",
  "scac": "ACLU",
  "alternativeScacs": [],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": true
}, {
  "name": "CMA CGM",
  "legalName": "CMA CGM",
  "scac": "CMDU",
  "alternativeScacs": [],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": true
}, {
  "name": "COSCO",
  "legalName": "COSCO",
  "scac": "COSU",
  "alternativeScacs": [],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": false
}, {
  "name": "Crowley",
  "legalName": "Crowley",
  "scac": "CLAM",
  "alternativeScacs": ["CWLQ"],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": false
}, {
  "name": "CULines",
  "legalName": "China United Lines",
  "scac": "CULU",
  "alternativeScacs": [],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": true
}, {
  "name": "Evergreen",
  "legalName": "Evergreen",
  "scac": "EGLV",
  "alternativeScacs": [],
  "access": "public",
  "billOfLading": false,
  "bookingNumber": false,
  "containerNumber": true
}, {
  "name": "Gold Star Line",
  "legalName": "Gold Star Line",
  "scac": "GOSU",
  "alternativeScacs": [],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": false
}, {
  "name": "Hapag-Lloyd",
  "legalName": "Hapag-Lloyd",
  "scac": "HLCU",
  "alternativeScacs": [],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": true
}, {
  "name": "HEDE Shipping",
  "legalName": "HEDE Shipping",
  "scac": "HDUJ",
  "alternativeScacs": [],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": true
}, {
  "name": "HMM",
  "legalName": "Hyundai Merchant Marine",
  "scac": "HDMU",
  "alternativeScacs": [],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": true
}, {
  "name": "ICL",
  "legalName": "Independent Container Line",
  "scac": "IILU",
  "alternativeScacs": [],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": false
}, {
  "name": "KMTC",
  "legalName": "Korea Marine Transport",
  "scac": "KMTU",
  "alternativeScacs": [],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": true
}, {
  "name": "Maersk",
  "legalName": "Maersk",
  "scac": "MAEU",
  "alternativeScacs": [],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": true
}, {
  "name": "Matson",
  "legalName": "Matson Navigation Company",
  "scac": "MATS",
  "alternativeScacs": [],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": false
}, {
  "name": "MSC",
  "legalName": "Mediterranean Shipping Company",
  "scac": "MSCU",
  "alternativeScacs": ["MEDU"],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": true
}, {
  "name": "ONE",
  "legalName": "Ocean Network Express",
  "scac": "ONEY",
  "alternativeScacs": [],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": true
}, {
  "name": "OOCL",
  "legalName": "Orient Overseas Container Line",
  "scac": "OOLU",
  "alternativeScacs": [],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": true
}, {
  "name": "PIL",
  "legalName": "Pacific International Lines",
  "scac": "PCIU",
  "alternativeScacs": [],
  "access": "public",
  "billOfLading": false,
  "bookingNumber": false,
  "containerNumber": true
}, {
  "name": "Safmarine",
  "legalName": "Safmarine Container Line",
  "scac": "SAFM",
  "alternativeScacs": [],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": false
}, {
  "name": "Seaboard Marine",
  "legalName": "Seaboard Marine",
  "scac": "SMLU",
  "alternativeScacs": [],
  "access": "account",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": false
}, {
  "name": "Sealand Americas",
  "legalName": "Sealand Americas",
  "scac": "SEAU",
  "alternativeScacs": ["SEAL"],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": true
}, {
  "name": "Sealand Europe",
  "legalName": "Sealand Europe",
  "scac": "SEJJ",
  "alternativeScacs": [],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": true
}, {
  "name": "SeaLead",
  "legalName": "SeaLead",
  "scac": "SQQY",
  "alternativeScacs": ["SJHH"],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": true
}, {
  "name": "Seth Shipping",
  "legalName": "Seth Shipping",
  "scac": "SSPH",
  "alternativeScacs": [],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": false
}, {
  "name": "SM Line",
  "legalName": "SM Line",
  "scac": "SMLM",
  "alternativeScacs": [],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": false
}, {
  "name": "Swire",
  "legalName": "Swire (includes Westwood)",
  "scac": "SSBF",
  "alternativeScacs": ["WWSU"],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": false
}, {
  "name": "Swire Shipping",
  "legalName": "Swire Shipping",
  "scac": "CHVW",
  "alternativeScacs": ["QWJA", "PLLU"],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": false
}, {
  "name": "Trailer Bridge",
  "legalName": "Trailer Bridge",
  "scac": "TRBR",
  "alternativeScacs": ["TBIE", "PYRR"],
  "access": "account",
  "billOfLading": false,
  "bookingNumber": true,
  "containerNumber": false
}, {
  "name": "Transfar",
  "legalName": "Transfar",
  "scac": "TJFH",
  "alternativeScacs": [],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": false
}, {
  "name": "TS Lines",
  "legalName": "T.S. Lines",
  "scac": "TXZJ",
  "alternativeScacs": [],
  "access": "public",
  "billOfLading": false,
  "bookingNumber": false,
  "containerNumber": true
}, {
  "name": "Turkon",
  "legalName": "Turkon Line",
  "scac": "TRKU",
  "alternativeScacs": [],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": true
}, {
  "name": "Wan Hai",
  "legalName": "Wan Hai Lines",
  "scac": "WHLC",
  "alternativeScacs": [],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": true
}, {
  "name": "World Direct Shipping",
  "legalName": "World Direct Shipping",
  "scac": "WDSB",
  "alternativeScacs": [],
  "access": "public",
  "billOfLading": false,
  "bookingNumber": false,
  "containerNumber": true
}, {
  "name": "Yang Ming",
  "legalName": "Yangming Marine Transport",
  "scac": "YMLU",
  "alternativeScacs": ["YMPR", "YMSG", "YMJA"],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": true
}, {
  "name": "ZIM",
  "legalName": "Zim American Integrated Shipping Services",
  "scac": "ZIMU",
  "alternativeScacs": [],
  "access": "public",
  "billOfLading": true,
  "bookingNumber": true,
  "containerNumber": false
}];

Ocean carriers — also called shipping lines or vessel-operating common carriers (VOCCs) — are the primary source of shipment data. Terminal49 integrates directly with each carrier below and normalizes bill of lading details, bookings, containers, vessel ETAs, and transport milestones into a single API.

Track with a bill of lading number, booking number, or container number, depending on what the carrier supports. Filter the list by name, Standard Carrier Alpha Code (SCAC), or track-by type.

Coverage reflects production as of 14 August 2026. Use [`GET /shipping_lines`](/docs/api-docs/api-reference/shipping-lines/shipping-lines) for the current list on your account.

<Tip>
  Have a tracking number but not the SCAC? The [Auto-Detect
  Carrier](/docs/api-docs/in-depth-guides/auto-detect-carrier) API identifies the carrier for you.
</Tip>

<CarrierCoverageTable carriers={carriers} access="public" />

Westwood shipments are tracked through Swire (`SSBF`); `WWSU` is an alternative SCAC on that line.

## Account-enabled carriers

These carriers are live in production but are not part of the public default set. Contact Terminal49 to enable them on your account before sending tracking requests.

<CarrierCoverageTable carriers={carriers} access="account" />

## Known issues (ocean)

Shipment data comes from the carrier, and some carriers do not publish every field. These are the gaps we see most often:

<AccordionGroup>
  <Accordion title="CMA CGM, APL, ANL">
    No container weight. No container seal number.
  </Accordion>

  <Accordion title="Maersk, Sealand, Safmarine">
    Shipment departure and arrival events are not always available, depending on when the bill of lading is entered. No container seal number.
  </Accordion>

  <Accordion title="MSC">
    No container seal number.
  </Accordion>

  <Accordion title="Hapag-Lloyd">
    No container weight. No container seal number.
  </Accordion>

  <Accordion title="Evergreen">
    All dates are provided as dates, not datetimes. Terminal49 stores them as midnight at the event location when the location is available, otherwise midnight UTC. Only dry, reefer, and flatpack equipment types are mapped.
  </Accordion>

  <Accordion title="COSCO">
    No departure or arrival events. Departure and arrival timestamps can still be present.
  </Accordion>

  <Accordion title="OOCL">
    No container seal number.
  </Accordion>

  <Accordion title="ONE">
    Only dry and reefer equipment types are mapped.
  </Accordion>

  <Accordion title="Yang Ming">
    When a bill of lading has multiple containers, the returned weight is the shipment average (gross weight divided by container count).
  </Accordion>

  <Accordion title="HMM">
    No container type.
  </Accordion>

  <Accordion title="ZIM">
    No container weight. No container seal number.
  </Accordion>

  <Accordion title="Swire / Westwood">
    No container weight. Only dry equipment types are mapped.
  </Accordion>
</AccordionGroup>
