# 05. Shopping

# About platform logistics order process, please refer to the Documentation

# 1 Order

# 1.1 Create Order V2(POST)

  • Create order
  • payType=1 or omitted: page payment (default), and cjPayUrl will be returned
  • payType=2: balance payment, and the order will continue through add-to-cart, order confirmation, and balance deduction
  • payType=3: create the order only without initiating payment, add-to-cart, or order confirmation
  • Add param platformToken to header, The way to obtain platformToken is the same as the way to obtain CJ Access Token. If not required, the value can be empty. (2025-01-08 update)

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/order/createOrderV2

# CURL

curl --location --request POST 'https://developers.cjdropshipping.com/api2.0/v1/shopping/order/createOrderV2' \
                --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
                --header 'platformToken: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
                --header 'Content-Type: application/json' \
                --data-raw '{
                    "orderNumber": "1234",
                    "shippingZip": "123",
                    "shippingCountry": "123",
                    "shippingCountryCode": "US",
                    "shippingProvince": "123",
                    "shippingCity": "132",
                    "shippingCounty": "",
                    "shippingPhone": "111",
                    "shippingCustomerName": "123213",
                    "shippingAddress": "123213",
                    "shippingAddress2": "123213",
                    "taxId": "123",
                    "remark": "note",
                    "email": "",
                    "consigneeID": "",
                    "payType": "",
                    "shopAmount": "",
                    "logisticName": "PostNL",
                    "fromCountryCode": "CN",
                    "houseNumber": "123",
                    "platform": "shopify",
                    "iossType": "",
                    "iossNumber": "",
                    "orderFlow": 1,
                    "products": [
                        {
                            "vid": "92511400-C758-4474-93CA-66D442F5F787",
                            "quantity": 1,
                            "storeLineItemId": "test-lineItemId-1111"
                        }
                    ]
                }'
Parameter Definition Type Required Length Note
orderNumber Order number string Y 50
shippingZip Zip of destination string N 20
shippingCountryCode Destination country code string Y 20 Use a two-letter country code
shippingCountry Destination country string Y 50
shippingProvince Destination province/state string Y 50
shippingCity Destination city string Y 50
shippingCounty Destination county string N 50
shippingPhone Recipient phone number string N 20
shippingCustomerName Recipient name string Y 50
shippingAddress Recipient address line 1 string Y 200
shippingAddress2 Recipient address line 2 string N 200
houseNumber House number string N 20
email Email string N 50
taxId Tax ID string N 20
remark Order remark string N 500
consigneeID Consignee ID string N 20
payType Payment type int N 10 1=page payment, 2=balance payment, 3=create order only
isSandbox Sandbox order flag integer N 1 0=normal order, 1=sandbox order
shopAmount Order amount BigDecimal N 20
logisticName Logistics name string Y 50
fromCountryCode Shipping country string Y 20 Use a two-letter country code
platform Platform type, default Api string N 20 Refer to Platforms
shopLogisticsType Shipping mode int N 20 1=platform logistics, 2=merchant logistics, 3=platform logistics with CJ-assigned warehouse
storageId CJ warehouse ID string N 40 Used when shopLogisticsType=1
iossType IOSS type int N 20 1=no IOSS, 2=use your IOSS, 3=use CJ IOSS
iossNumber IOSS number string N 10
storeName Store name String N 50 If provided, the system will validate that the store name matches an API store in CJ system. If not provided, the order will be assigned to the default API store
storeOrderTime Store order time Long N 20 Timestamp in seconds. Represents the actual order creation time in the customer's store. If the time is later than the current system time, an error will be returned
orderFlow Order flow type, default value: 1 int N 10 Order flow type. Options: 1=Manual order flow (create order using CJ variants, default), 2=Store order flow (supports creating orders using store SKUs, requires Store Product linked to CJ products in My CJ). Launched on 2025-05-19
products List Y 20
- vid CJ variant id string N 50 vid and sku cannot both be null. When vid is missing, sku will be used to query the CJ variant. If both are provided, they must refer to the same variant and will be validated accordingly. If the customer account has been granted permission to submit non-CJ SKUs, then the vid field is required
- sku CJ variant sku string N 50 vid and sku cannot both be null. When vid is missing, sku will be used to query the CJ variant. If both are provided, they must refer to the same variant and will be validated accordingly.
- storeProductId Store product id String N 64 used as the store product's platform product id, saved to the store product table and passed to the order center; Launched on 2026-06-02
- storeProductImg Store product image String N 500 used as the store product's platform product image, saved to the store product table and passed to the order center; Launched on 2026-06-02
- quantity quantity int Y 50
- unitPrice item pricing BigDecimal N 20
- storeLineItemId lineItemId of your store order string N 125
- podProperties POD customization information String N 500 podProperties is a string,1:Pod2.0 Example: [{"areaName":"LogoArea","links":["https://cc-west-usa.oss-us-west-1.aliyuncs.com/9f0b99e6-17ec-4dcd-8916-fc5d644be993_LOGO_NavyBlue.png"],"type":"1"}]
2:Pod3.0 Example:[{"links": ["Production image URL (multiple allowed)"],"effectImgs": ["Rendering image URL (exactly one required)"]}]

# Return

success

{
    "code": 200,
    "result": true,
    "message": "Success",
    "data": {
        "orderNumber": "",
        "orderId": "123434",
        "shipmentOrderId": "",
        "iossAmount":  "",
        "iossTaxHandlingFee": "",
        "postageAmount":  "",
        "productAmount": "",
        "productOriginalAmount": "",
        "productDiscountAmount": "",
        "postageDiscountAmount": "",
        "postageOriginalAmount": "",
        "totalDiscountAmount": "",
        "actualPayment": "",
        "orderOriginalAmount": "",
        "cjPayUrl": "",
        "orderAmount": "",
        "logisticsMiss": "",
        "productInfoList": [
            {
                "storeLineItemId": "test-lineItemId-1111",
                "lineItemId": "",
                "variantId": "",
                "isGroup": true,
                "quantity":10,
                "subOrderProducts": [
                    {
                        "lineItemId": "",
                        "variantId": "",
                        "quantity": 1
                    }
                ]
            }
        ],
        "orderStatus": "",
        "interceptOrderReasons": [
            {
                "code": 1001,
                "message": ""
            }
        ]
    },
    "requestId": "9eddf3f5-bd3d-4fae-a4f2-028cbb90db97",
    "success": true
}
Field Definition Type Length Note
code error code int 20 Reference error code
result Whether or not the return is normal boolean 1
message return message string 200
data return data object interface data return
requestId requestId string 48 Flag request for logging errors

data information

Field Definition Type Length Note
orderId CJ order id string 200 If the provided product VID is not a CJ SKU, the order id will change, and thus the CJ order id will not be returned. You can monitor the webhook to obtain the latest CJ order id
orderNumber orderNumber string 200
shipmentOrderId shipment order id string 200
iossAmount ioss amount BigDecimal (18,2) Unit: $ (USD)
iossTaxHandlingFee ioss tax BigDecimal (18,2) Unit: $ (USD)
postageAmount postage amount BigDecimal (18,2) Unit: $ (USD)
productAmount product amount BigDecimal (18,2) Unit: $ (USD)
productOriginalAmount total amount of products (before discount) BigDecimal (18,2) Unit: $ (USD)
productDiscountAmount product discount amount BigDecimal (18,2) Unit: $ (USD)
postageDiscountAmount postage discount amount BigDecimal (18,2) Unit: $ (USD)
postageOriginalAmount postage amount (before discount) BigDecimal (18,2) Unit: $ (USD)
totalDiscountAmount the total amount of the order after discount BigDecimal (18,2) Unit: $ (USD)
actualPayment the amount actually paid BigDecimal (18,2) Unit: $ (USD)
orderOriginalAmount original order amount BigDecimal (18,2) Unit: $ (USD)
cjPayUrl CJ pay url string 200
orderAmount order amount BigDecimal 200
logisticsMiss logistics missing mark Boolean 10
orderStatus Order status string 10 Referer Order Status
productInfoList product information list
interceptOrderReasons order interception information list

product information

Field Definition Type Length Note
storeLineItemId lineItemId of your store order string 125
lineItemId lineItemId of CJ order string 50
variantId variant id string 50
quantity quantity int 20
isGroup Main product label boolean 10
subOrderProducts combination product list 10
- lineItemId Unique ID of the order item in CJ string 50
- variantId variant id string 50
- quantity quantity int 20

Order interception information

Field Definition Type Length Note
code code int 50
message message string 200

error

{
   "code": 1600100,
   "result": false,
   "message": "Param error",
   "data": null,
   "requestId": "323fda9d-3c94-41dc-a944-5cc1b8baf5b1"
}
Field Definition Type Length Note
code error code int 20 Reference error code
result Whether or not the return is normal boolean 1
message return message string 200
data return data object interface data return
requestId requestId string 48 Flag request for logging errors

# 1.2 Create Order V3(POST)

  • Create order
  • Add param platformToken to header, The way to obtain platformToken is the same as the way to obtain CJ Access Token. If not required, the value can be empty. (2025-01-08 update)

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/order/createOrderV3

# CURL

curl --location --request POST 'https://developers.cjdropshipping.com/api2.0/v1/shopping/order/createOrderV3' \
                --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
                --header 'platformToken: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
                --header 'Content-Type: application/json' \
                --data-raw '{
                    "orderNumber": "1234",
                    "shippingZip": "123",
                    "shippingCountry": "123",
                    "shippingCountryCode": "US",
                    "shippingProvince": "123",
                    "shippingCity": "132",
                    "shippingCounty": "",
                    "shippingPhone": "111",
                    "shippingCustomerName": "123213",
                    "shippingAddress": "123213",
                    "shippingAddress2": "123213",
                    "taxId": "123",
                    "remark": "note",
                    "email": "",
                    "consigneeID": "",
                    "shopAmount": "",
                    "logisticName": "PostNL",
                    "fromCountryCode": "CN",
                    "houseNumber": "123",
                    "iossType": "",
                    "platform": "shopify",
                    "iossNumber": ""
                    "shopLogisticsType": 1,
                    "storageId": "201e67f6ba4644c0a36d63bf4989dd70",
                    "orderFlow": 1,
                    "products": [
                        {
                            "vid": "92511400-C758-4474-93CA-66D442F5F787",
                            "quantity": 1,
                            "storeLineItemId": "test-lineItemId-1111"
                        }
                    ]
                }'
Parameter Definition Type Required Length Note
orderNumber A unique identifier for the order from CJ partner. string Y 50
shippingZip Zip of destination string N 20
shippingCountryCode Country code of destination string Y 20 Referer:Country Code, Please use The two-letter code
shippingCountry Country of destination string Y 50
shippingProvince Province of destination string Y 50
shippingCity City of destination string Y 50
shippingCounty County of destination String N 50
shippingPhone Phone number of destination string N 20
shippingCustomerName Customer name string Y 50
shippingAddress Shipping address of destination string Y 200
shippingAddress2 Shipping address 2 of destination string N 200
houseNumber House Number String N 20
email Email String N 50
taxId Tax Id string N 20
remark Order remark string N 500
consigneeID consignee id string N 20
shopAmount Order Amount BigDecimal N 20
logisticName logistic name string Y 50 Referer Freight Calculation
fromCountryCode Country code of the shipment from string Y 20 Referer:Country Code, Please use The two-letter code
platform Platform, Default: Api String N 20 If this parameter is not passed, the default platform Api will be used. Referer Platforms
iossType IOSS Type int N 20 IOSS Type, Options: 1=No IOSS(The recipient will be required to pay VAT and other related fees when the order is declared without IOSS.), 2=Declare with my own IOSS(Please ensure that the IOSS provided is valid and is linked to the destination country in the EU. The declaration will proceed without IOSS if the destination country is not linked to a correct IOSS.), 3=Declare with CJ’s IOSS(Declaration with your store order amount is recommended. You will be responsible for the relevant risks if you choose to declare with CJ order amount. CJ’s IOSS is not applicable for orders valued above €150, and the recipient will be required to pay VAT.), Config Page (opens new window)
iossNumber IOSS Number String N 10 If iossType=3, the value is fixed to CJ-IOSS
shopLogisticsType Shipping mode, default value: 2 int N 20 Shipping type, Options: 1=Platform Logistics (storageId specified by you, required. When choosing platform logistics mode, the warehouse will start operation after uploading the shipping label. Please upload the shipping label in a timely manner, Upload Shipping and Shipping Label), 2=Seller Logistics (storageId will not be used), 3=Platform Logistics (storageId specified by CJ). If no requirement, please use 2=merchant logistics. Launched on 2025-11-18
storageId CJ warehouse ID String N 40 This value is valid when shopLogisticsType=1, Added on 2025-11-18
storeName Store name String N 50 If provided, the system will validate that the store name matches an API store in CJ system. If not provided, the order will be assigned to the default API store
storeOrderTime Store order time Long N 20 Timestamp in seconds. Represents the actual order creation time in the customer's store. If the time is later than the current system time, an error will be returned
orderFlow Order flow type, default value: 1 int N 10 Order flow type. Options: 1=Manual order flow (create order using CJ variants, default), 2=Store order flow (supports creating orders using store SKUs, requires Store Product linked to CJ products in My CJ). Launched on 2025-05-19
isSandbox Is sandbox order integer N 1 Default 0. 0-normal order; 1-sandbox order. Regardless of payType value, sandbox orders will automatically use fake/simulated payment and will not generate real charges, real logistics, or fulfillment
products List Y 20
- vid CJ variant ID string N 50 vid and sku cannot both be null. When vid is missing, sku will be used to query the CJ variant. If both are provided, they must refer to the same variant and will be validated accordingly. If the customer account has been granted permission to submit non-CJ SKUs, then the vid field is required
- sku CJ variant sku string N 50 vid and sku cannot both be null. When vid is missing, sku will be used to query the CJ variant. If both are provided, they must refer to the same variant and will be validated accordingly.
- storeProductId Store product id String N 64 used as the store product's platform product id, saved to the store product table and passed to the order center; Launched on 2026-06-02
- storeProductImg Store product image String N 500 used as the store product's platform product image, saved to the store product table and passed to the order center; Launched on 2026-06-02
- quantity quantity int Y 50
- unitPrice item pricing BigDecimal N 20
- storeLineItemId lineItemId of your store order string N 125
- podProperties POD customization information String N 500 podProperties is a string,1:Pod2.0 Example: [{"areaName":"LogoArea","links":["https://cc-west-usa.oss-us-west-1.aliyuncs.com/9f0b99e6-17ec-4dcd-8916-fc5d644be993_LOGO_NavyBlue.png"],"type":"1"}]
2:Pod3.0 Example:[{"links": ["Production image URL (multiple allowed)"],"effectImgs": ["Rendering image URL (exactly one required)"]}]

# Return

success

{
    "code": 200,
    "result": true,
    "message": "Success",
    "data": {
        "orderNumber": "",
        "orderId": "123434',
        "shipmentOrderId": "",
        "iossAmount": ,
        "iossTaxHandlingFee": ,
        "iossAmount": ,
        "postageAmount": ,
        "productAmount": "",
        "productOriginalAmount": "",
        "productDiscountAmount": "",
        "postageDiscountAmount": "",
        "postageOriginalAmount": "",
        "totalDiscountAmount": "",
        "actualPayment": "",
        "orderOriginalAmount": "",
        "cjPayUrl": "",
        "orderAmount": "",
        "logisticsMiss": "",
        "productInfoList": [
            {
                "storeLineItemId": "test-lineItemId-1111",
                "lineItemId": "",
                "variantId": "",
                "isGroup": true,
                "quantity":10,
                "subOrderProducts": [
                    {
                        "lineItemId": "",
                        "variantId": "",
                        "quantity": ""
                    }
                ]
            }
        ],
        "orderStatus": "",
        "interceptOrderReasons": [
            {
                "code": 1001,
                "message": ""
            }
        ]
    },
    "requestId": "9eddf3f5-bd3d-4fae-a4f2-028cbb90db97"
}
Field Definition Type Length Note
code error code int 20 Reference error code
result Whether or not the return is normal boolean 1
message return message string 200
data return data object interface data return
requestId requestId string 48 Flag request for logging errors

data information

