Skip to main content

API đăng đơn hàng

Đối tác gửi danh sách đơn hàng sang hệ thống của OMS thông qua APIs. Sau khi các đơn hàng được lưu thành công vào hệ thống của OMS, hệ thống sẽ trả về danh sách đơn hàng tương ứng chứa các thông tin liên quan của mỗi đơn hàng.

Đường dẫn

POST /api/v1/orders

Headers

Authorization: Bearer {JWT}
X-Client-Source: {PARTNER_CODE}
Content-Type: application/json
curl --location '{{url}}/api/v1/orders' \
--header 'Authorization: Bearer {{token}}' \
--header 'X-Client-Source: mwg' \
--header 'Content-Type: application/json' \
--data-raw '{
"delivery": {
"name": "Trần Thị B",
"address": "Trường Đại học Quốc gia Hà Nội",
"province": "Hà Nội",
"ward": "Phường Cầu Giấy",
"hamlet": "Khác",
"tel": "0912345678",
"email": "tran.b@example.com",
"work_shift": 2,
"date": "2025-08-01",
"method": "xteam"
},
"pickup": {
"name": "Nguyễn Văn A",
"address_id": "ADDR001",
"address": "Số 97 ngõ 14 Mễ Trì Hạ",
"province": "Hà Nội",
"ward": "Phường Từ Liêm",
"tel": "0901234567",
"email": "nguyenvana@example.com",
"work_shift": 1,
"date": "2025-07-30",
"method": "cod"
},
"items": [
{
"name": "Áo thun",
"price": 200000,
"weight": 0.3,
"quantity": 2,
"code": "TSHIRT001"
},
{
"name": "Quần jeans",
"price": 400000,
"weight": 0.8,
"quantity": 1,
"code": "JEANS123"
}
],
"order": {
"partner_id": "MGW_ORDER_1",
"service_type": 1,
"cod_amount": 100000,
"note": "Giao giờ hành chính",
"is_freeship": 1,
"weight_option": "kilogram",
"total_weight": 1.4,
"label_id": "LBL001",
"expired": "2025-08-10T17:00:00+07:00",
"declared_value": 500000,
"opm": 0,
"actual_transfer_method": "fly",
"transport": "road",
"tags": [
"fragile",
"new_customer"
],
"sub_tags": [
"plant",
"bonsai"
]
},
"metadata": {
"delivery_instructions": "Gọi trước 5 phút khi giao"
},
"txid": "ABCD123456"
}'

Các tham số

Tham sốBắt buộcKiểu dữ liệuMô tả
pickupyesobjectThông tin điểm lấy hàng
deliveryyesobjectThông tin điểm giao hàng
itemsyesarrayThông tin sản phẩm
orderyesobjectCác thông tin của đơn hàng
use_return_addressnointegerInteger - mặc định là 0. Field này có thể truyền vào một trong hai giá trị 0 hoặc 1. Bằng 0 nghĩa là địa chỉ trả hàng giống địa chỉ lấy hàng nên các field địa chỉ trả hàng không cần truyền qua. Bằng 1 nghĩa là sử dụng địa chỉ trả hàng khác địa chỉ lấy hàng và cần truyền vào giá trị cho các field tiếp theo
returnnoobjectThông tin điểm trả hàng
metadatanoobjectCác thông tin thêm
txidnostringMã tracing request

Tham số pickup - Thông tin điểm lấy hàng

Tham sốBắt buộcKiểu dữ liệuMô tả
nameyesstringTên người liên hệ lấy hàng hóa
address_idyesintegerID địa điểm lấy hàng từ trang quản lý của khách hàng
last_updateyesStringThời gian cuối cùng update địa chỉ (yyyy-MM-dd HH:mm:ss)
addressyesstringĐịa chỉ chi tiết lấy hàng (VD nhà số 5, tổ 3, ngách 11, ngõ 45)
latnonumberVĩ độ của điểm lấy hàng
lngnonumberKinh độ của điểm lấy hàng
provinceyesstringTỉnh/Thành phố lấy hàng
wardyesstringPhường/xã lấy hàng (bắt buộc khi không có street)
streetyesstringĐường/phố lấy hàng (bắt buộc khi không có ward)
telyesstringSố điện thoại nơi lấy hàng
emailnostringEmail nơi lấy hàng
work_shiftnointegerCa lấy hàng (1 = sáng, 2 = chiều, 3 = tối)
datenostringNgày lấy hàng (YYYY-MM-DD, yêu cầu cấu hình riêng)
methodnostringHình thức lấy hàng ([cod, post] COD tới lấy, shop gửi tại bưu cục). Mặc định là cod

Tham số delivery - Thông tin điểm giao hàng

