Skip to content

Instantly share code, notes, and snippets.

@azurenekowo
Created September 10, 2025 15:54
Show Gist options
  • Save azurenekowo/0a388f3addc56d82daaf886aad94fa53 to your computer and use it in GitHub Desktop.
Save azurenekowo/0a388f3addc56d82daaf886aad94fa53 to your computer and use it in GitHub Desktop.
Cách lấy thông tin đơn hàng từ spx.vn (API)

Important

API của bên SPX có thể thay đổi bất kỳ lúc nào, this code is provided AS-IS and is for educational purposes.

Tham số bạn cần thay vào là TRACKING_ID (mã vận đơn). Mã này có thể có tiền tố SPXVN (đơn nội địa) hoặc VN (đơn quốc tế - SPX International)

Quickstart

curl 'https://spx.vn/shipment/order/open/order/get_order_info?spx_tn=TRACKING_ID&language_code=vi' \
  -X GET \
  -H 'accept: application/json, text/plain, */*' \
  -H 'accept-language: en-US,en;q=0.9' \
  -H 'cookie: spx_token=0; spx_sid=0; login_status=true; nss_sys_type=true; nss_cid=VN' \
  -H 'dnt: 1' \
  -H 'priority: u=1, i' \
  -H 'referer: https://spx.vn/track' \
  -H 'sec-ch-ua: "Not?A_Brand";v="99", "Chromium";v="XX"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "Windows"' \
  -H 'sec-fetch-dest: empty' \
  -H 'sec-fetch-mode: cors' \
  -H 'sec-fetch-site: same-origin' \
  -H 'sec-gpc: 1' \
  -H 'user-agent: Mozilla/5.0 (Platform) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36'

const url = `https://spx.vn/shipment/order/open/order/get_order_info?spx_tn=${tracking_id}&language_code=vi`;
const options = {
    method: 'GET',
    headers: {
        accept: 'application/json, text/plain, */*',
        'accept-language': 'en-US,en;q=0.9',
        cookie: 'spx_token=0; spx_sid=0; login_status=true; nss_sys_type=true; nss_cid=VN',
        dnt: '1',
        priority: 'u=1, i',
        referer: 'https://spx.vn/track',
        'sec-ch-ua': '"Not?A_Brand";v="99", "Chromium";v="XX"',
        'sec-ch-ua-mobile': '?0',
        'sec-ch-ua-platform': '"Windows"',
        'sec-fetch-dest': 'empty',
        'sec-fetch-mode': 'cors',
        'sec-fetch-site': 'same-origin',
        'sec-gpc': '1',
        'user-agent': 'Mozilla/5.0 (Platform) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36'
    }
}

try {
    const response = await fetch(url, options)
    const data = await response.json()
    // ^^ this is what we are looking for !!
} catch (error) {
    console.error('upstream API error?')
    console.error(error)
}

Demo Response

