Create Sales Order B2C

Last Updated: 16/2/2023

Create Sales Order B2C

Shipper API gives interface access to our clients for creating Sales Order API from their own system to Shipper Order Management System. It applies for B2C type of Business if you have multiple channel for source orders.

  • Authorizations : X-API-Key_Header
  • Request Body Schema : application/json

POST Create Sales Order B2C

MethodEndpoint
POST/v3/fulfillment/outbound/oms

🚧

Important Note

  1. 1 SKU Code map to 1 UoM. Example: 1 Carton and 1 Pack of the same Goods will use different SKU Code at WMS and OMS
  2. If there is note "Please Fill with Empty String / 0 / false", it means client still need to pass ““ / 0 / false value to that parameter.

Body Request Parameter

FieldData TypeDescriptionNote
warehouse_idString(20)Warehouse code assigned

Example: WH-TGR04
Mandatory
customer_idString(20)Owner ID assigned

Example: CS674
Mandatory
so_numberString(50)Sales Order Number

Example: SALESOUTBOUND1
Mandatory

Can't contain special characters
order_typeStringOrder type

Example: SO
Optional

Only accept value:

- SO (sales order)
- TT (inter-trasnfer wh)If no input, the default value = SO
order_sourceString(32)To track where this order comes fromOptional
Please leave it as empty if you are a pure open API client.
Please input this field if you are ERP/omichannel.
platformString(64)To track which marketplace this order comes fromOptional

Existing value:

- LAZADA
- SHOPEE
- TOKOPEDIA
- TIKTOK
- BLIBLI
- AKULAKU
- BUKALAPAK
- SHOPIFY
- ERPIf the marketplace is not listed above, please contact Shipper to add the value.
order_identification_codeIntegerPublic Order Identification

Example: 1
Mandatory

Must be filled with 1
(Pending Shipment)
internal_order_statusString(30)Client’s ERP order status

Example: Pending
Mandatory
express_codeString(30)Courier Code

Example: JNE YES
Optional
tenant_nameString(200)Client Name

Example: Matahari
Mandatory
consigneeString(200)Consignee Name

Example: Riza Budi
Mandatory
consignee_phoneString(40)Consignee Phone

Example: 085123456789
Mandatory
consignee_emailString(100)Consignee Email Address

Example: [email protected]
Optional
consignee_full_addressString(400)Consignee Full Address such as street no, district, city, province

Example: Jl. Open Api no 5, Tanah Abang, Jakarta Pusat, DKI Jakarta
Mandatory
consignee_stateString(20)Consignee State

Example: Indonesia
Mandatory
consignee_provinceString(50)Consignee Province

Example: DKI Jakarta
Mandatory
consignee_cityString(50)Consignee City

Example: Jawa Timur
Mandatory
zip_codeString(5)Consignee ZIP Code

Example: 12345
Mandatory

Must be 5 characters
buyer_remarkString(500)Buyer Remarks

Example: “Catatan untuk buyer”
Optional
seller_remarkString(200)Seller Remarks

Example: “Catatan dari Seller”
Optional
order_priceDecimal(10,2)Sales Order Price

Example: 100000.0
Mandatory

If payment type = 1, then this is COD order, this field's value must be > 0
postageDecimal(10,2)Delivery Cost from the courier or 3PL

Example: 20000.0
Optional
cod_priceDecimal(10,2)Cash on Delivery for the sales order

Example: 20000.0
Mandatory

If payment type = 1, then this is COD order, this field's value must be > 0
order_timeyyyy-MM-ddTHH:mm:ssZSales Order Created Date Time

Time Zone: UTC +7

Example: 2023-11-14T14:53:50Z
Mandatory
payment_timeyyyy-MM-ddTHH:mm:ssZPayment time

Time Zone: UTC +7

Example: 2023-11-14T14:53:50Z
If payment_type = 0, then it is non-COD this field become Mandatory.

If payment_type = 1, then it is COD this field become Optional.
payment_typeIntegerPayment Type

0: Non-Cash on Delivery,
1: Cash on Delivery (COD)
Mandatory

Please fill with either 0 or 1
payment_wayString(20)Payment Method Code

Example: Other
Mandatory