Field Definition Type Length Note
orderId CJ order id string 200 If the provided product VID is not a CJ SKU, the order id will change, and thus the CJ order id will not be returned. You can monitor the webhook to obtain the latest CJ order id
orderNumber customer order number string 200
shipmentOrderId shipment order id string 200
iossAmount ioss amount BigDecimal (18,2) Unit: $ (USD)
iossTaxHandlingFee ioss tax BigDecimal (18,2) Unit: $ (USD)
postageAmount postage amount BigDecimal (18,2) Unit: $ (USD)
productAmount product amount BigDecimal (18,2) Unit: $ (USD)
productOriginalAmount total amount of products (before discount) BigDecimal (18,2) Unit: $ (USD)
productDiscountAmount product discount amount BigDecimal (18,2) Unit: $ (USD)
postageDiscountAmount postage discount amount BigDecimal (18,2) Unit: $ (USD)
postageOriginalAmount postage amount (before discount) BigDecimal (18,2) Unit: $ (USD)
totalDiscountAmount the total amount of the order after discount BigDecimal (18,2) Unit: $ (USD)
actualPayment the amount actually paid BigDecimal (18,2) Unit: $ (USD)
orderOriginalAmount original order amount BigDecimal (18,2) Unit: $ (USD)
cjPayUrl CJ pay url string 200
orderAmount order amount BigDecimal 200
logisticsMiss logistics missing mark Boolean 10
orderStatus order status string 10 Referer Order Status
productInfoList product information list
interceptOrderReasons order interception information list

product information

Field Definition Type Length Note
storeLineItemId lineItemId of your store order String 125
lineItemId Unique ID of the order item in CJ string 50
variantId variant id string 50
quantity quantity int 20
isGroup Main product label boolean 10
subOrderProducts combination product list 10
- lineItemId Unique ID of the order item in CJ string 50
- variantId CJ variant id string 50
- quantity quantity int 20

Order interception information

Field Definition Type Length Note
code code int 50
message message string 200

error

{
   "code": 1600100,
   "result": false,
   "message": "Param error",
   "data": null,
   "requestId": "323fda9d-3c94-41dc-a944-5cc1b8baf5b1"
}
Field Definition Type Length Note
code error code int 20 Reference error code
result Whether or not the return is normal boolean 1
message return message string 200
data return data object interface data return
requestId requestId string 48 Flag request for logging errors

# 1.3 Add Cart

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/order/addCart

# CURL

curl --location --request POST 'https://developers.cjdropshipping.com/api2.0/v1/shopping/order/addCart' \
                --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
                --header 'Content-Type: application/json' \
                --data-raw '{
                    "cjOrderIdList": ["SD25080109282603297001"]
                }'
Parameter Definition Type Required Length Note
cjOrderIdList CJ order id List Y 200 Query

# Return

success

{
    "success": true,
    "code": 200,
    "message": "Congratulation! Well done!",
    "data": {
        "successCount": 1,
        "addSuccessOrders": [
            "SD25080109282603297001"
        ],
        "unInterceptAddressCount": 0,
        "interceptOrders": []
    }
}
Field Definition Type Length Note
code error code int 20 Reference error code
result Whether or not the return is normal boolean 1
message return message string 200
data return data object interface data return
requestId requestId string 48 Flag request for logging errors

error

{
    "code": 1603001,
    "result": false,
    "message": "order confirm fail",
    "data": null,
    "requestId": "7dc61955-c0e8-4731-bb9b-393b4fffeaaf"
}
Field Definition Type Length Note
code error code int 20 Reference error code
result Whether or not the return is normal boolean 1
message return message string 200
data return data object interface data return
requestId requestId string 48 Flag request for logging errors

# 1.4 Add Cart Confirm (POST)

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/order/addCartConfirm

# CURL

curl --location --request POST 'https://developers.cjdropshipping.com/api2.0/v1/shopping/order/addCartConfirm' \
                --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
                --header 'Content-Type: application/json' \
                --data-raw '{
                    "cjOrderIdList": ["SD25080109282603297001"]
                }'
Parameter Definition Type Required Length Note
cjOrderIdList CJ order id List Y 200 Query

# Return

success

{
    "success": true,
    "code": 200,
    "message": "Congratulation! Well done!",
    "data": {
        "successCount": 1,
        "submitSuccess": true,
        "shipmentsId": "",
        "result": 0,
        "interceptOrders": []
    }
}
Field Definition Type Length Note
code error code int 20 Reference error code
result Whether or not the return is normal boolean 1
message return message string 200
data return data object interface data return
- successCount Success Count
- submitSuccess Is the submission successful
- shipmentsId Shipment Order Id
- result
- interceptOrders Intercepted order ID List List
requestId requestId string 48 Flag request for logging errors

error

{
    "code": 1603001,
    "result": false,
    "message": "order confirm fail",
    "data": null,
    "requestId": "7dc61955-c0e8-4731-bb9b-393b4fffeaaf"
}
Field Definition Type Length Note
code error code int 20 Reference error code
result Whether or not the return is normal boolean 1
message return message string 200
data return data object interface data return
requestId requestId string 48 Flag request for logging errors

# 1.5 Save Generate Parent Order(POST)

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/order/saveGenerateParentOrder

# CURL

curl --location --request POST 'https://developers.cjdropshipping.com/api2.0/v1/shopping/order/saveGenerateParentOrder' \
                --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
                --header 'Content-Type: application/json' \
                --data-raw '{
                    "shipmentOrderId": "SD25080109282603297001"
                }'
Parameter Definition Type Required Length Note
shipmentOrderId Shipment Order Id string Y 200 Query

# Return

success

{
  "success": true,
  "message": "",
  "data": {
    "orderMoney": 99.99,
    "payExpireTime": "2024-12-31 23:59:59",
    "payId": "PAY123456789",
    "result": 0,
    "submitSuccess": true,
    "unMatchOrderCodes": ["ORDER001", "ORDER002"],
    "successOrders": ["ORDER003", "ORDER004"],
    "unMatchProductCodes": ["PROD001", "PROD002"],
    "paymentInformation": {
      "actualPayment": 89.99,
      "balanceDeduction": 10.00,
      "billAmount": 12.50,
      "canDeduct": true,
      "commodityDiscount": 5.00,
      "commodityTotalAmount": 94.99,
      "couponAmount": 15.00,
      "freight": 5.00,
      "iossAmount": 2.50,
      "iossNumber": "IOSS123456",
      "iossTaxHandlingFee": 0.50,
      "iossTaxes": 2.00,
      "iossType": 3,
      "orderOriginalAmount": 104.99,
      "orderProductAmount": 94.99,
      "payableAmount": 89.99,
      "postageDiscount": 0.00,
      "serviceFee": 1.00
    },
    "interceptOrders": [
    ]
  }
}
Field Definition Type Length Note
code error code int 20 Reference error code
result Whether or not the return is normal boolean 1
message return message string 200
data return data object interface data return
requestId requestId string 48 Flag request for logging errors

error

{
    "code": 1603001,
    "result": false,
    "message": "order confirm fail",
    "data": null,
    "requestId": "7dc61955-c0e8-4731-bb9b-393b4fffeaaf"
}
Field Definition Type Length Note
code error code int 20 Reference error code
result Whether or not the return is normal boolean 1
message return message string 200
data return data object interface data return
requestId requestId string 48 Flag request for logging errors

# 1.6 List Order(GET)

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/order/list?pageNum=1&pageSize=10

# CURL

curl --location --request GET 'https://developers.cjdropshipping.com/api2.0/v1/shopping/order/list?pageNum=1&pageSize=10' \
                --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
Parameter Definition Type Required Length Note
pageNum Page number int N 20 Default 1
pageSize Quantity of results on each page int N 20 Default 20
orderIds order id string[] N 100
shipmentOrderId Shipment Order Id string N 100
status order status string N 200 default: CANCELLED, values: CREATED,IN_CART,UNPAID,UNSHIPPED,SHIPPED,DELIVERED,CANCELLED,OTHER

# Return

success

{
    "code": 200,
    "result": true,
    "message": "Success",
    "data": {
        "pageNum": 1,
        "pageSize": 10,
        "total": 6859,
        "list": [
            {
                "orderId": "1377085655003308032",
                "orderNum": "50166125936666",
                "cjOrderId": null,
                "shippingCountryCode": "SG",
                "shippingProvince": "Singapore",
                "shippingCity": "Singapore",
                "shippingPhone": "6587997352",
                "shippingAddress": "Singapore,07  Anson  Tanjong  Pagar,79 ANSON ROAD,79 Anson Road #01-01, Phoenix Tower",
                "shippingCustomerName": "KUDO KANJI ",
                "remark": "",
                "orderWeight": 0,
                "orderStatus": "CREATED",
                "orderAmount": null,
                "productAmount": 0,
                "postageAmount": null,
                "logisticName": null,
                "trackNumber": null,
                "createDate": "2021-03-31 00:46:39",
                "paymentDate": null,
                "productList": null,
                "storageId": "201e67f6ba4644c0a36d63bf4989dd70",
                "storageName": "Cranbury Warehouse"
            }...
        ]
    }
}        
Field Definition Type Length Note
orderId order id string 200
orderNum order name string 200
cjOrderId CJ order id string 200
shippingCountryCode country code string 200
shippingProvince province string 200
shippingCity city string 200
shippingAddress shipping address string 200
shippingCustomerName shipping name string Y 200
shippingPhone phone number string 200
remark order remark string 500
logisticName logistic name string 200
trackNumber track number string 200
trackingUrl tracking URL string N 200
orderWeight order weight int 20
orderAmount order amount BigDecimal (18,2) Unit: $ (USD)
orderStatus order status string 200 Referer Order Status
createDate create time string 200
paymentDate pay time string 200
storeCreateDate Store order creation time DateTime 1 UTC Time, eg: 2025-03-14 13:21:07
isSandbox Is sandbox order integer 1 0-no, 1-yes
privateOutboundOrder Whether a private inventory outbound order boolean true=private inventory outbound order, false=regular order. Consistent with the webhook order message
productAmount product amount BigDecimal (18,2) Unit: $ (USD)
postageAmount postage amount BigDecimal (18,2) Unit: $ (USD)
storageId storage id string 200 Added on 2025-11-18
storageName storage name string 200 Added on 2025-11-18

error

{
   "code": 1600100,
   "result": false,
   "message": "Param error",
   "data": null,
   "requestId": "323fda9d-3c94-41dc-a944-5cc1b8baf5b1"
}
Field Definition Type Length Note
code error code int 20 Reference error code
result Whether or not the return is normal boolean 1
message return message string 200
data return data object interface data return
requestId requestId string 48 Flag request for logging errors

# 1.7 Query Order(GET)

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/order/getOrderDetail?orderId=210711100018043276

# CURL

curl --location --request GET 'https://developers.cjdropshipping.com/api2.0/v1/shopping/order/getOrderDetail?orderId=210711100018043276&features=f1&features=f2' \
                --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

# Request Parameters

Parameter Definition Type Required Length Note
orderId order id string Y 200 support: Custom order id, CJ order id
features features List<String> false 20 If a feature is passed in, the relevant function will be enabled. If multiple features are required, pass multiple feature parameters

# Feature enumeration

Enumeration Description
LOGISTICS_TIMELINESS Enable querying logistics timeliness. After passing in this feature enumeration, logisticTimelines will be returned in the results

# Response

success

{
    "code": 200,
    "result": true,
    "message": "Success",
    "data": {
        "orderId": "210823100016290555",
        "orderNum": "api_52f268d40b8d460e82c0683955e63cc9",
        "platformOrderId": "6387689586969",
        "cjOrderId": null,
        "shippingCountryCode": "US",
        "shippingProvince": "Connecticut",
        "shippingCity": "ftdsr",
        "shippingPhone": "43514123",
        "shippingAddress": "rfdxf rfdesr",
        "shippingCustomerName": "Xu Old",
        "remark": null,
        "orderWeight": 20,
        "orderStatus": "CREATED",
        "orderAmount": 4.25,
        "productAmount": 0.57,
        "postageAmount": 3.68,
        "logisticName": "CJPacket Ordinary",
        "trackNumber": null,
        "createDate": "2021-08-23 11:31:45",
        "paymentDate": null,
        "isComplete":1,
        "fromCountryCode":"CN",
        "storageId": "201e67f6ba4644c0a36d63bf4989dd70",
        "storageName": "Cranbury Warehouse",
        "productList": [
            {
                "vid": "1392053744945991680",
                "quantity": 1,
                "sellPrice": 0.57,
				"podPropertiesInfo": null,
                "lineItemId": "2505170958390976500",
                "storeLineItemId": "16045188153625",
                "productionOrderStatus": 1,
                "abnormalType": [
                    6,
                    9
                ]
            }
        ]
    },
    "requestId": "3adccdcb-d41b-4808-996b-c7c5c833d77d"
}

POD order return information

