Domestic Pricing

Update by 13 Jun 2024

πŸ‘

What's New

Coordinate and Area Validation

By default, you can use the area_id and lat/lng interchangeably when getting the price list. However, if you decide to send both parameters, you have to ensure that both values are matched and valid (See Location API).

There are two ways to obtain the pricing rates available via Shipper API

Get Pricing Domestic
This endpoint will display all logistics available by Shipper on that particular route

Get Pricing Domestic by Rate Types
This endpoint will only display logistics available based on the rate type query request.

Example of Get Domestic Pricing User Interface

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

Please contact our team to use COD service

POST Pricing Domestic

POST /v3/pricing/domestic

Request Data

Parameter / ObjectTypeDescription
item_categories (optional)Array of string (item category name)Item categories of the package.
Options that allowed:

1. Cairan
2. Dokumen
3. Elektronik
4. Furnitur
5. Kosmetik
6. Makanan
7. Minuman
8. Pakaian
9. Sepatu
10. Spare Parts
11. Aksesoris
12. Dekorasi Rumah
13. Mainan
14. Obat dan Herbal
15. Garmen dan Tekstil
16. Buku
17. Lainnya
origin.area_id
(Required when not use lat & lon)
integerArea id of the origin obtained from Get Location

Note: if using both origin.area_id + origin.lat & origin.lng make sure they are matched, otherwise you'll get an error (see sample error response below).
origin.lat
(Required for Instant & Same Day Service)
stringLatitude Position of the Origin
origin.lng
(Required for Instant & Same Day Service)
stringLongitude Position of the Origin
origin.suburb_idintegerSuburb id of the origin
destination.area_id
(Required when not use lat & lon)
integerArea id of the destination obtained from Get Location

Note: if using both destination.area_id + destination.lat & destination.lng make sure they are matched, otherwise you'll get an error (see sample error response below).
destination.lat
(Required for Instant & Same Day Service)
stringLatitude Position of the Destination
destination.lng
(Required for Instant & Same Day Service)
stringLongitude Position of the Destination
destination.suburb_id
(Optional)
integerSuburb id of the destination
for_order
(required)
booleanSet this parameter to true to ensure pricing eligibility.
height
(required)
integerHeight in cm
length
(required)
integerLength in cm
width
(required)
integerWidth in cm
weight
(required)
integerWeight in kg
item_value
(required)
integerValue of the item in IDR
limitintegerLimit data displayed for each page, default 30
pageintegerPage Number default 1
sort_byArray of StringsSort the orders of available services based on the filter.
Example "final_price"

Sample Request and Response

