Domestic Pricing
Update by 21 Aug 2024
What's NewCoordinate 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/domesticRequest Data
Parameter / Object | Type | Description |
|---|---|---|
item_categories (optional) | Array of string (item category name) | Item categories of the package.
|
origin.area_id | integer | Area 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). Please make sure that the lat long at least exist in the same suburb as the designated area id |
origin.lat | string | Latitude Position of the Origin |
origin.lng | string | Longitude Position of the Origin |
origin.suburb_id | integer | Suburb id of the origin |
destination.area_id | integer | Area 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). Please make sure that the lat long at least exist in the same suburb as the designated area id |
destination.lat | string | Latitude Position of the Destination |
destination.lng | string | Longitude Position of the Destination |
destination.suburb_id | integer | Suburb id of the destination |
for_order | boolean | Set this parameter to true to ensure pricing eligibility. |
height | integer | Height in cm |
length | integer | Length in cm |
width | integer | Width in cm |
weight | integer | Weight in kg |
item_value | integer | Value of the item in IDR |
vehicle_id | integer | You will get the vehicle id when you access this endpoint https://logistics-docs.shipper.id/docs/get-vehicle-id |
special_instructions | array | You will get the special_instructions id when you access this endpoint https://logistics-docs.shipper.id/docs/get-vehicle-id |
schedule_at | yyyy-mm-ddThh:mm:ssZ Ex: 2024-08-09T00:00:00Z | To set the scheduled date and time of your Lalamove order |
cod | boolean | only use this if you want to get COD pricing. You will still get access to the get rates. But if you do not have an access then you cannot create COD orders |
limit | integer | Limit data displayed for each page, default 30 |
page | integer | Page Number default 1 |
sort_by | Array of Strings | Sort the orders of available services based on the filter. |
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
Parameter | Description |
|---|---|
metadata | Metadata information |
metadata.path | API endpoint path |
metadata.http_status_code | HTTP status code |
metadata.http_status | HTTP status |
metadata.timestamp | Timestamp |
pagination | Paging information |
pagination.current_page | Current page |
pagination.current_elements | Total item per page |
pagination.total_pages | Total pages |
pagination.total_elements | Total datas |
data | All important information about the 3PL pricing |
data.origin | All important information about the origin that have been sent |
data.origin.area_id | Area ID of the origin |
data.origin.area_name | Area name of the origin |
data.origin.suburb_id | Suburb ID of the origin |
data.origin.suburb_name | Suburb name of the origin |
data.origin.city_id | City ID of the origin |
data.origin.city_name | City name of the origin |
data.origin.province_id | Province ID of the origin |
data.origin.province_name | Province name of the origin |
data.origin.country_id | Country ID of the origin |
data.origin.country_name | Country name of the origin |
data.origin.lat | Latitude of the origin |
data.origin.lng | Longitude of the origin |
data.destination | All important information about the destination that have been sent |
data.destination.area_id | Area ID of the destination |
data.destination.area_name | Area name of the destination |
data.destination.suburb_id | Suburb ID of the destination |
data.destination.suburb_name | Suburb name of the destination |
data.destination.city_id | City ID of the destination |
data.destination.city_name | City name of the destination |
data.destination.province_id | Province ID of the destination |
data.destination.province_name | Province name of the destination |
data.destination.country_id | Country ID of the destination |
data.destination.country_name | Country name of the destination |
data.destination.lat | Latitude of the destination |
data.destination.lng | Longitude of the destination |
data.pricings | All important information about the available 3PLs based on the request |
data.pricings.[].logistic | All information about the available logistic |
data.pricings.[].logistic.id | Logistic ID |
data.pricings.[].logistic.name | Logistic name |
data.pricings.[].logistic.logo_url | Logistic URL logo |
data.pricings.[].logistic.code | Logistic code |
data.pricings.[].logistic.company_name | Logistic 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_amount | Only present when the users uses COD, if not then the field will be empty. The minimum amount of COD amount |
data.pricings.[].cod_max_amount | Only present when the users uses COD, if not then the field will be empty. The minimum amount of COD amount |
data.pricings.[].rate | All important information about the available rate service of the logistic |
data.pricings.[].rate.id | Rate service ID. Required to use when Create Order |
data.pricings.[].rate.name | Rate service name |
data.pricings.[].rate.type | Rate service type |
data.pricings.[].rate.description | Rate service description |
data.pricings.[].rate.full_description | Rate service full description |
data.pricings.[].weight | Weight of the package (kg) |
data.pricings.[].volume | Volume of the package based on the length, width, and height |
data.pricings.[].volume_weight | Volumetric weight of the package |
data.pricings.[].final_weight | Final weight that have been chosen between "weight" and "volume_weight". Will choose which one is heavier. |
data.pricings.[].min_day | Minimum day of delivery estimation |
data.pricings.[].max_day | Maximum day of delivery estimation |
data.pricings.[].unit_price | Shipment fee for 1 kg |
data.pricings.[].total_price | Total shipment fee |
data.pricings.[].discount | Discount percentage |
data.pricings.[].discount_value | Discount value (IDR) |
data.pricings.[].discounted_price | Base price - discount value |
data.pricings.[].insurance_fee | Insurance fee for the package |
data.pricings.[].must_use_insurance | Information 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"" true, then use_insurance on Create Order must be true. |
data.pricings.[].lialibility_value | Package value |
data.pricings.[].base_price | unit price x final weight |
data.pricings.[].surcharge_fee | surcharge fee that applied to the rate |
data.pricings.[].unit_price | Price per kg |
data.pricings.[].total_price | base price + surcharge fee |
data.pricings.[].final_price | Discounted price + surcharge fee + insurance (IFmust_use_insurance=true , if_must_use_insurance= false, then users must calculate the final_price with insurance_fee |
data.pricings.[].currency | Currency |
data.pricings.[].insurance_applied | Information about whether the insurance fee already applied in the price |
data.pricings.[].extras.special_instruction | Only applied for Lalamove orders |
data.pricings.[].extras.scheduled_at | Only applied for Lalamove orders |
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.
Updated 6 days ago