{
	"code": 200,
	"result": true,
	"message": "Success",
	"data": {
		"orderId": "210823100016290555",
		"orderNum": "api_52f268d40b8d460e82c0683955e63cc9",
		"cjOrderId": null,
		"platformOrderId": "6387689586969",
        "shippingCountryCode": "US",
		"shippingProvince": "Connecticut",
		"shippingCity": "ftdsr",
		"shippingPhone": "43514123",
		"shippingAddress": "rfdxf rfdesr",
		"shippingCustomerName": "Xu Old",
		"remark": null,
		"orderWeight": 20,
		"orderStatus": "CREATED",
		"orderAmount": 4.25,
		"productAmount": 0.57,
		"postageAmount": 3.68,
		"logisticName": "CJPacket Ordinary",
		"trackNumber": null,
		"createDate": "2021-08-23 11:31:45",
		"paymentDate": null,
		"isComplete": 1,
		"fromCountryCode": "CN",
		"storageId": "201e67f6ba4644c0a36d63bf4989dd70",
        "storageName": "Cranbury Warehouse",
		"productList": [
			{
				"vid": "1392053744945991680",
				"quantity": 1,
				"sellPrice": 0.57,
				"lineItemId": "2505170958390976500",
                "storeLineItemId": "16045188153625",
                "productionOrderStatus": 1,
                "abnormalType": [
                    6,
                    9
                ]
				"podPropertiesInfo": {
                    "image": "https://pod-picture.oss-cn.aliyuncs.com/LX/PO-211-12729261699191806-1.jpg",
                    "isFixedCustom": false,
                    "podVersion": 3,
                    "failedList": [],
                    "effectImgList": [
                        "https://pod-picture.oss-cn.aliyuncs.com/LX/PO-211-1.jpg?podThumbnailUrl=https%3A%2F%2Fpod-picture.oss-cn.aliyuncs.com%2Fpod%2F250428%2Fpod-picture_oss-cn-211-12729261699191806-1_jpg.1440x1440.webp&podOriginSize=638820&podOriginPxUrl=https%3A%2F%2Fpod-picture.oss-cn-hangzhou.aliyuncs.com%2Fpod_infinity%2F250428%2Fpod-picture_oss-cn-hangzhou_aliyuncs_com_LX_PO-211-12729261699191806-1_jpg.InfinityxInfinity.webp&podOriginPx=1936_1854&podOriginOss=https%3A%2F%2Fpod-picture.oss-cn-hangzhou.aliyuncs.com%2Fpod_origin%2F250428%2Fpod-picture_oss-cn-hangzhou_aliyuncs_com_LX_PO-211-1_jpg.InfinityxInfinity.jpg"
                    ],
                    "finish": 1,
                    "customResources": [],
                    "type": 5,
                    "customMessgae": {
                        "podType": 1,
                        "color": {},
                        "zone": {
                            "back": {},
                            "front": {}
                        }
                    },
                    "productionImgList": [
                        "https://pod-picture.oss-cn.aliyuncs.com/LX/PO-211-1.jpg?podThumbnailUrl=https%3A%2F%2Fpod-picture.oss.aliyuncs.com%2Fpod%2F250428%2Fpod-picture_oss-cn-hangzhou_aliyuncs_com_LX_PO-211-12729261699191806-1_jpg.1440x1440.webp&podOriginSize=638820&podOriginPxUrl=https%3A%2F%2Fpod-picture.oss-cn-hangzhou.aliyuncs.com%2Fpod_infinity%2F250428%2Fpod-picture_oss-cn-hangzhou_aliyuncs_com_LX_PO-211-12729261699191806-1_jpg.InfinityxInfinity.webp&podOriginPx=1936_1854&podOriginOss=https%3A%2F%2Fpod-picture.oss-cn-hangzhou.aliyuncs.com%2Fpod_origin%2F250428%2Fpod-picture_oss-cn-hangzhou_aliyuncs_com_LX_PO-211-12729261699191806-1_jpg.InfinityxInfinity.jpg"
                    ],
                    "customDesign": [
                        {
                            "img": "https://oss-cf.cjdropshipping.com/product/2025/04/22/01/180af06e-7b7-4662-b975-070203989480.jpg",
                            "areaNameEn": "",
                            "printWidth": "50",
                            "typeName": "",
                            "type": "1",
                            "scaleX": "1",
                            "backImgList": [
                                {
                                    "color": "1pcs",
                                    "imgSrc": "https://oss-cf.cjdropshipping.com/product/2025/04/22/01/00e2483-b3b2-4873-80ac-e71f4d760e1f.jpg"
                                },
                                {
                                    "color": "4pcs",
                                    "imgSrc": "https://oss-cf.cjdropshipping.com/product/2025/04/22/01/0c42181-d63f-49f9-b6d5-d55574027fcb.jpg"
                                },
                                {
                                    "color": "10pcs",
                                    "imgSrc": "https://oss-cf.cjdropshipping.com/product/2025/04/22/01/1ae2f95-5484-4d30-a93f-64bc740832d2.jpg"
                                },
                                {
                                    "color": "16pcs",
                                    "imgSrc": "https://oss-cf.cjdropshipping.com/product/2025/04/22/01/53ce421-33db-4249-8862-f36ad20083b5.jpg"
                                },
                                {
                                    "color": "18pcs",
                                    "imgSrc": "https://oss-cf.cjdropshipping.com/product/2025/04/22/01/245e348-a87b-4196-a3a4-056f6b391301.jpg"
                                }
                            ],
                            "printHeight": "50",
                            "scaleY": "1",
                            "podType": "4",
                            "top": "297.99999928474426",
                            "areaName": "DIY",
                            "left": "253.99999994039536",
                            "areaType": "1",
                            "imgicon": "",
                            "angle": "0",
                            "fontSize": 12,
                            "fontSpace": 0,
                            "sku": ""
                        }
                    ]
                }
			}
		]
	},
	"requestId": "3adccdcb-d41b-4808-996b-c7c5c833d77d"
}
Field Definition Type Length Note
orderId order id string 200
orderNum order name string 200
platformOrderId Shop order ID string 200
cjOrderId CJ order id string 200
cjOrderCode CJ order code string 200
fromCountryCode shipment country code string 200
shippingCountryCode Recipient country code string 200
shippingProvince Recipient province string 200
shippingCity Recipient city string 200
shippingAddress Recipient address string 200
shippingCustomerName Recipient name string 200
shippingPhone Recipient phone number string 200
remark order remark string 500
logisticName logistic name string 200
trackNumber track number string 200
trackingUrl tracking URL string 200
disputeId CJ dispute ID string 50
orderWeight order weight int 20
orderAmount Order amount BigDecimal (18,2) Unit: $ (USD)
orderStatus Order status string 200 Referer Order Status
createDate Create time string 200 UTC Time
paymentDate Pay time string 200 UTC Time
outWarehouseTime Delivery time DateTime 1 UTC Time, eg: 2025-03-14 13:21:07
storeCreateDate Store order creation time DateTime 1 UTC Time, eg: 2025-03-14 13:21:07
productAmount product amount BigDecimal (18,2) Unit: $ (USD)
isComplete Is the order complete? 1: Complete 0: Incomplete Number 1
isSandbox Is sandbox order integer 1 0-no, 1-yes
storageId storage id string 200 Added on 2025-11-18
storageName storage name string 200 Added on 2025-11-18
privateOutboundOrder Whether a private inventory outbound order boolean true=private inventory outbound order, false=regular order. Consistent with the webhook order message
productList Product List list 200
- vid Variant Id string 200
- quantity quantity int 20
- sellPrice Sell Price BigDecimal (18,2) unit:$(USA)
- storeLineItemId The lineItemId of your store order string 125
- lineItemId Unique ID of the order item in CJ string 50
- productionOrderStatus Production Status Number 1 1=Pending Order, 2=Pending Production, 3=In Production, 4=Production Completed, 5=Production Abnormality
- abnormalType Abnormal Reason int[] 6= Image link error, 9= Production drawings don't match the renderings, 10= Missing hanging ring, 11= Mismatch between die-cutting diagram and printing diagram, 12= uneven edges, 13= letters not connected, 14= Missing order images
- podPropertiesInfo pod product order return information Object
-- effectImgList Product renderings List 200
-- customResources Finished product information List 200
-- productionImgList Production diagram List 200
logisticsTimeliness Logistics Timeliness Object
- logisticsModes Logistics List List
-- logisticsName Logistics Name string DHL Official
-- arrivalTime Arrival Time (Day) string 3-7 Days

Order Status

Order Status Status remark
CREATED order create create order, wait confirm
IN_CART in cart wait confirm, api merge this state
UNPAID unpaid confirm order, CJ order number create
UNSHIPPED unshipped paid, wait for sending
SHIPPED shipped in transit, get tracking number
DELIVERED delivered clients receving
CANCELLED cancelled

error

{
   "code": 1600100,
   "result": false,
   "message": "Param error",
   "data": null,
   "requestId": "323fda9d-3c94-41dc-a944-5cc1b8baf5b1"
}
Field Definition Type Length Note
code error code int 20 Reference error code
result Whether or not the return is normal boolean 1
message return message string 200
data return data object interface data return
requestId requestId string 48 Flag request for logging errors

# Error code and Message

Error Code Message
1600300 order not found
1600300 orderId must be not empty
1600300 The maximum number of features is 20

# 1.8 Order Delete(DEL)

Only orders whose status is CREATED (created, not yet added to cart) or IN_CART (in cart) can be deleted. Once an order has been confirmed or moved to a later state (UNPAID, UNSHIPPED, SHIPPED, DELIVERED, CANCELLED, etc.), it cannot be deleted via this endpoint.

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/order/deleteOrder?orderId=210711100018655344

# CURL

curl --location --request DELETE 'https://developers.cjdropshipping.com/api2.0/v1/shopping/order/deleteOrder?orderId=210711100018655344' \
                --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
Parameter Definition Type Required Length Note
orderId order id string Y 200 Query

# Return

success

{
    "code": 200,
    "result": true,
    "message": "Success",
    "data": "210711100018655344",
    "requestId": "721341bf-abf8-4d8c-b400-1fbdaef79039"
}
Field Definition Type Length Note
code error code int 20 Reference error code
result Whether or not the return is normal boolean 1
message return message string 200
data return data object interface data return
requestId requestId string 48 Flag request for logging errors

error

{
   "code": 1600100,
   "result": false,
   "message": "Param error",
   "data": null,
   "requestId": "323fda9d-3c94-41dc-a944-5cc1b8baf5b1"
}
Field Definition Type Length Note
code error code int 20 Reference error code
result Whether or not the return is normal boolean 1
message return message string 200
data return data object interface data return
requestId requestId string 48 Flag request for logging errors

# 1.9 Confirm Order(PATCH)

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/order/confirmOrder

# CURL

curl --location --request PATCH 'https://developers.cjdropshipping.com/api2.0/v1/shopping/order/confirmOrder' \
                --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
                --header 'Content-Type: application/json' \
                --data-raw '{
                    "orderId": "210711100018655344"
                }'
Parameter Definition Type Required Length Note
orderId order id string Y 200 Query

# Return

success

{
    "code": 200,
    "result": true,
    "message": "Success",
    "data": "210711100018655344",
    "requestId": "721341bf-abf8-4d8c-b400-1fbdaef79039"
}
Field Definition Type Length Note
code error code int 20 Reference error code
result Whether or not the return is normal boolean 1
message return message string 200
data return data object interface data return
requestId requestId string 48 Flag request for logging errors

error

{
    "code": 1603001,
    "result": false,
    "message": "order confirm fail",
    "data": null,
    "requestId": "7dc61955-c0e8-4731-bb9b-393b4fffeaaf"
}
Field Definition Type Length Note
code error code int 20 Reference error code
result Whether or not the return is normal boolean 1
message return message string 200
data return data object interface data return
requestId requestId string 48 Flag request for logging errors

# 1.10 Change Order Warehouse

  • The warehouse of the orders of the platform logistics can be modified through this interface.

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/order/changeWarehouse

# CURL

curl --location 'http://localhost:8081/api2.0/v1/shopping/order/changeWarehouse' \
--header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
--header 'Content-Type: application/json' \
--data '{
    "orderCode": "123",
    "storageId": "1234"
}'
Parameter Definition Type Required Length Note
orderCode order code string Y 200 Query
storageId storage id string Y 200 Query

# Return

success

{
    "code": 200,
    "result": true,
    "message": "Congratulation! Well done!",
    "data": true,
    "requestId": "c627424a858444ef861484ba8d1bee48",
    "success": true
}
Field Definition Type Length Note
code error code int 20 Reference error code
result Whether or not the return is normal boolean 1
message return message string 200
data return data object interface data return
requestId requestId string 48 Flag request for logging errors

error

{
    "code": 1603001,
    "result": false,
    "message": "order query fail",
    "data": false,
    "requestId": "7dc61955-c0e8-4731-bb9b-393b4fffeaaf"
}
Field Definition Type Length Note
code error code int 20 Reference error code
result Whether or not the return is normal boolean 1
message return message string 200
data return data object interface data return
requestId requestId string 48 Flag request for logging errors

# 1.11 Sandbox Simulate Pay(POST)

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/sandbox/simulatePay

# CURL

curl --location --request POST 'https://developers.cjdropshipping.com/api2.0/v1/shopping/sandbox/simulatePay' \
                --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
                --header 'Content-Type: application/json' \
                --data-raw '{
                    "orderId": "210711100018655344"
                }'
Parameter Definition Type Required Length Note
orderId CJ order id string N 200 CJ order id of the sandbox order, either this or shipmentOrderId
shipmentOrderId Parent order id string N 200 Batch simulate pay for all sandbox sub-orders, either this or orderId

Parameter Note: At least one of orderId or shipmentOrderId is required. Pass orderId to simulate pay for a single sub-order; pass shipmentOrderId to batch simulate pay for all sandbox sub-orders under the parent order.

Note: When a parent order contains multiple sub-orders, you cannot use orderId to simulate pay for a single sub-order. Please use shipmentOrderId to batch simulate pay for all sub-orders.

Scope: Only supports sandbox orders created with isSandbox=1. This API only simulates payment success and will not generate real charges, real logistics, or fulfillment.

# Return

success

{
    "code": 200,
    "result": true,
    "message": "Success",
    "data": true,
    "requestId": "9eddf3f5-bd3d-4fae-a4f2-028cbb90db97"
}
Field Definition Type Length Note
code error code int 20 Reference error code
result Whether or not the return is normal boolean 1
message return message string 200
data simulate pay result boolean true-success
requestId requestId string 48 Flag request for logging errors

# 1.12 Sandbox Update Status(POST)

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/sandbox/updateStatus

# CURL

curl --location --request POST 'https://developers.cjdropshipping.com/api2.0/v1/shopping/sandbox/updateStatus' \
                --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
                --header 'Content-Type: application/json' \
                --data-raw '{
                    "orderId": "210711100018655344",
                    "targetStatus": 400
                }'
Parameter Definition Type Required Length Note
orderId CJ order id string Y 200 The CJ order id of the sandbox order
targetStatus Target status code integer Y 20 Optional: 400(unshipped), 500(shipped), 600(completed), 700(closed)

Scope: Only supports sandbox orders created with isSandbox=1. Status update only simulates sandbox order status flow and will not trigger real logistics or fulfillment.

Status Flow Rule: Status can only flow in order: 300→400→500→600→700. Cannot skip or revert.

# Return

success

{
    "code": 200,
    "result": true,
    "message": "Success",
    "data": true,
    "requestId": "9eddf3f5-bd3d-4fae-a4f2-028cbb90db97"
}
Field Definition Type Length Note
code error code int 20 Reference error code
result Whether or not the return is normal boolean 1
message return message string 200
data update status result boolean true-success
requestId requestId string 48 Flag request for logging errors

# Order Status

Order Status remark
CREATED Order Created
IN_CART Order in cart
UNPAID Order unpaid
UNSHIPPED Order has been paid and is currently pending shipment
SHIPPED Order Shipped and in transit
DELIVERED Package delivered
CANCELLED Order cancelled

# 2 Payment

# 2.1 Get Balance(GET)

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/pay/getBalance

# CURL

curl --location --request GET 'https://developers.cjdropshipping.com/api2.0/v1/shopping/pay/getBalance' \
                --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

# Return

success

{
    "code": 200,
    "result": true,
    "message": "Success",
    "data": {
        "amount": 87247.32,
        "noWithdrawalAmount": null,
        "freezeAmount": null
    },
    "requestId": "36fc030a-a110-4318-bc83-f39f9d3e5484"
}
Field Definition Type Length Note
noWithdrawalAmount Bonus amount BigDecimal (18,2) Unit: $ (USD)
freezeAmount Frozen amount BigDecimal (18,2) Unit: $ (USD)
amount Amount BigDecimal (18,2) Unit: $ (USD)

error

{
   "code": 1600100,
   "result": false,
   "message": "Param error",
   "data": null,
   "requestId": "323fda9d-3c94-41dc-a944-5cc1b8baf5b1"
}
Field Definition Type Length Note
code error code int 20 Reference error code
result Whether or not the return is normal boolean 1
message return message string 200
data return data object interface data return
requestId requestId string 48 Flag request for logging errors

# 2.2 Pay Balance(POST)

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/pay/payBalance

# CURL

curl --location --request POST 'https://developers.cjdropshipping.com/api2.0/v1/shopping/pay/payBalance' \
                --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
                --header 'Content-Type: application/json' \
                --data-raw '{
                    "orderId": "12"
                }'
Parameter Definition Type Required Length Note
orderId Order id string Y 200

Sandbox Note: If the order is a sandbox order (isSandbox=1), balance payment will use fake/simulated payment without real charges.

Note: When a parent order contains multiple sub-orders, you cannot use this API to pay by a single orderId. Please use the "Pay Balance V2" API with shipmentOrderId instead.

# Return

success

{
    "code": 200,
    "result": true,
    "message": "Success",
    "data": null,
    "requestId": "7dbe69b9-dd82-4ee3-907c-a6fca833e3ce"
}
Field Definition Type Length Note
code error code int 20 Reference error code
result Whether or not the return is normal boolean 1
message return message string 200
data return data object interface data return
requestId requestId string 48 Flag request for logging errors

error

{
  "code": 1600100,
  "result": false,
  "message": "Param error",
  "data": null,
  "requestId": "323fda9d-3c94-41dc-a944-5cc1b8baf5b1"
}
Field Definition Type Length Note
code error code int 20 Reference error code
result Whether or not the return is normal boolean 1
message return message string 200
data return data object interface data return
requestId requestId string 48 Flag request for logging errors

# 2.3 Pay Balance V2(POST)

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/pay/payBalanceV2

# CURL

curl --location --request POST 'https://developers.cjdropshipping.com/api2.0/v1/shopping/pay/payBalanceV2' \
                --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
                --header 'Content-Type: application/json' \
                --data-raw '{
                    "shipmentOrderId": "12",
                    "payId": "12"
                }'
Parameter Definition Type Required Length Note
shipmentOrderId Shipment order Id string Y 200
payId PayId String N 200 Optional, system will auto-generate if not provided

Sandbox Note: If all sub-orders under the parent order are sandbox orders (isSandbox=1), payBalanceV2 will automatically use sandbox simulated payment without real charges. Sandbox orders and normal orders are not allowed to be in the same parent order.

# Return

success

{
    "code": 200,
    "result": true,
    "message": "Success",
    "data": null,
    "requestId": "7dbe69b9-dd82-4ee3-907c-a6fca833e3ce"
}
Field Definition Type Length Note
code error code int 20 Reference error code
result Whether or not the return is normal boolean 1
message return message string 200
data return data object interface data return
requestId requestId string 48 Flag request for logging errors

