NAV Navbar
Sandbox Production

Introduction

Base URL

https://rest.lalamove.com
https://sandbox-rest.lalamove.com

The Lalamove API let you integrate our delivery services into your business workflow.

Lalamove provide a collection of essential, lightweight and flexible endpoints allowing you to automate your fulfilment logistic workflow quickly and easily.

Integration with Lalamove is straightforward, it should take a developer about a week to complete an integration ready for our go-live process.

API libraries

Currently we do not offer any official SDK/libraries for our API. However there are some libraries built by the community that might help with your integration.

PHP https://github.com/yamdraco/lalamove-php
JavaScript https://github.com/yamdraco/lalamove-js

Go live process

  1. Use this Test cases template to start writing your own test cases for QA purpose.

  2. Before having your integration go live, our sales and operation experts will help you conduct a soft-launch with real drivers to make sure operational readiness on both sides.

  3. Official launch - Please notify local sales the date for going live, so we can communicate to drivers and make sure we successfully scale your business.

Support

For technical support please email b2bsupport@lalamove.com

Authentication

Lalamove API makes use of HMAC (SHA256) as the authentication mechanism.

You will be provided an api KEY, and a SECRET for generating a HMAC hash (also known as a SIGNATURE).

Sandbox and Production API keys

All API requests must be made over HTTPS. Calls made over plain HTTP will fail.

Signature

Example in JavaScript

const SECRET = 'MCwCAQACBQDDym2lAgMBAAECBDHB';
const time = new Date().getTime().toString(); // => `1545880607433`

const method = 'POST';
const path = '/v2/quotations';
const body = JSON.stringify({...}); // => the whole body for '/v2/quotations'

const rawSignature = `${time}\r\n${method}\r\n${path}\r\n\r\n${body}`;
// => '1546222219293\r\nPOST\r\n/v2/quotations\r\n\r\n{\n \"scheduleAt\": \"2018-12-31T14:30:00.00Z\",\n \"serviceType\": \"MOTORCYCLE\",\n \"requesterContact\": { \"name\": \"Peter Pan\", \"phone\": \"232\" },\n \"stops\": [\n {\n \"location\": { \"lat\": \"-6.255431000000001\", \"lng\": \"106.60114290000001\" },\n \"addresses\": {\n \"en_ID\": {\n \"displayString\":\n \"Jl. Perum Dasana Indah No.SD 3/ 17-18, RT.3/RW.1, Bojong Nangka, Klp. Dua, Tangerang, Banten 15810, Indonesia\",\n \"country\": \"ID\"\n }\n }\n },\n {\n \"location\": { \"lat\": \"-6.404722800000001\", \"lng\": \"106.81902130000003\" },\n \"addresses\": {\n \"en_ID\": {\n \"displayString\": \"Jl. Kartini, Ruko No. 1E, Depok, Pancoran MAS, Kota Depok, Jawa Barat 16431, Indonesia\",\n \"country\": \"ID\"\n }\n }\n }\n ],\n \"deliveries\": [\n {\n \"toStop\": 1,\n \"toContact\": {\n \"name\": \"mm\",\n \"phone\": \"9999999\"\n }\n }\n ]\n}\n'

const SIGNATURE = CryptoJS.HmacSHA256(rawSignature, SECRET).toString();
// => '5133946c6a0ba25932cc18fa3aa1b5c3dfa2c7f99de0f8599b28c2da88ed9d42'

SIGNATURE = HmacSHA256ToHex(<TIMESTAMP>\r\n<HTTP_VERB>\r\n<PATH>\r\n\r\n<BODY>, <SECRET>)

SIGNATURE is in lowercase hex (base 16) encoding.

SECRET You API secret
TIMESTAMP Unix timestamp in millisecond eg. 1545880607433
HTTP_VERB HTTP verb (GET, POST, PUT, DELETE) of the specific API call
PATH The pathname of the specific API call including version. eg. /v2/quotations
BODY The request body in JSON string

