Korean Carrier Integration Guide: CJ Logistics, Hanjin, Lotte, and More

South Korea has one of the world’s most advanced and competitive domestic logistics markets. With same-day and next-day delivery as the norm, Korean carriers handle over 3.6 billion parcels annually. This guide covers the major Korean carriers, their tracking number formats, and integration best practices.

Korean Carrier Landscape

Major Carriers by Market Share

CarrierCarrier CodeMarket ShareSpecialty
CJ Logistics (CJ대한통운)kr.cjlogistics~45%Largest network, e-commerce focused
Hanjin Express (한진택배)kr.hanjin~15%Strong in B2C, air freight
Lotte Global Logistics (롯데택배)kr.lotte~12%Integrated with Lotte retail
Logen (로젠택배)kr.logen~10%Cost-effective, SMB friendly
Korea Post (우체국택배)kr.post~8%Government-run, nationwide coverage
Daesin (대신택배)kr.daesin~3%Regional specialist
KD Express (경동택배)kr.kdexp~3%Strong in bulk/heavy items

Tracking Number Formats

Korean carriers use distinct tracking number patterns:

CJ Logistics:  12-digit numeric       (e.g., 123456789012)
Hanjin:        12-digit numeric       (e.g., 561234567890)
Lotte:         12-digit numeric       (e.g., 301234567890)
Logen:         11-digit numeric       (e.g., 12345678901)
Korea Post:    13-digit alphanumeric  (e.g., EA123456789KR) — EMS
               13-digit numeric       (e.g., 1234567890123) — Domestic
Daesin:        12-13 digit numeric
KD Express:    12-digit numeric

When building auto-detection, note that CJ Logistics, Hanjin, and Lotte all use 12-digit numbers. Use WhereParcel’s carrier detection to resolve ambiguity:

// Auto-detect carrier from tracking number
const response = await fetch('https://api.whereparcel.com/v2/detect', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    trackingNumber: '561234567890',
  }),
});

// Response: { carriers: ['kr.hanjin', 'kr.cjlogistics'], confidence: { 'kr.hanjin': 0.85 } }

Carrier-Specific Quirks

CJ Logistics

As Korea’s largest carrier, CJ Logistics handles the majority of e-commerce shipments:

  • Tracking updates are frequent — Expect 8-15 events for a typical domestic delivery
  • Sub-terminal tracking — Provides granular sorting facility updates
  • Same-day cutoff — Parcels picked up before 3 PM typically deliver next day
  • API availability — No public API; tracking requires web-based retrieval

Hanjin Express

Hanjin is known for reliable B2C delivery:

  • Status codes are detailed — More granular than most Korean carriers
  • Weekend delivery — Offers Saturday delivery for many routes
  • International integration — Strong partnership with foreign carriers for cross-border
  • Tracking lag — International shipments may have 2-4 hour update delays

Lotte Global Logistics

Lotte’s carrier benefits from the Lotte retail ecosystem:

  • Convenience store pickup — Integration with Lotte convenience stores (GS25, Lotte Mart)
  • Returns network — Strong reverse logistics infrastructure
  • Cold chain — Specialized in temperature-controlled delivery

Korea Post (EMS)

Government-operated with unique characteristics:

  • Official API available — One of the few Korean carriers with a public API
  • International tracking — EMS numbers follow Universal Postal Union format
  • Slower updates — Domestic tracking updates can lag 4-8 hours behind actual status
  • Nationwide reach — Only carrier that delivers to every address in Korea, including remote islands

Tracking Status Mapping

Korean carrier statuses don’t follow a universal standard. Here’s how WhereParcel normalizes them:

Korean Status         → WhereParcel Status
────────────────────────────────────────────
접수                  → picked_up
집화처리              → picked_up
간선상차              → in_transit
간선하차              → in_transit
배달출발              → out_for_delivery
배달완료              → delivered
미배달 (부재)          → delivery_exception
반송                  → returned
통관 중               → customs_clearance

Handling Korean Address Formats

Korean addresses follow a specific structure that differs from Western formats:

Standard format:
[우편번호] [시/도] [시/군/구] [도로명] [건물번호], [상세주소]

Example:
06236 서울특별시 강남구 테헤란로 152, 강남파이낸스센터 20층

Components:
- 06236: Postal code (5 digits since 2015)
- 서울특별시: City/Province
- 강남구: District
- 테헤란로 152: Street name and building number
- 강남파이낸스센터 20층: Building name and floor

When displaying tracking events from Korean carriers, locations are typically in Korean. Consider whether to display them as-is or translate:

// Display location based on user's locale
function formatKoreanLocation(location, userLocale) {
  if (userLocale === 'ko') {
    return location; // 서울 강남구
  }
  // Map common city names
  const cityMap = {
    '서울': 'Seoul',
    '부산': 'Busan',
    '인천': 'Incheon',
    '대구': 'Daegu',
    '대전': 'Daejeon',
  };
  // Return translated city or original
  return translateLocation(location, cityMap) || location;
}

Integration Best Practices

1. Handle Peak Seasons

Korean e-commerce has predictable peak periods:

  • Chuseok (추석) — September/October: 2-3 day delays common
  • Lunar New Year (설날) — January/February: Similar delays
  • 11/11 Singles’ Day — High volume from China-Korea shipments
  • Year-end sales — December: Carrier capacity near maximum

During peaks, extend your delivery estimates and set appropriate customer expectations.

2. Support Korean Time Zone

All Korean carrier timestamps are in KST (UTC+9). Ensure proper timezone handling:

// Korean carrier events are always in KST
function parseKoreanTimestamp(dateString) {
  // Carrier returns: "2026-01-08 14:30:00"
  return new Date(dateString + '+09:00');
}

3. Handle Business Hours

Most Korean carriers operate:

  • Pickup: Monday–Saturday, 9 AM – 6 PM KST
  • Delivery: Monday–Saturday, 9 AM – 9 PM KST
  • No delivery: Sundays and Korean public holidays

4. Leverage WhereParcel for Unified Access

Instead of integrating each carrier separately, use WhereParcel’s unified API:

// Single API call works for all Korean carriers
const tracking = await fetch('https://api.whereparcel.com/v2/track', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    carrier: 'kr.cjlogistics',
    trackingNumber: '123456789012',
  }),
});

Same request format, same response schema — whether you’re tracking with CJ Logistics, Hanjin, Lotte, or any other Korean carrier.

Conclusion

Korea’s carrier ecosystem is mature, fast, and competitive. By understanding each carrier’s strengths and quirks, you can build better shipping experiences for Korean customers. WhereParcel abstracts away the complexity of integrating with 7+ Korean carriers, giving you a single API that handles tracking number detection, status normalization, and real-time updates.

For tracking number format details, see our Understanding Tracking Number Formats guide.