error

{
  "code": 1600100,
  "result": false,
  "message": "Param error",
  "data": null,
  "requestId": "323fda9d-3c94-41dc-a944-5cc1b8baf5b1"
}
Field Definition Type Length Note
code error code int 20 Reference error code
result Whether or not the return is normal boolean 1
message return message string 200
data return data object interface data return
requestId requestId string 48 Flag request for logging errors

# 3 Shipping Info

# 3.1 Upload Shipping Info(POST)

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/order/uploadWaybillInfo

Tips:

  1. When uploading the waybill file, please submit the request in multipart/form data format.
  2. This interface can only be called after CJ order payment.

# CURL

curl --location 'https://developers.cjdropshipping.com/api2.0/v1/shopping/order/uploadWaybillInfo' \
                --header 'CJ-Access-Token:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ' \
                --form 'orderId="2511111146000642900"' \
                --form 'waybillFile=@"/C:/Users/Desktop/abcd.pdf"' \
                --form 'cjOrderId="DP2511111145580643400"' \
                --form 'cjShippingCompanyName="USPS"' \
                --form 'trackNumber="123123"'
Parameter Definition Type Required Length Note
orderId Order Id string Y 200
cjOrderId CJ Order Id string Y 200
cjShippingCompanyName CJ Shipping Company Name string Y 200 Referer:Get Storage Info, Get:logisticsBrandList
trackNumber Track Number string Y 200
waybillFile waybill document MultipartFile Y 200

# Return

success

{
  "success": true,
  "message": "",
  "result": true,
  "data": true,
  "requestId": "52f1888a3b4f451d889a84218f2b50dc"
}
Field Definition Type Length Note
code error code int 20 Reference error code
result Whether or not the return is normal boolean 1
message return message string 200
data return data Boolean interface data return
requestId requestId string 48 Flag request for logging errors

error

{
    "code": 806,
    "result": false,
    "message": "Warehouse “null” does not support logistics carrier “USPS”.",
    "data": null,
    "requestId": "309ad9d884ff4994b34f0da17853b970",
    "success": false
}
Field Definition Type Length Note
code error code int 20 Reference error code
result Whether or not the return is normal boolean 1
message return message string 200
data return data object interface data return
requestId requestId string 48 Flag request for logging errors

# 3.2 Update Shipping Info(POST)

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/order/updateWaybillInfo

# CURL

curl --location 'https://developers.cjdropshipping.com/api2.0/v1/shopping/order/updateWaybillInfo' \
                --header 'CJ-Access-Token:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ' \
                --form 'orderId="2511111146000642900"' \
                --form 'waybillFile=@"/C:/Users/Desktop/abcd.pdf"' \
                --form 'cjOrderId="DP2511111145580643400"' \
                --form 'cjShippingCompanyName="USPS"' \
                --form 'trackNumber="123123"'
Parameter Definition Type Required Length Note
orderId Order Id string Y 200
cjOrderId CJ Order Id string Y 200
cjShippingCompanyName CJ Shipping Company Name string Y 200 Referer:Get Storage Info, Get:logisticsBrandList
trackNumber Track Number string Y 200
waybillFile waybill document MultipartFile Y 200

# Return

success

{
  "success": true,
  "message": "",
  "result": true,
  "data": true,
  "requestId": "52f1888a3b4f451d889a84218f2b50dc"
}
Field Definition Type Length Note
code error code int 20 Reference error code
result Whether or not the return is normal boolean 1
message return message string 200
data return data Boolean interface data return
requestId requestId string 48 Flag request for logging errors

error

{
    "code": 804,
    "result": false,
    "message": "This order does not use store platform logistics. Label upload not supported.",
    "data": null,
    "requestId": "715937dad5844ec49d51be43541eeb00",
    "success": false
}
Field Definition Type Length Note
code error code int 20 Reference error code
result Whether or not the return is normal boolean 1
message return message string 200
data return data object interface data return
requestId requestId string 48 Flag request for logging errors

# 3.3 UPDATE POD Pictures(POST)

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/order/podProductCustomPicturesEdit

# CURL

curl --location --request POST 'https://developers.cjdropshipping.com/api2.0/v1/shopping/order/podProductCustomPicturesEdit' \
                --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
                --header 'platformToken: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
                --header 'Content-Type: application/json' \
                --data-raw '{
                    "podPicturesEditParams": [
                        {
                            "orderCode": "123",
                            "lineItemId": "111",
                            "effectImgList": [
                                "https://oss-cf.cjdropshipping.com/product/2025/04/22/01/245e348-a87b-4196-a3a4-056f6b391301.jpg"
                            ],
                            "productionImgList": [
                                "https://oss-cf.cjdropshipping.com/product/2025/04/22/01/245e348-a87b-4196-a3a4-056f6b391301.jpg"
                            ]
                        }
                    ]
                }'
Parameter Definition Type Required Length Note
podPicturesEditParams List Y
-orderCode CJ order id string Y 200
-lineItemId Unique ID of the order item in CJ string Y 200
-effectImgList Product renderings List Y 200
-productionImgList Production diagram List Y 200

# Return

success

{
    "code": 200,
    "result": true,
    "message": "Congratulation! Well done!",
    "data": {
        "list": [
            {
                "orderCode": "123",
                "lineItemId": "111",
                "result": 2,
                "failedMessage": null
            },
            {
            "orderCode": "456",
            "lineItemId": "666",
            "result": 0,
            "failedMessage": "No matching order number found"
            }
        ]
    },
    "requestId": "fa65ceae2f5740459c3e8dc8cf32124c",
    "success": true
}
Field Definition Type Length Note
code error code int 20 Reference error code
result Whether or not the return is normal boolean 1
message return message string 200
data return data Object interface data return
requestId requestId string 48 Flag request for logging errors

data information

Field Definition Type Length Note
list List Y
-orderCode CJ order id string 200
-lineItemId Unique ID of the order item in CJ string 200
-result update result 0:fail, 1: Processing, 2: success int 20
-failedMessage fail reason string 200

Error

{
    "code": 804,
    "result": false,
    "message": "Param error",
    "data": null,
    "requestId": "715937dad5844ec49d51be43541eeb00",
    "success": false
}
Field Definition Type Length Note
code error code int 20 Reference error code
result Whether or not the return is normal boolean 1
message return message string 200
data return data Object interface data return
requestId requestId string 48 Flag request for logging errors

# 4 COGS

# 4.1 Query COGS Basic Data Order Info (POST)

Query basic data order information list based on provided order codes.

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/order/queryCogsBasicDataOrderInfoList

# CURL

curl --location 'https://developers.cjdropshipping.com/api2.0/v1/shopping/order/queryCogsBasicDataOrderInfoList' \
     --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
     --header 'Content-Type: application/json' \
     --data '{
         "orderCodesList": ["DP2506140734320969300"]
     }'
Parameter Definition Type Required Length Note
orderCodesList List of CJ order codes List<String> Y - CJ order number list

# Return

success

{
    "code": 200,
    "data": [
        {
            "cogsBasicDataOrderInfoJson": {
                "a": "CJ2506144290356158893",
                "c": null,
                "d": 1,
                "e": 6,
                "f": 0.74,
                "g": 6.58,
                "h": 5.84,
                "i": null,
                "ii": "38",
                "j": "2025-06-14T07:44:31"
            },
            "orderCode": "DP2506140734320969300",
            "originalOrderCode": "",
            "paymentDate": "2025-06-14T07:44:31",
            "userId": "e11a3d3e3230401ab3984c59949be6a9"
        }
    ],
    "message": "",
    "success": true
}
Field Definition Type Length Note
orderCode Order code string 200
originalOrderCode Original order code string 200 For split orders: original code; for merged orders: pre-merge code
paymentDate Payment time LocalDateTime -
userId User ID string 200
cogsBasicDataOrderInfoJson Basic data details object - See CogsBasicDataOrderInfoJson below

# CogsBasicDataOrderInfoJson

Attribute Type JSON Field Definition
shipmentsOrderId String a Parent order ID
merchantNumber String s Customer ID
payFlag Integer d Payment flag (1: paid)
postage BigDecimal f Total postage after discount
totalAmount BigDecimal g Total order amount
orderProductAmount BigDecimal h Total product amount
paymentDate LocalDateTime j Payment time
taxesInfo Object k Tax information
productInfoMap Map z Product data (productCode → ProductInfo)
disputeInfoMap Map x Dispute data (disputeId → DisputeInfo)
diffAmountInfoMap Map c Supplementary payment info (diffCode → DiffAmountInfo)
storeOrderInfo Object n Store order information
isOutOfStockSplit Integer m Out-of-stock split flag
isReissue Integer qq Reissue order flag (0: no, 1: yes)
outStockFee BigDecimal rr Out-stock fee
storeCostFee BigDecimal tt Storage cost fee
resendParcelFeeMap Map yy Re-dispatch fee for problematic parcels
isReOrder Integer uu Re-order flag
store String ii Warehouse number
storeSkuProcessFlag Integer oo Store SKU processing flag
countryCode String pp Receiving country code

# ProductInfo

Attribute Type JSON Field Definition
productCode String pc Product code
groupProductCode String q Group product code (for combined products)
sku String w SKU
isGroupMain Integer e Main product of combination (0: no, 1: yes)
grams BigDecimal r Weight in grams
price BigDecimal t Actual paid unit price
quantity Integer y Product quantity
productType String u Product type (0: normal, 1: service, 3: packaging, 4: supplier, 5: supplier-shipped, 6: virtual)
img String z Product image
isGift Integer h Is gift (0: no, 1: yes)
couponOrderProductAmount BigDecimal j Coupon amount
headPostage BigDecimal n Head-postage per private inventory item

# DisputeInfo

Attribute Type JSON Field Definition
productPriceFinal BigDecimal q Final product refund amount
iossTaxesFinal BigDecimal e Final IOSS tax
iossTaxHandlingFeeFinal BigDecimal r Final IOSS handling fee
ddpHandlingFee BigDecimal t Final DDP handling fee
dutyTaxesFinal BigDecimal y Final duty tax
icmsTaxesFinal BigDecimal u Final circulation tax
postageFinal BigDecimal p Final refunded shipping fee
outboundCostFinal BigDecimal s Final refunded outbound cost
storageCostFinal BigDecimal d Final refunded storage cost

error

{
    "code": 1600100,
    "result": false,
    "message": "Param error",
    "data": null,
    "requestId": "323fda9d-3c94-41dc-a944-5cc1b8baf5b1"
}

# 5 Merge Order

# 5.1 Auto Match Merge Order List (POST)

Get list of automatically matched mergeable orders.

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/mergeOrder/autoMatchMergeOrderListV3

# CURL

curl --location 'https://developers.cjdropshipping.com/api2.0/v1/shopping/mergeOrder/autoMatchMergeOrderListV3' \
     --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
     --header 'Content-Type: application/json' \
     --data '{
         "filterOrder": true,
         "orderStatus": 100
     }'
Parameter Definition Type Required Length Note
filterOrder Filter manually removed orders boolean Y 1
orderStatus Order status int Y 10 100: Complete order page, 101: Shopping cart page

# Return

success

{
    "code": 200,
    "data": [
        {
            "haveMoreShopOrder": true,
            "mergeShopOrderVOList": [
                {
                    "city": "Shanghai",
                    "country": "China",
                    "countryCode": "CN",
                    "customerName": "John",
                    "logisticsInfoList": [
                        {
                            "logisticsName": "PostNL",
                            "postage": 18.00,
                            "arrivalTime": "2023-11-20",
                            "isChecked": true
                        }
                    ]
                }
            ]
        }
    ],
    "message": "success",
    "success": true
}
Field Definition Type Length Note
haveMoreShopOrder Has multiple store orders boolean 1 false: no, true: yes
mergeShopOrderVOList Store order list Array -
- city City string 200
- country Country string 200
- countryCode Country code string 20
- customerName Customer name string 200
- logisticsInfoList Logistics options list Array -
-- logisticsName Logistics name string 200
-- postage Postage decimal -
-- arrivalTime Estimated arrival time string 200
-- isChecked Currently selected logistics boolean 1
-- basePostage Base postage decimal -
-- packPrice Packaging postage decimal -
-- remoteAmount Remote area fee decimal -

# 5.2 Auto Merge Query Progress (POST)

Query the asynchronous processing progress of auto match merge order list.

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/mergeOrder/autoMergeQueryProgress

# CURL

curl --location 'https://developers.cjdropshipping.com/api2.0/v1/shopping/mergeOrder/autoMergeQueryProgress' \
     --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
     --header 'Content-Type: application/json'

# Return

success

{
    "code": 200,
    "data": {
        "noTask": false,
        "step": 2,
        "stepCount": [10, 20, 30, 10, 30],
        "stepPercent": 5000
    },
    "message": "success",
    "success": true
}
Field Definition Type Length Note
noTask No submitted tasks to process boolean 1
step Current step int 10
stepCount Step ratio array Array - Array length = step count, elements = step weight
stepPercent Current step progress int 10 Max 10000

# 5.3 Auto Merge Query Result (POST)

Query asynchronous results of automatically matched merged orders, returning store order information and logistics options.

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/mergeOrder/autoMergeQueryResult

# CURL

curl --location 'https://developers.cjdropshipping.com/api2.0/v1/shopping/mergeOrder/autoMergeQueryResult' \
     --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
     --header 'Content-Type: application/json'

# Return

success

{
    "code": 200,
    "data": [
        {
            "haveMoreShopOrder": true,
            "mergeShopOrderVOList": [
                {
                    "city": "Shanghai",
                    "country": "China",
                    "countryCode": "CN",
                    "customerName": "John",
                    "logisticsInfoList": [
                        {
                            "logisticsName": "PostNL",
                            "postage": 18.00,
                            "arrivalTime": "2023-11-20"
                        }
                    ],
                    "mergeOrderInfoList": [
                        {
                            "orderCode": "CJ123456789",
                            "orderNumber": "ORD987654",
                            "platform": "shopify",
                            "shopName": "My Store"
                        }
                    ],
                    "phone": "13800138000",
                    "shippingAddress": "123 Main St"
                }
            ]
        }
    ],
    "message": "success",
    "success": true
}
Field Definition Type Length Note
haveMoreShopOrder Has multiple store orders boolean 1 false: no, true: yes
mergeShopOrderVOList Store order list Array -
- mergeOrderInfoList Merge order info list Array -
-- orderCode CJ order code string 200
-- orderNumber Customer order number string 200
-- platform Platform string 50
-- shopName Shop name string 200

# 5.4 Submit Merge Order Batch (POST)

Submit merged orders with auto-matched groups, combining multiple eligible orders into one.

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/mergeOrder/submitMergeOrderBatchV3

# CURL

curl --location 'https://developers.cjdropshipping.com/api2.0/v1/shopping/mergeOrder/submitMergeOrderBatchV3' \
     --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
     --header 'Content-Type: application/json' \
     --data '[
         {
             "logisticName": "PostNL",
             "orderCodeList": ["CJ123456789", "CJ987654321"],
             "orderNumber": "ORD123456",
             "orderStatus": 100,
             "packType": 0
         }
     ]'
Parameter Definition Type Required Length Note
logisticName Logistics name string Y 50
orderCodeList CJ order codes to merge List<String> Y -
orderNumber Customer store order number string Y 50
orderStatus Order status int Y 10 100: Complete order page, 101: Shopping cart
packType Packaging type int Y 1 0: SKU, 1: Store

# Return

success

{
    "code": 200,
    "data": {
        "failGroupCount": 0,
        "failOrderCount": 0,
        "mergeFailOrderGroupList": [],
        "newOrderCodeList": ["CJ999888777"],
        "successGroupCount": 1,
        "successOrderCount": 2
    },
    "message": "success",
    "success": true
}
Field Definition Type Length Note
failGroupCount Number of failed groups int 10
failOrderCount Number of failed orders int 10
mergeFailOrderGroupList Failed order list with reasons Array -
- errorCode Error code int 10 200: success, 11001-11007: various errors, 11100: other
- orderCodes Order codes Array -
newOrderCodeList Successfully merged order codes Array -
successGroupCount Number of successful groups int 10
successOrderCount Number of successful orders int 10

