Send top-level moneyCollection on this request. Pricing and creation are independent. If it is absent or null, the recorded response cod becomes 0 even if the quote included COD. Negative COD produces INVALID_PRICE. Do not send the obsolete request field cod: it is not read. Compare the returned cod against your intended collection amount.
Provide sender and recipient names, international-format phones, and addresses. The source describes seller as the fallback when shipper is empty, buyer when consignee is empty, and returnContact defaulting to shipper. Each parcel needs weight/weightUnit, dimensions, type, and at least one item with a name and positive weight. measurementUnit defaults to the literal CENTIMET. Only payerType=CONSIGNEE or SELLER is accepted; other values produce PAYER_INVALID.
vas containing GTN/NTN/VTT may override the submitted receiveType. deliveryPostcode is required unless vas contains GTN or VTT; with GTN it is forced to null. Source names and sender/receiver service labels are retained rather than reinterpreted.
txId supports partner-side reconciliation/deduplication; the source does not establish server-enforced idempotency, a deduplication window, or safe repeat-create behavior. Retain the initial response and reconcile an ambiguous timeout before submitting another create. Do not assume a repeated txId prevents a duplicate shipment.
Response: save id for label creation, status lookup, and cancellation. Creation uses textual status=CONFIRMED and statusName; status lookup/webhooks use numeric codes. totalFees includes VAT after discounts and totalTax is VAT. estDeliveryTime.date is DD/MM/YYYY. partnerInfo uses snake_case keys inside an otherwise camelCase order response. Addresses are reduced to components and formattedAddress; no address-level id/code/geometry or component typeName/typeLabel is echoed.
Authentication headers
Header
Requirement
Value / meaning
X-Api-Token
Required
${API_TOKEN}: environment-specific token issued by TMS
X-Client-Source
Required
${PARTNER_CODE}: partner code paired with the token
Content-Type
With a JSON body
application/json
Accept
Required by source
application/json
Accept-Language
Optional
vn, en, my, km, lo
Request fields
Provide sender/recipient or documented seller/buyer fallback. Requiredness describes source business requirements, not guaranteed validation responses.
Top-level and required fields are shown first. Expand object groups for the full schema; no fields are omitted.
Field
Type
Required
Description
receiveType
string
See description
AT_HOME or AT_STORE; GTN/NTN/VTT in vas can cause recalculation and override. Values: AT_HOME, AT_STORE.
shipper
object
See description
ContactInfo. Sender and recipient need name, phone and address, subject to seller/buyer fallback.
shipper.address.components
array
When parent is present
Use current administrative API IDs and codes.
consignee
object
See description
ContactInfo. Sender and recipient need name, phone and address, subject to seller/buyer fallback.
consignee.address.components
array
When parent is present
Use current administrative API IDs and codes.
seller
object
See description
Optional seller, used if shipper is empty.
seller.address.components
array
When parent is present
Use current administrative API IDs and codes.
buyer
object
See description
Optional buyer, used if consignee is empty.
buyer.address.components
array
When parent is present
Use current administrative API IDs and codes.
returnContact
object
See description
Return contact; defaults to shipper.
returnContact.address.components
array
When parent is present
Use current administrative API IDs and codes.
parcel
object
Yes
Parcel dimensions and goods.
parcel.weight
number
Yes
Parcel weight.
parcel.weightUnit
string
Yes
Weight unit documented as GRAM.
parcel.length
number
Yes
Length, cm.
parcel.width
number
Yes
Width, cm.
parcel.height
number
Yes
Height, cm.
parcel.type
string
Yes
Parcel type. Values: GOODS, DOCUMENT.
parcel.items
array
Yes
At least one item.
parcel.items[].name
string
When parent is present
Item name.
parcel.items[].weight
number
When parent is present
Item weight; must be greater than zero.
payerType
string
Yes
Only CONSIGNEE and SELLER accepted; otherwise PAYER_INVALID. Values: CONSIGNEE, SELLER.
service
string
Yes
Main service code from get-service.
vas
array
See description
Extra service codes selected from available services.
moneyCollection
number
See description
COD must be resent here. Omitted/null becomes cod=0. Negative values produce INVALID_PRICE.
detailedFees
object
See description
Use the results returned by get-all.
voucher
string
See description
Voucher code.
reference
string
See description
Partner internal reference.
pickupAppointment
object
See description
Optional appointment. Confirm day/time encoding before use.
deliveryAppointment
object
See description
Optional appointment. Confirm day/time encoding before use.
note
string
See description
Order note.
invoice
string
See description
Invoice requested from sender or receiver. Values: NONE, BY_SENDER, BY_RECEIVER. Default: NONE.
orderScope
string
See description
Order scope. Values: DOMESTIC, INTERNATIONAL. Default: DOMESTIC.
deliveryPostcode
string
See description
Required unless vas contains GTN or VTT. GTN forces this field to null.
txId
string
See description
Partner transaction ID for reconciliation/client-side deduplication. Server idempotency is NOT established.
Nested fields: shipper(10)
Field
Type
Required
Description
shipper.name
string
See description
Contact name. Examples use synthetic people.
shipper.phone
string
See description
International format, e.g. Cambodia +855; replace the environment placeholder.
shipper.type
string
See description
Examples: PARTNER_WAREHOUSE, PERSON, HOME, OFFICE; complete enum not supplied.
shipper.postOffice
string
See description
Post-office code for drop-off at a branch.
shipper.address
object
See description
Address supplied by the partner.
shipper.address.components[].id
string
See description
Use the identifier returned by the API, not the illustrative value.
shipper.address.components[].code
string
See description
Use the identifier returned by the API, not the illustrative value.
shipper.address.components[].name
string
See description
Location name or street address.
shipper.address.components[].type
string
See description
NATIONAL, PROVINCE, DISTRICT, VILLAGE or OTHER according to level.
Defaults to CENTIMET (source spelling). Default: CENTIMET.
parcel.items[].type
string
See description
Item type shown in the example.
parcel.items[].value
number
See description
Declared item value.
parcel.items[].quantity
number
See description
Item quantity.
Nested fields: detailedFees(6)
Field
Type
Required
Description
detailedFees.serviceFee
array
See description
Recommended pricing details.
detailedFees.serviceFee[].service
string
See description
Service code from pricing.
detailedFees.serviceFee[].name
string
See description
Service name shown in the example.
detailedFees.serviceFee[].fee
number
See description
Use main/extra beforeVatPrice, not VAT-inclusive price.
detailedFees.serviceFee[].surchargeType
string
See description
Only valid values are retained, but the source does not list those values. Ask TMS.
detailedFees.serviceFee[].type
string
See description
Source example says VAS, conflicting with the prose surchargeType field. Not a confirmed substitute.
Nested fields: pickupAppointment(3)
Field
Type
Required
Description
pickupAppointment.dayOfWeek
array
See description
Days of week; item encoding not specified by the source.
pickupAppointment.hours
array
See description
Time slots; item encoding not specified by the source.
pickupAppointment.note
string
See description
Appointment note.
Nested fields: deliveryAppointment(3)
Field
Type
Required
Description
deliveryAppointment.dayOfWeek
array
See description
Days of week; item encoding not specified by the source.
deliveryAppointment.hours
array
See description
Time slots; item encoding not specified by the source.
deliveryAppointment.note
string
See description
Appointment note.
Example JSON body
Save as request.json. Replace every ${…} string and example ID with actual environment values before sending. cURL with --data @request.jsondoes not interpolate variables inside JSON files. Identities are synthetic.
BASE_URL must include /tms-partner/api/v1. Load the token and partner code from your private environment; never paste secrets into documentation or AI prompts.
Formatted address; no address-level id, code or geometry.
Nested fields: parcel(13)
Field
Type
Required
Description
parcel.weight
number
See description
Parcel weight.
parcel.weightUnit
string
See description
Weight unit documented as GRAM.
parcel.length
number
See description
Length, cm.
parcel.width
number
See description
Width, cm.
parcel.height
number
See description
Height, cm.
parcel.measurementUnit
string
See description
Defaults to CENTIMET (source spelling). Default: CENTIMET.
parcel.type
string
See description
Parcel type. Values: GOODS, DOCUMENT.
parcel.items
array
See description
Returned goods items.
parcel.items[].name
string
See description
Item name.
parcel.items[].type
string
See description
Item type shown in the example.
parcel.items[].value
number
See description
Declared item value.
parcel.items[].weight
number
See description
Item weight; must be greater than zero.
parcel.items[].quantity
number
See description
Item quantity.
Nested fields: detailedFees(6)
Field
Type
Required
Description
detailedFees.currency
string
See description
Example uses USD; do not assume every pricing response uses this currency.
detailedFees.serviceFee
array
See description
Recorded fees.
detailedFees.serviceFee[].service
string
See description
Use the identifier returned by the API, not the illustrative value.
detailedFees.serviceFee[].fee
number
See description
Pre-VAT fee.
detailedFees.serviceFee[].feeAfterVat
number
See description
Fee after VAT.
detailedFees.serviceFee[].vatPrice
number
See description
VAT amount.
Nested fields: estDeliveryTime(2)
Field
Type
Required
Description
estDeliveryTime.days
number
See description
Estimated day count.
estDeliveryTime.date
string
See description
Estimated delivery date, DD/MM/YYYY.
Nested fields: partnerInfo(5)
Field
Type
Required
Description
partnerInfo.id
number
See description
Internal partner ID.
partnerInfo.partner_code
string
See description
Partner code.
partnerInfo.partner_name
string
See description
Partner name.
partnerInfo.email
string
See description
Partner email.
partnerInfo.type
string
See description
Partner type, e.g. PARTNER.
Address levels
Level
type
Order requirement
0
NATIONAL
Optional; code KH, name Cambodia
1
PROVINCE
Required; id/code from provinces
2
DISTRICT
Required; id/code from level 2
3
VILLAGE
Required; id/code from level 3
999
OTHER
Optional; house number, street, building
COD persistence diagram
Diagram
View source
flowchart TD
A["product.moneyCollection in pricing"] --> B["Select COD service branch only"]
B --> C["Create a separate order request"]
C --> D{"Top-level moneyCollection supplied?"}
D -->|Yes| E["Persist and compare response.cod"]
D -->|Missing or null| F["Order records cod = 0"]
Error handling
See HTTP codes and source limitations. HTTP success does not prove COD, fees, or cancellation are correct; inspect the documented business fields. Do not assume create-order retries are safe.
AI resources
Give your AI assistant the current company’s documentation, Markdown pages, and OpenAPI contract.
Help me integrate with Unitel Logistics (v1).
Read https://zerohost-a4e4c3a4-479b899751a8bff420e09c87ec393946.zhst.app/mfexpress/en/llms.txt first, then https://zerohost-a4e4c3a4-479b899751a8bff420e09c87ec393946.zhst.app/mfexpress/en/llms-full.txt and https://zerohost-a4e4c3a4-479b899751a8bff420e09c87ec393946.zhst.app/mfexpress/en/openapi.json.
Use only the documented endpoints, authentication, schemas and examples. Ask me about my application stack and the operation I need before writing code. Identify any documented limitations or inconsistencies. Keep credentials in environment variables, never in client-side code. Use the sandbox for examples; do not execute requests or change production data without my explicit approval.
Documentation locale: en. API language value: en.
Current page: https://zerohost-a4e4c3a4-479b899751a8bff420e09c87ec393946.zhst.app/mfexpress/en/create-order.