You are on page 1of 9

FAQs for GE Partners

1. Does merchantOrderID or deliveryID change when the driver is changed for a


delivery?
A. No, the merchantOrderID or deliveryID doesn’t change. Internal GE
booking code for the driver changes as there is a new driver, but there is no
change that the partners will notice.

2. I am getting CANCELED status returned instead of CANCELLED in response, as


mentioned in the StateMachine diagram (StateMachinev2.pdf). Is this correct?
A. Yes, the status returned should be CANCELED (American English).
The typo CANCELLED would be corrected in StateMachine diagram

3. For tracking webhook: Do partners have to provide https:// endpoint mandatorily?


A. No, both https:// and http:// based endpoints will work. However,
providing https:// based endpoint is preferred for security reasons.

4. Can driver location coordinates and current delivery status be shown to the partner in
some way?
A. The trackingURL returned in the response of DeliveryInfoAPI is a web link
showing all these details on a map.
i. After the driver is assigned for a ride, subsequent calls to DeliveryInfo API
return a non-empty trackingURL which can be opened in browser/web
view to see details like driver location coordinates, current delivery status,
proof of pickup (if done), proof of delivery (if done)

5. How to install the driver app for stg on phone and do the testing?[this way of
testing is deprecated. Use Express Dev console instead. See
question 14 of this document]
A. Get the stg driver app APK from here.
Driver-app-debug-5.125.0.debug_15ef13ed-542.apk
i. Install the app on an android emulator in Android Studio.
ii. Mock the location of the driver to be in the correct city. Follow:
https://stackoverflow.com/a/45098850 (Answer starting with “First, run
your Android Emulator and click on the menu button (3 dots) shown
below:”)
iii. Make your pickup and drop off location in the create delivery request very
close to the driver (only the 6th digit from the decimal point should
change)
I.e. If driver location: 3.0897444,101.5358274
1. Then, the pickup location should be like 3.0897443,101.5358273
2. And dropoff location should be like 3.0897446,101.5358276
iv. Login into the app using the Gmail account and password provided by the
Grab tech team.
v. Complete the test tutorial order that comes up if you are logging in for the
first time. Switch on the auto-accept toggle (thunder toggle on the top
right corner)
vi. Make your order by calling the GE Create Delivery Endpoint with the
pickup, drop off lat-long as discussed above.
vii. You should see the order on your driver app in 1-5mins.
viii. Change the order status to pickup, dropoff, complete, cancel, etc.
according to your test cases.
ix. If the order doesn’t show up in the stg driver app after 5-10 mins.
1. Make sure the pickup, dropoff and driver location are very nearby
lat-long as mentioned above
2. Create multiple orders at the same location, so that some orders
come to your stg driver.
x. If these changes also don’t show any order, contact the Grab Tech team
on Slack. Ping @oncall-grab-express-partner-integration in Slack.

6. What does paymentMethod signify in request input for Create Delivery API? Can I use
its different values to create COD and non-COD orders?
A. paymentMethod signifies how the driver making the delivery will get paid his
own fees for doing that.
i. cashOnDelivery.amount signifies if the delivery order itself is COD or
non-COD(i.e Cashless). If the amount is 0, the delivery order is non-COD.
ii. While if the cashOnDelivery.amount is > 0, the delivery order is
non-COD. And the cashOnDelivery.amount will be collected from the
sender by the driver.
iii. paymentMethod: “CASH” means the driver will be paid in CASH. The
driver will take his amount from the cashOnDelivery.amount given to
him by the sender for the delivery order.
iv. paymentMethod: “CASHLESS” means the driver will be paid cashless
via Grab Wallet. He will not take anything from the
cashOnDelivery.amount given to him by the sender for the delivery
order.
v. If you don’t pass paymentMethod field, default is taken as “CASHLESS”

7. How do I test that orders are getting created properly by calling APIs using OAuth
mechanism or HMAC mechanism?
A. For OAuth mechanism for access to APIs, you can use postman requests to see
if APIs are working on Grab side on not:
https://www.getpostman.com/collections/286b84acaa8146129a21