Tham sốBắt buộcKiểu dữ liệuMô tả
nameyesstringTên người nhận hàng
address_idYesintegerID địa điểm lấy hàng từ trang quản lý của khách hàng
last_updateYesStringThời gian cuối cùng update địa chỉ (yyyy-MM-dd HH:mm:ss)
addressyesstringĐịa chỉ chi tiết người nhận hàng
provinceyesstringTỉnh/thành phố người nhận
wardyesstringPhường/xã người nhận (bắt buộc khi không có street)
streetyesstringTên đường người nhận (bắt buộc khi không có ward)
hamletyesstringThôn/áp/xóm/tổ... người nhận. Nếu không có, dùng "Khác"
latnonumberVĩ độ của điểm nhận hàng
lngnonumberKinh độ của điểm nhận hàng
telyesstringSố điện thoại người nhận
emailyesstringEmail người nhận
work_shiftnointegerCa giao hàng (1 = sáng, 2 = chiều, 3 = tối)
datenostringNgày giao hàng (YYYY/MM/DD, yêu cầu cấu hình riêng)

Tham số items - Thông tin sản phẩm

Tham sốBắt buộcKiểu dữ liệuMô tả
nameyesstringTên hàng hóa
pricenointegerGiá trị hàng hóa
weightyesfloatKhối lượng hàng hóa (kg)
quantityyesintegerSố lượng hàng hóa
codeyesstringMã sản phẩm

Tham số order - Các thông tin của đơn hàng

Tham sốBắt buộcKiểu dữ liệuMô tả
partner_idyesstringMã đơn hàng thuộc hệ thống của đối tác
service_typeyesintegerLoại dịch vụ (1: Giao hỏa tốc / 2: Giao nhanh/ 3: Giao tiêu chuẩn)
cod_amountyesintegerSố tiền COD (VND). Nếu bằng 0 thì không thu tiền
declared_valuenointegerGiá trị đóng khai giá, là căn cứ để tính phí khai giá và bồi thường khi có sự cố
notenostringGhi chú đơn hàng (tối đa 120 ký tự)
is_freeshipnointeger1 = người nhận không chịu phí ship (COD chỉ thu cod_amount)
weight_optionyesstringĐơn vị khối lượng (gram hoặc kilogram)
total_weightnonumberTổng khối lượng đơn hàng (sẽ tính theo products.weight nếu không truyền)
label_idnostringMã vận đơn cấp trước (yêu cầu cấu hình riêng)
expirednostringThời gian hết hạn đơn hàng (yêu cầu cấu hình riêng)
opmnointeger1 = đơn chỉ thu tiền, 0 = bình thường (mặc định)
actual_transfer_methodnostringHình thức vận chuyển thực tế (mặc định fly)
transportnostringPhương thức vận chuyển
tagsnoarrayDanh sách nhãn gắn vào đơn hàng
sub_tagsnoarrayChi tiết nhân đơn hàng (bắt buộc khi đơn là hàng cấy cối)

Mô tả dịch vụ vận chuyển order.service_type

Giá trịLoại dịch vụ
1Hỏa tốc (< 2h)
2Nhanh (< 4h)
3Tiêu chuẩn

Tham số return - Thông tin điểm trả hàng

Tham sốBắt buộcKiểu dữ liệuMô tả
nameyesstringTên người nhận hàng trả
address_idYesintegerID địa điểm lấy hàng từ trang quản lý của khách hàng
last_updateYesStringThời gian cuối cùng update địa chỉ (yyyy-MM-dd HH:mm:ss)
addressyesstringĐịa chỉ chi tiết người nhận hàng trả
latnonumberVĩ độ của điểm nhận hàng trả
lngnonumberKinh độ của điểm nhận hàng trả
provinceyesstringTỉnh/thành phố người nhận hàng trả
wardyesstringPhường/xã người nhận hàng trả (bắt buộc khi không có street)
streetyesstringTên đường người nhận hàng trả (bắt buộc khi không có ward)
telyesstringSố điện thoại người nhận hàng trả
emailnostringEmail người nhận hàng trả

Phản hồi

Kết quả trả về khi đăng đơn thành công:

{
"status": 201,
"message": "Tạo đơn hàng thành công",
"timestamp": "2025-10-10T15:36:56.794Z",
"data": {
"partner_id": "MGW_ORDER_1",
"oms_order_id": 631772143381778432,
"items": [
{
"name": "Áo thun",
"price": 200000.00,
"weight": 0.3,
"quantity": 2,
"code": "TSHIRT001"
},
{
"name": "Quần jeans",
"price": 400000.00,
"weight": 0.8,
"quantity": 1,
"code": "JEANS123"
}
],
"status": "ORDER_CREATED"
}
}

Trường hợp có lỗi

{
"status": 400,
"message": "Thiếu thông tin địa chỉ",
"error_code": 4010106,
"timestamp": "2025-10-10T11:33:00.458Z"
}

Lưu ý

info

Lưu ý: Đơn vị khối lượng sử dụng cho từng sản phẩm là KG

warning

Lưu ý: Phí ship ban đầu sẽ được tính theo tổng khối lượng các sản phẩm có trong đơn hàng

warning

Lưu ý:

  • Nếu đơn hàng được set is_freeship = 1, COD sẽ chỉ thu người nhận hàng số tiền bằng pick_money
  • Nếu giá trị được set bằng 0, COD sẽ thu tiền người nhận số tiền bằng pick_money + phí ship của đơn hàng, giá trị mặc định bằng 0