Accepted value:

- Other
- COD
distribution_statusIntegerWhether is it a distribution order

Example: 1
Mandatory

Must be filled with 1
plat_last_changedyyyy-MM-ddTHH:mm:ssZLast update time of order from client’s ERP

Time Zone: UTC +7

Example: 2023-11-14T14:53:50Z
Mandatory
express_noString(30)AWB Number

Example: AWB12345
Optional
shipping_label_urlString(500)shipping_label_url
(should be pdf url with preview)
Optional
is_logistic_orderBooleanLogistic order status

Example: True/False
Optional

If you use logistic integration, then the value must be True
is_insuranceBooleanUse insurance if use logistic order

Example: True/False
Optional

If you use logistic integration, then the value must be True
longitudeString(16)Consignee longitude

[-180.0,180.0]
Optional

but mandatory for instant and same-day service
latitudeString(16)Consignee latitude

[-90.0,90.0]
Optional

but mandatory for instant and same-day service
origin_area_idIntegerorigin (warehouse) area_id

example: 4661
Optional

but mandatory for Fulfillment x Logistic Integration

The value should be positive (>0).

The area ID of the origin obtained from Location API
destination_area_idIntegerorigin (warehouse) area_id

example: 4709
Optional

but mandatory for Fulfillment x Logistic Integration

The value should be positive (>0).

