Domestic Pricing
Update by 21 Aug 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 / Object | Type | Description |
---|---|---|
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) | 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). |
origin.lat (Required for Instant & Same Day Service) | string | Latitude Position of the Origin |
origin.lng (Required for Instant & Same Day Service) | string | Longitude Position of the Origin |
origin.suburb_id | integer | Suburb id of the origin |
destination.area_id (Required when not use lat & lon) | 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). |
destination.lat (Required for Instant & Same Day Service) | string | Latitude Position of the Destination |
destination.lng (Required for Instant & Same Day Service) | string | Longitude Position of the Destination |
destination.suburb_id (Optional) | integer | Suburb id of the destination |
for_order (required) | boolean | Set this parameter to true to ensure pricing eligibility. |
height (required) | integer | Height in cm |
length (required) | integer | Length in cm |
width (required) | integer | Width in cm |
weight (required) | integer | Weight in kg |
item_value (required) | integer | Value of the item in IDR |
vehicle_id (Optional. Only use this parameter if you use Lalamove) | integer | You will get the vehicle id when you access this endpoint https://logistics-docs.shipper.id/docs/get-vehicle-id Use that vehicle ID to get the rates |
special_instructions (Optional. Only use this parameter if you use Lalamove) | array | You will get the special_instructions id when you access this endpoint https://logistics-docs.shipper.id/docs/get-vehicle-id Use that ID to use one or several additional service attached to that vehicle |
schedule_at (Optional. Only use this parameter if you use Lalamove) | yyyy-mm-ddThh:mm:ssZ Ex: 2024-08-09T00:00:00Z | To set the scheduled date and time of your Lalamove order |
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. 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
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"" 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_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 (IF must_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 special instruction name that users already choose |
data.pricings.[].extras.scheduled_at | Only applied for Lalamove orders scheduled date and time that the users want the package to be sent |
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 3 months ago