VI | EN
Nhắn Messenger
Dành cho developer

Use this api to batch initiate logistics including arrange pickup, dropoff or shipment for non-integrated logistic channels — API Shopee

v2.logistics.batch_ship_order · gọi qua Quantri360 bằng một API key cho chính tài khoản / tài sản bạn đã kết nối và ủy quyền — 360 lo việc ký request và làm mới phiên đăng nhập bạn đã cấp.

v2.logistics.batch_ship_order

POST/api/v2/logistics/batch_ship_orderGọi qua 360: POST https://partner.quantri360.com/v1/shopee/api/v2/logistics/batch_ship_order
Endpoint ghi — thay đổi dữ liệu trên Shopee. Key phải được tạo với tick "Cho phép gọi API ghi", nếu không sẽ nhận 403 write_not_allowed. Mỗi lần gọi được ghi nhật ký.
Mô tả API

CHỈ BRAZIL (kênh 90003): xác nhận gửi theo lô đơn. Không áp dụng shop VN; shop VN dùng mass_ship_order.

  • Gọi qua /v1/shopee/api/v2/logistics/batch_ship_order với Authorization: Bearer <key>; dùng platform_shop_id khi có nhiều shop. 360 tự gắn partner_id, shop_id, sign và access_token.
  • API GHI: thay đổi dữ liệu thật trên Shopee; cần key có quyền ghi (can_write) và gói mở module Đơn hàng. Khởi tạo vận chuyển cho các đơn trong lô.
  • HTTP 200 vẫn có thể có lỗi nghiệp vụ; kiểm error trước khi dùng kết quả. Kiểm từng phần tử trong fail_list / result_list / fail_error.
  • Thị trường áp dụng: Brazil, kênh 90003. Không áp dụng shop VN; shop VN dùng mass_ship_order.

Request

Địa chỉ

POST https://partner.quantri360.com/v1/shopee/api/v2/logistics/batch_ship_order

Xác thực & gian hàng

TênVị tríKiểuMẫuMô tả
AuthorizationheaderheaderBearer q360_live_ab12cd34_…Khóa API của brand (tạo ở mục API key). Bắt buộc với mọi request. Brand suy từ key — không truyền mã brand.
platform_shop_idquerystring100001Gian hàng (lấy ở GET /v1/platforms → shops[].platform_shop_id). BẮT BUỘC khi brand có > 1 gian hàng trên nền tảng; 360 bỏ tham số này trước khi chuyển tiếp.

Tham số request

TênVị tríKiểuBắt buộcMẫuMô tả
order_listbodyobject[]Có[{"order_sn": "2611040DEMO001", "package_number": "OFG000000000000001"}]Danh sách đơn (tối đa 150).
order_list[].order_snbodystringCó2611040DEMO001Mã đơn hàng.
order_list[].package_numberbodystringKhôngOFG000000000000001Mã kiện; không có thì bỏ trường, không gửi chuỗi rỗng.
pickupbodyobjectKhông{"address_id": 100001, "pickup_time_id": "demo-slot-1", "tracking_number": "SPXVN000000000001"}Bắt buộc nếu info_needed của get_shipping_parameter yêu cầu pickup; vẫn gửi khối dù rỗng.
pickup.address_idbodyint64Không100001Mã địa chỉ lấy từ get_address_list.
pickup.pickup_time_idbodystringKhôngdemo-slot-1Chọn một khung giờ trong time_slot_list; nếu kênh không trả khung giờ thì có thể bỏ, Shopee sẽ sắp xếp thời gian. Lấy từ get_shipping_parameter.
pickup.tracking_numberbodystringKhôngSPXVN000000000001Mã vận đơn do đơn vị vận chuyển cấp; cần gửi khi info_needed yêu cầu tracking_number.
dropoffbodyobjectKhông{"branch_id": 100001, "tracking_number": "SPXVN000000000001"}Bắt buộc nếu info_needed yêu cầu dropoff; vẫn gửi khối dù rỗng. Kênh 80003 / 80004 hỗ trợ Regular và JOB: chọn mã vận đơn cho Regular hoặc sender_real_name cho JOB, không gửi cả hai.
dropoff.branch_idbodyint64Không100001Mã bưu cục lấy từ get_shipping_parameter.
dropoff.sender_real_namebodystringKhôngNgười gửi mẫuHọ tên thật của người gửi.
dropoff.tracking_numberbodystringKhôngSPXVN000000000001Mã vận đơn do đơn vị vận chuyển cấp; cần gửi khi info_needed yêu cầu tracking_number.
non_integratedbodyobjectKhông{"tracking_number": "SPXVN000000000001"}Khối tùy chọn khi info_needed trả non-integrated từ get_shipping_parameter.
non_integrated.tracking_numberbodystringKhôngSPXVN000000000001Mã vận đơn do đơn vị vận chuyển cấp; tùy chọn với non_integrated.