The area ID of the destination obtained from Location API (No Symbol Allowed Except # & ' . - = + , ( ) )
skuString(40)SKU Code.

Example: SKU123
Mandatory
order_qtyIntegerOrder Quantity.

Example: 1
Mandatory

Value must be above 1
stock_conditionStringONLY input Y or N

Y: DAMAGED condition
N: GOOD condition
Optional

For RT order type, if this field is empty, will default as "Y", which is DAMAGED condition.

For SO/TT order type, if this field is empty, will default as "N", which is GOOD condition.
goods_priceDecimal(10,2)Goods Price

Example: 100000.0
Optional
weightDecimalWeight for one unit. (kg)Optional
Better to input if you use Shipper logisitics integration.
Number round up to integer
lengthDecimalLength for one unit. (cm)Optional
Better to input if you use Shipper logisitics integration.
Number round up to integer
heightDecimalHeight for one unit. (cm)Optional
Better to input if you use Shipper logisitics integration.
Number round up to integer
widthDecimalWidth for one unit. (cm)Optional
Better to input if you use Shipper logisitics integration.
Number round up to integer
expected_shipment_timeyyyy-MM-ddTHH:mm:ssZExpected Time for Order should be send / handover to courier / 3plOptional

Sample Body Request

Only use Complete Body Request if you use the non Mandatory fields. Ex: If you use Fulfillment x Logistics Integration

HeaderHow to Fill
x-api-keyShipper api key
{
  "data": {
    "outbound": {
      "customer_id": "CS674",
      "warehouse_id": "WH-SUB51",
      "so_number": "SHO1653010613784526DO",
      "order_identification_code": 1,
      "internal_order_status": "Pending Shipment",
      "tenant_name": "123",
      "consignee": "Krisna",
      "consignee_phone": "628123356789",
      "consignee_email": "[email protected]",
      "consignee_full_address": "Nayaka kosmetik kotaraya,Jl igusti ngurah rai no.134 ,desa kotaraya selatan,Palasa,Palasa,Sulawesi Tengah,Parigi Moutong 94477",
      "consignee_state": "Indonesia",
      "consignee_province": "Sulawesi Tengah",
      "consignee_city": "Parigi Moutong",
      "zip_code": "94477",
      "buyer_remark": "Remark",
      "seller_remark": "Remark",
      "order_price": 417000,
      "postage": 0,
      "cod_price": 0,
      "order_time": "2022-05-20T01:38:37.726Z",
      "payment_time": "2022-05-20T01:38:37.726Z",
      "payment_type": 0,
      "payment_way": "Transfer",
      "distribution_status": 0,
      "plat_last_changed": "2022-05-20T01:38:37.726Z",
      "express_no": "AWB3424234234",
      "express_code": "JNE Reguler",
      "details": [
        {
          "sku": "SKU00123",
          "order_qty": 3,
          "goods_price": 123000
        }
      ]
    }
  }
}
{
  "data": {
    "outbound": {
      "area": "setiabudi",
      "buyer_remark": "buyer-remark",
      "cod_price": 10000,
      "consignee": "QA",
      "consignee_city": "kota jakarta selatan",
      "consignee_doc_no": "N7F4A7Y28LSTT4VOYGGU",
      "consignee_doc_type": 1,
      "consignee_email": "[email protected]",
      "consignee_full_address": "Plaza 89 Rasuna Said",
      "consignee_mobile": "6282212345678",
      "consignee_phone": "62822123456",
      "consignee_province": "dki jakarta",
      "consignee_state": "Indonesia",
      "customer_id": "CS15",
      "discount_price": 200,
      "distribution_mode": 1,
      "distribution_name": "",
      "distribution_status": 0,
      "express_code": "JNE Cashless",
      "express_no": "59112924",
      "express_print_data": "",
      "gross_weight": 2.2,
      "internal_order_status": "to be delivered",
      "invoice_amount": 0,
      "invoice_content": "",
      "invoice_title": "",
      "invoice_type": 0,
      "notice_send_date": "",
      "order_identification_code": 1,
      "order_price": 2565,
      "order_time": "2022-09-01T14:56:24Z",
      "outboundID": 1,
      "paint_maker": "",
      "payment_number": "2021020500565088",
      "payment_time": "2022-09-01T14:56:24Z",
      "payment_type": 0,
      "payment_way": "OTHER",
      "plat_last_changed": "2022-09-01T14:56:24Z",
      "postage": 80,
      "pre_tax_price": 2485,
      "seller_flag": "",
      "seller_nick": "JAMAL",
      "seller_remark": "sel-remark",
      "so_number": "9LTS1W9HVXTIPSS4ARYU",
      "tax_price": 26.15,
      "tenant_name": "AHN",
      "town": "Karet Kuningan",
      "trans_priority": 0,
      "warehouse_id": "WH-TGR04",
      "zip_code": "12940",
      "shipping_label_url": "
https://erp.oss.aliyuncs.com/pdf/YzE0Njg0MDEyNTk3NmU2OGI4DhmNDZhZDMwMDQzYTE%D.pdf",
      "origin_area_id": "4661",
      "destination_area_id": "4709",
      "details": [
        {
          "avg_money": 0,
          "discount_price": 0,
          "goods_price": 2485,
          "net_weight": 0.8,
          "oid": "1",
          "order_qty": 1,
          "refund_status": 0,
          "sku": "AHNA0002",
          "sku_properties": "",
          "tax_price": 26.15,
          "title": "PS5"
        }
      ]
    }
  }
}

Sample Response

{
    "metadata": {
        "path": "/v3/fulfillment/outbound/oms",
        "http_status_code": 201,
        "http_status": "Created",
        "timestamp": 1637652372
    },
    "data": {
        "request_id": "outbound.2021.11.23072612.183239"
    }
}
{
    "metadata": {
        "path": "/v3/fulfillment/outbound/oms",
        "http_status_code": 400,
        "http_status": "Bad Request",
        "errors": [
            {
                "code": 810,
                "message": "Invalid Input. Please Validate Your Input."
            }
        ],
        "timestamp": 1637652448
    }
}
{
    "metadata": {
        "path": "/v3/fulfillment/outbound/oms",
        "http_status_code": 401,
        "http_status": "Unauthorized",
        "errors": [
            {
                "code": 10001,
                "message": "Unauthorized Access. You are not authorized to access this resource."
            }
        ],
        "timestamp": 1637652420
    }
}
{
  "metadata": {
    "path": "/v3/fulfillment/supplier",
    "http_status_code": 500,
    "http_status": "Internal Server Error",
    "errors": [
      {
        "code": 803,
        "message": "Internal Server error."
      }
    ],
    "timestamp": 1637555484
  }
}
StatusReason
201Create sales order B2C success
400Please check your input.
Make sure the JSON payload is correct
Make sure the requested input are valid.
401Please check whether your API Key is valid and still active.
500Something wrong with Shipper application.
Please contact Shipper representative.