IndianOil ONE icon

IndianOil ONE data API

Indian Oil Corporation Ltd · Payments

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

  • IndianOil ONE screenshot 1
  • IndianOil ONE screenshot 2
  • IndianOil ONE screenshot 3
  • IndianOil ONE screenshot 4
  • IndianOil ONE screenshot 5
  • IndianOil ONE screenshot 6
  • IndianOil ONE screenshot 7
  • IndianOil ONE screenshot 8

API surface

Request/response examples are illustrative, reconstructed from the app's interface — not a live capture.

  • Send login OTP

    POST /v1/auth/otp opendata

    Sends 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 locale
    • OTP length copy: Please enter 4 digit OTP
  • Create signed-in session

    POST /v1/consumer/session opendata

    Exchanges 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/connections opendata

    Loads 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 keys
    • connection_details, manage_connection, Domestic Connection and Commercial Connection screens
  • Book LPG refill

    POST /v1/lpg/orders/refill openfinance

    Places 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 screens
    • sample booking_history.json OrderTypeLIC OT8 / EPICOrderSubType Refill Order
  • LPG booking history

    GET /v1/lpg/orders openfinance

    Pages 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 screens
    • bundled booking_history.json fixture (TrackingId RefillHistoryVC, OrderDetails fields)
  • Consumer personal details

    GET /v1/profile osint

    Returns 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 screens
    • bundled personal_details_json.json fixture (Uid, UidToken, UserIdentity, UserAddress, TrackingId MyProfileActivity)
  • LPG loan ledger

    GET /v1/lpg/loans openfinance

    Reads 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 activity
    • bundled loan_ledger.json fixture (LoanHeader, OutstandingAmount, SubsidyAmount, AmountToPay)
  • XTRAREWARDS point balance

    GET /v1/loyalty/points openfinance

    Returns 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 screens
    • copy Amount cannot be greater than available loyalty balance
  • Loyalty QR for fuel-station scan

    GET /v1/loyalty/qr opendata

    Issues 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 copy
    • my_qr and my_voucher_qr_scan locale keys
  • Generate PayU payment hash

    POST /v1/payments/payu/hash openbanking

    Asks 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 screens
    • native PayUHashPostRequest / PayUHashResponse / RefillWebService.submitPayUHash fields uCMId, hashString, EncResponse, HashResult
  • Aadhaar eKYC for LPG

    POST /v1/kyc/aadhaar osint

    Runs 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 / FaceCaptureActivity
    • e-KYC Completed / last_e_kyc_date / last_e_kyc_mode / PAHAL consent copy
  • Nearby retail outlets

    GET /v1/retail/stations opendata

    Finds 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 screens
    • amenity 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

Get a quote