Also see

Headers

Example in JavaScript (cont.)

const API_KEY = '914c9e52e6414d9494e299708d176a41'
const TOKEN = `${API_KEY}:${time}:${SIGNATURE}`
// => '914c9e52e6414d9494e299708d176a41:1545880607433:5133946c6a0ba25932cc18fa3aa1b5c3dfa2c7f99de0f8599b28c2da88ed9d42'
Authorization: hmac <TOKEN>
X-LLM-Country: <YOUR_COUNTRY>
X-Request-ID: <NONCE>

Example

Authorization: hmac 914c9e52e6414d9494e299708d176a41:1545880607433:5133946c6a0ba25932cc18fa3aa1b5c3dfa2c7f99de0f8599b28c2da88ed9d42
X-LLM-Country: TH
X-Request-ID: 211b9d85-a2cc-476f-8675-b61ec923cc27

Authorization

TOKEN = <KEY>:<TIMESTAMP>:<SIGNATURE>

KEY Your API key
TIMESTAMP MUST be identical to TIMESTAMP in SIGNATURE
SIGNATURE As described in Signature in lowercase hex (base 16)

X-LLM-Country

The country the requested service is for, in ISO 3166-1 alpha-2 format. It also supports specific cities, in UN/LOCODE format. See Available countries.

X-Request-ID

Provide a Nonce to be used as an unique Request ID. It helps us with preventing replay attacks.

Get a quotation

POST https://rest.lalamove.com/v2/quotations
POST https://sandbox-rest.lalamove.com/v2/quotations

Body

{
  "scheduleAt": "2018-12-19T14:30:00.00Z",
  "serviceType": "MOTORCYCLE",
  "stops": [<Waypoint>],
  "deliveries": [<DeliveryInfo>],
  "requesterContact": <Contact>,
  "specialRequests": ["COD", "HELP_BUY", "LALABAG"]
}

Responses

201 Quotation Created

{ "totalFee": "108000", "totalFeeCurrency": "THB" }

409 Stops and Deliveries mismatch, see DeliveryInfo

{ "message": "ERR_DELIVERY_MISMATCH" }

409 Not enough stops, number of stops should be between 2 and 10

{ "message": "ERR_INSUFFICIENT_STOPS" }

409 Reached maximum stops, Number of stops should be between 2 and 10

{ "message": "ERR_TOO_MANY_STOPS" }

409 Invalid payment method

{ "message": "ERR_INVALID_PAYMENT_METHOD" }

409 Invalid locale, refer to Waypoint

{ "message": "ERR_INVALID_LOCALE" }

409 Invalid phone number, refer to Phone validations

{ "message": "ERR_INVALID_PHONE_NUMBER" }

409 scheduleAt datetime is in the past

{ "message": "ERR_INVALID_SCHEDULE_TIME" }

409 No such service type, make sure to stick to Service types in your country/region

{ "message": "ERR_INVALID_SERVICE_TYPE" }

409 No such special request(s), make sure that special requests match with selected Service types

{ "message": "ERR_INVALID_SPECIAL_REQUEST" }

409 Out of service area

{ "message": "ERR_OUT_OF_SERVICE_AREA" }

409 Fail to reverse from address to location, provide lat and lng

{ "message": "ERR_REVERSE_GEOCODE_FAILURE" }

POST /v2/quotations

Request a quotation.

Will return a with an object containing the fee amount and currency of based on information provided.

Body

scheduleAt string Pick up time in UTC timezone and ISO 8601 format
serviceType string The type of vechicle. See available service types in your country/region
stops Waypoint[] Array of Waypoints (minimum 2, maximum 10)
deliveries DeliveryInfo[] Array of DeliveryInfos
requesterContact Contact Person of contact at pick up point aka stop[0], see Contact
specialRequests ๐Ÿคทโ€โ™€๏ธ string[] See available special requests in your country/region

๐Ÿคทโ€โ™€๏ธ - Optional

