Zero-emission delivery,
built for developers.
Plug GreenDrive Delivery's 100% electric two-wheeler fleet into your platform with a handful of REST calls. Check serviceability, create orders, track riders in real time, and cancel — all over a clean, predictable HTTPS JSON API.
Base URLs
Two environments are available. Use development for testing and integration, and move to production only after end-to-end validation.
https://dev-api.greendrivedelivery.com/api
https://agency.greendrivedelivery.com/api
Authentication
All endpoints are authenticated using an API key issued by the GreenDrive onboarding team. Pass the key in the x-api-key header on every request.
Required Headers
| Header | Value | Required |
|---|---|---|
| x-api-key | Token | Yes |
| Content-Type | application/json | Yes |
Service Availability
Check whether GreenDrive can service a delivery between two locations and retrieve an estimated fare — base charge, GST, total, distance, duration, and the recommended vehicle's max capacity.
Request Parameters
startAddress
| Field | Type | Required | Description |
|---|---|---|---|
| address | String | Yes | Pickup address |
| latitude | Number | Yes | Pickup latitude |
| longitude | Number | Yes | Pickup longitude |
endAddress
| Field | Type | Required | Description |
|---|---|---|---|
| address | String | Yes | Delivery address |
| latitude | Number | Yes | Delivery latitude |
| longitude | Number | Yes | Delivery longitude |
deliveryDetails
| Field | Type | Required | Description |
|---|---|---|---|
| specialInstructions | String | Yes | Delivery instructions |
| items | Array | Yes | Parcel item details |
items[]
| Field | Type | Required | Description |
|---|---|---|---|
| cargoType | String | Yes | Type of cargo |
| weight | Number | Yes | Weight in KG |
| length | Number | Yes | Length in CM |
| breadth | Number | Yes | Breadth in CM |
| height | Number | Yes | Height in CM |
Try It
Success Response · 200
{
"estimatedFare": {
"totalFare": 107,
"baseCharge": 102,
"subtotal": 107,
"totalGST": 0,
"currency": "INR",
"distance": 16.769,
"duration": 2348,
"vehicleType": "2W",
"waitingMinutes": 0,
"extraWaitingCharge": 0,
"maxCapacity": {
"weight": 10,
"length": 40,
"width": 25,
"height": 40,
"items": 2
}
}
}
Error Responses
{
"error": "Validation Error",
"message": "Start Latitude is required"
}
{
"error": "SERVICE_NOT_AVAILABLE",
"message": "No delivery service available for the selected route"
}
{
"error": "Internal Server Error",
"message": "Unexpected server error"
}
Create Order
Create a delivery order and dispatch it to an available EV rider. The system validates the request, generates a unique id (e.g. ORD-0321), and returns the full booking record.
Root Fields
| Field | Type | Required | Description |
|---|---|---|---|
| triptype | String | Yes | Must be delivery |
| partner_order_id | String | Yes | Unique order reference from partner |
| tripStartDate | ISO Date | Yes | Pickup date and time (ISO 8601) |
| paymentType | String | Yes | COD, UPI, or Wallet |
startAddress (Pickup)
| Field | Type | Required |
|---|---|---|
| address | String | Yes |
| latitude | Number | Yes |
| longitude | Number | Yes |
| contactName | String | Yes |
| phoneNumber | String | Yes |
| pincode | String | Yes |
+91 and be a valid Indian mobile number — e.g. +919876543210.endAddress (Delivery)
| Field | Type | Required |
|---|---|---|
| address | String | Yes |
| latitude | Number | Yes |
| longitude | Number | Yes |
| contactName | String | Yes |
| phoneNumber | String | Yes |
| pincode | String | Yes |
deliveryDetails
| Field | Type | Required |
|---|---|---|
| specialInstructions | String | No |
| items | Array | Yes |
items[]
| Field | Type | Required |
|---|---|---|
| cargoType | String | Yes |
| weight | Number | Yes |
| length | Number | Yes |
| breadth | Number | Yes |
| height | Number | Yes |
| images | Array | No |
images[]
| Field | Type | Required |
|---|---|---|
| base64String | String | Yes |
| fileType | String | Yes |
image/jpeg, image/jpg, image/png, image/gif, image/webp, image/bmp, image/svg+xml.Try It
Success Response
[
{
"id": "ORD-0321",
"status": "Not assigned",
"triptype": "delivery",
"tripStartDate": "2026-03-23T02:30:00.000Z",
"startAddress": {
"address": " Coimbatore Railway Station ",
"latitude": 13.046281,
"longitude": 80.115179,
"contactName": "Pratheesh",
"phoneNumber": "+919342798869"
},
"endAddress": {
"address": " Chennai Central Railway Station ",
"latitude": 13.0425934,
"longitude": 80.1236897,
"contactName": "Pratheesh",
"phoneNumber": "+917824024171"
},
"deliveryDetails": {
"specialInstructions": "",
"items": [
{
"cargoType": "GLW-GLASSWARE x 2",
"weight": 8,
"length": 10,
"breadth": 12,
"height": 10,
"images": []
}
]
}
}
]
Validation Errors
{
"error": "Validation Error",
"message": "Phone number must start with +91 and be a valid Indian mobile number"
}
{
"error": "Validation Error",
"message": "Partner order ID is required"
}
{
"error": "Validation Error",
"message": "Payment type must be COD or UPI or Wallet"
}
Order Tracking
Fetch the latest tracking snapshot for an order — current status, assigned rider, and live coordinates. For real-time, push-based updates, use webhooks instead of polling.
Request Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| order_number | String | Yes | System-generated order number |
Try It
Success Response · 200
{
"success": true,
"message": "Order tracking fetched successfully",
"data": {
"order_number": "ORD-0321",
"status": "Assigned",
"rider_name": "Ramesh Kumar",
"rider_phone": "9876543210",
"latitude": 13.046281,
"longitude": 80.115179
}
}
Response Fields
| Field | Description |
|---|---|
| order_number | System-generated order number |
| status | Current order status |
| rider_name | Assigned rider name |
| rider_phone | Assigned rider mobile number |
| latitude | Rider's current latitude |
| longitude | Rider's current longitude |
Error Responses
{
"success": false,
"message": "Order not found"
}
{
"success": false,
"message": "Order number is required"
}
{
"success": false,
"message": "Internal server error"
}
Cancel Order
Cancel an existing order if it has not yet started. Orders can only be cancelled when their current status is one of:
PendingAssignedArrived_At_PickupRequest Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| order_number | String | Yes | System-generated order number |
| cancel_reason | String | Yes | Reason for cancellation |
Try It
Success Response · 200
{
"success": true,
"message": "Order cancelled successfully"
}
Error Responses
{
"success": false,
"message": "Order number is required"
}
{
"success": false,
"message": "Cancel reason is required"
}
{
"success": false,
"message": "Order not found"
}
{
"success": false,
"message": "Order is already cancelled"
}
{
"success": false,
"message": "Order Already Started"
}
{
"success": false,
"message": "Internal server error"
}
Arrived_At_Pickup).Webhook Configuration
GDD sends real-time order status updates to your configured webhook URL. Whenever an order status changes, GDD sends an HTTP POST request to your registered endpoint — eliminating the need to poll the tracking API.
Why webhooks matter
Real-time updates
Status changes reach you within seconds. No cron jobs, no polling delays.
Lower API load
Stop calling the tracking endpoint every few seconds — reduce your outbound traffic by 90%+.
Better customer UX
Trigger SMS, email, or push notifications the instant something happens.
Reliable reconciliation
Every event carries the order ID and new status — build idempotent handlers and never lose a state change.
Request
| Property | Value |
|---|---|
| Method | POST |
| Content-Type | application/json |
Payload Example
{
"id": "ORD-0321",
"status": "Assigned",
"startAddress": {
"address": "Chennai Central Railway Station",
"latitude": 13.0827,
"longitude": 80.2707,
"contactName": "John Doe",
"contactNumber": "+919876543210"
},
"endAddress": {
"address": "Coimbatore Railway Station",
"latitude": 11.0168,
"longitude": 76.9558,
"contactName": "David",
"contactNumber": "+919876543211"
},
"driver": {
"name": "Ramesh Kumar",
"phone": "+919876543212",
"latitude": 13.0851,
"longitude": 80.2720,
"is_online": true
}
}
Expected Response
Your webhook handler must acknowledge receipt by returning the following JSON response with HTTP status 200 OK:
{
"success": true
}
Order Status Values
The status field in webhook payloads (and in tracking responses) can take any of these values:
PendingAssignedArrived_At_PickupPicked_UpOut_For_DeliveryArrived_At_Delivery_LocationDeliveredCancelledReturn_InitiatedRTO_DeliveredRTO_FailedBest Practices
Webhook implementation checklist
- Use HTTPS only. Plain HTTP endpoints will not be accepted.
- Respond fast. Acknowledge with HTTP 200 within a few seconds — push heavy work (DB writes, notifications) into a background queue.
- Be idempotent. The same order status can in rare cases arrive more than once — guard against double-processing using
id+status. - Honor the status order. Don't downgrade — if you've already recorded
Delivered, ignore a lateOut_For_Delivery. - Log raw payloads for at least 30 days for debugging and reconciliation.
- Whitelist GDD IPs at your firewall once shared by the support team.
- Test in DEV first. Use a tunneling tool like ngrok or Cloudflare Tunnel to receive events on localhost.
Support
Stuck on an integration? Our team replies during business hours and prioritises production-blocking issues. Pick whichever channel suits you.
Phone
+91 99999 99999 Best for: urgent issues, live production incidentsOffice Hours
9:30 AM – 6:30 PM IST
Monday – Saturday
Office Address
GreenDrive Delivery Pvt. Ltd.
[Address to be updated]
What to include when you reach out
A complete report lets us help on the first reply. Please share:
- Your account name or API key prefix (never the full key)
- Environment — Development or Production
- Endpoint being called (e.g.
/orders/create-order) - Full request payload (redact PII if needed)
- Full response body including status code
- Timestamp of the request in IST
- Order ID or
partner_order_idif applicable - Steps to reproduce the issue
Contact Us
Drive cleaner. Deliver faster.
Interested in onboarding GreenDrive's EV fleet for your business, exploring volume pricing, or discussing a custom integration? Talk to our team — we typically respond within one business day.
Business Enquiries
support@greendrivedelivery.com
Call Sales
+91 9908616865
wa.me/91 9908616865
Visit Us
GreenDrive Delivery Pvt. Ltd.
GREEN DRIVE AUTO SERVICES PRIVATE LIMITED KHATA NO BBMP/CMC PID NO 368/327/52/2,
LBT BUILDING NO 2MUNICIPAL NO 52/2, HEBBAGODI OPP HUSKUR GATE,
ELECTRONIC CITY POST, HOSUR MAIN ROAD, Bengaluru,
Bengaluru Rural, Karnataka, 560100