curl --location --request POST '{{baseUrl}}/v3/pricing/domestic' \
--header 'Content-Type: application/json' \
{
  "cod": false,
  "destination": {
    "area_id": 4711,
    "lat": "-6.2195686",
    "lng": "106.8325872",
    "suburb_id": 482
  },
  "for_order": true,
  "height": 10,
  "item_value": 40000,
  "length": 10,
  "limit": 30,
  "origin": {
    "area_id": 4711,
    "lat": "-6.2195686",
    "lng": "106.8325872",
    "suburb_id": 482
  },
  "page": 1,
  "sort_by": [
    "final_price"
  ],
  "weight": 0.5,
  "width": 10
}
{
    "metadata": {
        "path": "/v3/pricing/domestic",
        "http_status_code": 200,
        "http_status": "OK",
        "timestamp": 1634791012
    },
    "data": {
        "origin": {
            "area_id": 4711,
            "area_name": "Karet Kuningan",
            "suburb_id": 482,
            "suburb_name": "Setia Budi",
            "city_id": 41,
            "city_name": "Jakarta Selatan",
            "province_id": 6,
            "province_name": "DKI Jakarta",
            "country_id": 228,
            "country_name": "INDONESIA",
            "lat": -6.2197608,
            "lng": 106.8266873
        },
        "destination": {
            "area_id": 4711,
            "area_name": "Karet Kuningan",
            "suburb_id": 482,
            "suburb_name": "Setia Budi",
            "city_id": 41,
            "city_name": "Jakarta Selatan",
            "province_id": 6,
            "province_name": "DKI Jakarta",
            "country_id": 228,
            "country_name": "INDONESIA",
            "lat": -6.2197608,
            "lng": 106.8266873
        },
        "pricings": [
            {
                "logistic": {
                    "id": 5,
                    "name": "SiCepat",
                    "logo_url": "https://global-cdn.shipper.id/images/png/logistic/sicepat.240x90.png",
                    "code": "SCP",
                    "company_name": "PT SiCepat Ekspres Indonesia",
                    "cod_fee": 3,
                    "cod_min_amount": 25000,
                    "cod_max_amount": 10000000
                },
                "rate": {
                    "id": 365,
                    "name": "Regular",
                    "type": "Regular",
                    "description": "",
                    "full_description": "",
                    "is_hubless": false
                },
                "weight": 1,
                "volume": 10,
                "volume_weight": 0.002,
                "final_weight": 1,
                "min_day": 1,
                "max_day": 2,
                "unit_price": 9000,
                "total_price": 9000,
                "discount": 0,
                "discount_value": 0,
                "discounted_price": 9000,
                "insurance_fee": 5000,
                "must_use_insurance": true,
                "liability_value": 2000000,
                "final_price": 14000,
                "currency": "IDR",
                "insurance_applied": true,
                "base_price": 9000,
                "surcharge_fee": 0
            },
    "pagination": {
        "current_page": 1,
        "current_elements": 22,
        "total_pages": 1,
        "total_elements": 22,
        "sort_by": [
            "final_price"
        ]
    }
}
{
  "metadata": {
    "path": "/v3/pricing/domestic",
    "http_status_code": 400,
    "http_status": "Bad Request",
    "errors": [
      {
        "code": 31041,
        "message": "The Origin area_id and coordinate is not matched."
      }
    ],
    "timestamp": 1689564483
  }
}

Response List

ParameterDescription
metadataMetadata information
metadata.pathAPI endpoint path
metadata.http_status_codeHTTP status code
metadata.http_statusHTTP status
metadata.timestampTimestamp
paginationPaging information
pagination.current_pageCurrent page
pagination.current_elementsTotal item per page
pagination.total_pagesTotal pages
pagination.total_elementsTotal datas
dataAll important information about the 3PL pricing
data.originAll important information about the origin that have been sent
data.origin.area_idArea ID of the origin
data.origin.area_nameArea name of the origin
data.origin.suburb_idSuburb ID of the origin
data.origin.suburb_nameSuburb name of the origin
data.origin.city_idCity ID of the origin
data.origin.city_nameCity name of the origin
data.origin.province_idProvince ID of the origin
data.origin.province_nameProvince name of the origin
data.origin.country_idCountry ID of the origin
data.origin.country_nameCountry name of the origin
data.origin.latLatitude of the origin
data.origin.lngLongitude of the origin
data.destinationAll important information about the destination that have been sent
data.destination.area_idArea ID of the destination
data.destination.area_nameArea name of the destination
data.destination.suburb_idSuburb ID of the destination
data.destination.suburb_nameSuburb name of the destination
data.destination.city_idCity ID of the destination
data.destination.city_nameCity name of the destination
data.destination.province_idProvince ID of the destination
data.destination.province_nameProvince name of the destination
data.destination.country_idCountry ID of the destination
data.destination.country_nameCountry name of the destination
data.destination.latLatitude of the destination
data.destination.lngLongitude of the destination
data.pricingsAll important information about the available 3PLs based on the request
data.pricings.[].logisticAll information about the available logistic
data.pricings.[].logistic.idLogistic ID
data.pricings.[].logistic.nameLogistic name
data.pricings.[].logistic.logo_urlLogistic URL logo
data.pricings.[].logistic.codeLogistic code
data.pricings.[].logistic.company_nameLogistic company name
data.pricings.[].cod_fee Only present when the users uses COD, if not then the field will be empty. The amount will be integer and it represents percentage
data.pricings.[].cod_min_amountOnly present when the users uses COD, if not then the field will be empty. The minimum amount of COD amount
data.pricings.[].cod_max_amountOnly present when the users uses COD, if not then the field will be empty. The minimum amount of COD amount
data.pricings.[].rateAll important information about the available rate service of the logistic
data.pricings.[].rate.idRate service ID. Required to use when Create Order
data.pricings.[].rate.nameRate service name
data.pricings.[].rate.typeRate service type
data.pricings.[].rate.descriptionRate service description
data.pricings.[].rate.full_descriptionRate service full description
data.pricings.[].weightWeight of the package (kg)
data.pricings.[].volumeVolume of the package based on the length, width, and height
data.pricings.[].volume_weightVolumetric weight of the package
data.pricings.[].final_weightFinal weight that have been chosen between "weight" and "volume_weight". Will choose which one is heavier.
data.pricings.[].min_dayMinimum day of delivery estimation
data.pricings.[].max_dayMaximum day of delivery estimation
data.pricings.[].unit_priceShipment fee for 1 kg
data.pricings.[].total_priceTotal shipment fee
data.pricings.[].discountDiscount percentage
data.pricings.[].discount_valueDiscount value (IDR)
data.pricings.[].discounted_priceShipment fee after discount
data.pricings.[].insurance_feeInsurance fee for the package
data.pricings.[].must_use_insuranceInformation about whether required to use insurance or not.

If ""must_use_insurance"" true, then final_price will be total_price + insurance_fee
If ""must_use_insurance"" false, then final_price will be total_price only.

If ""must_use_insurance"" true, then use_insurance on Create Order must be true.
data.pricings.[].lialibility_valuePackage value
data.pricings.[].final_priceTotal shipment fee with discount and insurance fee
data.pricings.[].currencyCurrency
data.pricings.[].insurance_appliedInformation about whether the insurance fee already applied in the price

❗️

Important Return Parameters

  • rate.id - Required to be use when Create Order

  • must_use_insurance - Determine whether it is required to use insurance or not

  • insurance_fee - The cost of insurance

  • final_price - Price of the Shipment
    If "must_use_insurance" true, final_price will be total_price + insurance_fee
    If "must_use_insurance" false, final_price will be total_price only.

  • rate.is_hubless - If is_hubless is true, the order will be pick up by the 3PL courier directly.