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

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

v2.logistics.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.ship_order

POST/api/v2/logistics/ship_orderGọi qua 360: POST https://partner.quantri360.com/v1/shopee/api/v2/logistics/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

Khởi tạo vận chuyển cho đơn: lấy hàng tận nơi, gửi tại điểm gửi hoặc giao qua kênh không tích hợp; đọc get_shipping_parameter trước để gửi đúng thông tin.

  • Gọi qua /v1/shopee/api/v2/logistics/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 yêu cầu vận chuyển cho đơn.
  • HTTP 200 vẫn có thể có lỗi nghiệp vụ; kiểm error trước khi dùng kết quả.
  • Chỉ gửi MỘT trong pickup / dropoff / non_integrated theo info_needed của get_shipping_parameter; nếu yêu cầu pickup hoặc dropoff vẫn gửi khối đó dù rỗng. package_number không có thì bỏ trường, không gửi chuỗi rỗng.
  • Nên gọi sau khi đặt đơn 1 giờ vì người mua có thể tự hủy trong 1 giờ đầu. Đơn đã xác nhận gửi chuyển sang get_tracking_number → create_shipping_document để lấy mã vận đơn và in phiếu.
  • Không nhận được phản hồi: đọc get_order_detail trước khi gọi lại.

Request

Địa chỉ

POST https://partner.quantri360.com/v1/shopee/api/v2/logistics/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_snbodystringCó2611040DEMO001Mã đơn hàng.
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_idbodyint64Có100001Mã địa chỉ lấy từ get_shipping_parameter.
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", "slug": "demo-carrier"}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.
dropoff.slugbodystringKhôngdemo-carrierĐối tác gửi hàng được chọn tại điểm gửi; chỉ dành cho Đài Loan, shop VN bỏ trường này.
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/ship_order" \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{"order_sn":"2611040DEMO001","pickup":{"address_id":100001,"pickup_time_id":"demo-slot-1"}}'
Python
import requests

KEY = "q360_live_..."  # khóa API của brand
r = requests.post(
    "https://partner.quantri360.com/v1/shopee/api/v2/logistics/ship_order",
    params={},
    json={
        "order_sn": "2611040DEMO001",
        "pickup": {
            "address_id": 100001,
            "pickup_time_id": "demo-slot-1"
        }
    },
    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/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_sn":"2611040DEMO001","pickup":{"address_id":100001,"pickup_time_id":"demo-slot-1"}}),
});
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/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_sn":"2611040DEMO001","pickup":{"address_id":100001,"pickup_time_id":"demo-slot-1"}}');
$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.

Mẫu phản hồi