requesterContact

If you are a business, this will need to be your physical pick up location's contact information. Example for a multi-branch business:

Branch requesterContact
ACME Branch A {name: "ACME Branch A", phone: "8912121212"}
ACME Branch B {name: "ACME Branch B", phone: "8912121213"}
ACME Branch C {name: "ACME Branch C", phone: "8912121214"}

Timezone

Your local time UTC time

Waypoint

Waypoint

{
  "location": { "lat": "13.740167", "lng": "100.535237" },
  "addresses": {
    "th_TH": {
      "displayString": "444 เธ–เธ™เธ™ เธžเธเธฒเน„เธ— เนเธ‚เธงเธ‡ เธงเธฑเธ‡เนƒเธซเธกเนˆ เน€เธ‚เธ• เธ›เธ—เธธเธกเธงเธฑเธ™ เธเธฃเธธเธ‡เน€เธ—เธžเธกเธซเธฒเธ™เธ„เธฃ 10330 เธ›เธฃเธฐเน€เธ—เธจเน„เธ—เธข",
      "country": "TH"
    }
  }
}

LOCALE is composed of ISO 639-1 language code and ISO 3166-1 alpha-2 country code as follow:

{ISO 639-1}_{ISO 3166-1 alpha-2}.

See what locale keys are available in your country/region

location.lat string Latitude
location.lng string Longitude
addresses[<LOCALE>].displayString string Street address in plain text. Use remarks in DeliveryInfo for building, floor and flat
addresses[<LOCALE>].country string Country code must match with X-LLM-Country in the request headers. See Available countries

DeliveryInfo

DeliveryInfo

{
  "toStop": 1,
  "toContact": <Contact>
  "remarks": "ORDER#94\r\n1. Tshirt เธˆเธณเธ™เธงเธ™ 1\r\n2. Hoodie เธˆเธณเธ™เธงเธ™ 1\r\n"
}

Contact person, mobile phone number and remarks for each Waypoint excluding the pick up point.

toStop number The index of waypoint in stops this information associates with, has to be >= 1, since the first stop's Delivery Info is tided to requesterContact
toContact Contact See Contact
remarks ๐Ÿคทโ€โ™€๏ธ string Additional info about the delivery. eg. building, floor and flat. Use newline \r\n for better readability

๐Ÿคทโ€โ™€๏ธ - Optional

Contact

Contact

{ "name": "Donald Trump", "phone": "8912121212" }
name string The name of the person of contact
phone string Must be a valid phone number. See how we validate for each country/region

Place an order

POST https://rest.lalamove.com/v2/orders
POST https://sandbox-rest.lalamove.com/v2/orders

Body

{
  "quotedTotalFee": { "amount": "108000", "currency": "THB" },
  "sms": false,
  // ... merge with body used for quotation
}

Responses

201 Order Created

{
  "customerOrderId": "<DEPRECATED_ORDER_ID>",
  "orderRef": "<LALAMOVE_ORDER_ID>"
}

402 You have insufficient credit. Please top up your wallet

{ "message": "ERR_INSUFFICIENT_CREDIT" }

409 The currency you provided in quotedTotalFee.currency is not a valid currency

{ "message": "ERR_INVALID_CURRENCY" }

409 The amount or currency you provided in quotedTotalFee doesn't match quotation

{ "message": "ERR_PRICE_MISMATCH" }

429 Too Many Requests

// no body

POST /v2/orders

Provide the totalFee and totalFeeCurrency received from /quotations as quotedTotalFee.amount and quotedTotalFee.currency merged with the exact same body used for /quotations.

Body

quotedTotalFee.amount string totalFee from /quotations
quotedTotalFee.currency string totalFeeCurrency from /quotations
sms ๐Ÿคทโ€โ™€๏ธ boolean Send delivery updates SMS to ALL recipients. Default to true

๐Ÿคทโ€โ™€๏ธ - Optional

Response