{
    "retcode": 0,
    "data": {
        "fulfillment_info": {
            "deliver_type": 1
        },
        "sls_tracking_info": {
            "sls_tn": "XXXX",
            "client_order_id": "XXXX",
            "receiver_name": "",
            "receiver_type_name": "",
            "records": [
                {
                    "tracking_code": "F541",
                    "tracking_name": "Loaded to Truck in Sorting Centre",
                    "description": "Đơn hàng đã lên xe trung chuyển",
                    "display_flag": 0,
                    "actual_time": 1757515327,
                    "reason_code": "R00",
                    "reason_desc": "R00",
                    "epod": "",
                    "pin_code": "",
                    "current_location": {
                        "location_name": "",
                        "location_type_name": "",
                        "lng": "",
                        "lat": "",
                        "full_address": ""
                    },
                    "next_location": {
                        "location_name": "",
                        "location_type_name": "",
                        "lng": "",
                        "lat": "",
                        "full_address": ""
                    },
                    "display_flag_v2": 1,
                    "buyer_description": "Đơn hàng đã lên xe trung chuyển",
                    "seller_description": "Đơn hàng đã lên xe trung chuyển",
                    "milestone_code": 5,
                    "milestone_name": "In transit"
                },
                {
                    "tracking_code": "F515",
                    "tracking_name": "Packed in Domestic Sorting Centre",
                    "description": "Đơn hàng đã được phân loại và sẵn sàng trung chuyển đến điểm kế tiếp",
                    "display_flag": 0,
                    "actual_time": 1757484225,
                    "reason_code": "R00",
                    "reason_desc": "R00",
                    "epod": "",
                    "pin_code": "",
                    "current_location": {
                        "location_name": "",
                        "location_type_name": "",
                        "lng": "",
                        "lat": "",
                        "full_address": ""
                    },
                    "next_location": {
                        "location_name": "",
                        "location_type_name": "",
                        "lng": "",
                        "lat": "",
                        "full_address": ""
                    },
                    "display_flag_v2": 1,
                    "buyer_description": "Đơn hàng đã được phân loại và sẵn sàng trung chuyển đến điểm kế tiếp",
                    "seller_description": "Đơn hàng đã được phân loại và sẵn sàng trung chuyển đến điểm kế tiếp",
                    "milestone_code": 5,
                    "milestone_name": "In transit"
                },
                {
                    "tracking_code": "F510",
                    "tracking_name": "Enter Domestic Sorting Center",
                    "description": "Đơn hàng đã đến kho BN A Mega SOC",
                    "display_flag": 1,
                    "actual_time": 1757479429,
                    "reason_code": "R00",
                    "reason_desc": "R00",
                    "epod": "",
                    "pin_code": "",
                    "current_location": {
                        "location_name": "BN A Mega SOC",
                        "location_type_name": "",
                        "lng": "105.972926",
                        "lat": "21.085560",
                        "full_address": "VN Bắc Ninh Thị Xã Từ Sơn Xã Phù Chẩn  Lô số 051/052/053/058/059/060, S ố 6, Đường 5, KCN, Đô thị và Dịch vụ VSIP Bắc Ninh, Xã Phù Chẩn, Thành phố Từ Sơn, Tỉnh Bắc Ninh, Việt Nam"
                    },
                    "next_location": {
                        "location_name": "XXXX",
                        "location_type_name": "",
                        "lng": "XXXX",
                        "lat": "XXXX",
                        "full_address": ""
                    },
                    "display_flag_v2": 13,
                    "buyer_description": "Đơn hàng đã đến kho Phường Phù Chẩn, Bắc Ninh",
                    "seller_description": "Đơn hàng đã đến kho phân loại BN A Mega SOC",
                    "milestone_code": 5,
                    "milestone_name": "In transit"
                },
                {
                    "tracking_code": "F440",
                    "tracking_name": "Enter Domestic First Mile Hub",
                    "description": "Đơn hàng đã đến kho ",
                    "display_flag": 1,
                    "actual_time": 1757478882,
                    "reason_code": "R00",
                    "reason_desc": "R00",
                    "epod": "",
                    "pin_code": "",
                    "current_location": {
                        "location_name": "",
                        "location_type_name": "",
                        "lng": "",
                        "lat": "",
                        "full_address": ""
                    },
                    "next_location": {
                        "location_name": "",
                        "location_type_name": "",
                        "lng": "",
                        "lat": "",
                        "full_address": ""
                    },
                    "display_flag_v2": 13,
                    "buyer_description": "Đơn hàng đã đến bưu cục ",
                    "seller_description": "Đơn hàng đã đến bưu cục ",
                    "milestone_code": 5,
                    "milestone_name": "In transit"
                },
                {
                    "tracking_code": "F450",
                    "tracking_name": "Left Domestic First Mile Hub",
                    "description": "Đơn hàng đã xuất khỏi kho ",
                    "display_flag": 0,
                    "actual_time": 1757470574,
                    "reason_code": "R00",
                    "reason_desc": "R00",
                    "epod": "",
                    "pin_code": "",
                    "current_location": {
                        "location_name": "",
                        "location_type_name": "",
                        "lng": "",
                        "lat": "",
                        "full_address": ""
                    },
                    "next_location": {
                        "location_name": "BN A Mega SOC",
                        "location_type_name": "",
                        "lng": "105.976847",
                        "lat": "21.074560",
                        "full_address": "VN Bắc Ninh Thị Xã Từ Sơn Xã Phù Chẩn  Lô số 051/052/053/058/059/060, S ố 6, Đường 5, KCN, Đô thị và Dịch vụ VSIP Bắc Ninh, Xã Phù Chẩn, Thành phố Từ Sơn, Tỉnh Bắc Ninh, Việt Nam"
                    },
                    "display_flag_v2": 5,
                    "buyer_description": "Đơn hàng đã rời bưu cục",
                    "seller_description": "Đơn hàng đã rời bưu cục ",
                    "milestone_code": 5,
                    "milestone_name": "In transit"
                },
                {
                    "tracking_code": "F441",
                    "tracking_name": "Loaded to Truck in First Mile Hub",
                    "description": "Đơn hàng đã lên xe trung chuyển",
                    "display_flag": 0,
                    "actual_time": 1757470553,
                    "reason_code": "R00",
                    "reason_desc": "R00",
                    "epod": "",
                    "pin_code": "",
                    "current_location": {
                        "location_name": "",
                        "location_type_name": "",
                        "lng": "",
                        "lat": "",
                        "full_address": ""
                    },
                    "next_location": {
                        "location_name": "",
                        "location_type_name": "",
                        "lng": "",
                        "lat": "",
                        "full_address": ""
                    },
                    "display_flag_v2": 1,
                    "buyer_description": "Đơn hàng đã lên xe trung chuyển",
                    "seller_description": "Đơn hàng đã lên xe trung chuyển",
                    "milestone_code": 5,
                    "milestone_name": "In transit"
                },
                {
                    "tracking_code": "F445",
                    "tracking_name": "Packed in First Mile Hub",
                    "description": "Đơn hàng đã được phân loại và sẵn sàng trung chuyển đến điểm kế tiếp",
                    "display_flag": 0,
                    "actual_time": 1757434645,
                    "reason_code": "R00",
                    "reason_desc": "R00",
                    "epod": "",
                    "pin_code": "",
                    "current_location": {
                        "location_name": "",
                        "location_type_name": "",
                        "lng": "",
                        "lat": "",
                        "full_address": ""
                    },
                    "next_location": {
                        "location_name": "",
                        "location_type_name": "",
                        "lng": "",
                        "lat": "",
                        "full_address": ""
                    },
                    "display_flag_v2": 1,
                    "buyer_description": "Đơn hàng đã được phân loại và sẵn sàng trung chuyển đến điểm kế tiếp",
                    "seller_description": "Đơn hàng đã được phân loại và sẵn sàng trung chuyển đến điểm kế tiếp",
                    "milestone_code": 5,
                    "milestone_name": "In transit"
                },
                {
                    "tracking_code": "F440",
                    "tracking_name": "Enter Domestic First Mile Hub",
                    "description": "Đơn hàng đã đến kho 20-HNI Hoang Mai 3 Hub",
                    "display_flag": 1,
                    "actual_time": 1757434518,
                    "reason_code": "R00",
                    "reason_desc": "R00",
                    "epod": "",
                    "pin_code": "",
                    "current_location": {
                        "location_name": "20-HNI Hoang Mai 3 Hub",
                        "location_type_name": "",
                        "lng": "105.821691",
                        "lat": "20.973969",
                        "full_address": "VN Hà Nội Quận Hoàng Mai Phường Đại Kim  Số 32 Đại Từ, Phường Đại Kim, Quận Hoàng Mai, Hà Nội"
                    },
                    "next_location": {
                        "location_name": "BN A Mega SOC",
                        "location_type_name": "",
                        "lng": "105.976847",
                        "lat": "21.074560",
                        "full_address": "VN Bắc Ninh Thị Xã Từ Sơn Xã Phù Chẩn  Lô số 051/052/053/058/059/060, S ố 6, Đường 5, KCN, Đô thị và Dịch vụ VSIP Bắc Ninh, Xã Phù Chẩn, Thành phố Từ Sơn, Tỉnh Bắc Ninh, Việt Nam"
                    },
                    "display_flag_v2": 13,
                    "buyer_description": "Đơn hàng đã đến bưu cục Phường Đại Kim, Hà Nội",
                    "seller_description": "Đơn hàng đã đến bưu cục 20-HNI Hoang Mai 3 Hub",
                    "milestone_code": 5,
                    "milestone_name": "In transit"
                },
                {
                    "tracking_code": "F100",
                    "tracking_name": "Pickup From Domestic Seller",
                    "description": "Đơn vị vận chuyển lấy hàng thành công",
                    "display_flag": 1,
                    "actual_time": 1757417845,
                    "reason_code": "R00",
                    "reason_desc": "R00",
                    "epod": "",
                    "pin_code": "",
                    "current_location": {
                        "location_name": "",
                        "location_type_name": "",
                        "lng": "",
                        "lat": "",
                        "full_address": ""
                    },
                    "next_location": {
                        "location_name": "",
                        "location_type_name": "",
                        "lng": "",
                        "lat": "",
                        "full_address": ""
                    },
                    "display_flag_v2": 13,
                    "buyer_description": "Đơn vị vận chuyển lấy hàng thành công",
                    "seller_description": "Đơn vị vận chuyển lấy hàng thành công",
                    "milestone_code": 5,
                    "milestone_name": "In transit"
                },
                {
                    "tracking_code": "F000",
                    "tracking_name": "Manifested",
                    "description": " Người gửi đang chuẩn bị hàng",
                    "display_flag": 1,
                    "actual_time": 1757412280,
                    "reason_code": "",
                    "reason_desc": "",
                    "epod": "",
                    "pin_code": "",
                    "current_location": {
                        "location_name": "",
                        "location_type_name": "",
                        "lng": "",
                        "lat": "",
                        "full_address": ""
                    },
                    "next_location": {
                        "location_name": "",
                        "location_type_name": "",
                        "lng": "",
                        "lat": "",
                        "full_address": ""
                    },
                    "display_flag_v2": 13,
                    "buyer_description": "Người gửi đang chuẩn bị hàng",
                    "seller_description": " Người gửi đang chuẩn bị hàng",
                    "milestone_code": 1,
                    "milestone_name": "Preparing to ship"
                },
                {
                    "tracking_code": "A000",
                    "tracking_name": "SLSTN Created",
                    "description": "SLSTN đã được tạo, đang gửi yêu cầu đến đối tác vận chuyển",
                    "display_flag": 0,
                    "actual_time": 1757412279,
                    "reason_code": "",
                    "reason_desc": "",
                    "epod": "",
                    "pin_code": "",
                    "current_location": {
                        "location_name": "",
                        "location_type_name": "",
                        "lng": "",
                        "lat": "",
                        "full_address": ""
                    },
                    "next_location": {
                        "location_name": "",
                        "location_type_name": "",
                        "lng": "",
                        "lat": "",
                        "full_address": ""
                    },
                    "display_flag_v2": 0,
                    "buyer_description": "SLSTN đã được tạo, đang gửi yêu cầu đến đối tác vận chuyển",
                    "seller_description": "SLSTN đã được tạo, đang gửi yêu cầu đến đối tác vận chuyển",
                    "milestone_code": 1,
                    "milestone_name": "Preparing to ship"
                }
            ]
        },
        "is_instant_order": false,
        "is_shopee_market_order": true
    },
    "message": "success",
    "detail": "",
    "debug": ""
}

Note

Mình thấy API trả về khá nhiều thứ thừa thãi. Thực tế nếu bạn chỉ cần làm tracking đơn giản thì những event ở dưới là đủ cho bạn filter (tracking_name trong entry của records). Bạn cũng có thể dùng tracking_code, nhìn đỡ bẩn mắt hơn cách mình làm khá nhiều 🙂

  • SLSTN Created / A000: Đơn hàng được tạo và ghi nhận trên hệ thống.
  • Dropoff Done By Domestic Seller / F100: Đơn vị vận chuyển lấy hàng từ người bán.
    • Transit Warehouse Inbound / F200: Như trên, nhưng dành cho đơn hàng quốc tế
  • Enter Domestic Sorting Center / F510: Đơn hàng đang ở kho phân loại (ví dụ như ở miền Bắc là BN B Mega SOC)
  • Enter Last Mile Hub / F599: Đơn hàng tới bưu cục gần người nhận nhất.
  • Delivered / F980: Đơn hàng đã được giao thành công.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment