IndianOil ONE data API
IndianOil ONE is the official consumer app of Indian Oil Corporation Ltd, India's largest fuel retailer and the company behind Indane LPG. Households use it to manage their LPG connection, book refills, keep Aadhaar eKYC current for the PAHAL subsidy and repay connection loans, while drivers locate nearby petrol pumps and earn XTRAREWARDS points on every fill.
Those screens read as structured data: LPG connections carry consumerNo, lpgId, distributorName, kycStatus and subsidyEligible; refill bookings return OrderNo, BookingPrice, PaidFlag and PinNum; the loyalty wallet reports availableBalance, earnedPoints and redeemedPoints; and outlet lookups expose sapCode, openNow and live fuelPrice. Distributor back-offices build refill operations feeds on this data, finance teams reconcile XTRAREWARDS ledgers, compliance dashboards watch PAHAL subsidy KYC, and fleet or EV routing tools pick outlets by amenity.
IndianOil ONE is the consumer super-app from Indian Oil Corporation Ltd, India's largest fuel retailer, covering Indane LPG, petrol-pump services and the XTRAREWARDS loyalty program for households and drivers across India. Behind those screens sits a dataset of LPG connection records with distributor and subsidy flags, refill bookings with price and delivery status, XTRAREWARDS point balances, and nearby retail outlets with amenities and fuel prices. That data powers distributor refill operations, loyalty-ledger reconciliation, PAHAL subsidy compliance monitoring, and fleet or EV routing.
Screenshots
API surface
Request/response examples are illustrative, reconstructed from the app's interface — not a live capture.
Send login OTP
POST
/v1/auth/otpopendataSends a 4-digit OTP to the registered mobile number so the user can sign in or reset a password.
Auth: None. Public start of the mobile-OTP login. Later calls attach the session from /v1/consumer/session.
- mobileNumber
- channel
- TrackingId
- ErrorCode
- ErrorMessage
- otpSent
- otpLength
- resendAfterSeconds
POST /v1/auth/otp HTTP/1.1 Content-Type: application/json { "mobileNumber": "9876543210", "channel": "SMS", "TrackingId": "LoginActivity09292026101522_3.2.95" }{ "TrackingId": "LoginActivity09292026101522_3.2.95", "ErrorCode": "0", "ErrorMessage": "Success", "otpSent": true, "otpLength": 4, "resendAfterSeconds": 30 }Source in the app
inferred from Login / LOGIN NOW / Login using Mobile OTP and SEND OTP / Enter OTP / Resend OTP strings in the English localeOTP length copy: Please enter 4 digit OTP
Create signed-in session
POST
/v1/consumer/sessionopendataExchanges a verified OTP (or password) for a session token, UCMId and linked LPG identity used on every subsequent call.
Auth: OTP from /v1/auth/otp, or mobile/email plus password. Response sessionToken is sent as Authorization: Bearer on later calls.
- mobileNumber
- otp
- loginType
- TrackingId
- ErrorCode
- ErrorMessage
- sessionToken
- uCMId
- consumerNo
- lpgId
POST /v1/consumer/session HTTP/1.1 Content-Type: application/json { "mobileNumber": "9876543210", "otp": "4821", "loginType": "OTP", "TrackingId": "LoginActivity09292026101604_3.2.95" }{ "TrackingId": "LoginActivity09292026101604_3.2.95", "ErrorCode": "0", "ErrorMessage": "Success", "sessionToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.session", "uCMId": "UCM-184650159", "loginType": "OTP", "consumerNo": "2081846501", "lpgId": "1234567890123456" }Source in the app
inferred from Login / password / OTP screens and the session-expired copy Your session has been expired, Please login.PayUHashPostRequest.loginType and uCMId fields on the native checkout bridge
LPG connection dashboard
GET
/v1/lpg/connectionsopendataLoads the LPG dashboard: linked domestic/commercial connections, distributor, eKYC status and PAHAL subsidy flags.
Auth: Bearer sessionToken from /v1/consumer/session. TrackingId per request.
- consumerNo
- lpgId
- connectionType
- distributorCode
- distributorName
- kycStatus
- lastEKycDate
- lastEKycMode
- subsidyEligible
- optedOutOfSubsidy
- active
GET /v1/lpg/connections HTTP/1.1 Authorization: Bearer <sessionToken> Accept: application/json X-Tracking-Id: LPGDashboard09292026102011_3.2.95{ "TrackingId": "LPGDashboard09292026102011_3.2.95", "ErrorCode": "0", "ErrorMessage": "Success", "connections": [ { "consumerNo": "2081846501", "lpgId": "1234567890123456", "connectionType": "Domestic", "distributorCode": "0000154004", "distributorName": "K-2 International", "kycStatus": "Completed", "lastEKycDate": "2025-11-18", "lastEKycMode": "AadhaarOTP", "subsidyEligible": true, "optedOutOfSubsidy": false, "active": true } ] }Source in the app
inferred from LPG Dashboard / CONSUMER NO. / CONSUMER ID / LPG ID / Distributor Code / KYC Status / Subsidy Eligible / Opted Out of Subsidy locale keysconnection_details, manage_connection, Domestic Connection and Commercial Connection screens
Book LPG refill
POST
/v1/lpg/orders/refillopenfinancePlaces an Indane refill (normal or Tatkal) and returns order number, booking price and PIN used to track delivery.
Auth: Bearer sessionToken from /v1/consumer/session.
- lpgId
- NoOfCylinder
- deliveryType
- OrderTypeLIC
- OrderSubTypeLIC
- payOnline
- OrderNo
- OrderDate
- BookingPrice
- Status
- PaidFlag
- EPICOrderType
- EPICOrderSubType
- PinNum
POST /v1/lpg/orders/refill HTTP/1.1 Authorization: Bearer <sessionToken> Content-Type: application/json { "lpgId": "1234567890123456", "NoOfCylinder": "1", "deliveryType": "Tatkal", "OrderTypeLIC": "OT8", "OrderSubTypeLIC": "OS24", "payOnline": true, "TrackingId": "RefillBooking09292026102133_3.2.95" }{ "TrackingId": "RefillBooking09292026102133_3.2.95", "ErrorCode": "0", "ErrorMessage": "Success", "OrderNo": "2-002184659844", "OrderDate": "09/29/2026 10:21:33", "BookingPrice": "411.5", "NoOfCylinder": "1", "Status": "Open", "PaidFlag": "N", "EPICOrderType": "Sales Order", "EPICOrderSubType": "Refill Order", "PinNum": "4821" }Source in the app
inferred from Order Cylinder / Refill Orders / Tatkal vs Normal / Proceed to Payment / Cash on Delivery screenssample booking_history.json OrderTypeLIC OT8 / EPICOrderSubType Refill Order
LPG booking history
GET
/v1/lpg/ordersopenfinancePages refill and NFR booking history with paid flag, booking price, cylinder count and EPIC order subtype.
Auth: Bearer sessionToken from /v1/consumer/session.
- TrackingId
- ErrorCode
- ErrorMessage
- LastPage
- PaidFlag
- OrderDate
- OrderNo
- BookingPrice
- SubsidizedFlag
- NoOfCylinder
- Status
- InvoiceNumber
- PinNum
- OrderTypeLIC
- EPICOrderType
- EPICOrderSubType
- OrderSubTypeLIC
- CashMemoStatus
GET /v1/lpg/orders?category=Refill&page=1 HTTP/1.1 Authorization: Bearer <sessionToken> Accept: application/json X-Tracking-Id: RefillHistoryVC01242025113747_2.5.9{ "TrackingId": "RefillHistoryVC01242025113747_2.5.9", "ErrorCode": "0", "ErrorMessage": "Success", "LastPage": "false", "OrderDetails": [ { "PaidFlag": "Y", "OrderDate": "11/04/2024 10:26:12", "OrderNo": "2-002184659844", "BookingPrice": "411.5", "SubsidizedFlag": null, "NoOfCylinder": "1", "Status": "Open", "InvoiceNumber": null, "PinNum": null, "OrderTypeLIC": "OT8", "EPICOrderType": "Sales Order", "EPICOrderSubType": "Refill Order", "OrderSubTypeLIC": "OS24", "CashMemoStatus": null } ] }Source in the app
inferred from Booking History / Choose Order Category / Refill Orders / NFR Orders screensbundled booking_history.json fixture (TrackingId RefillHistoryVC, OrderDetails fields)
Consumer personal details
GET
/v1/profileosintReturns the signed-in consumer's Aadhaar-masked UID, name, gender, year of birth and registered address shown on Personal Details.
Auth: Bearer sessionToken from /v1/consumer/session.
- Uid
- UidToken
- Dob
- FirstName
- Gender
- LastName
- isDOBComplete
- State
- VillageTownCity
- District
- PinCode
- Country
- ErrorCode
- ErrorMessage
- TrackingId
- TransactionId
- ServiceRequestNo
GET /v1/profile HTTP/1.1 Authorization: Bearer <sessionToken> Accept: application/json X-Tracking-Id: MyProfileActivity08122023154840_3.1.03{ "Uid": "********9508", "UidToken": "011118108QfjNut85dNwF3S+oL6n1Cow9RUJyoO", "UserIdentity": { "Dob": "1988", "FirstName": "Ankita", "Gender": "F", "LastName": "Shukla", "isDOBComplete": "N" }, "UserAddress": { "State": "Uttar Pradesh", "VillageTownCity": "Noida", "District": "Gautam Buddha Nagar", "PinCode": "201301", "Country": "India" }, "ErrorCode": "0", "ErrorMessage": "Success", "TrackingId": "MyProfileActivity08122023154840_3.1.03", "TransactionId": "UKC:6a263139-5aa3-4872-90be-58b841758d06", "ServiceRequestNo": "1234" }Source in the app
inferred from Personal Details / CONSUMER DETAILS / ADDRESS DETAILS screensbundled personal_details_json.json fixture (Uid, UidToken, UserIdentity, UserAddress, TrackingId MyProfileActivity)
LPG loan ledger
GET
/v1/lpg/loansopenfinanceReads outstanding LPG connection-loan headers and per-order adjustments shown on the Loan Ledger screen.
Auth: Bearer sessionToken from /v1/consumer/session.
- TrackingId
- ErrorCode
- ErrorMessage
- LoanFor
- Distributor
- LoanAmount
- OutstandingAmount
- Status
- LoanStartDate
- LoanEndDate
- OrderNumber
- InvoiceNumber
- SubsidyAmount
- AmountAdjusted
- AmountToPay
GET /v1/lpg/loans HTTP/1.1 Authorization: Bearer <sessionToken> Accept: application/json X-Tracking-Id: LoanLedgerActivity27062025114718_3.1.77{ "TrackingId": "LoanLedgerActivity27062025114718_3.1.77", "ErrorCode": "0", "ErrorMessage": "Success", "LoanHeader": [ { "LoanFor": "New Connection", "Distributor": "0000154004", "LoanAmount": "568", "OutstandingAmount": "568.00", "Status": "Active", "LoanStartDate": null, "LoanEndDate": null, "LoanDetails": [ { "OrderNumber": "123456", "InvoiceNumber": null, "SubsidyAmount": null, "AmountAdjusted": null, "AmountToPay": null, "Status": "In Progress" } ] } ] }Source in the app
inferred from loan_ledger locale key and Loan Ledger activitybundled loan_ledger.json fixture (LoanHeader, OutstandingAmount, SubsidyAmount, AmountToPay)
XTRAREWARDS point balance
GET
/v1/loyalty/pointsopenfinanceReturns the XTRAREWARDS wallet: available, earned and redeemed points used on Redeem Points and voucher screens.
Auth: Bearer sessionToken from /v1/consumer/session.
- membershipId
- availableBalance
- earnedPoints
- redeemedPoints
- currency
- enrolled
- TrackingId
- ErrorCode
- ErrorMessage
GET /v1/loyalty/points HTTP/1.1 Authorization: Bearer <sessionToken> Accept: application/json X-Tracking-Id: LoyaltyDashboard09292026103000_3.2.95{ "TrackingId": "LoyaltyDashboard09292026103000_3.2.95", "ErrorCode": "0", "ErrorMessage": "Success", "membershipId": "XR184650159", "availableBalance": 1240, "earnedPoints": 1860, "redeemedPoints": 620, "currency": "INR", "enrolled": true }Source in the app
inferred from Loyalty / XTRAREWARDS / Redeem Points / Earned Points / Redeemed Points / Current Balance- / Balance : Rs screenscopy Amount cannot be greater than available loyalty balance
Loyalty QR for fuel-station scan
GET
/v1/loyalty/qropendataIssues the membership QR the petrol-pump attendant scans to credit XTRAREWARDS points after a refill.
Auth: Bearer sessionToken from /v1/consumer/session.
- membershipId
- qrPayload
- purpose
- TrackingId
- ErrorCode
- ErrorMessage
GET /v1/loyalty/qr HTTP/1.1 Authorization: Bearer <sessionToken> Accept: application/json{ "TrackingId": "MyQR09292026103112_3.2.95", "ErrorCode": "0", "ErrorMessage": "Success", "membershipId": "XR184650159", "qrPayload": "IOCL-XR-184650159-20260929", "purpose": "XTRAREWARDS_CREDIT" }Source in the app
inferred from My QR / QR Code for XTRAREWARDS / Ask petrol pump attendant to scan this QR copymy_qr and my_voucher_qr_scan locale keys
Generate PayU payment hash
POST
/v1/payments/payu/hashopenbankingAsks the server to sign a PayU payment hash so refill or loyalty checkout can open the PayU SDK (UPI, cards, net banking).
Auth: Bearer sessionToken plus uCMId, trackingId, envKey and encIvData on the encrypted body. Native OkHttp interceptor attaches the session.
- uCMId
- trackingId
- source
- hashName
- hashString
- envKey
- encIvData
- loginType
- EncResponse
- HashResult
- errorCode
- errorMessage
POST /v1/payments/payu/hash HTTP/1.1 Authorization: Bearer <sessionToken> Content-Type: application/json { "uCMId": "UCM-184650159", "trackingId": "PayUHash09292026103240_3.2.95", "source": "LPG_REFILL", "hashName": "payment_hash", "hashString": "merchant|txnid|411.5|IndaneRefill|Ankita|[email protected]|", "envKey": "<aes-key>", "encIvData": "<aes-iv>", "loginType": "OTP" }{ "trackingId": "PayUHash09292026103240_3.2.95", "errorCode": "0", "errorMessage": "Success", "EncResponse": "<aes-ciphertext>", "HashResult": "a1b2c3d4e5f6paymenthash" }Source in the app
inferred from Select a payment method / PayU / CCAvenue / Wallet / (UPI/Credit/Debit Card/Net Banking) checkout screensnative PayUHashPostRequest / PayUHashResponse / RefillWebService.submitPayUHash fields uCMId, hashString, EncResponse, HashResult
Aadhaar eKYC for LPG
POST
/v1/kyc/aadhaarosintRuns Aadhaar OTP eKYC against Indane consumer records so the distributor can keep refill and PAHAL subsidy service uninterrupted.
Auth: Bearer sessionToken from /v1/consumer/session. User consents to UIDAI OTP/biometric auth for PAHAL DBT.
- aadhaarNumber
- otp
- consent
- purpose
- kycStatus
- Uid
- FirstName
- LastName
- Gender
- Dob
- lastEKycDate
- lastEKycMode
- TrackingId
- ErrorCode
- ErrorMessage
POST /v1/kyc/aadhaar HTTP/1.1 Authorization: Bearer <sessionToken> Content-Type: application/json { "aadhaarNumber": "xxxxxxxx9508", "otp": "319204", "consent": true, "purpose": "PAHAL_DBT", "TrackingId": "eKYC09292026103400_3.2.95" }{ "TrackingId": "eKYC09292026103400_3.2.95", "ErrorCode": "0", "ErrorMessage": "Success", "kycStatus": "SubmittedToDistributor", "Uid": "********9508", "UserIdentity": { "FirstName": "Ankita", "LastName": "Shukla", "Gender": "F", "Dob": "1988" }, "lastEKycDate": "2026-09-29", "lastEKycMode": "AadhaarOTP" }Source in the app
inferred from Aadhaar KYC / Online KYC / Bharat Aadhaar Seeding / manage_eKYC_for_lpg_connection / FaceCaptureActivitye-KYC Completed / last_e_kyc_date / last_e_kyc_mode / PAHAL consent copy
Nearby retail outlets
GET
/v1/retail/stationsopendataFinds nearby IndianOil retail outlets with SAP/RO codes, open status, amenity flags and displayed fuel prices.
Auth: Optional Bearer sessionToken. Anonymous lat/lng lookup works for Locate Fuel Station; signed-in calls add Check & Fill and XTRAPOWER flags.
- sapCode
- roNumber
- name
- distanceKm
- openNow
- amenities
- fuelPrice
- MS
- HSD
- TrackingId
- ErrorCode
- ErrorMessage
GET /v1/retail/stations?lat=28.5355&lng=77.3910&radiusKm=5 HTTP/1.1 Accept: application/json{ "TrackingId": "LocateRO09292026103618_3.2.95", "ErrorCode": "0", "ErrorMessage": "Success", "stations": [ { "sapCode": "RO12845", "roNumber": "12845", "name": "IndianOil Sector 18 Noida", "distanceKm": 3.21, "openNow": true, "amenities": ["ATM", "PUC", "Air", "Washroom", "XTRAPOWER", "XTRAREWARDS", "EVCharging"], "fuelPrice": {"MS": 94.72, "HSD": 87.65} } ] }Source in the app
inferred from NEARBY RETAILS / Locate Fuel Station / Locate Us / RO Selection / SAP Code / RO Number screensamenity keys ATM, PUC, Air, Washroom, XTRAPOWER, XTRAREWARDS, Electric Vehicle Charging Station
Data categories
- LPG connections
- refill orders
- loyalty points
- Aadhaar eKYC
- loan ledgers
- fuel stations
- checkout hashes
Where teams use this data
Distributor refill operations feed
An Indane distributor back-office can poll /v1/lpg/orders for Open refill bookings (OrderNo, BookingPrice, NoOfCylinder, PaidFlag, PinNum) and match them to cash-memo status without re-keying the consumer app.
XTRAREWARDS ledger reconciliation
A loyalty finance job reads /v1/loyalty/points (availableBalance, earnedPoints, redeemedPoints) after GyFTR voucher burns and flags memberships whose points were deducted but not yet vouchered.
PAHAL subsidy KYC monitor
A compliance dashboard watches /v1/lpg/connections kycStatus, lastEKycDate and subsidyEligible alongside /v1/kyc/aadhaar submissions so connections that fall out of Aadhaar seeding are nudged before the next refill quota.
Retail amenity locator
A fleet or EV routing tool calls /v1/retail/stations with live lat/lng and filters on EVCharging, XTRAPOWER and openNow to pick an IndianOil outlet, using sapCode as the stable outlet id.
Frequently asked questions
What LPG order fields does IndianOil ONE return?
GET /v1/lpg/orders pages OrderDetails with OrderNo, OrderDate, BookingPrice, NoOfCylinder, PaidFlag, Status, PinNum and EPICOrderSubType (Refill Order). POST /v1/lpg/orders/refill creates the next booking for a 16-digit LPG ID.
How does the app authenticate users?
Login using Mobile OTP posts to /v1/auth/otp (4-digit SMS) then /v1/consumer/session, which mints a sessionToken and uCMId. Later calls send Authorization: Bearer plus a per-screen TrackingId. The session-expired screen forces a re-login.
Where do XTRAREWARDS points come from?
GET /v1/loyalty/points returns availableBalance, earnedPoints and redeemedPoints for the signed-in membership. GET /v1/loyalty/qr issues the membership QR a petrol-pump attendant scans to credit points after refuel.
Does the app expose KYC or subsidy data?
Yes. /v1/lpg/connections carries kycStatus, lastEKycDate, subsidyEligible and optedOutOfSubsidy. POST /v1/kyc/aadhaar runs Aadhaar OTP eKYC for PAHAL DBT; /v1/profile returns the masked Uid and UserAddress used on Personal Details.
Topics
- IndianOil ONE API
- Indane LPG refill
- XTRAREWARDS points
- Aadhaar eKYC LPG
- PayU hash
- LPG loan ledger
- IndianOil fuel station
- PAHAL subsidy
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