customerOrderId Deprecated UUID order id
orderRef This is what you will use to refer to a Lalamove order

Get order details

GET https://rest.lalamove.com/v2/orders/{id}
GET https://sandbox-rest.lalamove.com/v2/orders/{id}

Responses

200 ASSIGNING_DRIVER

{
  "status": "ASSIGNING_DRIVER",
  "price": { "amount": "108000", "currency": "THB" },
  "driverId": ""
}

200 ON_GOING

{
  "status": "ON_GOING",
  "price": { "amount": "108000", "currency": "THB" },
  "driverId": "33522"
}

200 CANCELED

{
  "status": "CANCELED",
  "price": { "amount": "108000", "currency": "THB" },
  "driverId": ""
}

200 PICKED_UP

{
  "status": "PICKED_UP",
  "price": { "amount": "108000", "currency": "THB" },
  "driverId": "33522"
}

200 REJECTED

{
  "status": "REJECTED",
  "price": { "amount": "108000", "currency": "THB" },
  "driverId": ""
}

200 COMPLETED

{
  "status": "COMPLETED"
  "price": { "amount": "108000", "currency": "THB" },
  "driverId": "33522"
}

200 EXPIRED

{
  "status": "EXPIRED",
  "price": { "amount": "108000", "currency": "THB" },
  "driverId": ""
}

GET /v2/orders/{id}

URL Params

id <LALAMOVE_ORDER_ID>

Order Status

status

ASSIGNING_DRIVER Trying to match shipment with a driver
ON_GOING Shipment is matched with a driver
CANCELED Shipment is cancelled before pick up
PICKED_UP Shipment is picked up by the driver
REJECTED Shipment was matched and rejected twice, see Order Flow
COMPLETED Sucessfully delivered and transaction has concluded
EXPIRED Order expired because a match could not be found

Driver details

GET https://rest.lalamove.com/v2/orders/{orderId}/drivers/{driverId}
GET https://sandbox-rest.lalamove.com/v2/orders/{orderId}/drivers/{driverId}

Responses: 200

{
  "name": "David",
  "phone": "0978787878",
  "plateNumber": "SG-9393",
  "photo": "<PROFILE_PHOTO_URL>"
}

GET /v2/orders/{orderId}/drivers/{driverId}

Retrieve driver's information.

URL Params

orderId <LALAMOVE_ORDER_ID>
driverId driverId from /orders/{id} response

Driver location

GET https://rest.lalamove.com/v2/orders/{orderId}/drivers/{driverId}/location
GET https://sandbox-rest.lalamove.com/v2/orders/{orderId}/drivers/{driverId}/location

Responses: 200

{
  "location": { "lat": "13.740167", "lng": "100.535237" },
  "updatedAt": "2017-12-01T14:30.00Z"
}

Responses: 403

// Empty

GET /v2/orders/{orderId}/drivers/{driverId}/location

Retrieve driver's lastest location in latitude and longitude.

Available duration begining 1 hour before scheduleAt datetime until order is completed. Will response with 403 Forbidden if attempt to access outside of this window.

URL Params

orderId <LALAMOVE_ORDER_ID>
driverId driverId from /orders/{id} response

Cancel an order

PUT https://rest.lalamove.com/v2/orders/{id}/cancel
PUT https://sandbox-rest.lalamove.com/v2/orders/{id}/cancel

Responses

200

{}

409 Cancellation Forbidden

{ "message": "ERR_CANCELLATION_FORBIDDEN" }

PUT /v2/orders/{id}/cancel

After an order is matched, cancellation is only allowed within 5 minitues.

API will response with ERR_CANCELLATION_FORBIDDEN when attempting to cancel an order past said time window.

URL Params

id <LALAMOVE_ORDER_ID>

Order flow

order-flow

Driver rejection

Order can be rejected after matched. When that happens, order status will be reverted from ON_GOING to ASSIGNING_DRIVER and we will try to match it again with a different driver. When an order is rejected a second time, the order status will change to REJECTED and we will no longer try to find a match for that order.