# 5.5 Submit Merge Progress (POST)

Query the asynchronous processing progress of submitted merged orders.

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/mergeOrder/submitProgress

# CURL

curl --location 'https://developers.cjdropshipping.com/api2.0/v1/shopping/mergeOrder/submitProgress' \
     --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
     --header 'Content-Type: application/json'

# Return

success

{
    "code": 200,
    "data": {
        "noTask": false,
        "step": 1,
        "stepCount": [10, 20, 30, 10, 30],
        "stepPercent": 8000
    },
    "message": "success",
    "success": true
}
Field Definition Type Length Note
noTask No submission tasks to process boolean 1
step Current step int 10
stepCount Step ratio array Array - Array length = step count
stepPercent Current step progress int 10 Max 10000

# 5.6 Submit Merge Result (POST)

Get asynchronous processing results of submitted merged orders, returning information about successfully merged and failed orders.

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/mergeOrder/submitResult

# CURL

curl --location 'https://developers.cjdropshipping.com/api2.0/v1/shopping/mergeOrder/submitResult' \
     --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
     --header 'Content-Type: application/json'

# Return

success

{
    "code": 200,
    "data": {
        "failGroupCount": 0,
        "failOrderCount": 0,
        "mergeFailOrderGroupList": [],
        "newOrderCodeList": ["CJ999888777"],
        "successGroupCount": 1,
        "successOrderCount": 2
    },
    "message": "success",
    "success": true
}
Field Definition Type Length Note
failGroupCount Number of failed groups int 10
failOrderCount Number of failed orders int 10
mergeFailOrderGroupList Failed order list with reasons Array -
- errorCode Error code int 10 200: success, 11001: only 1 order selected, 11002: order exception, 11003: empty order, 11004: address mismatch, 11005: no available logistics, 11006: supplier self-shipped order, 11007: order status changed, 11100: other error
- orderCodes Order codes Array -
newOrderCodeList Successfully merged order codes Array -
successGroupCount Number of successful groups int 10
successOrderCount Number of successful orders int 10

# 6 Address Management

Address Management APIs maintain the address book for the current account. This is an account-level address-book capability, not a create-order element for any specific ordering flow. The server fills the user context from the current CJ-Access-Token; do not pass userId or token in the request body.

# 6.1 List Addresses (POST)

URL: https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/address/list

curl --location --request POST 'https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/address/list' \
    --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
    --header 'Content-Type: application/json' \
    --data-raw '{}'

data[].id is the address-book record ID. Private-inventory SY order creation itself does not use this field.

# 6.2 Create Address (POST)

URL: https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/address/create

curl --location --request POST 'https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/address/create' \
    --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
    --header 'Content-Type: application/json' \
    --data-raw '{
        "firstName": "Gilbert",
        "lastName": "Soria",
        "country": "United States",
        "countryCode": "US",
        "province": "OH",
        "city": "HUBER HEIGHTS",
        "address": "3419 BROADMOOR BLVD1",
        "addressNew": "Apt 123",
        "zip": "222260",
        "phone": "9322331159",
        "mail": "test@example.com",
        "isDefault": "0"
    }'

# 6.3 Update Address (POST)

URL: https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/address/update

All create-address fields can be updated. The id field is additionally required. If only the zip code changes, still use this endpoint: first get the full address fields from the address list, then submit id, all mandatory address fields, and the new zip.

Parameter Definition Type Required Length Note
id Address ID string Required for update 100 From the address list response
firstName First name string Required for create/update 100
lastName Last name string Required for create/update 100
country Country name string Required for create/update 100
countryCode Two-letter country code string Required for create/update 10 Refer to country standards
province Province/state string Required for create/update 100
city City string Required for create/update 100
address Address line 1 string Required for create/update 200
addressNew Address line 2 string N 200
zip Zip code string N 30 Address data field. To change the zip code, submit it through the Update Address endpoint.
phone Phone string N 30
mail Email string N 100
isDefault Default address flag string N 1 0-no, 1-yes
countyTown County/town string N 100
consigneeId Consignee ID string N 100

# 6.4 Address API response fields

Field Definition Type Note
data Address API business data object/list/boolean The list API returns an array; create/update returns the address operation result
data[].id Address ID string Address-book record ID; not a private-inventory create-order field
data[].firstName / data[].lastName Name string Contact name fields
data[].country / data[].countryCode Country string Country name and two-letter code
data[].province / data[].city Province/state and city string Address region fields
data[].address / data[].addressNew Address string Address line 1 and line 2
data[].zip Zip code string Address zip code
data[].phone / data[].mail Phone/email string Contact fields
data[].isDefault Default address flag string/integer 0-no, 1-yes

# 7 Private Inventory Orders

The Private Inventory order APIs provide an OpenAPI flow for preorder/private inventory purchasing. The recommended flow is direct selected-product ordering: query private inventory products → pass multiple variants to get confirmation → get warehouses, logistics, and costs → submit multiple productList items to create the SY order. Cart APIs are optional helpers for temporary storage and review, not prerequisites for ordering.

All APIs operate on the account bound to the current CJ-Access-Token. If token or account validation fails, the API returns the validation error.

# Private Inventory OpenAPI Sequence Diagrams

Start by calling the product list API to get available products and SKU information. Select product ID, variant ID/SKU, and quantity from /product/listV2, then use either direct mode or cart mode to confirm warehouse, logistics, cost, create the order, and query the order.

Use one of these two integration modes:

  • Direct mode: do not use the cart. Build variants directly from product ID, SKU/variant ID, and quantity, then confirm warehouse, logistics, and cost before creating the order.
  • Cart mode: add products to the private-inventory cart first, read the cart items, convert the selected cart SKU rows into variants, and then continue with the same confirmation and creation steps as direct mode.
Integration step Purpose What to call in OpenAPI
Get product information Query available products and get product ID, variant ID/SKU, and other order inputs Call /product/listV2, then select the product rows for this order
Choose an integration mode Decide whether to save items in the cart first Direct mode: build variants directly. Cart mode: call /shopping/privateInventory/addToCart, then call /shopping/privateInventory/getCart to read the items
Confirm warehouse, logistics, and cost Get candidate warehouses, logistics, and final amount Call /shopping/privateInventory/getConfirmationWithCost in three passes: variants only → add storageId → add logisticName
Create the private-inventory order Submit final products, warehouse, logistics, and payment option Call /shopping/privateInventory/createOrder; page payment returns a payment page URL
Private-inventory balance payment Pay the private-inventory order with account balance Call /shopping/pay/payBalanceV2 with the returned order number/payment ID and orderType=9
Query order status Get creation result and later status Call /shopping/privateInventory/order/list

# Where to view the data on the website

These website links require the same CJ account to be signed in. If the user is not signed in, the website redirects to sign-in first and then returns to the target page.

Result Website page Notes
After adding items to the private-inventory cart Private-inventory cart (opens new window) View the private-inventory products just added to the cart; you can also call /shopping/privateInventory/getCart to read the same data
After creating a private-inventory order Private-inventory order list (opens new window) View created private-inventory orders; to locate one order, search the order number on the page or append &orderNumber=SY1234567890 to the link

orderType=2 in the order-list link is only the website filter for private-inventory orders. For the balance-payment API, still pass orderType=9 as described above.

Endpoint paths in the diagrams are clickable and jump to the matching API section.

# Direct mode: order selected products directly

sequenceDiagram
    participant You as Your System
    participant Product as Product List API
    participant Cost as Confirmation/Warehouse/Cost API
    participant CreateApi as Create Order API
    participant BalancePay as Balance Payment API
    participant Orders as Order List API

    Note over You,Orders: Direct mode: order by product ID, SKU/variant ID, and quantity without using the cart
    You->>Product: GET /product/listV2
    Product-->>You: Return product ID, variant ID/SKU, and product information
    You->>Cost: POST /shopping/privateInventory/getConfirmationWithCost(variants)
    Cost-->>You: Return confirmed products and available warehouses
    You->>Cost: POST /shopping/privateInventory/getConfirmationWithCost(variants, storageId)
    Cost-->>You: Return logistics and cost for the selected warehouse
    You->>Cost: POST /shopping/privateInventory/getConfirmationWithCost(variants, storageId, logisticName)
    Cost-->>You: Return final amount
    You->>CreateApi: POST /shopping/privateInventory/createOrder(productList, storageId, logisticName, payType)
    alt Page payment
        CreateApi-->>You: Return order number, payment ID, and payment page URL
    else Balance payment
        CreateApi-->>You: Return order number and payment ID
        You->>BalancePay: POST /shopping/pay/payBalanceV2(shipmentOrderId, payId, orderType)
        BalancePay-->>You: Return balance-payment result
    end
    You->>Orders: POST /shopping/privateInventory/order/list
    Orders-->>You: Return private-inventory order status

# Cart mode: save items before ordering

sequenceDiagram
    participant You as Your System
    participant Product as Product List API
    participant AddCart as Add-to-cart API
    participant Cart as Cart API
    participant Cost as Confirmation/Warehouse/Cost API
    participant CreateApi as Create Order API
    participant BalancePay as Balance Payment API
    participant Orders as Order List API

    Note over You,Orders: Cart mode: save items first, then convert cart SKU rows into order input
    You->>Product: GET /product/listV2
    Product-->>You: Return product ID, variant ID/SKU, and product information
    You->>AddCart: POST /shopping/privateInventory/addToCart(productId, variants)
    AddCart-->>You: Return add-to-cart result
    You->>Cart: POST /shopping/privateInventory/getCart
    Cart-->>You: Return cart products, SKUs, and quantities
    Note over You,Cart: Convert selected cart SKU rows into variants
    You->>Cost: POST /shopping/privateInventory/getConfirmationWithCost(variants)
    Cost-->>You: Return confirmed products and available warehouses
    You->>Cost: POST /shopping/privateInventory/getConfirmationWithCost(variants, storageId)
    Cost-->>You: Return logistics and cost for the selected warehouse
    You->>Cost: POST /shopping/privateInventory/getConfirmationWithCost(variants, storageId, logisticName)
    Cost-->>You: Return final amount
    You->>CreateApi: POST /shopping/privateInventory/createOrder(productList, storageId, logisticName, payType)
    alt Page payment
        CreateApi-->>You: Return order number, payment ID, and payment page URL
    else Balance payment
        CreateApi-->>You: Return order number and payment ID
        You->>BalancePay: POST /shopping/pay/payBalanceV2(shipmentOrderId, payId, orderType)
        BalancePay-->>You: Return balance-payment result
    end
    You->>Orders: POST /shopping/privateInventory/order/list
    Orders-->>You: Return private-inventory order status

# 7.0 Order Element Sources

Before creating an order, let the user confirm the products, quantities, warehouse, logistics option, and payment option. Products can come from the product list, cart, or confirmation response; warehouse, logistics, and amounts should follow the options returned by the APIs.

Create field / helper item Source Used by Note
Product ID, variant ID, SKU Product list API /product/listV2, cart, or confirmation response productList[].productId, productList[].variantId, productList[].sku Required for final creation. Use the product list API to identify the product and SKU before confirming or creating the order.
Quantity Client selection, cart quantity, confirmation response productList[].quantity Required for final creation. Use the quantity selected for each SKU.
Storage ID availableStorehouseList[].storageId returned by getConfirmation / getConfirmationWithCost getCostInfo.storageId, logistics/list.storageId, createOrder.storageId Required for final creation. Select from the private-inventory warehouse candidate list. Do not use fixed sample values.
Logistics name availableLogisticList[].logisticName returned by logistics/list or the freight rows returned by getCostInfo createOrder.logisticName, getConfirmationWithCost.logisticName Required for final creation. Select a logistics option available for the current warehouse and products.
Product unit price Final stock-up unit price API calculation Do not submit price when creating the order. Use the amount returned by the API.
Cost details getCostInfo or getConfirmationWithCost response Display and pre-order confirmation Not a create request field.
Payment option User selection createOrder.payType Optional. 1=page payment, returns a payment page URL; 2=balance payment, which can continue with the balance payment API.

# 7.1 Add To Private Inventory Cart (POST)

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/addToCart

# CURL

curl --location --request POST 'https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/addToCart' \
    --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
    --header 'Content-Type: application/json' \
    --data-raw '{
        "productId": "422C91F3-B7D0-47F3-BC66-5E1FE3208BBA",
        "variants": [
            {"variantId": "V001-SKU-A", "quantity": 100}
        ]
    }'
Parameter Definition Type Required Length Note
productId Product ID string Y 200 From private inventory product query APIs
variants Variant list list Y SKU rows to add to the private-inventory cart
variants[].variantId Variant ID string Y 200
variants[].quantity Quantity integer Y 20 1-100000

# Response fields

Field Definition Type Note
data Add-to-cart result object/boolean Some environments may return a boolean directly.
data.success Add succeeded boolean Returned when available
data.addedCount Added SKU-line count integer Returned when available

After a successful add-to-cart call, open the private-inventory cart (opens new window) to view the products; on the API side, call /shopping/privateInventory/getCart to read the cart data.

# 7.2 Get Private Inventory Cart (POST)

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/getCart

The request body can be omitted. If no body is sent, the server treats it as an empty object and queries all private-inventory cart items by default. Pagination parameters are still supported. pageSize is capped at 100 by OpenAPI.

# CURL (omit request body and use defaults)

curl --location --request POST 'https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/getCart' \
    --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

# CURL (paginated query)

curl --location --request POST 'https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/getCart' \
    --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
    --header 'Content-Type: application/json' \
    --data-raw '{"pageNum":1,"pageSize":20,"isAll":0}'
Parameter Definition Type Required Length Note
pageNum Page number integer N 20 Uses service default when omitted
pageSize Page size integer N 20 Uses service default when omitted. Maximum 100; values greater than 100 are capped at 100.
isAll Query all items integer N 1 0-no, 1-yes; default 1

# Response fields

Field Definition Type Note
data.productList Cart product list list Valid cart products grouped by product
data.productList[].productId Product ID string Product ID
data.productList[].productName Product name string Display field
data.productList[].productImage Product image string Display field
data.productList[].variants SKU rows list Cart SKU/variant rows under the product
data.productList[].variants[].id Cart SKU-row ID string Cart SKU-row identifier
data.productList[].variants[].variantId Variant ID string SKU/variant ID
data.productList[].variants[].sku SKU string SKU
data.productList[].variants[].quantity/count Quantity integer SKU quantity
data.productList[].variants[].price Final stock-up unit price number USD. Display/reference only. Price is not required in create-order requests.
data.invalidProductList Invalid product list list Returned when available
data.totalAmount Cart product amount number USD, display only. Do not pass order total to create-order.
data.selectVariantCount SKU count integer Statistics only. Public create flow does not depend on cart selection state.
data.currencyInfo Currency info object Usually contains currencyCode and currencySymbol

# 7.3 Remove Private Inventory Cart Items (POST)

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/removeFromCart

# CURL

curl --location --request POST 'https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/removeFromCart' \
    --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
    --header 'Content-Type: application/json' \
    --data-raw '{"variantIds":["V001-SKU-A"]}'
Parameter Definition Type Required Length Note
variantIds Variant ID list list Y SKU variant IDs to remove

Deletion identifier note: get variantIds from the SKU row id or variantId returned by getCart.

# Response fields

Field Definition Type Note
data Delete result boolean/object Usually returns a boolean. If an object is returned, the API passes it through.

# 7.4 Get Private Inventory Order Confirmation (POST)

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/getConfirmation

# Direct Selected-product Confirmation CURL

curl --location --request POST 'https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/getConfirmation' \
    --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
    --header 'Content-Type: application/json' \
    --data-raw '{
        "variants": [
            {"variantId": "V001-SKU-A", "productId": "422C91F3-B7D0-47F3-BC66-5E1FE3208BBA", "quantity": 100}
        ]
    }'
Parameter Definition Type Required Length Note
variants Variant list list N Pass it for direct selected-product confirmation. Explicit input is recommended and multiple product lines are supported.
variants[].variantId Variant ID string Required in direct selected-product mode 200
variants[].productId Product ID string Required in direct selected-product mode 200
variants[].quantity Quantity integer Required in direct selected-product mode 20 Quantity to confirm for this SKU