Ví dụ request

curl -s -X POST "https://partner.quantri360.com/v1/shopee/api/v2/logistics/batch_ship_order" \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{"order_list":[{"order_sn":"2611040DEMO001","package_number":"OFG000000000000001"}],"pickup":{"address_id":100001,"pickup_time_id":"demo-slot-1","tracking_number":"SPXVN000000000001"}}'
Python
import requests

KEY = "q360_live_..."  # khóa API của brand
r = requests.post(
    "https://partner.quantri360.com/v1/shopee/api/v2/logistics/batch_ship_order",
    params={},
    json={
        "order_list": [
            {
                "order_sn": "2611040DEMO001",
                "package_number": "OFG000000000000001"
            }
        ],
        "pickup": {
            "address_id": 100001,
            "pickup_time_id": "demo-slot-1",
            "tracking_number": "SPXVN000000000001"
        }
    },
    headers={"Authorization": f"Bearer {KEY}"},
    timeout=60,
)
print(r.status_code)
print(r.json())
Node.js
const KEY = 'q360_live_...'; // khóa API của brand
const url = new URL('https://partner.quantri360.com/v1/shopee/api/v2/logistics/batch_ship_order');
for (const [k, v] of Object.entries({})) url.searchParams.set(k, typeof v === 'object' ? JSON.stringify(v) : String(v));
const r = await fetch(url, {
  method: 'POST',
  headers: { Authorization: `Bearer ${KEY}`, 'Content-Type': 'application/json' },
  body: JSON.stringify({"order_list":[{"order_sn":"2611040DEMO001","package_number":"OFG000000000000001"}],"pickup":{"address_id":100001,"pickup_time_id":"demo-slot-1","tracking_number":"SPXVN000000000001"}}),
});
console.log(r.status, await r.json());
PHP
<?php
$key = 'q360_live_...'; // khóa API của brand
$url = 'https://partner.quantri360.com/v1/shopee/api/v2/logistics/batch_ship_order' . '?' . http_build_query([]);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Bearer ' . $key, 'Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"order_list":[{"order_sn":"2611040DEMO001","package_number":"OFG000000000000001"}],"pickup":{"address_id":100001,"pickup_time_id":"demo-slot-1","tracking_number":"SPXVN000000000001"}}');
$res = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $status, "\n", $res;

Response

Tham số phản hồi (nguyên của Shopee)

Kiểm error / message trước khi dùng kết quả; kiểm lỗi riêng từng phần tử nếu phản hồi có danh sách.

TênKiểuMẫuMô tả
request_idstringd52ca43b277a4f9292fb8be658bfd33dMã request của Shopee để tra lỗi.
errorstringMã lỗi Shopee; rỗng = thành công.
messagestringMô tả lỗi.
warningobject[]Thông tin cảnh báo cần kiểm tra.
order_snstring2611040DEMO001Mã đơn hàng.
package_numberstringOFG000000000000001Mã kiện; không có thì bỏ trường, không gửi chuỗi rỗng.
responseobjectThông tin kết quả.
result_listobject[]Kết quả từng phần.
order_snstring2611040DEMO001Mã đơn hàng.
package_numberstringOFG000000000000001Mã kiện; không có thì bỏ trường, không gửi chuỗi rỗng.
fail_errorstringMã lỗi riêng phần tử.
fail_messagestringChi tiết lỗi riêng phần tử.

Mẫu phản hồi

{
  "error": "",
  "message": "",
  "request_id": "demo-request",
  "response": {
    "result_list": [
      {
        "order_sn": "2611040DEMO001"
      },
      {
        "order_sn": "2611040DEMO001"
      }
    ]
  }
}

Mã lỗi của Shopee (38)