Service types

We have a range of vechicles cater to specific needs of the following regions.

๐Ÿ‡น๐Ÿ‡ญ Thailand

Key Description Shipment restrictions Bangkok TH_BKK Pattaya TH_PYX
MOTORCYCLE Motorcycle 50 ร— 50 ร— 50cm, 20kg โœ… โœ…
MPV Hatchback 115 ร— 115 ร— 80cm, 100kg โœ… โœ…
TRUCK330 Pick-Up Truck 170 ร— 150 ร— 170cm, 1000kg โœ… โœ…

Special requests

Description MOTORCYCLE MPV TRUCK330
COD Cash on delivery โœ… โœ… โœ…
HELP_BUY Purchase Service (THB 1 - 1,000).
  1. Input your details, amount and price of the desired goods in DeliveryInfo.remarks
  2. Make sure the recepient carry suffcient amount of cash to pay our driver
โœ…
LALABAG Food Delivery Box โœ…
ROUNDTRIP Round Trip โœ… โœ…
DOOR2DOOR Door to door (by driver) โœ… โœ…
PURCHASE_SERVICE_TIER_2 Purchase Service (THB 1,000 - 2,000) โœ…

๐Ÿ‡ธ๐Ÿ‡ฌ Singapore

Key Description Shipment restrictions
MOTORCYCLE Bike 40 ร— 25 ร— 25cm, 8kg
CAR Car 70 ร— 50 ร— 50cm, 20kg
MINIVAN 1.7m Van 160 ร— 120 ร— 100cm
VAN 2.4m Van 230 ร— 120 ร— 120cm
TRUCK330 10ft Lorry 290 ร— 140 ร— 170cm
TRUCK550 14ft Lorry 420 ร— 170 ร— 190cm

Special requests

Description MOTORCYCLE CAR MINIVAN VAN TRUCK330 TRUCK550
COD Cash on delivery โœ… โœ… โœ… โœ… โœ… โœ…
RESTRICTED Secured Zone โœ… โœ… โœ… โœ… โœ… โœ…
RETURNTRIP Return Trip (for documents only) โœ… โœ… โœ…
RETURNTRIP_LORRY Return Trip (for documents only) โœ… โœ…
MOVING_DRIVER_1HELPER_VAN Moving service: Driver + 1 Helper โœ… โœ…
MOVING_DRIVER_2HELPER_VAN Moving service: Driver + 2 Helpers โœ… โœ…
MOVING_DRIVER Moving service: Driver โœ… โœ…
MOVING_DRIVER_1HELPER Moving service: Driver + 1 Helper โœ… โœ…
MOVING_DRIVER_2HELPER Moving service: Driver + 2 Helpers โœ… โœ…
TAILGATE Tailgate โœ… โœ…
COVERED Covered โœ… โœ…

๐Ÿ‡ต๐Ÿ‡ญ Philippines

Key Description Shipment restrictions Manila Cebu
MOTORCYCLE Motorcycle 1.6 x 1.25 x 1.6ft, 20kg โœ… โœ…
MPV UV (Small) 4 x 3.2 x 2.8ft, 300kg โœ… โœ…
VAN Van 7 ft x 4 ft x 3.5 ftใƒป600 kg โœ…
TRUCK330 FB/L300 7 x 4 x 4ft, 1,000kg โœ… โœ…

Special requests

Description MOTORCYCLE MPV VAN TRUCK330
COD Cash Handling โœ…
LALABAG Insulated Box โœ…
QUEUEING_MOTORCYCLE Queueing Service โœ…
PURCHASE_SERVICE Purchase Service (>30min wait time: +P60) โœ…
DRIVER_CARRIES Driver Carries (max 50kg) โœ… โœ… โœ…
1ASSISTANT_1_MINUS_2DROPS 1 Assistant: 1-2 drops โœ… โœ… โœ…
1ASSISTANT_3_MINUS_4DROPS 1 Assistant: 3-4 drops โœ… โœ… โœ…
1ASSISTANT_5_PLUS_DROPS 1 Assistant: 5+ drops โœ… โœ… โœ…