# Response fields

Field Definition Type Note
data.orders Confirmation order groups list Product, logistics, and amount information grouped for the confirmation page
data.availableStorehouseList Private-inventory warehouse candidates list Select warehouses from this field. Use storageId from this list for logistics, cost, and create-order requests.
data.availableStorehouseList[].storageId Warehouse ID string Pass it as logistics/list.storageId, getCostInfo.storageId, and createOrder.storageId
data.availableStorehouseList[].displayName Warehouse name string Warehouse name
data.availableStorehouseList[].countryCode Warehouse country/region code string Display or region field
data.availableStorehouseList[].areaId Warehouse area ID integer Display or region field
data.availableStorehouseList[].addresses Warehouse address string Returned when available
data.availableStorehouseList[].address Warehouse address alias string Same address value for direct client display
data.availableStorehouseList[].zipCode Warehouse zip code string Returned when available
data.availableStorehouseList[].selected Selected flag boolean Whether this row matches the request storageId
data.selectedStorageId Selected storage ID string The matched warehouse ID; empty when omitted or unavailable
data.selectedStorehouse Selected warehouse object object Same fields as availableStorehouseList[]; empty when omitted or unavailable
data.orders[].logisticList Confirmation logistics candidates list Confirmation-page logistics candidates. Use logistics/list.availableLogisticList when selecting the final create-order logistics.
data.orders[].logisticList[].logisticName / enName Logistics name string Candidate logistics display/name fields when returned
data.orders[].logisticList[].shippingCost / freightAmount Logistics fee number USD, returned when available
data.orders[].logisticList[].estimateDays / minDeliveryDay / maxDeliveryDay Estimated delivery time string/number Returned when available
data.orders[].logisticList[].selected Selected flag boolean Confirmation-page selected status when returned
data.orders[].products Confirmed product lines list Product lines may be returned directly under orders[]
data.orders[].confirmGroupOrderVOList Confirmation product groups list Product lines may also be returned under group objects
data.orders[].confirmGroupOrderVOList[].products Group product lines list Use together with orders[].products when building final createOrder.productList
data.orders[].products[].id / variantId Variant ID string Use as productList[].variantId for creation
data.orders[].products[].productId Product ID string Use as productList[].productId for creation
data.orders[].products[].sku SKU string Use as productList[].sku for creation
data.orders[].products[].productName Product name string Display field returned when available
data.orders[].products[].productImage Product image string Display field returned when available
data.orders[].products[].quantity / count / itemCount Quantity integer Use as productList[].quantity for creation
data.orders[].products[].price / nowPrice Final stock-up unit price number USD. Display/reference only. Price is not required in create-order requests; the final price is calculated in real time by the API.
data.orders[].products[].weight Weight number SKU weight returned when available
data.totalProductPrice Product amount total number USD, display only. Do not pass order total to create-order.
data.currencyInfo Currency info object Usually contains currencyCode and currencySymbol

# 7.5 Get Private Inventory Available Logistics (POST)

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/logistics/list

Use this API to get available logistics for the selected warehouse. Call it after the user selects products, quantities, and warehouse, then choose the logistics name for create order from the returned list.

# CURL

curl --location --request POST 'https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/logistics/list' \
    --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
    --header 'Content-Type: application/json' \
    --data-raw '{
        "storageId": "WAREHOUSE-HZ-001",
        "variantInfoList": [
            {"id": "V001-SKU-A", "quantity": 100}
        ]
    }'
Parameter Description Type Required Length Remark
storageId Storage ID string Y 200 Select from availableStorehouseList[].storageId returned by getConfirmation or getConfirmationWithCost
variantInfoList Variant info list list Y Product details
variantInfoList[].id Variant ID string Y 200
variantInfoList[].quantity Quantity integer Y 20

# Response fields

Field Type Description
storageId string Warehouse ID used for this logistics query
availableLogisticList list Available logistics list for the selected warehouse and products
availableLogisticList[].logisticName string Logistics name used by create order and cost matching
availableLogisticList[].displayName string Logistics display name
availableLogisticList[].logisticCode string Logistics code, returned when available
availableLogisticList[].shippingCost number Logistics fee in USD with 2 decimal places
availableLogisticList[].estimateDays string Estimated delivery time, returned when available
availableLogisticList[].freightIndex integer Logistics fee row index, starting from 0
availableLogisticList[].selected boolean Selected status in the logistics result; final creation uses the logisticName selected by the caller
selectedLogisticName string Selected logistics name; empty when no logistics is selected
logisticInfoMessage string Message returned when storageId is missing or no logistics are returned; normally empty when logistics are available

# 7.6 Get Private Inventory Cost Details (POST)

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/getCostInfo

# CURL

curl --location --request POST 'https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/getCostInfo' \
    --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
    --header 'Content-Type: application/json' \
    --data-raw '{
        "storageId": "WAREHOUSE-HZ-001",
        "variantInfoList": [
            {"id": "V001-SKU-A", "quantity": 100}
        ]
    }'
Parameter Definition Type Required Length Note
storageId Storage ID string Y 200 Select from availableStorehouseList[].storageId returned by confirmation
variantInfoList Variant info list list Y Product details
variantInfoList[].id Variant ID string Y 200
variantInfoList[].quantity Quantity integer Y 20
logisticName Selected logistics name string N 200 Optional; used to match a selected freight row for cost/integrated amount calculation. Omit it when only querying logistics candidates.

# Response fields

Field Definition Type Note
data.freightAmount / data.logisticsCost / data.shippingCost Logistics fee number Field name depends on the cost result
data.warehouseFee / data.storehouseCost Warehouse/outbound fee number Field name depends on the cost result
data.serviceFee Service fee number USD
data.freightTrialList Available logistics freight rows list Source of logistics/list.availableLogisticList
data.freightTrialList[].logisticName / enName Logistics name string Candidate value for createOrder.logisticName
data.freightTrialList[].shippingCost Shipping fee number USD
data.freightTrialList[].selected Selected flag boolean If client-passed logisticName does not match, OpenAPI does not fall back to this default selected value.
data.costDetails Cost details list Returned when available
data.errorEnList / data.errorSuggestionList Errors and suggestions list Returned when available

# 7.7 Get Confirmation with Cost Details (POST)

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/getConfirmationWithCost

This API returns confirmation data, warehouse options, and cost details in one response. Call it without storageId to get warehouse options; pass the selected storageId to get cost details; pass the selected logisticName to get the final amount.

# CURL

curl --location --request POST 'https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/getConfirmationWithCost' \
    --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
    --header 'Content-Type: application/json' \
    --data-raw '{
        "storageId": "WAREHOUSE-HZ-001",
        "logisticName": "CJ Packet Ordinary",
        "variants": [
            {"variantId": "V001-SKU-A", "productId": "422C91F3-B7D0-47F3-BC66-5E1FE3208BBA", "quantity": 100}
        ]
    }'

# Request parameters

Parameter Definition Type Required Length Note
storageId Selected warehouse ID string N 200 Select from availableStorehouseList[].storageId. Required when cost details are needed.
logisticName Selected logistics name string N 200 Select from logistics/list.availableLogisticList[].logisticName when amountDetail.totalAmount is needed.
variants Variant list list N Recommended for direct selected-product confirmation. Multiple product lines are supported.
variants[].variantId Variant ID string Required when using variants 200
variants[].productId Product ID string Required when using variants 200
variants[].quantity Quantity integer Required when using variants 20 Quantity to confirm for this SKU.

First call this API without storageId; pass storageId after the warehouse is selected; pass logisticName after the logistics option is selected to get the final amount.

# Candidate warehouse fields

availableStorehouseList is the warehouse selection list for both getConfirmation and getConfirmationWithCost. Fields are:

Field Type Description
availableStorehouseList[].storageId string Warehouse ID that can be passed as storageId in logistics, cost, confirmation-with-cost, or create-order requests.
availableStorehouseList[].displayName string Warehouse name.
availableStorehouseList[].countryCode string Warehouse country/region code
availableStorehouseList[].areaId integer Warehouse area ID
availableStorehouseList[].addresses string Warehouse address
availableStorehouseList[].address string Warehouse address alias for direct client use
availableStorehouseList[].zipCode string Warehouse zip code when returned
availableStorehouseList[].selected boolean Whether this warehouse was passed in this request and is used for cost calculation. It is false when storageId is omitted or does not match

# Response data structure

Field Type Description
confirmation object Confirmation data. Warehouse candidates are returned at top-level availableStorehouseList.
confirmation.orders list Confirmation order groups with product, logistics, and amount information.
confirmation.orders[].products list Confirmed product lines returned directly under an order group when available.
confirmation.orders[].confirmGroupOrderVOList[].products list Confirmed product lines returned under group objects when available.
confirmation.orders[].logisticList list Confirmation-page logistics candidates. Use logistics/list.availableLogisticList for final create-order logistics selection.
availableStorehouseList list Candidate warehouse list, including warehouse ID, warehouse name, country/region, address, zip code, and selected status.
selectedStorageId string Warehouse ID passed in this request and found in candidates; empty when omitted or unavailable
selectedStorehouse object Matched warehouse object with the same fields as availableStorehouseList[], with selected=true; empty when omitted or unavailable
costInfo object Cost details for the selected warehouse, same as getCostInfo.data; returned only when a valid storageId is passed.
amountDetail object Amount summary. All amounts are in USD with 2 decimal places. It includes product line amounts, service fee, and the selected shipping fee. totalAmount is returned only when warehouse and logistics are selected and all key amounts exist
amountDetail.productAmountList list Product line amount details, including variantId, productId, sku, quantity, final stock-up unit price unitPrice, and line subtotal productAmount; wholesale price or other price types are not returned
amountDetail.productAmountList[].unitPrice number Final stock-up unit price, USD, 2 decimal places
amountDetail.productAmountList[].productAmount number Product line subtotal, USD, 2 decimal places
amountDetail.productAmount number Product total amount in USD with 2 decimal places; empty if any product amount is missing
amountDetail.serviceFee number Service fee in USD with 2 decimal places from costInfo.serviceFee
amountDetail.requestedLogisticName string Logistics name passed in this request and used to match a freight row; empty if not passed
amountDetail.selectedFreight object Freight row used for the total. If logisticName is passed but not matched, this field is empty and total amount is not calculated.
amountDetail.shippingCost number Selected shipping fee in USD with 2 decimal places from amountDetail.selectedFreight.shippingCost
amountDetail.totalAmount number Product amount + service fee + shipping fee in USD with 2 decimal places; returned only when warehouse and logistics are selected and all key amounts exist
amountDetail.totalAmountCalculated boolean Whether the total amount is calculated successfully. If false, check missingAmountItems.
amountDetail.missingAmountItems list Missing amount items. When logistics is not selected, it usually contains selectedFreight; the total amount is not forced when any key item is missing
costInfoMessage string Explanation returned when storageId is missing, unavailable, no warehouse is available, or variant info is unavailable for cost calculation; normally empty when costInfo exists

# 7.8 Create Private Inventory Order (POST)

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/createOrder

Before creating a private-inventory order, make sure the products, warehouse, logistics option, and payment option are selected. Page payment returns a payment page URL; for balance payment, use the create result to continue with the private-inventory balance payment API.

# CURL

curl --location --request POST 'https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/createOrder' \
    --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
    --header 'Content-Type: application/json' \
    --data-raw '{
        "productList": [
            {"variantId": "V001-SKU-A", "productId": "422C91F3-B7D0-47F3-BC66-5E1FE3208BBA", "sku": "CJJJJTJT00873-Black", "quantity": 100},
            {"variantId": "V002-SKU-B", "productId": "D9B2A2E0-88A1-44A6-9F7D-PRIVATE-B", "sku": "CJJJJTJT00873-White", "quantity": 50}
        ],
        "logisticName": "CJ Packet Ordinary",
        "storageId": "WAREHOUSE-HZ-001",
        "payType": 1
    }'
Parameter Definition Type Required Length Note
productList Final product list list Y Cannot be empty and may contain multiple product lines.
productList[].variantId Variant ID string Y 200 SKU/variant ID
productList[].productId Product ID string Y 200
productList[].sku SKU string Y 200
productList[].quantity Quantity integer Y 20 Final order quantity for this SKU
productList[].price Final stock-up unit price BigDecimal N (18,2) Optional and not required. It is not used for order billing; use the price returned by the API.
logisticName Logistics name string Y 200 Select from availableLogisticList[].logisticName returned by logistics/list
storageId Storage ID string Y 200 Select from availableStorehouseList[].storageId returned by getConfirmation or getConfirmationWithCost
payType Payment option integer N 10 1=page payment, returns a payment page URL after order creation; 2=balance payment

For page payment, a payment page URL is returned after the order is created. For balance payment, call the private-inventory balance payment API with the order number and payment ID from the create result.

# Response fields

Field Definition Type Note
data.orderId / data.orderCode SY order number string Private-inventory order number after successful creation. The field name depends on the create result.
data.payId Payment order ID string Returned when available
data.cjPayUrl Payment page URL string Returned for page payment
data.price Created order amount number USD, returned when available
data.riskInterceptOrderList Risk-intercepted orders list May be returned when risk control blocks the order
data.checkPlaceOrderInfo Orderability check details object Returned when orderability validation fails
data.checkPlaceOrderInfo.confirmStatus Orderable flag boolean false means the submitted product, warehouse, logistics, inventory, price, or weight is not currently orderable
data.checkPlaceOrderInfo.productInfoVOList Unavailable products list Contains variant ID, SKU, and unavailable reason
data.availableLogisticList Current available logistics list Returned when logisticName is unavailable; fields are the same as logistics/list.availableLogisticList
data.requestedLogisticName Requested logistics name string Logistics name submitted but not matched

After the order is created, open the private-inventory order list (opens new window) to view it; to locate one order directly, search the order number on the page or append &orderNumber=ORDER_NUMBER to the link.

# 7.9 Balance Payment V2 (POST)

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/pay/payBalanceV2

This API supports balance payment for multiple order types, distinguished by orderType:

  • Private-inventory order (orderType=9): Pay after creating a private-inventory order. Use data.orderId or data.orderCode from createOrder as shipmentOrderId; payId is optional.
  • Makeup bill (orderType=24): Pay a makeup payment order created by makeup/createPayOrder using account balance. Use the data.payOrderCode from createPayOrder as shipmentOrderId; payId is required (use createPayOrderdata.payId).
  • Default (no orderType): Normal dropshipping-order balance payment.

# CURL - Private-inventory order example

curl --location --request POST 'https://developers.cjdropshipping.com/api2.0/v1/shopping/pay/payBalanceV2' \
    --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
    --header 'Content-Type: application/json' \
    --data-raw '{
        "shipmentOrderId": "SY1234567890",
        "orderType": 9,
        "payId": "PAY1234567890"
    }'

# CURL - Makeup bill example

curl --location --request POST 'https://developers.cjdropshipping.com/api2.0/v1/shopping/pay/payBalanceV2' \
    --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
    --header 'Content-Type: application/json' \
    --data-raw '{
        "shipmentOrderId": "2605260000000001",
        "orderType": 24,
        "payId": "PAY260526000001"
    }'
Parameter Definition Type Required Length Note
shipmentOrderId Order number string Y 100 Private-inventory: use createOrderorderId; Makeup: use createPayOrderpayOrderCode
orderType Order type integer N 20 9=private-inventory; 24=makeup bill (MD_BK parent-order makeup); omit for normal dropshipping
payId Payment ID string N/required 100 Optional for private-inventory; required for makeup bill — use createPayOrderdata.payId

# Response fields

Field Definition Type Note
code Error code int See the error code standard table
result Success flag boolean true means the API was processed successfully
message Response message string Processing result message
data Payment result identifier string Usually the order number for this payment; use the actual response value
requestId Request ID string For troubleshooting

# 7.10 Query Private Inventory Order List (POST)

# URL

https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/order/list

# CURL

curl --location --request POST 'https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/order/list' \
    --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
    --header 'Content-Type: application/json' \
    --data-raw '{
        "pageNum": 1,
        "pageSize": 10,
        "orderContent": "SY1234567890",
        "createOrderDateStart": 1717200000000,
        "createOrderDateEnd": 1719791999000
    }'