8. Are there any constraints on Cancel Order API i.e. under what conditions/till what order
state it can be used to cancel orders by partners?
A. Cancel Order API provided to partners can be used to cancel the order until a
driver has not accepted it, and the state of the order hasn’t gone to PICKING_UP,
or some other advanced stage like IN_DELIVERY, or any other terminal state like
CANCELLED, FAILED, COMPLETED or RETURNED.
i. I.e. Order can be canceled via the Cancel Order API when the order is
newly just created or is in the ALLOCATING state.
ii. However, the operations team on grab side can cancel an order on other
states also like PICKING_UP, or IN_DELIVERY if they spot something
wrong with the order or fraud order, etc.
9. What is any ETA to resolve any issue given by the partner?
A. ETA to resolve issues depends on the environment:
i. In STAGING: ETA for stg issues is EOD when you report it. provided you
don't report too late in the day.
ii. In PRODUCTION: ETA for prod issues is 2-3 hours from the issue unless
there is some blockage or issue in applying the fix. Still, the tech team
reaches out to you in 2 hours about the issue and reports the time to fix it.
10. In schedule object should partner convert date into RFC 3339?
A. If you want to set a future time for starting allocation:
i. set time in this format
"pickupTimeFrom": "2020-06-08T12:37:28+08:00",
"pickupTimeTo": "2020-06-08T12:37:28+08:00"
ii. Note: This means 12:37 PM in SG, MY
B. If you want to use the current time as the time for starting allocation, then don't
send schedule object at all in input JSON, it will try to allocate driver in
real-time
11. Does GE have an endpoint to do reconciliation? i.e. to get all the deliveries with cost
and status within a range of periods. How should the partner check all the transactions?
A. GE doesn't have an endpoint for reconciliation. You have to store the final status
of each delivery via GetInfo API call at last or via Tracking Webhook last POST
request.
12. How to get OAuth client and OAuth password when on the Grab Platform Dashboard?
A. Go to Dashboard -> OAuth clients ->
i. Click on Add +, to generate the client credentials
ii. Provide the following information and click on SAVE
1. Client Description = Partner Name
2. Product Name = Partner Name
3. Email Address = Partner Email Address
4. Product Logo URL = Partner Logo URL
iii. In lifetime seconds -> leave everything 0,0,0
iv. DO NOT switch the toggle at the end ON. leave it as default
v. Fill the required fields(*)
vi. The OAuth credentials will be created.
vii. Click on the EYE ICON to view the OAuth ClientSecret.
13. As a partner willing to onboard. What steps should I follow to get onboarded to GE API?
A. Get onboarded on Slack (contact Grab BD, Ops team to help with this process)
B. Give you PIC Name, Phone number (not used with any Grab system before), Email
(not used with any Grab system before)
C. Sign NDA Doc, other documents (Mutual Agreement Doc b/w partner and Grab)
D. Grab team will create a Grab Platform account for you
i. Stg account creation link:
https://developer-admin.stg-myteksi.com/products/express-api/view
E. Login into Grab Platform account for you on STG/PRD
F. Get the OAuth client and secret from Grab Platform project page
G. Try calling different APIs like Quotes API, Deliveries API, Get Status API, Cancel
API. Check if they are getting the correct response. Contact the Grab Tech team in
case of any issues.
H. Set up Tracking Webhook (see API docs for its specification):
i. Give the Grab Team the Tracking Webhook POST URL that they have
implemented [or enter in the sandbox]
ii. Give any fixed auth token that GE needs to send with the POST request.
1. We add that in the ‘authorization’ header
a. A fixed authorization header can be entered by the partner
in the tab Partner Client Secret in the staging-dev-console
b. A fixed authorization header will be entered in UCM for
prod
I. Test the end-of-end happy path and unhappy path for an order via the different
APIs [it can be totally checked by the partner in the sandbox]
J. Start piloting in PROD using one city