๐Ÿ‡ญ๐Ÿ‡ฐ Hong Kong

Key Description Shipment restrictions
MOTORCYCLE Motorcycle 40 ร— 40 ร— 40cm, 10kg
VAN Van 182 ร— 121 ร— 121cm, 700 - 800kg
TRUCK550 5.5 Ton 450 ร— 195 ร— 195cm, 800 - 1,200kg

๐Ÿ‡น๐Ÿ‡ผ Taiwan

Taipei

Key Description Shipment restrictions
MOTORCYCLE Motorcycle 30 ร— 60 ร— 40cm, 20kg
MPV SUV 150 ร— 100 ร— 100cm, 300kg (one item weighing < 20kg)
VAN Van 200 ร— 120 ร— 120cm, 500kg (individual items weighing < 20kg)
TRUCK175 150 Cubic Truck
TRUCK330 Truck 200 ร— 120 ร— 120cm, 500kg (individual items weighing < 20kg)

Special requests

Description MOTORCYCLE MPV VAN TRUCK175 TRUCK330
LALABAG lalamove ๅฐˆ็”จไฟๆบซ่ข‹ โœ…
HELP_BUY ้œ€ไปฃไป˜ๆฌพ๏ผŒไธŠ้™ $2000(่ซ‹ๅœจremarksๆฌ„ๅ‚™่จป้‡‘้ก) โœ… โœ… โœ…

๐Ÿ‡ป๐Ÿ‡ณ VietNam

Key Description Shipment restrictions HCMC Hanoi
LALANOW LalaNow 40 x 40 x 40cm, 30kg โœ… โœ…
LALA2H Lala2h 40 x 40 x 40cm, 30kg โœ… โœ…
MOTORCYCLE Motorcycle 40 x 40 x 40cm, 30kg โœ… โœ…
TRUCK175 Truck 200 x 120 x 120cm, 500kg โœ…
TRUCK330 Truck 300 x 160 x 160cm, 1000kg โœ…

Special requests

Description LALANOW LALA2H MOTORCYCLE TRUCK175 TRUCK330
HELP_BUY Purchase Service โœ… โœ… โœ…
LALABAG Insulated Box โœ… โœ… โœ…
LALABAG_BIG 40 x 40 x 40cm โœ… โœ… โœ… (only HCMC)
DOOR2DOOR_DRIVER Door-to-door delivery โœ… โœ… โœ…
GROUND_FLOOR_ONE_WAY Moving Help: Ground floor 1 way โœ…
GROUND_FLOOR_ONE_WAY_2 Moving Help: Ground floor 1 way โœ…
UPSTAIR_DOWNSTAIR_ONE_WAY Moving Help: Stairs 1 way โœ…
UPSTAIR_DOWNSTAIR_ONE_WAY_2 Moving Help: Stairs 1 way โœ…
ROUNDTRIP_TRUCK175 Round Trip โœ…
ROUNDTRIP_TRUCK330 Round Trip โœ…
DOOR2DOOR_1HELPER_TRUCK175 Door-to-door delivery + 1 Helper โœ…
DOOR2DOOR_1HELPER_TRUCK330 Door-to-door delivery + 1 Helper โœ…

๐Ÿ‡ฎ๐Ÿ‡ฉ Indonesia

Jakarta

Key Description Shipment restrictions
MOTORCYCLE Motor 40 x 40 x 40cm, 20kg
MPV Mobil 175 x 100 x 85cm, 350kg
VAN Van 210 x 150 x 120cm, 600kg
TRUCK175 Pickup Bak 200 x 160 x 120cm, 800kg

Special requests