Bấm để xem
MãÝ nghĩa
logistics.error_paramTham số vận chuyển không hợp lệ (vd đơn đang được phân bổ ĐVVC, mã gói trùng) — xem `message`.
common.batch_api_all_failedMọi phần tử trong lô đều lỗi — xem result_list / fail_list.
logistics.error_channel_existKhông tìm thấy kênh giao thực tế của đơn.
logistics.default_warehouse_not_setChưa thiết lập kho.
error_paramTham số sai / thiếu / sai kiểu — xem `message` để biết tham số nào.
error_serverLỗi hệ thống Shopee — thử lại sau ít phút.
logistics.lack_of_invoice_dataThiếu / sai chứng từ hóa đơn của đơn.
logistics.order_prescription_uncheckedĐơn chưa qua kiểm tra toa thuốc.
logistics.package_not_existGói không tồn tại.
logistics.ship_order_invalid_job_paramBắt buộc có sender_real_name hoặc tracking_number.
logistics.ship_order_long_sender_real_namesender_real_name không được dài quá 64 ký tự.
logistics.ship_order_long_tracking_numbertracking_number không được dài quá 64 ký tự.
logistics.ship_order_need_address_pickup_timeBắt buộc có address_id và pickup_time_id.
logistics.ship_order_need_branch_idBắt buộc có branch_id.
logistics.ship_order_need_pacakge_numberĐơn đã tách này bắt buộc gửi package_number.
logistics.ship_order_need_sender_real_namesender_real_name không được để trống.
logistics.ship_order_need_tracking_numbertracking_number không được để trống.
logistics.ship_order_not_need_pacakge_numberĐơn chưa tách này không được gửi package_number.
logistics.ship_order_not_ready_to_shipĐơn chưa sẵn sàng gửi hàng.
logistics.ship_order_only_support_one_typeChỉ chọn một cách giao: pickup, dropoff hoặc non_integrated.
logistics.ship_order_pff_initKhông thể xác nhận gửi đơn do kho xử lý.
logistics.ship_order_pickup_time_invalidMã khung giờ lấy hàng không hợp lệ.
logistics.ship_order_unsupport_dropoffĐơn không hỗ trợ gửi tại điểm gửi.
logistics.ship_order_unsupport_non_integratedĐơn không hỗ trợ kênh không tích hợp.
logistics.ship_order_unsupport_pickupĐơn không hỗ trợ lấy hàng tận nơi.
logistics.invalid_address_versionĐịa chỉ theo địa giới cũ không còn được hỗ trợ — cập nhật địa chỉ gian hàng trên Kênh Người Bán.
error_dataDữ liệu không tồn tại hoặc không hợp lệ cho thao tác (vd mã không có, loại yêu cầu không cho phép).
logistics.error_sender_addressĐịa chỉ lấy hàng không hợp lệ; cần thêm hoặc đánh dấu địa chỉ lấy hàng mới để tiếp tục gửi.
error_shopGian hàng không hợp lệ — kiểm tra platform_shop_id.
error_not_foundKhông tìm thấy đơn / gói / yêu cầu theo mã đã gửi.
error_otherLỗi hệ thống hoặc lỗi đổi lịch từ dịch vụ liên quan — thử lại sau, xem `message`.
error_statusTrạng thái đơn / gói không cho thao tác này (vd đơn đã hủy, gói chưa xác nhận gửi nên chưa in phiếu được).
logistics.warehouse_stock_insufficientKhông phân bổ được kho đủ tồn hàng.
error_authỦy quyền gian hàng cho 360 đã hết hạn hoặc bị thu hồi (360 đã tự làm mới token một lần) — chủ gian hàng kết nối lại Shopee trong Partner.
error_limitChạm hạn mức gọi Shopee trong ngày của kết nối — 360 trả kèm thời điểm thử lại; giảm tần suất gọi.
error_rate_limitGọi quá nhanh — chờ vài giây rồi gọi lại (360 cũng giới hạn theo key: 429 + Retry-After).
shop_bannedGian hàng đang bị Shopee khóa — mọi API tạm ngưng tới khi gỡ khóa.
error_kyc_authGian hàng chưa hoàn tất đăng ký người bán trên Kênh Người Bán.

Bắt đầu dùng

  1. Đăng ký tài khoản Partner
  2. Mở loại dữ liệu thuộc nhóm Đơn hàng ở trang nền tảng
  3. Tạo API key (tick kênh Shopee)
  4. Gọi theo ví dụ ở trên