Parameter Definition Type Required Length Note
pageNum Page number integer N 20 Default 1, minimum 1. Specifies which page to return
pageSize Page size integer N 20 Default 10, maximum 200. A larger value returns a parameter error
orderContent Search keyword string N 100 Pass one keyword at a time. Supports private-inventory order number starting with SY, payment order number, SKU, product name, and other searchable order-list content
orderStatus Order status string N 50 Common values: 3=Awaiting Payment, 11=Payment Incoming, 10=Pending, 6=Awaiting Dispatch, 12=Dispatched, 7=Completed, 13=Closed, 8=Canceled. If omitted, orders in viewable statuses are returned
payStatus Unpaid sub-status integer N 1 Only works when orderStatus=3. Empty=Awaiting Payment and Payment Incoming, 0=Awaiting Payment only, 1=Payment Incoming only
createOrderDateStart Created time start long N 20 Millisecond timestamp. Returns orders created after this timestamp
createOrderDateEnd Created time end long N 20 Millisecond timestamp. Returns orders created before this timestamp
isAmountDifference Amount difference flag integer N 1 Empty=no filter, 1=orders with amount differences only, 0=orders without amount differences only

# Response fields

Field Definition Type Note
data.pageSize Page size number Page size of this response
data.pageNumber Page number number Page number of this response
data.totalRecords Total records number Total orders matching the filters
data.totalPages Total pages number Total pages calculated by pageSize
data.content Order list list Private-inventory order details on the current page

data.content[] order fields:

Field Definition Type Note
orderCode SY order number string Unique private-inventory order number
status Order status code string Examples: 3, 11, 10, 6, 12, 7, 13, 8
statusDesc Order status description string Display text such as Awaiting Payment, Pending, or Dispatched
disputeStatus Dispute-related order status string Returned when dispute records exist
storageId Warehouse ID string Private-inventory warehouse ID used by the order
storageNo2Name Warehouse name string Warehouse English name or display name
stockout Stockout flag boolean true means the order has stockout information
logisticName Logistics name string Logistics route selected when the order was created
logisticsMode Logistics mode string Logistics method or route type
postage Postage number Amount in USD
showPostage Display postage number Amount converted to the account display currency
trackingNumber Tracking number string Carrier tracking number, returned when available
cjTrackingNumber CJ tracking number string CJ-side tracking number, returned when available
paymentExpirationTime Payment expiration time number Millisecond timestamp for unpaid orders
inventoryReserved Inventory reserved flag boolean Usually true when the order is unpaid and not expired
createDate Created time string Example: 2021-10-12 01:33
createDateTime Created timestamp number Millisecond timestamp
paymentDate Paid time string Returned after payment, same format as createDate
paymentDateTime Paid timestamp number Millisecond timestamp, returned after payment
orderAmount Product subtotal number Product amount in USD
showOrderAmount Display product subtotal number Product amount converted to the account display currency
amount Order total number Total amount in USD, usually including products, postage, service fee, and taxes
showAmount Display order total number Total amount converted to the account display currency
payableAmount Payable strikethrough amount number Original or payable display amount when available
showPayableAmount Display payable strikethrough amount number Converted amount in the account display currency
discountMoney Platform discount amount number Discount amount in USD
productDiscountMoney Product discount amount number Product discount in USD
postageDiscountMoney Postage discount amount number Postage discount in USD
serviceFee Service fee number Service fee in USD
showServiceFee Display service fee number Service fee converted to the account display currency
iossNumber IOSS number string Returned when IOSS declaration is used
iossType IOSS declaration type integer 1=do not use IOSS, 2=use my IOSS, 3=use CJ IOSS
iossTaxes IOSS taxes number Tax amount in USD
taxesFlag Tax payment-on-behalf flag integer 0=no, 1=yes
taxesType Tax type integer 0=none, 1=EU IOSS, 2=Brazil Duty tax
orderQuantity Total item quantity integer Sum of all item quantities in the order
stockoutRefundStatus Stockout refund status string 0=pending refund, 1=refunded, 2=rejected
impStorageFlag Inventory-order flag string Private-inventory related flag
isContainPack Contains packaging products integer 0=no, 1=yes
orderSourceType Order source type string For example Excel upload or store synchronization
paymentSign Payment-in-progress prompt flag string 0=no prompt, 1=bank card payment in progress prompt
handlerResult Stockout handling result string Split shipment, replacement, stockout refund, etc.
refundAmount Refund amount number Returned when a refund exists
refundStatus Refund status integer 1=pending refund, 2=refunded
refundTime Refund time string Returned when a refund exists
orderType Order type integer Private-inventory orders are usually 2
orderCategory Order category string Private-inventory orders are usually SY
paymentType Payment type string Stripe, PayPal, Checkout, etc.; may be returned after payment
variantTypeSum Variant type count integer Number of SKU/variant types in the order
diffType Difference source type integer 1=manual creation, 2=order review, 3=postage supplement
diffAmount Difference amount number Difference amount in USD
showDiffAmount Display difference amount number Difference amount converted to the account display currency
openDispute Can open dispute boolean true means the current status allows opening a dispute
abnormalPerformanceType Fulfillment exception type integer 0=none, 1=exception, 2=completed
paymentOrderCodeList Payment order numbers list Payment order numbers associated with this order
isRepeatPayment Repeat payment flag integer 0=no, 1=yes
isShowInventoryRecord Show inventory record flag integer 0=do not show, 1=show
canPayPostage Can pay postage flag integer Returned when postage supplement payment may be needed
postagePayStatus Postage payment status integer 1=waiting for logistics info, 2=to be paid, 3=payment in progress, 4=paid
postagePayStatusDesc Postage payment status description string Display text for postage payment status
postagePayStatusRemark Postage payment remark string Extra description for the postage payment status
selfPickAddressInfo Self-pickup address information object Returned for self-pickup orders
selfPickCode Self-pickup code string Returned for self-pickup orders
currencyInfo Currency information object Display currency, exchange rate, and related information
isReceipt Receipt flag integer 0=no, 1=yes
canViewWarehouseVideo Can view warehouse operation video boolean true means the video can be viewed
noViewWarehouseVideoReason Reason video cannot be viewed integer Reason code returned when video cannot be viewed

data.content[].supplierList[] and product fields:

Field Definition Type Note
supplierId Supplier ID string Supplier ID of the products
supplierName Supplier name string Supplier display name
productList SPU list list Products grouped by supplier
productList[].productId Product ID string CJ product SPU ID
productList[].productVariantListList Variant list list SKU/variant list under the product
productVariantListList[].productCode Order product ID string Order product line ID
productVariantListList[].orderCode Order number string Same as orderCode
productVariantListList[].stanProductId Variant ID string CJ product variant ID
productVariantListList[].sku SKU string Product SKU
productVariantListList[].cjProductId Product ID string CJ product SPU ID
productVariantListList[].cjProductName Product name string CJ product English name
productVariantListList[].cjImage Product image string Product image URL
productVariantListList[].property Property string Product property
productVariantListList[].variantKey Variant key string Variant specification value
productVariantListList[].quantity Quantity integer Purchased quantity
productVariantListList[].allocateNum Allocated quantity integer Quantity stocked in or allocated from inventory
productVariantListList[].originalPrice Original price number Original price in USD
productVariantListList[].showOriginalPrice Display original price number Original price converted to the account display currency
productVariantListList[].price Unit price number Unit price in USD
productVariantListList[].showPrice Display unit price number Unit price converted to the account display currency
productVariantListList[].discount Discount rate number Returned when a discount exists
productVariantListList[].weight Weight number Product weight, usually in grams
productVariantListList[].refundStatus Product refund status integer 1=pending refund, 2=refunded
productVariantListList[].productType Product type string Product type identifier
productVariantListList[].stockout Stockout flag boolean true means this product is out of stock
productVariantListList[].handlerResult Product handling result string Stockout or exception handling result
productVariantListList[].originalSku Original SKU string Returned when the SKU has changed
productVariantListList[].groupProduct Group product flag boolean true means this is a bundle/group product
productVariantListList[].isPod POD product flag integer POD product identifier
productVariantListList[].unCertified Missing product information flag integer 1=product information missing; other values mean complete
productVariantListList[].productGroupChildList Child products list Returned for bundle/group products
productGroupChildList[].id Child variant ID string Child product variant ID
productGroupChildList[].sku Child SKU string Child product SKU
productGroupChildList[].nameEn Child product name string Child product English name
productGroupChildList[].image Child product image string Child product image URL
productGroupChildList[].itemCount Child quantity integer Child product quantity
productGroupChildList[].allocateNum Child allocated quantity integer Quantity stocked in or allocated for the child product
productGroupChildList[].variantKey Child variant key string Child product specification value
productGroupChildList[].packWeight Child package weight number Single package weight
productGroupChildList[].totalPackWeight Child total package weight number Quantity multiplied by package weight
productGroupChildList[].price Child product price number Price in USD

The response may include more order display fields. Use the fields above as the main reference; unlisted extension fields should be interpreted according to the actual returned value.

# Common Return

success

{
    "code": 200,
    "result": true,
    "message": "Success",
    "data": {},
    "requestId": "2b97f15603384fe4832e85617cf07d9c"
}

error

{
    "code": 1600100,
    "result": false,
    "message": "Param error",
    "data": null,
    "requestId": "2b97f15603384fe4832e85617cf07d9c"
}
Field Definition Type Length Note
code Error code int 20 Reference error code
result Whether the return is normal boolean 1
message Return message string 200 Parameter or business error message when the query fails
data Return data object Order-list pagination data on success, or null on failure
requestId Request ID string 48 Used for log troubleshooting

# 8 Private Inventory Outbound Orders

Private inventory outbound APIs let an OpenAPI client create an OMS private inventory outbound order, poll inventory-lock progress, submit the outbound order, and check payment/parent-order status. All APIs use the account resolved from CJ-Access-Token. Do not pass customer identity or OMS internal fields such as userNum, userId, merchantId, permissionCode, systemInvoke, createUserId, createUserName, thirdStorage, or deliveryType.

The private inventory used for outbound can be reviewed by signing in to MyCJ and opening the “Warehouse → Private Inventory” module to view the corresponding private order and inventory information.

# 8.1 API list

API Method Description
/api2.0/v1/shopping/privateInventory/outbound/address/list POST Query address candidates for the current token user
/api2.0/v1/shopping/privateInventory/outbound/product/query POST Query outboundable products by warehouse, SKU/SPU, or privateOrderId
/api2.0/v1/shopping/privateInventory/outbound/product/batch-refresh POST Refresh selected products before creation
/api2.0/v1/shopping/privateInventory/outbound/create POST Create or update an outbound order; submit=true can submit after creation
/api2.0/v1/shopping/privateInventory/outbound/progress POST Query creation progress, lock failures, submit/payment status
/api2.0/v1/shopping/privateInventory/outbound/submit POST Submit an outbound order
/api2.0/v1/shopping/privateInventory/outbound/detail POST Query outbound order detail
/api2.0/v1/shopping/privateInventory/outbound/cancel POST Cancel an unfinished outbound order

Recommended flow: address/listproduct/queryproduct/batch-refreshcreate → poll progress; after creation completes, call submit or create with submit=true, then keep polling progress for payment/parent-order status. If submit returns insufficient inventory or lock failure, do not retry the same request. Query detail, reduce quantities or remove failed product lines, call create again with the same orderId, and submit again after progress becomes submit-ready.

# 8.1.1 Sequence Diagram and Integration Notes

Endpoint labels using outbound/... become clickable after the page renders; click the blue underlined endpoint text inside the diagram to jump to the matching API section.

sequenceDiagram
    autonumber
    participant Client as OpenAPI Client
    participant API as CJ OpenAPI

    Client->>API: outbound/address/list query address candidates
    API-->>Client: address candidates
    Client->>API: outbound/product/query(storageId, skuOrSpu/privateOrderId)
    API-->>Client: product candidates
    Client->>API: outbound/product/batch-refresh(products)
    API-->>Client: latest outboundable quantity
    Client->>API: outbound/create(form, address, productList, submit)
    API-->>Client: orderId + nextAction=POLL_CREATE_PROGRESS
    loop Poll creation progress
        Client->>API: outbound/progress(orderId)
        API-->>Client: createProgress/createStatus/lockFails/nextAction
    end
    alt lockFails not empty or nextAction=ADJUST_LOCK_FAIL_PRODUCTS
        Client->>API: outbound/detail(orderId)
        API-->>Client: outbound order and product-line echo data
        Client->>API: outbound/create(orderId + adjusted product lines)
        API-->>Client: orderId + nextAction
    else lockFails empty and nextAction=SUBMIT_ORDER
        Client->>API: outbound/submit(orderId)
        API-->>Client: submitAccepted + nextAction
    end
    Client->>API: outbound/progress(orderId)
    API-->>Client: submitStatus/paymentStatus/shipmentOrderId/paymentOrderId
    opt Query detail or cancel an unfinished outbound order
        Client->>API: outbound/detail(orderId)
        API-->>Client: outbound order detail
        Client->>API: outbound/cancel(orderId, reason)
        API-->>Client: cancel result
    end

Integration note: OpenAPI customers do not use OMS page login and should not pass internal identity fields such as userId, userNum, or customerNo. Customer identity is resolved from CJ-Access-Token and injected server side. Clients should follow /progress and /submit responses to decide the next action.

# 8.1.2 Address Module and Outbound Address Reuse Sequence

The Address Management module maintains the address book for the current account. Prepare address data through List Addresses, Create Address, and Update Address, then call the private-inventory outbound address/list to get address candidates for the current token and fill the address object in create. The current public Address Management docs expose list, create, and update only; no public delete-address endpoint was found, so the sequence diagram does not include a delete flow.

Endpoint labels using Address module address/... and outbound/... become clickable after the page renders.

sequenceDiagram
    autonumber
    participant Client as OpenAPI Client
    participant API as CJ OpenAPI

    Client->>API: Address module address/list query address book
    API-->>Client: Address book list
    opt Need to create address
        Client->>API: Address module address/create submit full address fields
        API-->>Client: Operation result
    end
    opt Need to update address
        Client->>API: Address module address/update(id + full address fields)
        API-->>Client: Operation result
    end
    Client->>API: outbound/address/list get outbound address candidates
    API-->>Client: Fields for create.address
    Client->>API: outbound/create(address + productList)
    API-->>Client: Return orderId and next action

# 8.2 Address List (POST)

URL: https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/outbound/address/list

The request body can be empty. Use the response fields to fill the address object in the create API.

Request example:

{}

Response example:

{
    "code": 200,
    "result": true,
    "message": "Success",
    "data": [
        {
            "id": "ADDR001",
            "name": "Gilbert Soria",
            "countryCode": "US",
            "province": "OH",
            "city": "HUBER HEIGHTS",
            "address": "3419 BROADMOOR BLVD1",
            "addressNew": "Apt 123",
            "zip": "222260",
            "phone": "9322331159",
            "mail": "test@example.com"
        }
    ]
}
Response field Type Description
data[].id string Address record ID for address-book display only.
data[].name string Full recipient name; can fill address.customerName.
data[].firstName / data[].lastName string Recipient first name / last name.
data[].country / data[].countryCode string Country name / two-letter country code.
data[].province / data[].city / data[].countyTown string Province/state, city, county/town; countyTown can fill address.town.
data[].address / data[].addressNew string Address line 1 / address line 2.
data[].zip / data[].phone / data[].mail string ZIP code, phone, email.
data[].consigneeId string Consignee ID; can fill address.consigneeId.

# 8.3 Query Outboundable Products (POST)

URL: https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/outbound/product/query

Parameter Definition Type Required Note
storageId Warehouse ID string Y Selected outbound warehouse.
skuOrSpu SKU/SPU keyword string N Pass at least one of skuOrSpu and privateOrderId.
privateOrderId Private inventory order number string N Mapped to downstream privateOrderCode.
orderId Outbound order number string N Pass when updating an outbound order; mapped to downstream orderCode.
Response field Type Description
data[].id string Product-line ID; used when updating an existing outbound product line.
data[].uid string Row unique key, usually privateOrderId + stanProductId.
data[].productId / data[].spu / data[].sku string Product ID, SPU, SKU.
data[].stanProductId string Standard variant ID; required by the create API.
data[].productName / data[].productImg string Product name and image.
data[].value1 / data[].value2 / data[].value3 string SKU option values.
data[].price number Current display unit price from Product Center; OMS fetches the latest price again during creation.
data[].privateOrderId string Private inventory order number.
data[].availableQuantity integer Current outboundable quantity.
data[].lockQuantity integer Quantity already locked by the current outbound order when editing.