{
  "error": "",
  "message": "",
  "request_id": "demo-request"
}

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

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`.
logistics.address_not_foundĐịa chỉ không hợp lệ; kiểm tra lại địa chỉ.
logistics.ADDRESS_NOT_SUPPORTĐịa chỉ không được hỗ trợ.
logistics.address_not_supportedĐịa chỉ không hỗ trợ thao tác này.
logistics.block_buyer_nameTên người mua bị cấm.
logistics.business_process_errorXử lý nghiệp vụ thất bại.
logistics.business_validation_errorKiểm tra nghiệp vụ thất bại.
logistics.buyer_address_not_foundKhông tìm thấy địa chỉ người mua.
logistics.cancel_not_allowedKhông được phép hủy.
logistics.category_prohibitedĐơn có hàng bị cấm.
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.
logistics.error_addressĐịa chỉ không hợp lệ.
logistics.error_limitĐơn chưa xác nhận gửi.
logistics.error_buyer_addressidMã địa chỉ người mua không hợp lệ.
logistics.error_cannot_cancel_logistic_txnGiao dịch vận chuyển hiện tại không hỗ trợ hủy.
logistics.error_connectionKết nối hệ thống bên ngoài thất bại.
logistics.error_consignmentKhông lấy được mã vận đơn.
logistics.error_consignment_no_acceptedKhông được phép cập nhật mã vận đơn.
logistics.error_core_serverGọi hệ thống xử lý thất bại.
logistics.error_otherĐịa chỉ lấy hàng không được hỗ trợ.
logistics.error_cutoff_timeCần kiểm tra lại thời gian lấy hàng.
logistics.error_decimalGiá trị thập phân không hợp lệ.
logistics.error_duplicate_consignmentMã vận đơn bị trùng.
logistics.error_duplicated_consignmentMã vận đơn bị trùng.
logistics.error_expiredĐơn đã hết hạn.
logistics.error_failed_get_nearest_whs_idnKhông lấy được mã kho gần nhất.
logistics.error_not_existĐịa chỉ không tồn tại.
logistics.error_formatĐịnh dạng nội dung từ hệ thống bên ngoài không hợp lệ.
logistics.error_invalid_channel_idMã kênh không hợp lệ.
logistics.error_ipĐịa chỉ IP bị từ chối.
logistics.error_item_not_foundKhông tìm thấy sản phẩm.
logistics.error_loginfoThông tin vận chuyển không hợp lệ.
logistics.error_logistic_txn_not_foundKhông tìm thấy bản ghi vận chuyển.
logistics.error_logistics_shop_require_pickup_addressBắt buộc có địa chỉ lấy hàng.
logistics.error_message_typeLoại thông điệp không hợp lệ.
logistics.error_methodThao tác không được hỗ trợ.
logistics.error_missing_cdtKhông tìm thấy cấu hình CDT.
logistics.error_no_pickupKhông hỗ trợ lấy hàng tận nơi.
logistics.error_no_pickup_addressThiếu địa chỉ lấy hàng.
error_not_foundKhông tìm thấy đơn / gói / yêu cầu theo mã đã gửi.
logistics.error_operation_failedThao tác thất bại.
logistics.error_order_contextThông tin ngữ cảnh đơn không hợp lệ.
logistics.error_order_not_foundKhông tìm thấy đơn.
logistics.error_order_stateTrạng thái đơn hiện tại không cho phép thao tác.
error_paramTham số sai / thiếu / sai kiểu — xem `message` để biết tham số nào.
error_permissionGian hàng không có quyền xem dữ liệu này (vd yêu cầu trả / đơn không thuộc gian hàng).
logistics.error_phoneSố điện thoại không hợp lệ.
logistics.error_pickup_timeThời gian lấy hàng không hợp lệ.
logistics.error_return_tracking_num_not_foundKhông tìm thấy mã vận đơn hoàn.
logistics.error_seller_never_apply_tracking_no_beforeKhông tìm thấy lịch sử yêu cầu mã vận đơn.
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_serverLỗi hệ thống Shopee — thử lại sau ít phút.
logistics.error_set_asf_by_weightKhông thiết lập được phí vận chuyển thực tế.
logistics.error_set_seller_addressKhông thiết lập được địa chỉ người bán.
logistics.error_stateTrạng thái bản ghi vận chuyển hiện tại không hỗ trợ thao tác.
logistics.error_statusTrạng thái bản ghi vận chuyển hiện tại không hỗ trợ thao tác.
logistics.error_store_not_foundKhông tìm thấy cửa hàng.
logistics.error_third_party_serverGọi hệ thống bên ngoài thất bại.
logistics.error_timeoutGọi hệ thống bên ngoài quá thời gian chờ.
logistics.error_tokenToken không hợp lệ.
logistics.error_too_many_invoke_functionKhông lấy được khóa xử lý.
logistics.error_traceno_requiredBắt buộc có mã theo dõi.
logistics.error_unknownLỗi chưa xác định; xem chi tiết lỗi.
logistics.error_unsupportedThao tác không được hỗ trợ.
logistics.error_unsupported_addressĐịa chỉ không được hỗ trợ.
logistics.error_updateCập nhật thất bại.
logistics.error_update_logistic_unsupportedHiện không hỗ trợ cập nhật vận chuyển.
logistics.error_zipcode_not_foundKhông tìm thấy mã bưu chính.
logistics.feature_not_supportedTính năng không được hỗ trợ.
logistics.invalid_sizeKích thước không hợp lệ.
logistics.error_dataTrạng thái cửa hàng chưa khả dụng, đang chờ người mua cập nhật.
logistics.item_is_in_bundleKhông thể tắt kênh vì có sản phẩm trong combo.
logistics.lack_of_invoice_dataThiếu / sai chứng từ hóa đơn của đơn.
lack_of_invoice_dataĐơn còn thiếu dữ liệu hóa đơn nên chưa sắp xếp gửi được.
logistics.logistic_order_is_locked_on_creatingKhông lấy được khóa tạo yêu cầu vận chuyển.
logistics.error_booking_orderĐơn đã ghép với đặt chỗ — không cần xác nhận gửi từ phía người bán.
logistics.max dimension is limitedVượt giới hạn kích thước hoặc khối lượng tối đa.
logistics.missing_cdtThiếu cấu hình CDT.
logistics.no buyer_storeThiếu cửa hàng của người mua.
logistics.no_proportionKhông tìm thấy tỷ lệ.
logistics.not_foundKhông tìm thấy dữ liệu.
logistics.order not foundKhông tìm thấy đơn liên quan.
logistics.order_finalizedĐơn đã ở trạng thái hoàn tất.
logistics.order_has_no_seller_addressĐơn không có địa chỉ người bá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.parcel_amount_over_limitGiá trị đơn vượt giới hạn.
logistics.pickup_whitelist_not_supportedKhông được phép lấy hàng tận nơi.
logistics.pickup_address_unsupportedĐịa chỉ lấy hàng không được hỗ trợ.
logistics.price_errorGiá không hợp lệ.
logistics.quantity_errorSố lượng không hợp lệ.
logistics.RcvStoreId not foundKhông tìm thấy mã cửa hàng nhận.
logistics.seller_address_not_support_codĐịa chỉ người bán không hỗ trợ lấy hàng COD.
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.shop_not_foundKhông tìm thấy gian hàng.
logistics.shop_not_support_wmsGian hàng không hỗ trợ WMS.
common.invalid_shopGian hàng không hợp lệ — kiểm tra platform_shop_id.
logistics.sls calculate failTính phí vận chuyển ước tính thất bại.
logistics.update_not_allowedHiện không được phép cập nhật.
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.
logistics.package_already_shippedKiện đã sắp xếp gửi, không gọi lại API này.
logistics.remove_ofg_from_group_failedTách kiện khỏi nhóm thất bại; thử lại.
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).
error_shopGian hàng không hợp lệ — kiểm tra platform_shop_id.
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