Description MOTORCYCLE MPV VAN TRUCK175
PURCHASE_SERVICE Purchase Service < 300K Rp โœ…
DOOR2DOOR Door to Door Delivery โœ… โœ… โœ…
EXTRA_HELPER Door to Door Delivery with 1 Helper โœ…
EXTRA_HELPER_TRUCK175 Door to Door Delivery with 1 Helper โœ…
ROUNDTRIP_MOTORYCYCLE Roundtrip โœ…
LALABAG Lalabag โœ…

๐Ÿ‡ฒ๐Ÿ‡พ Malaysia

Kuala Lumpur

Key Description Shipment restrictions
MOTORCYCLE Motorcycle 36 x 36 x 36cm, 10kg
CAR Car 50 x 50 x 50cm, 40kg
TRUCK330 1-Ton Lorry 275cm x 152cm x 152cmใƒป1000 kg
TRUCK550 3-Ton Lorry 427cm x 220cm x 213cmใƒป3000 kg

Special requests

Description MOTORCYCLE CAR TRUCK330 TRUCK550
PURCHASE_SERVICE Buy4U โœ…
LALABAG Lalabag โœ…
DOOR2DOOR Door to Door delivery โœ…
DOOR2DOOR_TRUCK330 Moving Services by Driver โœ…
DOOR2DOOR_TRUCK550 Moving Services by Driver โœ…
DOOR2DOOR_1HELPER_TRUCK330 Moving Services by Driver + 1 Helper โœ…
DOOR2DOOR_1HELPER_TRUCK550 Moving Services by Driver + 1 Helper โœ…
DOOR2DOOR_2HELPER_TRUCK330 Moving Services by Driver + 2 Helpers โœ…
DOOR2DOOR_2HELPER_TRUCK550 Moving Services by Driver + 2 Helpers โœ…
RETURNTRIP_TRUCK330 Return Trip โœ…
RETURNTRIP_TRUCK550 Return Trip โœ…

๐Ÿ‡ฎ๐Ÿ‡ณ India

Key Description Shipment restrictions Bangalore IN_BLR Mumbai IN_BOM Delhi IN_DEL
MOTORCYCLE Motorcycle 40 x 40 x 40cm, 20kg โœ… โœ… โœ…
THREE_WHEELER Three-Wheeler 150 ร— 130 ร— 130cm, 500kg โœ…
TATA7FT 7ft Tata Ace 220 ร— 140 ร— 180 cm, 750 kg โœ… โœ… โœ…
TATA8FT 8ft Tata Ace 240 ร— 140 ร— 180 cm, 750 kg โœ…

Special requests

Description MOTORCYCLE THREE_WHEELER TATA7FT TATA8FT
DOOR2DOOR Moving and Unloading โœ… โœ… โœ…
COD COD โœ…

Errors

The Lalamove API uses the following error codes:

Error Code Meaning
400 -- Bad Request Your request is invalid. Make sure the body is a valid JSON string.
401 -- Unauthorized Your authorization token is wrong. Make sure to follow instructions in Authentication.
402 -- Payment Required You have insufficient Credit.
403 -- Forbidden Access to Order's or Driver's details is unauthorized.
404 -- Not Found The specified Order or Driver could not be found.
409 -- Conflict ERR_INVALID_COUNTRY -- Incorrect country.
ERR_INVALID_PARAMS --- General validation error.
ERR_REQUIRED_FIELD -- Missing required fields.
429 -- Too Many Requests You're sending in too many requests.
500 -- Internal Server Error We had a problem with our server. Try again later.

Available countries

Lalamove API is currently open for the following countries and regions.