# 8.4 Batch Refresh Selected Inventory (POST)

URL: https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/outbound/product/batch-refresh

Parameter Definition Type Required Note
storageId Warehouse ID string Y Selected outbound warehouse.
orderId Outbound order number string N Used to exclude quantities already locked by the current order when editing.
products Selected products list Y Must not be empty.
products[].privateOrderId Private inventory order number string Y Mapped to downstream privateOrderCode.
products[].stanProductId Standard variant ID string Y Variant whose inventory needs refreshing.
products[].price Display price number N Inventory refresh does not rely on this field.

Response example:

{
    "code": 200,
    "result": true,
    "message": "Success",
    "data": [
        {
            "privateOrderId": "PO26050001",
            "stanProductId": "CJVAR001",
            "uid": "PO26050001-CJVAR001",
            "availableQuantity": 118
        }
    ]
}
Response field Type Description
data[].privateOrderId string Private inventory order number.
data[].stanProductId string Standard variant ID.
data[].uid string Row unique key.
data[].availableQuantity integer Current outboundable quantity.

The current response mainly returns privateOrderId, stanProductId, uid, and availableQuantity. Use /product/query or /detail for full display fields such as name, image, SKU, and price.

# 8.5 Create Private Inventory Outbound Order (POST)

URL: https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/outbound/create

curl --location --request POST 'https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/outbound/create' \
    --header 'CJ-Access-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
    --header 'Content-Type: application/json' \
    --data-raw '{
        "orderNumber": "OUTBOUND-API-001",
        "storageId": "08898c4735bf43068d5d677c1d217ab0",
        "platform": "API",
        "storeName": "API Store",
        "postagePayNode": 4,
        "address": {
            "customerName": "Gilbert Soria",
            "shippingAddress": "3419 BROADMOOR BLVD1",
            "shippingAddress2": "Apt 123",
            "city": "HUBER HEIGHTS",
            "country": "United States",
            "countryCode": "US",
            "province": "OH",
            "zipCode": "222260",
            "phone": "9322331159",
            "email": "test@example.com"
        },
        "productList": [
            {
                "sku": "CJJJJTJT00873-Black",
                "stanProductId": "CJVAR001",
                "privateOrderId": "PO26050001",
                "quantity": 2
            }
        ],
        "submit": false
    }'
Parameter Definition Type Required Note
orderId Outbound order number string Required for update Omit when creating; mapped to downstream orderCode.
orderNumber Custom order number string Y OMS custom order number.
storageId Warehouse ID string Y Shipping warehouse.
platform Store platform string N Defaults on the server if omitted.
storeName Store name string N Client display field.
postagePayNode Postage payment node integer Y 4=pay before outbound, 5=pay after outbound, 6=no payment required.
reason Application reason string Required when postagePayNode=6 Application reason.
reasonEn English application reason string N English application reason.
address.customerName Recipient string Y Can be filled from address-list name.
address.shippingAddress / address.shippingAddress2 Address line 1 / line 2 string Line 1 required Shipping address.
address.city / address.province / address.town City / province / town string City required town can be filled from address-list countyTown.
address.countryCode / address.country Country code / country name string countryCode required Two-letter country code is used by OMS validation.
address.zipCode / address.phone / address.email ZIP / phone / email string N Shipping contact fields.
address.taxId / address.consigneeId Tax ID / consignee ID string N Optional.
productList Product lines list Y Must not be empty.
productList[].id Existing product-line ID string Required when updating a line Omit when creating a new outbound order.
productList[].uid Row unique key string N Recommended for troubleshooting; current creation logic does not depend on it.
productList[].sku SKU string Y Product SKU.
productList[].stanProductId Standard variant ID string Y From /product/query.
productList[].price Display price number N Not a trusted input; OMS writes the latest Product Center price during creation.
productList[].privateOrderId Private inventory order number string Y Mapped to downstream privateOrderCode.
productList[].quantity Outbound quantity integer Y Must be greater than 0 and not exceed available inventory.
submit Auto submit boolean N Default false.

Success response:

Response field Type Description
data.orderId string Outbound order number; downstream field is orderCode.
data.createTaskStarted boolean Whether the async creation task has started.
data.submitRequested boolean Whether auto-submit was requested.
data.nextAction string Next action, usually POLL_CREATE_PROGRESS.

# 8.6 Query Progress (POST)

URL: https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/outbound/progress

Request body:

{
    "orderId": "SD260526000001"
}

Response example:

{
    "code": 200,
    "result": true,
    "message": "Success",
    "data": {
        "orderId": "SD260526000001",
        "createProgress": 60,
        "createStatus": "CREATE_SUB_ORDER_SUCCESS",
        "nextAction": "WAIT_LOCK_ARRIVE",
        "lockFails": []
    }
}
Response field Type Description
data.orderId string Outbound order number.
data.progress / data.createProgress number Creation progress, currently mainly 0/60/100.
data.createStatus string PROCESSING, CREATE_SUB_ORDER_SUCCESS, TASK_COMPLETE, or LOCK_FAIL.
data.lockFails list Products that failed to lock inventory; adjust quantities if present.
data.lockFails[].sku / data.lockFails[].privateOrderId string Failed SKU / private inventory order number.
data.lockFails[].quantity / data.lockFails[].lockQuantity integer Requested outbound quantity / actual locked quantity.
data.nextAction string WAIT_CREATE, WAIT_LOCK_ARRIVE, ADJUST_LOCK_FAIL_PRODUCTS, SUBMIT_ORDER, etc.
data.submitStatus / data.paymentStatus string UNKNOWN when submit/payment aggregation is not returned by the current version.

Lock-failure handling: when createStatus=LOCK_FAIL, nextAction=ADJUST_LOCK_FAIL_PRODUCTS, or lockFails is not empty, do not call /submit directly and do not keep relying on create.submit=true auto-submit. First call /detail to get the current outbound order and product-line echo data. Then delete failed product lines or reduce productList[].quantity according to lockFails[].lockQuantity / availableQuantity, call /create again with orderId to update the outbound order, and continue polling /progress until createProgress=100, createStatus=TASK_COMPLETE, lockFails is empty, and nextAction=SUBMIT_ORDER. Partial lock success does not mean the whole order can be submitted; submit only after every updated product line can be locked.

# 8.7 Submit Outbound Order (POST)

URL: https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/outbound/submit

Parameter Definition Type Required Note
orderId Outbound order number string Y data.orderId returned by the create API.

Response fields:

Response field Type Description
data.orderId string Outbound order number.
data.submitAccepted boolean OMS has accepted the submit request.
data.nextAction string Next action, usually POLL_SUBMIT_PROGRESS, WAIT_APPROVAL, PAY, or FINISHED; ADJUST_LOCK_FAIL_PRODUCTS means inventory is insufficient or product lines failed to lock.

Insufficient inventory / lock-failure response example:

{
    "code": 1603001,
    "result": false,
    "message": "Private inventory is insufficient. Please call /shopping/privateInventory/outbound/detail, reduce productList.quantity or remove failed product lines, call /shopping/privateInventory/outbound/create again with the same orderId, then submit again.",
    "data": {
        "orderId": "SD260526000001",
        "createStatus": "LOCK_FAIL",
        "submitAccepted": false,
        "nextAction": "ADJUST_LOCK_FAIL_PRODUCTS",
        "actionRequired": "ADJUST_QUANTITY_AND_RESUBMIT",
        "lockFails": [
            {
                "sku": "CJNSXZXX001-Black-S",
                "privateOrderId": "SY260526000001",
                "quantity": 10,
                "lockQuantity": 6
            }
        ],
        "suggestedSteps": [
            "Call /shopping/privateInventory/outbound/detail with orderId to review product lines.",
            "Reduce productList.quantity or remove failed product lines according to lockFails/availableQuantity.",
            "Call /shopping/privateInventory/outbound/create again with the same orderId to update the outbound order.",
            "Poll /shopping/privateInventory/outbound/progress until lockFails is empty and nextAction is SUBMIT_ORDER, then submit again."
        ]
    }
}

Before submitting, confirm that /progress returns a submit-ready status: lockFails must be empty, and nextAction must not be ADJUST_LOCK_FAIL_PRODUCTS. If /submit returns the insufficient-inventory / lock-failure business error above, this is not a system service exception. Adjust product quantities or remove failed product lines according to data.lockFails / availableQuantity, call /create again with the same orderId, keep polling /progress, and call /submit again only after the order becomes submit-ready.

After the outbound order is submitted successfully, the customer can sign in to MyCJ and view it on the https://www.cjdropshipping.com/mine/dropshipping/orderList?orderType=7 (opens new window) page.

# 8.8 Query Outbound Order Detail (POST)

URL: https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/outbound/detail

Parameter Definition Type Required Note
orderId Outbound order number string Y Used for edit display, retry after lock failure, or detail view.

Main response fields:

Response field Type Description
data.orderId / data.orderNumber string Outbound order number / custom order number.
data.storageId / data.platform / data.storeName string Warehouse, store platform, and store name.
data.postagePayNode integer Postage payment node.
data.address object Shipping information, same fields as the create API address.
data.productList list Product lines, same fields as the create API plus display fields such as availableQuantity, lockQuantity, and price.
data.orderStatus / data.submitStatus string OMS order status / API aggregated submit status.

# 8.9 Cancel Outbound Order (POST)

URL: https://developers.cjdropshipping.com/api2.0/v1/shopping/privateInventory/outbound/cancel

Parameter Definition Type Required Note
orderId Outbound order number string Y Outbound order to cancel.
reason Cancel reason string N Client-side remark.

Response fields:

Response field Type Description
data.orderId string Cancelled outbound order number. Some OMS versions may return a boolean or raw downstream object.
data.cancelled boolean Whether cancellation succeeded.

Submit, detail, and cancel APIs all verify that the outbound order belongs to the current CJ-Access-Token customer. If the OMS status does not allow the operation, the OMS error is returned.

# 9 Makeup / Supplement Payments

Makeup bill API path prefix: /api2.0/v1/shopping/makeup/*. Use it to list unpaid makeup bills, create a makeup payment order (returns payId and cjPayUrl), and pay by balance using the payId. type: 0=Make-up Orders / 1=Other Make-up; diffUseType subdivides Other Make-up usage.

# 9.1 Sequence Diagram

sequenceDiagram
    autonumber
    participant Client as OpenAPI Client
    participant API as CJ OpenAPI
    participant Browser as Browser/Payment Page

    Client->>API: POST /shopping/makeup/list(pageNum, pageSize, type, diffUseType)
    API-->>Client: Return makeup page data, unpaid counts, and unpaid total amount
    Client->>API: POST /shopping/makeup/createPayOrder(orderCodes, type, diffUseType)
    API-->>Client: Return payOrderCode, payId, amount, cjPayUrl, and paymentPagePath
    alt Redirect to payment page
        Client->>Browser: Redirect to cjPayUrl https://www.cjdropshipping.com/mine/payment?pid={payId}
        Browser-->>Client: User completes payment on the payment page
    else Direct balance payment
        Client->>API: POST /shopping/pay/payBalanceV2(shipmentOrderId=payOrderCode, payId, orderType=24)
        API-->>Client: Return balance payment result
    end
    Note over Client,API: After payId is created, the client either redirects to the payment page or calls POST /shopping/pay/payBalanceV2(orderType=24) to pay directly by balance
    Client->>API: POST /shopping/makeup/list(pageNum, pageSize, type)
    API-->>Client: Return refreshed makeup status

# 9.2 Get Makeup List (POST)

URL: https://developers.cjdropshipping.com/api2.0/v1/shopping/makeup/list

Request example:

{
    "pageNum": 1,
    "pageSize": 20,
    "type": 0
}
Parameter Definition Type Required Note
pageNum Page number integer N Default 1.
pageSize Page size integer N Default 10, maximum 200.
type Supplement payment type integer N 0=Make-up Orders, 1=Other Make-up. If empty, the API returns the first type that has unpaid records.
diffUseType Supplement usage type integer N Filter for type=1: 1=Balance Top-up, 2=Repayment, 3=Transfer Shipping Fee. For type=0, omit it or pass 0.

Response example:

{
    "code": 200,
    "result": true,
    "message": "Success",
    "data": {
        "type": 0,
        "totalAmount": 12.35,
        "unPaymentCountList": [
            { "type": 0, "count": 2 },
            { "type": 1, "count": 0 }
        ],
        "pageData": {
            "pageSize": 20,
            "pageNumber": 1,
            "totalRecords": 2,
            "totalPages": 1,
            "content": [
                {
                    "orderCode": "BK260526000001",
                    "cjOrderCode": "ZF260526000001",
                    "status": 0,
                    "amount": 12.35,
                    "reason": "Postage difference",
                    "orderType": 1,
                    "diffUseType": 0,
                    "createAt": 1779763200000
                }
            ]
        }
    },
    "requestId": "2b97f15603384fe4832e85617cf07d9c"
}
Response field Type Description
data.type integer Current supplement payment type.
data.totalAmount number Total unpaid amount under the current filter, in USD.
data.unPaymentCountList[].type / count integer Unpaid count by supplement payment type.
data.pageData.content[].orderCode string Makeup bill number; pass it in orderCodes when paying by balance.
data.pageData.content[].cjOrderCode string Related CJ order number.
data.pageData.content[].status integer Status: 0=to submit, 1=processing, 2=failed, 3=cancelled, 4=completed, 5=paying.
data.pageData.content[].amount number Makeup amount, in USD.
data.pageData.content[].reason string English makeup reason.
data.pageData.content[].orderType integer Related order type for page display.
data.pageData.content[].diffUseType integer Usage type: 0=order supplement payment, 1=Balance Top-up, 2=Repayment, 3=Transfer Shipping Fee.
data.pageData.content[].createAt long Created time, Unix timestamp in milliseconds.

# 9.3 Create Makeup Payment Order (POST)

URL: https://developers.cjdropshipping.com/api2.0/v1/shopping/makeup/createPayOrder

This API matches the MyCJ page flow “select makeup bills → Pay”: take orderCode values from the makeup list, call this API, and receive a generated makeup payment order and payId. The page redirects to https://www.cjdropshipping.com/mine/payment?pid={payId} after receiving payId; OpenAPI returns the same-format cjPayUrl and the relative paymentPagePath for integration. This API only creates a payment order and does not pay by balance.

Request example:

{
    "orderCodes": ["BK260526000001"],
    "type": 0
}
Parameter Definition Type Required Note
orderCodes Makeup bill numbers array<string> Y Values from the makeup list orderCode; at least one value is required.
type Supplement payment type integer N Default 0; 0=Make-up Orders, 1=Other Make-up.
diffUseType Supplement usage type integer Required when type=1 For type=0, omit it or pass 0. For type=1, pass 1=Balance Top-up, 2=Repayment, or 3=Transfer Shipping Fee.

Response example:

{
    "code": 200,
    "result": true,
    "message": "Success",
    "data": {
        "payOrderCode": "2605260000000001",
        "payId": "PAY260526000001",
        "amount": 12.35,
        "cjPayUrl": "https://www.cjdropshipping.com/mine/payment?pid=PAY260526000001",
        "paymentPagePath": "/mine/payment?pid=PAY260526000001"
    },
    "requestId": "2b97f15603384fe4832e85617cf07d9c"
}
Response field Type Description
data.payOrderCode string Payment order number generated for this makeup payment.
data.payId string Payment center pay ID; the MyCJ page uses it to open the payment page.
data.amount number Amount to pay, in USD.
data.cjPayUrl string Full CJ payment page URL, formatted as https://www.cjdropshipping.com/mine/payment?pid={payId}.
data.paymentPagePath string MyCJ payment page path, formatted as /mine/payment?pid={payId}.

Makeup payment: after obtaining payId from createPayOrder, the client can either redirect to the cjPayUrl payment page, or call /shopping/pay/payBalanceV2 (distinguished by orderType) to pay with the current account balance.