Ola Driver App icon

Ola Driver App data API: earnings, billing and duty

Ola (ANI TECHNOLOGIES PRIVATE LIMITED) · Transport

Ola Driver App (Ola Partner) is the driver-facing client for Ola's Indian ride-hailing network. After licence-number OTP at POST /v1/auth/otp/send and session login at POST /v1/auth/driver-session, the home earnings card is filled by POST /v1/earnings/daily — a map of total, bookings, incentive and operatorBill tiles.

Each trip is a structured fare: POST /v1/trips/{bookingId} returns pickup, customer and pricingInfo, POST /v1/trips/{bookingId}/complete settles total_bill plus driver_payout_commission, and POST /v1/payments/online-status / POST /v1/payments/qr-status confirm the rider paid. Duty and GPS sit on POST /v1/duty/status and POST /v1/location/ping. Paths are illustrative; field names reflect the app's own models.

Ola Driver App (Ola Partner) is the companion for driver-partners on Ola, India's largest ride-hailing network. Behind the login, go-online, trip, billing and earnings screens sits a partner data API: a licence-number OTP plus session login that returns attendance_id, duty_status and the assigned car; a daily earnings map keyed by bookings, incentive, operatorBill and total; a booking-detail payload with pickup, fare and customer; a trip-complete bill with GST, night charges, commission and driver_payout_commission; QR and online payment polling; live GPS pings; and a duty-change write that takes the partner on or off the street. Paths are illustrative; field names reflect the app's own models.

Screenshots

  • Ola Driver App screenshot 1
  • Ola Driver App screenshot 2
  • Ola Driver App screenshot 3
  • Ola Driver App screenshot 4
  • Ola Driver App screenshot 5

API surface

  • Generate partner OTP

    POST /v1/auth/otp/send opendata

    Starts 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

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/auth/otp/send HTTP/1.1
    Content-Type: application/json
    
    {
      "id": 18422109,
      "licenseNumber": "KA01AB1234",
      "service": "DRIVER_APP"
    }
    {
      "status": "SUCCESS",
      "reason": "OTP_SENT"
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the partner login screen's licence-number OTP send control
    • field names match the GenerateOtp request/response models (id, licenseNumber, service, status, reason)
  • Verify partner OTP

    POST /v1/auth/otp/confirm opendata

    Confirms 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

    Illustrative example reconstructed from the app's interface — not a live capture.

    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"
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the OTP verification screen (OtpVerficationFragment)
    • VerifyOtp request fields id, licenseNumber, otp, lat, lng, service
  • Partner session login

    POST /v1/auth/driver-session osint

    Mints 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

    Illustrative example reconstructed from the app's interface — not a live capture.

    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
      }
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the partner session-login flow after OTP
    • LoginResponse fields attendance_id, duty_status, driver, driverId, encryptedDriverId, serviceCity
    • DriverProfile fields mName, mProfilePic, city, rating
  • Daily earnings summary

    POST /v1/earnings/daily openfinance

    Powers 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

    Illustrative example reconstructed from the app's interface — not a live capture.

    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}
      }
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the home-screen earnings card
    • DailySummaryResponse.earnings plus EarningItem ids total/bookings/incentive/operatorBill
  • Fetch booking detail

    POST /v1/trips/{bookingId} opendata

    Loads 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

    Illustrative example reconstructed from the app's interface — not a live capture.

    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"}
      }
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the incoming-booking and in-trip cards
    • BookingDetailResponse fields customer, pickUpLoc, dropLoc, pricingInfo, otp, eta, priceRange
  • Accept booking

    POST /v1/trips/{bookingId}/accept opendata

    Accepts 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

    Illustrative example reconstructed from the app's interface — not a live capture.

    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"}
      }
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the incoming-booking accept control
    • SoftAllotmentBookingAcceptRequest fields bookingId, allotmentType, latitude, longitude
  • Complete trip billing

    POST /v1/trips/{bookingId}/complete openfinance

    Submits 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

    Illustrative example reconstructed from the app's interface — not a live capture.

    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
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the end-trip billing-detail screen
    • CompleteBookingResponse fields total_bill, driver_payout_commission, payment_type, invoice_model
  • Online payment status

    POST /v1/payments/online-status openbanking

    Polls 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

    Illustrative example reconstructed from the app's interface — not a live capture.

    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
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the end-trip online-payment polling screen
    • OnlinePaymentPollingResponse fields paymentStatus, paymentType, amount
  • QR payment status

    POST /v1/payments/qr-status openbanking

    Polls 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

    Illustrative example reconstructed from the app's interface — not a live capture.

    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
      }
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the on-trip QR collect screen
    • PaymentQrCodeDetails / QrCodeDetails fields clientRequestId, imageUrl, id, disableCashCollectedTtl
  • Duty change (go online / offline)

    POST /v1/duty/status opendata

    Toggles 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

    Illustrative example reconstructed from the app's interface — not a live capture.

    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
      }
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the home go-online / go-offline control
    • OfflineModeRequest fields current_status, requested_status, current_location
  • Update driver position

    POST /v1/location/ping opendata

    Streams 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

    Illustrative example reconstructed from the app's interface — not a live capture.

    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"
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the live-location ping that feeds the rider map
    • UpdatePositionRequest fields lat, lng, bookingId, distance, waitTime, car_category
  • Device configuration and payout copy

    POST /v1/config/city openfinance

    Fetches 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

    Illustrative example reconstructed from the app's interface — not a live capture.

    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"}]
      }
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the billing and earnings screens' payout-commission copy
    • PayoutCommissionMessage fields clAdjusted, customerBill, driverEarnings
  • Customer contact lookup

    POST /v1/trips/{bookingId}/rider-contact osint

    Reveals 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

    Illustrative example reconstructed from the app's interface — not a live capture.

    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"
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the in-trip call button
    • GetCustomerContactResponseModel.contactNumber gated by getCustNumberEnabled
  • Country dialling info

    POST /v1/geo/dialling opendata

    Bootstraps 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

    Illustrative example reconstructed from the app's interface — not a live capture.

    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"
        }
      ]
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the pre-login country / dialling-code bootstrap
    • CountryInfo fields countryCode, dialingCode, partnerCareNumber, phoneNumberChangeWebUrl

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.

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

Get a quote