14. How to use the Staging sandbox environment to test GE order flow?
A. Video given here: Stg-dev-console-using-video.mp4
B. Curl requests used in the video given here: stg-dev-console-commands.txt
C. Sign in to https://developer-beta.stg-myteksi.com/dashboard
D. Go to your project
E. Go to Express Integration tab -> Set country in Config tab

F.
G. Use new endpoints URLs to create order, view quotes etc.
i. Get OAuth Access Token Endpoint:
https://api.stg-myteksi.com/grabid/v1/oauth2/token
ii. Quotes Endpoint:
https://partner-api.stg-myteksi.com/grab-express-sandbox/v1/deliveries/qu
otes
iii. Place Booking Endpoint or Create Booking Endpoint:
https://partner-api.stg-myteksi.com/grab-express-sandbox/v1/deliveries
iv. Cancel Booking Endpoint:
https://partner-api.stg-myteksi.com/grab-express-sandbox/v1/deliveries/{$d
eliveryID}
v. Order Information Endpoint:
https://partner-api.stg-myteksi.com/grab-express-sandbox/v1/deliveries/{$d
eliveryID}
H. Then create order using pickup, drop off lat-long of that country’s capital city’s
central region.
I. Then, view the order in Testing tools part

J.
K. Then change its status, to do various workflow testing etc.
L. Can see the logs also for completed orders, cancelled orders etc.:
15. In what format should the address and keywords field be in the origin and destination
object in the request body in Delivery API for example?
A. address: "number house + street, ward, district, city"
keywords: "number house + street"
16. Please explain example situation for us, meaning of different status:
A. FAILED : Order was unallocated (not picked up successfully by any driver)
B. CANCELLED : Order was cancelled by partner, driver, or GrabOps
C. RETURNED : Order was returned to partner, or disposed off if it was
perishable like food
D. ALLOCATING : Awaiting driver to take order
E. PICKING_UP : Driver matched, and the driver is handling the order
F. IN_DELIVERY : The delivery item is picked up by a driver
G. COMPLETED : The order is completed.
17. What cases should partners test for in the staging dev console?

A. It is suggested that test the entire flow on happy, unhappy-paths of various


orders.
B. I.e you can test entire flow of orders like:
i. Create an order
ii. See it on the stg-dev-console
iii. Change its status to PICKING_UP
iv. Implement webhook API and add that in config tab
v. See if status change request comes to the webhook
vi. then mark the order as COMPLETED on the stg-dev-console
vii. Try Get Status API to see if you are able to get order’s status as
COMPLETED back
viii. You should do all this via code/programmatically and not only postman
ix. Similarly you can try for cancelled cases also
C. Detailed list of all cases to be tried out:

D.
18. How can already logged in partners add more members to the project?
A. Login to stg or dev portal.
B. Go to project -> Team Members -> Add member -> Enter phoneNumber
without leading 0 and choose country -> Can edit -> DONE

C.
19. How to update the pax name?
A. Download the general grab pax app and login using the phoneNumber.
B. Go to the account tab and edit profile, change the pax name.

20. How long will the order data be available for fetching using APIs?
A. The data will be stored as long as one month, you could use the Get
Order/Get Status API during this period.

21. How to get proof of pickup, proof of delivery after order is completed?
A. [Similar to Question 4] Proof of pickup, Proof of delivery can be seen in the
tracking URL, which is returned in both Get Status API and Webhook API.
B. Tracking URL is a web link , if you open that on any web browser or web UI of
any apps etc., it has proof of delivery if delivery is completed
C. However, one should note that tracking URL expires some time after the
order is completed, so you should capture these details as soon as possible
on your side, after the order is completed.

22. Can a partner set multiple webhook URLs for Grab to report status updates to?
A. No. As per webhook’s code implementation, only one URL per partner is
permitted.
B. If the partner wants the responses to go on two (or more) webhook URLs,
they can reroute the webhook request sent to one URL internally and call
their own endpoint URLs as many times as they want.

23. If a SD order got Scheduled_Failed status, does it mean the order will not be
allocated with rider anymore?
A. Scheduled_Failed status is a final status, so it will not reallocate the new
driver for it. You can try to cancel it and create a new order to deliver the
package.

You might also like