Countries and Regions ISO 3166-1 alpha-2 With UN/LOCODE Locale keys
๐Ÿ‡ญ๐Ÿ‡ฐ Hong Kong HK HK_HKG en_HK, zh_HK
๐Ÿ‡ฎ๐Ÿ‡ฉ Indonesia ID ID_JKT en_ID, id_ID
๐Ÿ‡ฎ๐Ÿ‡ณ India IN IN_BLR, IN_BOM, IN_DEL en_IN, hi_IN, kn_IN, mr_IN
๐Ÿ‡ฒ๐Ÿ‡พ Malaysia MY MY_KUL en_MY, ms_MY
๐Ÿ‡ต๐Ÿ‡ญ Philippines PH PH_MNL, PH_CEB en_PH
๐Ÿ‡ธ๐Ÿ‡ฌ Singapore SG SG_SIN en_SG
๐Ÿ‡น๐Ÿ‡ญ Thailand TH TH_BKK, TH_PYX th_TH, en_TH
๐Ÿ‡น๐Ÿ‡ผ Taiwan TW TW_TPE zh_TW
๐Ÿ‡ป๐Ÿ‡ณ Viet Nam VN VN_SGN, VN_HAN en_VN, vi_VN

Phone validations

The following table show how phone numbers are validated for each country or region.

Countries and Regions Sample Regex
๐Ÿ‡ญ๐Ÿ‡ฐ Hong Kong 51234567 /^((?!999)([2-9][0-9]{7}))$/
๐Ÿ‡ฎ๐Ÿ‡ฉ Indonesia 0212145678 /^0(8\\d{8,11}|21\\d{7,8})$/
๐Ÿ‡ฒ๐Ÿ‡พ Malaysia 0376886555 /^0(1[1,5]?\\d{8}|[4-7,9]\\d{7}|8[2-9]\\d{6}|3\\d{8})$/
๐Ÿ‡ต๐Ÿ‡ญ Philippines 09051234567 /^09[0-9]{9}$|^0?2[0-9]{7}$|^0?32[0-9]{7}$/
๐Ÿ‡ธ๐Ÿ‡ฌ Singapore 81234567 /^[689]{1}[0-9]{7}$/
๐Ÿ‡น๐Ÿ‡ญ Thailand 0812345678 /^(0[0-9]{8,9}|[0-9]{4})$/
๐Ÿ‡น๐Ÿ‡ผ Taiwan 0912345678 /^0([1-8]{1}[0-9]{7,8}|9[0-9]{8})$/
๐Ÿ‡ป๐Ÿ‡ณ Viet Nam 912345678 /^0?(2|[35789])[0-9]{8}$|^02[48][0-9]{8}$/
๐Ÿ‡ฎ๐Ÿ‡ณ India 9234567810 /^([6-9][0-9]{9}|22[0-9]{8})$/

FAQ

Why do I keep getting 401 - Unauthorized error?

Make sure you are follow the instruction on Authentication closely.

rawSignatureWithBody = `${time}\r\n${method}\r\n${path}\r\n\r\n${body}`;
rawSignatureNoBody = `${time}\r\n${method}\r\n${path}\r\n\r\n`;
// the last \r\n\r\n is untouched

If you are having troubles with requests without body like get order details, make sure you leave the line break characters untouched.

If you are really stuck see if you can follow these code samples in various languages

Python - https://repl.it/@jakech/LLM-Auth-Python

C# - https://repl.it/@jakech/LLM-Auth-C

Ruby - https://repl.it/@jakech/LLM-Auth-Ruby

Node - https://github.com/yamdraco/lalamove-js

PHP - https://github.com/yamdraco/lalamove-php

Do you have webhooks?

We do not provide webhooks. However you can perform polling on /v2/orders/<order_id> using CRON jobs to detect status updates.

How do I get notifited when an order status has changed?

You will need to implement a polling mechanism to retrieve order status periodically. We will not push or notify changes programmatically.

Can I just place an order directly without getting a quotation everytime?

Technically yes. If you know the price in advance, for example there are some pre-defined routes that you have to order for a deliveries on a regular basis. You can store the pricing in previous quotations and apply the price directly to POST /v2/orders as quotedTotalFee.

How do I make changes to order status on Sandbox?

There are 2 options.

  1. Log in using your Sandbox credentials to our developer tool
  2. Download our Sandbox driver app for Android to simulate driver's actions