Ola Driver App data API: earnings, billing and duty
Ola Driver App, also listed as Ola Partner, is the driver-side app of Ola, the ride-hailing network run by Bengaluru-based ANI Technologies Private Limited and one of the largest in India. A partner signs in with the vehicle's licence number and an SMS OTP, picks the car they are driving that shift from the cars linked to their account, and taps the home go-online control to start taking work, with a Go-To mode that has its own session-time and booking-count limits and a saved home location. Incoming bookings pop up as offers showing the rider's name, pickup and drop, ETA and an expected price range; once accepted, the trip card carries the ride OTP and an in-trip button to call the rider. At the drop the app builds the bill from distance, wait time, night charge and tolls with GST, then takes the fare as cash, as an in-app or UPI payment, or through a QR code shown to the rider on the driver's screen. A home earnings card tallies the day's total, trip count, incentive and operator bill, and per-city settings explain how the rider's bill differs from what the driver takes home. It serves owner-drivers and drivers in operator-run fleets across Indian cities, offers a choice of Indian interface languages and a partner-care helpline, and competes for the same drivers with Uber Driver, Rapido Captain, Namma Yatri and inDrive.
Duty shifts, settled trip bills and partner payouts make up Ola's supply-side record. Sign-in ties a partner's licenseNumber to an attendance_id, a duty_status, a serviceCity and businessCategory, a driver profile (mName, rating, langCode) and the availableCars they can step into by carModel. Each duty change logs current_status against requested_status with Go-To limits in goToSessionTime and goToBookingCount, and live position pings carry lat, lng, speed, bearing, city and car_category.
Booking offers record bookingId, rideType, priceRange, pickup and drop coordinates and a pricingInfo block — rateCardId, commissionPercentage, demand_factor, upfrontFare — while the trip-end bill itemises baseFare, distanceFare, waitTimeFare, nightCharge, toll_charges and discount into total_bill and driver_payout_commission under a GST invoice_model. Rider payment resolves as paymentStatus, paymentType and amount, or as a QR collect whose disableCashCollectedTtl decides when cash collection switches off, and the day rolls up into an earnings map of total, trips, incentive and operator-bill tiles, each with value and displayValue. Per-city configuration adds the customerBill versus driverEarnings payout copy, and country config the dialingCode and partnerCareNumber.
Fleet operators reconcile the nightly earnings tiles against per-trip total_bill and driver_payout_commission so cash trips, online trips and incentive payouts land in one ledger; finance bots join pricingInfo to the settled bill to flag fares that drifted from the quoted upfrontFare; ops dashboards watch payment status after each drop to catch unpaid QR or UPI fares before the partner goes back online; and city-ops tools map on-duty partners by location and vehicle category — the same supply signal dispatch uses to send unicast offers. openData Studio turns this record of Ola partners' duty, bookings, bills and payouts into callable open data.
Screenshots
API surface
The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.
Generate partner OTP
POST
/v1/auth/otp/sendopendataStarts the partner sign-in flow: sends an OTP against the vehicle licence number shown on the login screen.
Auth: None (pre-login). Body identifies the partner by licence plate.
- id
- licenseNumber
- service
- status
- reason
POST /v1/auth/otp/send HTTP/1.1 Content-Type: application/json { "id": 18422109, "licenseNumber": "KA01AB1234", "service": "DRIVER_APP" }{ "status": "SUCCESS", "reason": "OTP_SENT" }Verify partner OTP
POST
/v1/auth/otp/confirmopendataConfirms the OTP from the verification screen and binds the device location so the subsequent session login can mint attendance_id.
Auth: None (pre-login). Body carries the OTP plus licence number and current lat/lng.
- id
- licenseNumber
- otp
- lat
- lng
- service
- status
- reason
POST /v1/auth/otp/confirm HTTP/1.1 Content-Type: application/json { "id": 18422109, "licenseNumber": "KA01AB1234", "otp": "482193", "lat": "12.9716", "lng": "77.5946", "service": "DRIVER_APP" }{ "status": "SUCCESS", "reason": "OTP_VERIFIED" }Partner session login
POST
/v1/auth/driver-sessionosintMints the partner session used by every later call: attendance_id, duty_status, driver profile (name, photo, rating, city) and the list of cars the partner can step into.
Auth: OTP-verified device session. Body is a pre-login LoginRequest (source=DRIVER_APP).
- status
- request_type
- attendance_id
- duty_status
- imei
- encryptedDriverId
- driverId
- serviceCity
- businessCategory
- driver
- mName
- mProfilePic
- city
- rating
- commLanguage
- langCode
- data
- availableCars
- licenseNumber
- carModel
POST /v1/auth/driver-session HTTP/1.1 Content-Type: application/json { "source": "DRIVER_APP", "isByod": true, "carId": 44102, "carLicenseNumber": "KA01AB1234", "androidId": "a1b2c3d4e5f6", "googleId": "xxxxxxxx-xxxx", "deviceModel": "Pixel 7", "osVersion": "34", "androidVersion": "14", "version_name": "9.9.2.4.4", "skipOperatorOTP": false, "versionCode": 99244 }{ "status": "SUCCESS", "request_type": "LOGIN", "attendance_id": "ATT-20260928-18422", "duty_status": "OFFLINE", "imei": "35xxxxxxxxxx", "encryptedDriverId": "enc_drv_7c81", "driverId": "18422109", "serviceCity": "bangalore", "businessCategory": "CITY_TAXI", "driver": { "mName": "Ravi Kumar", "mProfilePic": "/media/drivers/18422109.jpg", "city": "bangalore", "rating": "4.82", "commLanguage": "kn", "langCode": "kn" }, "data": { "availableCars": [ {"id": 44102, "licenseNumber": "KA01AB1234", "carModel": "Dzire", "label": "Mini", "itemType": 1} ], "disabledCars": [], "skipOperatorOTP": true } }Daily earnings summary
POST
/v1/earnings/dailyopenfinancePowers the home-screen earnings card: a map of EarningItem tiles for today's total, trip count, incentive and operator bill.
Auth: Post-login session: attendance_id in the JSON body plus access_token from POST /v1/auth/driver-session (Authorization header).
- status
- updatedAt
- incentiveToolTipVisibility
- earnings
- id
- name
- value
- displayValue
- display
- orderId
- details
- summaryId
POST /v1/earnings/daily HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json { "attendance_id": "ATT-20260928-18422", "version_code": 99244, "details": "account_summary", "summaryId": "SUM-2026-09-28" }{ "status": "SUCCESS", "updatedAt": "2026-09-28T18:40:00+05:30", "incentiveToolTipVisibility": true, "earnings": { "total": {"id": "total", "name": "Today", "value": "2140.50", "displayValue": "₹2,140.50", "display": true, "orderId": 1}, "bookings": {"id": "bookings", "name": "Trips", "value": "12", "displayValue": "12", "display": true, "orderId": 2}, "incentive": {"id": "incentive", "name": "Incentive", "value": "180.00", "displayValue": "₹180", "display": true, "orderId": 3}, "operatorBill": {"id": "operatorBill", "name": "Operator bill", "value": "96.00", "displayValue": "₹96", "display": true, "orderId": 4} } }Fetch booking detail
POST
/v1/trips/{bookingId}opendataLoads the incoming / in-trip booking card: customer name and masked phone, pickup and drop, OTP, ETA, price range and the rate-card / demand-factor fare.
Auth: Post-login session: attendance_id in the JSON body plus access_token from POST /v1/auth/driver-session (Authorization header).
- bookingId
- status
- tripType
- rideType
- serviceType
- currencySymbol
- otp
- eta
- priceRange
- driverSurcharge
- billingGroup
- customer
- name
- displayPhoneNo
- pickUpLoc
- dropLoc
- locality
- address
- latitude
- longitude
- pricingInfo
- rateCardId
- paymentType
- commissionPercentage
- upfrontFare
- demand_factor
POST /v1/trips/CRN123456789 HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json { "attendance_id": "ATT-20260928-18422", "version_code": 99244, "bookingId": "CRN123456789", "key": "auth-key-88a21", "medium": "UNICAST", "restoreBooking": false }{ "bookingId": "CRN123456789", "status": "ALLOTTED", "tripType": "LOCAL", "rideType": "MINI", "serviceType": "p2p", "currencySymbol": "₹", "otp": "4821", "eta": 420, "priceRange": "₹180–₹220", "driverSurcharge": 12.0, "billingGroup": "city_taxi", "customer": { "name": "Anita", "displayPhoneNo": "+91-98xxxx3210", "dialingCode": "+91" }, "pickUpLoc": { "locality": "Indiranagar", "address": "100 Feet Rd", "latitude": 12.9784, "longitude": 77.6408 }, "dropLoc": { "locality": "Koramangala", "address": "80 Feet Rd", "latitude": 12.9352, "longitude": 77.6245 }, "pricingInfo": { "rateCardId": 8841, "paymentType": "ONLINE", "invoice_model": "GST", "commissionPercentage": 12.0, "upfrontFare": 196.0, "baseFare": {"value": 49.0, "currency": "INR"}, "minFare": {"value": 79.0, "currency": "INR"}, "demand_factor": {"type": "PEAK", "value": 1.2, "reason": "peak_hour"} } }Accept booking
POST
/v1/trips/{bookingId}/acceptopendataAccepts a unicast / soft-allotment offer from the incoming-booking screen, attaching the partner's live lat/lng and returning the accepted booking card.
Auth: Post-login session: attendance_id in the JSON body plus access_token from POST /v1/auth/driver-session (Authorization header).
- bookingId
- serviceType
- allotmentType
- unicast_type
- status
- latitude
- longitude
- accuracy
- offlineAgreedBill
- reason
- bookingInfo
- otp
POST /v1/trips/CRN123456789/accept HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json { "attendance_id": "ATT-20260928-18422", "version_code": 99244, "bookingId": "CRN123456789", "serviceType": "p2p", "allotmentType": "UNICAST", "unicast_type": "SOFT_LOCK", "status": 1, "latitude": 12.9784, "longitude": 77.6408, "accuracy": 8.5, "offlineAgreedBill": 0 }{ "status": "SUCCESS", "timestamp": "2026-09-28T18:41:02+05:30", "reason": "ACCEPTED", "bookingInfo": { "bookingId": "CRN123456789", "status": "ACCEPTED", "otp": "4821", "customer": {"name": "Anita", "displayPhoneNo": "+91-98xxxx3210"} } }Complete trip billing
POST
/v1/trips/{bookingId}/completeopenfinanceSubmits the driver-led bill at trip end (distance, wait, night, toll, GST) and returns the settled total_bill plus driver_payout_commission shown on the billing-detail screen.
Auth: Post-login session: attendance_id in the JSON body plus access_token from POST /v1/auth/driver-session (Authorization header).
- bookingId
- booking_id
- rateCardId
- distance
- chargedDistance
- duration
- waitTime
- baseFare
- distanceFare
- rideTimeFare
- waitTimeFare
- minFare
- nightCharge
- tollCharges
- toll_charges
- discount
- totalBill
- total_bill
- subTotalBill
- totalPayableNow
- advance
- payment_type
- invoice_model
- adjusteCashToDriver
- driver_payout_commission
POST /v1/trips/CRN123456789/complete HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json { "attendance_id": "ATT-20260928-18422", "version_code": 99244, "bookingId": "CRN123456789", "rateCardId": 8841, "distance": 8.4, "chargedDistance": 8.4, "duration": 22.0, "waitTime": 4.0, "baseFare": 49.0, "distanceFare": 84.0, "rideTimeFare": 22.0, "waitTimeFare": 8.0, "minFare": 79.0, "nightCharge": 0.0, "tollCharges": 0.0, "discount": 20.0, "totalBill": 196.0, "subTotalBill": 175.0, "totalPayableNow": 0.0, "advance": 196.0, "payment_type": "ONLINE", "dropLocLat": 12.9352, "dropLocLong": 77.6245, "startAt": 1759057860000, "stopAt": 1759059180000 }{ "status": "SUCCESS", "request_type": "COMPLETE", "booking_id": "CRN123456789", "payment_type": "ONLINE", "invoice_model": "GST", "baseFare": 49.0, "distanceFare": 84.0, "rideTimeFare": 22.0, "waitTimeFare": 8.0, "minFare": 79.0, "nightCharge": 0.0, "toll_charges": 0.0, "discount": 20.0, "subTotalBill": 175.0, "total_bill": 196.0, "advance": 196.0, "totalPayableNow": 0.0, "adjusteCashToDriver": 0.0, "driver_payout_commission": "23.52", "chargedDistance": 8.4, "chargedTripTime": 22.0, "chargedWaitTime": 4.0, "rateCardId": 8841 }Online payment status
POST
/v1/payments/online-statusopenbankingPolls whether the rider's in-app / UPI payment has settled so the end-trip screen can mark the fare as paid.
Auth: Post-login session: attendance_id in the JSON body plus access_token from POST /v1/auth/driver-session (Authorization header).
- bookingId
- paymentStatus
- paymentType
- amount
POST /v1/payments/online-status HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json { "bookingId": "CRN123456789" }{ "bookingId": "CRN123456789", "paymentStatus": "SUCCESS", "paymentType": "UPI", "amount": 19600 }QR payment status
POST
/v1/payments/qr-statusopenbankingPolls the on-trip QR collect shown to the rider until cash-collected can be disabled and the fare is marked paid.
Auth: Post-login session: attendance_id in the JSON body plus access_token from POST /v1/auth/driver-session (Authorization header).
- bookingId
- paymentQrCodeDetails
- clientRequestId
- id
- imageUrl
- imageContent
- disableCashCollectedTtl
- payment_type
- totalPayableNow
- qrCodeDetails
POST /v1/payments/qr-status HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json { "attendance_id": "ATT-20260928-18422", "version_code": 99244, "bookingId": "CRN123456789", "paymentQrCodeDetails": { "clientRequestId": "qr_01H9K2", "id": "qr_pay_88a21", "imageUrl": "/media/qr/88a21.png" } }{ "status": "SUCCESS", "booking_id": "CRN123456789", "payment_type": "QR", "totalPayableNow": 0.0, "qrCodeDetails": { "clientRequestId": "qr_01H9K2", "id": "qr_pay_88a21", "imageUrl": "/media/qr/88a21.png", "imageContent": null, "disableCashCollectedTtl": 30 } }Duty change (go online / offline)
POST
/v1/duty/statusopendataToggles the partner on or off duty from the home go-online control, sending current GPS and returning session / Go-To booking constraints.
Auth: Post-login session: attendance_id in the JSON body plus access_token from POST /v1/auth/driver-session (Authorization header).
- current_status
- requested_status
- app_state
- action_id
- current_location
- google_advertisement_id
- apps_flyer_id
- status
- goToSessionTime
- goToBookingCount
- showSurveyQuestion
- homeLocation
POST /v1/duty/status HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json { "attendance_id": "ATT-20260928-18422", "version_code": 99244, "current_status": "OFFLINE", "requested_status": "ONLINE", "app_state": 1, "action_id": "GO_ONLINE", "google_advertisement_id": "xxxxxxxx-xxxx", "apps_flyer_id": "af_18422109", "current_location": { "lat": "12.9716", "lng": "77.5946", "accuracy": "8.5", "bearing": "12.0", "speed": "0.0" } }{ "status": "SUCCESS", "goToSessionTime": 45, "goToBookingCount": 2, "showSurveyQuestion": false, "homeLocation": { "latitude": 12.9716, "longitude": 77.5946 } }Update driver position
POST
/v1/location/pingopendataStreams the partner's live GPS (and in-trip distance / wait) so dispatch can match offers and the rider map can follow the car.
Auth: Post-login session: attendance_id in the JSON body plus access_token from POST /v1/auth/driver-session (Authorization header).
- bookingId
- lat
- lng
- accuracy
- alt
- bearing
- speed
- provider
- fixTime
- timestamp
- status
- distance
- waitTime
- duration
- city
- car_category
POST /v1/location/ping HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json { "attendance_id": "ATT-20260928-18422", "version_code": 99244, "bookingId": "CRN123456789", "lat": 12.9512, "lng": 77.6301, "accuracy": 6.2, "alt": 920.0, "bearing": 214.0, "speed": 8.4, "provider": "gps", "fixTime": 1759058600000, "timestamp": 1759058600500, "status": 3, "distance": 4.1, "waitTime": 90, "duration": 780000, "city": "bangalore", "car_category": "mini" }{ "status": "SUCCESS" }Device configuration and payout copy
POST
/v1/config/cityopenfinanceFetches per-city partner config, including the payout-commission copy (customerBill vs driverEarnings) rendered on the billing / earnings screens.
Auth: Post-login session: attendance_id in the JSON body plus access_token from POST /v1/auth/driver-session (Authorization header).
- city
- status
- hash
- data
- driverPayoutCommissionMessage
- clAdjusted
- customerBill
- driverEarnings
- enableFraudClone
- enableFraudMock
- localeLanguages
POST /v1/config/city HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json { "city": "bangalore" }{ "status": "SUCCESS", "hash": "cfg-bangalore-9f2a", "data": { "driverPayoutCommissionMessage": { "clAdjusted": "After cancellation levy", "customerBill": "Customer paid ₹196", "driverEarnings": "Your earning ₹172.48" }, "enableFraudClone": true, "enableFraudMock": true, "localeLanguages": [{"code": "en"}, {"code": "hi"}, {"code": "kn"}] } }Customer contact lookup
POST
/v1/trips/{bookingId}/rider-contactosintReveals the rider's call-through number for the active booking (the in-trip call button), gated on getCustNumberEnabled from booking detail.
Auth: Post-login session: attendance_id in the JSON body plus access_token from POST /v1/auth/driver-session (Authorization header).
- bookingId
- userType
- leadSourceVendor
- contactNumber
POST /v1/trips/CRN123456789/rider-contact HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json { "attendance_id": "ATT-20260928-18422", "version_code": 99244, "bookingId": "CRN123456789", "userType": "CUSTOMER", "leadSourceVendor": "OLA" }{ "contactNumber": "+91-98xxxx3210" }Country dialling info
POST
/v1/geo/diallingopendataBootstraps the login country's dialling code, partner-care number and phone-change URL before OTP is sent.
Auth: None (pre-login). Body identifies the device by imei.
- imei
- status
- timestamp
- countryInfo
- id
- countryCode
- name
- dialingCode
- iconUrl
- partnerCareNumber
- phoneNumberChangeWebUrl
POST /v1/geo/dialling HTTP/1.1 Content-Type: application/json { "imei": "35xxxxxxxxxx" }{ "status": "SUCCESS", "timestamp": "2026-09-28T12:01:00Z", "countryInfo": [ { "id": 1, "countryCode": "IN", "name": "India", "dialingCode": "+91", "iconUrl": "/media/flags/in.png", "partnerCareNumber": "080-12345678", "phoneNumberChangeWebUrl": "/partner/register" } ] }
Data categories
- partner identity
- session and duty status
- daily earnings
- trip billing
- online and QR payments
- live location
- customer contact
- country config
Where teams use this data
Partner earnings reconciliation
A fleet operator pulls POST /v1/earnings/daily each night (earnings.total / bookings / incentive / operatorBill) and matches it against POST /v1/trips/{bookingId}/complete totals (total_bill, driver_payout_commission, payment_type) so cash vs online trips and incentive payouts land in the same ledger.
Trip-level fare audit
Finance bots join POST /v1/trips/{bookingId} pricingInfo (rateCardId, commissionPercentage, demand_factor, upfrontFare) with the trip-complete payload (baseFare, distanceFare, nightCharge, toll_charges, GST invoice_model) to flag bills that drifted from the quoted upfront fare.
Payment-settlement monitor
Ops dashboards poll POST /v1/payments/online-status and POST /v1/payments/qr-status after trip complete, using paymentStatus / paymentType / amount and qrCodeDetails.disableCashCollectedTtl to catch unpaid QR or UPI fares before the partner goes back online.
Supply-availability feed
A city-ops tool reads POST /v1/duty/status (current_status → requested_status) plus POST /v1/location/ping (lat, lng, city, car_category, status) to map which partners are on duty, where, and in which category — the same signal dispatch uses to send unicast offers.
Frequently asked questions
How does an Ola partner sign in?
The app generates an OTP against the vehicle licence number at POST /v1/auth/otp/send, verifies it at POST /v1/auth/otp/confirm, then calls POST /v1/auth/driver-session. The login response mints attendance_id, duty_status, the driver profile and the list of available cars; later calls send attendance_id in the JSON body.
What earnings data does the Ola Driver App expose?
POST /v1/earnings/daily returns a keyed earnings map (total, bookings, incentive, operatorBill) with value and displayValue. Trip-level settlement comes from POST /v1/trips/{bookingId}/complete: total_bill, driver_payout_commission, payment_type and the fare breakup (baseFare, distanceFare, nightCharge, toll_charges). Per-city payout copy lives on POST /v1/config/city.
How are rider payments confirmed?
Online / UPI fares are polled at POST /v1/payments/online-status (paymentStatus, paymentType, amount). QR collects use POST /v1/payments/qr-status with PaymentQrCodeDetails (clientRequestId, imageUrl, id) until disableCashCollectedTtl expires. Both require the signed-in partner session.
Does the API expose live location or rider contact?
Yes. POST /v1/location/ping streams lat, lng, speed, city and car_category (and in-trip distance / waitTime). POST /v1/trips/{bookingId}/rider-contact returns contactNumber for the active booking when getCustNumberEnabled is set on the booking-detail payload.
Apps similar to Ola Driver App
- Uber Driver — Uber's India partner app is how drivers sign up with licence and vehicle documents, then go online to accept cab, auto and bike trip requests.
- Rapido Captain — Rapido Captain is Rapido's partner app for bike-taxi, auto-rickshaw and cab trips, plus parcel work where the city offers it.
- Namma Yatri — Namma Yatri is an ONDC ride-hailing app for autos and cabs in which drivers keep the full fare and pay a flat subscription instead of a per-ride commission.
- inDrive — inDrive lets a rider propose a fare and the driver accept, counter or decline that offer in the app before the trip starts.
- Bharat Taxi — Bharat Taxi is a cooperative ride-hailing app promoted by India's Ministry of Cooperation, where driver-members keep the fare and pay a fixed daily fee instead of a per-ride commission.
- Porter Driver Partner App — Porter's driver-partner app assigns Indian bike, tempo and mini-truck owners on-demand goods trips rather than passenger ride-hailing.
Topics
- ola driver api
- ola partner earnings
- ola trip billing
- ola duty status
- ola qr payment
- ola driver_payout_commission
- ola partner session
- ola daily earnings
Need this app's data API integrated?
We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.
- NDA + SOW on every engagement
- Delivery in 3–7 days
- Payment only after acceptance
- Work scoped to authorized use