HelloBPCL for Business data API
HelloBPCL for Business is Bharat Petroleum Corporation Limited's official Android client for commercial customers — fleet operators on SmartFleet and SmartDrive fuel cards, industrial buyers who raise bulk-product indents, commercial LPG accounts, and MAK lubricants retailers. After a mobile OTP (or MPIN) sign-in, users load CMS balances onto fleet cards, pin vehicles, redeem petromiles, place industrial indents against ship-to parties, scan cylinder QR codes at delivery, enrol in BPCL loyalty programmes, and raise service requests. Razorpay checkout, Aadhaar Face RD and the Urja chatbot sit on the same home grid. The app is India-only, holds a 4.4 rating on Google Play, and is BPCL's B2B counterpart to the consumer HelloBPCL / Bharatgas apps and to HPCL's HP PAY and IndianOil ONE.
SmartFleet wallet rows expose cmsBalance and walletAmount for CMS-to-card loads, with availableCredit read against creditLimit on the same dashboard summary; a card-count read returns cardCount, and the SmartDrive transfer write moves walletAmount between fromCardNumber and toCardNumber, settling at cardWalletBalance under a txnId. Vehicle rosters carry vehicleNumber, vehicleType, cardNumber and the pinned flag, in-flight account applications track applicationId, kycStatus and gstin, and the loyalty side reads petromilesBalance, redeems redeemPoints into a GyFTR voucherCode, and lists enrolment tiles as programCode, programType and enrolled.
Industrial indent payloads carry shipToParty, supplyLocationId, productCode, quantity and payerCode, returning indentNumber and indentStatus for tracking; the price-simulation read prices the same basket as unitPrice, gstAmount and netAmount, and the payer ledger pages entries with docNumber, postingDate and signed amount values. Commercial LPG flows verify an lpgId into distributorCode, connectionType and kycStatus, the cylinder QR scan resolves a scanned qrCode into deliveryStatus, cylinderType and bookingRef, and MAK pack scans credit loyaltyPoints under programType MAK_SCAN_EARN. Fleet-treasury ERPs reconcile those balances nightly, indent-and-quote bots write indentNumber back into purchase-order systems, distributor handhelds audit deliveries at drop-off, and loyalty desks spend expiring petromiles before they lapse; openData Studio turns the whole surface 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.
Send login OTP
POST
/v1/hellobpcl/auth/otpopendataSends a mobile OTP so a commercial user can sign in or recover an MPIN on HelloBPCL for Business.
Auth: Unauthenticated start of HelloBPCL for Business login. Body is mobileNumber plus channel=MOBILE; no Bearer yet.
- mobileNumber
- channel
- deviceId
- status
- otpSent
- resendAfterSeconds
POST /v1/hellobpcl/auth/otp HTTP/1.1 Content-Type: application/json { "mobileNumber": "9876543210", "channel": "MOBILE", "deviceId": "a1b2c3d4e5f6" }{ "status": "OK", "otpSent": true, "resendAfterSeconds": 30, "channel": "MOBILE" }Sign in with OTP
POST
/v1/hellobpcl/auth/sessionopendataExchanges a verified OTP (and optional MPIN) for access_token, sessionKey and the commercial accountId used on every subsequent commercial call.
Auth: OTP from the send-OTP call. Response access_token is sent as Authorization: Bearer on later commercial calls; sessionKey is the companion session handle.
- mobileNumber
- otp
- channel
- mpin
- access_token
- tokenType
- sessionKey
- accountId
- userId
POST /v1/hellobpcl/auth/session HTTP/1.1 Content-Type: application/json { "mobileNumber": "9876543210", "otp": "4821", "channel": "MOBILE", "mpin": "••••" }{ "access_token": "<bearer-token>", "tokenType": "Bearer", "sessionKey": "sk-7c11ab", "mobileNumber": "9876543210", "accountId": "ACC-184650", "userId": "U-2081846" }SmartFleet wallet summary
GET
/v1/fleet/walletopenbankingReads the SmartFleet CMS wallet and card-loadable balance shown on the fleet dashboard, including availableCredit against creditLimit.
Auth: Bearer access_token from OTP sign-in. Query channel=Mobile.
- accountId
- cmsBalance
- walletAmount
- currency
- availableCredit
- creditLimit
GET /v1/fleet/wallet?channel=Mobile HTTP/1.1 Authorization: Bearer <bearer-token> Accept: application/json{ "accountId": "ACC-184650", "cmsBalance": 125000.50, "walletAmount": 84200.00, "currency": "INR", "availableCredit": 50000.00, "creditLimit": 200000.00 }Count SmartFleet cards
GET
/v1/fleet/cardsopendataReturns how many SmartFleet cards sit on the signed-in account, used by the card-limit bulk-upload success copy.
Auth: Bearer access_token from OTP sign-in. Query channel=Mobile&state=all&fields=DEFAULT.
- accountId
- cardCount
- state
- channel
GET /v1/fleet/cards?channel=Mobile&state=all&fields=DEFAULT HTTP/1.1 Authorization: Bearer <bearer-token> Accept: application/json{ "accountId": "ACC-184650", "cardCount": 14, "state": "all", "channel": "Mobile" }Transfer SmartDrive wallet
POST
/v1/fleet/wallet/transferopenbankingMoves prepaid fuel balance between SmartDrive cards. Cards with a blank amount are skipped, matching the in-app warning.
Auth: Bearer access_token from OTP sign-in.
- accountId
- fromCardNumber
- toCardNumber
- walletAmount
- channel
- txnId
- cardWalletBalance
- status
POST /v1/fleet/wallet/transfer HTTP/1.1 Authorization: Bearer <bearer-token> Content-Type: application/json { "accountId": "ACC-184650", "fromCardNumber": "603144******8211", "toCardNumber": "603144******9330", "walletAmount": 5000.00, "channel": "MOBILE" }{ "status": "OK", "txnId": "SD-TXN-88421", "walletAmount": 5000.00, "fromCardNumber": "603144******8211", "toCardNumber": "603144******9330", "cardWalletBalance": 12000.00 }Redeem petromiles
POST
/v1/loyalty/redeemopenfinanceRedeems SmartFleet petromiles into a GyFTR voucher and returns the remaining petromilesBalance.
Auth: Bearer access_token from OTP sign-in.
- accountId
- petromilesBalance
- redeemPoints
- programType
- voucherCode
- status
POST /v1/loyalty/redeem HTTP/1.1 Authorization: Bearer <bearer-token> Content-Type: application/json { "accountId": "ACC-184650", "petromilesBalance": 2400, "redeemPoints": 1000, "programType": "SMARTFLEET" }{ "status": "OK", "petromilesBalance": 1400, "redeemPoints": 1000, "voucherCode": "GYFTR-8A21", "programType": "SMARTFLEET" }List SmartDrive vehicles
GET
/v1/fleet/vehiclesopendataLists vehicles registered on the SmartDrive account, including the pinned flag used when a driver pins a truck to the session.
Auth: Bearer access_token from OTP sign-in.
- vehicles
- vehicleNumber
- vehicleType
- cardNumber
- pinned
- status
GET /v1/fleet/vehicles?channel=Mobile HTTP/1.1 Authorization: Bearer <bearer-token> Accept: application/json{ "vehicles": [ { "vehicleNumber": "MH01AB1234", "vehicleType": "HCV", "cardNumber": "603144******8211", "pinned": true, "status": "ACTIVE" } ] }Track SmartFleet application
GET
/v1/fleet/applicationsopendataReturns pending and in-flight SmartFleet account applications with KYC status, matching the Track Application screen.
Auth: Bearer access_token from OTP sign-in.
- applications
- applicationId
- applicationType
- status
- kycStatus
- gstin
GET /v1/fleet/applications?channel=Mobile HTTP/1.1 Authorization: Bearer <bearer-token> Accept: application/json{ "applications": [ { "applicationId": "SF-APP-44102", "applicationType": "NEW_ACCOUNT", "status": "PENDING", "kycStatus": "Submitted", "gstin": "27AAACB2902M1Z3" } ] }Create industrial indent
POST
/v1/industrial/indentsopendataPlaces a bulk industrial fuel indent against a ship-to party and supply location, returning indentNumber for tracking.
Auth: Bearer access_token after the industrial OTP pair. Query channel=MOBILE&accountId.
- shipToParty
- supplyLocationId
- productCode
- quantity
- payerCode
- indentNumber
- indentId
- indentStatus
POST /v1/industrial/indents?channel=MOBILE&accountId=ACC-184650 HTTP/1.1 Authorization: Bearer <bearer-token> Content-Type: application/json { "shipToParty": "STP-90021", "supplyLocationId": "LOC-PN-12", "productCode": "HSD", "quantity": 12.0, "payerCode": "PAY-4410" }{ "indentNumber": "IND-20261009-088", "indentId": "882144", "indentStatus": "CREATED", "shipToParty": "STP-90021", "supplyLocationId": "LOC-PN-12", "productCode": "HSD", "quantity": 12.0 }Simulate industrial price
GET
/v1/industrial/quotesopendataQuotes an industrial basket before the indent is confirmed, including GST. A sibling GST lookup takes the same accountId and shipToParty.
Auth: Bearer access_token from the industrial OTP session. Query channel=Mobile&accountId&shipToParty.
- productCode
- quantity
- unitPrice
- gstAmount
- netAmount
- shipToParty
- currency
GET /v1/industrial/quotes?channel=Mobile&accountId=ACC-184650&shipToParty=STP-90021&productCode=HSD&quantity=12 HTTP/1.1 Authorization: Bearer <bearer-token> Accept: application/json{ "productCode": "HSD", "quantity": 12.0, "unitPrice": 94.21, "gstAmount": 2034.94, "netAmount": 13340.46, "shipToParty": "STP-90021", "currency": "INR" }Industrial customer ledger
GET
/v1/industrial/ledgeropenfinancePages the industrial customer ledger by payerCode. Sibling statement-of-account exports cover the same book.
Auth: Bearer access_token from the industrial OTP session.
- payerCode
- entries
- docNumber
- postingDate
- amount
- currency
- indentNumber
GET /v1/industrial/ledger?channel=MOBILE&accountId=ACC-184650 HTTP/1.1 Authorization: Bearer <bearer-token> Accept: application/json{ "payerCode": "PAY-4410", "entries": [ { "docNumber": "LED-90012", "postingDate": "2026-10-01", "amount": -84200.00, "currency": "INR", "indentNumber": "IND-20261001-012" } ] }Verify LPG customer
POST
/v1/lpg/accounts/verifyosintConfirms a commercial Bharatgas LPG identity (lpgId) before refill or contact-update flows. A sibling update call writes the same record.
Auth: Bearer access_token from OTP sign-in.
- lpgId
- mobileNumber
- channel
- verified
- distributorCode
- connectionType
- kycStatus
POST /v1/lpg/accounts/verify HTTP/1.1 Authorization: Bearer <bearer-token> Content-Type: application/json { "lpgId": "1234567890123456", "mobileNumber": "9876543210", "channel": "MOBILE" }{ "verified": true, "lpgId": "1234567890123456", "distributorCode": "0000154004", "connectionType": "Commercial", "kycStatus": "Completed" }Lynkit HelloBPCL login
POST
/v1/lpg/sessionopendataOpens a helper session so the commercial client can look up cylinder QR delivery details.
Auth: Helper credentials issued for the signed-in HelloBPCL session. Response token is sent on the cylinder QR call.
- mobileNumber
- channel
- accountId
- token
- status
- userId
POST /v1/lpg/session HTTP/1.1 Content-Type: application/json { "mobileNumber": "9876543210", "channel": "HELLOBPCL", "accountId": "ACC-184650" }{ "token": "<helper-token>", "status": "OK", "userId": "U-2081846" }Cylinder QR delivery details
POST
/v1/lpg/cylinders/scanopendataResolves a scanned commercial cylinder QR to lpgId, delivery status and distributor — the handheld check at drop-off.
Auth: Helper token from the cylinder-scan login.
- qrCode
- lpgId
- deliveryStatus
- distributorCode
- cylinderType
- bookingRef
POST /v1/lpg/cylinders/scan HTTP/1.1 Authorization: Bearer <helper-token> Content-Type: application/json { "qrCode": "BPCL-CYL-8A21FF", "lpgId": "1234567890123456" }{ "lpgId": "1234567890123456", "qrCode": "BPCL-CYL-8A21FF", "deliveryStatus": "OUT_FOR_DELIVERY", "distributorCode": "0000154004", "cylinderType": "19KG_COMMERCIAL", "bookingRef": "BK-77821" }Scan MAK retailer QR
POST
/v1/lubes/packs/scanopendataCredits Scan & Earn loyalty points when a MAK lubricants retailer scans a pack QR. A sibling coupon call checks coupon genuineness.
Auth: Bearer access_token from OTP sign-in.
- qrCode
- accountId
- channel
- status
- loyaltyPoints
- programType
POST /v1/lubes/packs/scan HTTP/1.1 Authorization: Bearer <bearer-token> Content-Type: application/json { "qrCode": "MAK-SCAN-44102", "accountId": "ACC-184650", "channel": "MOBILE" }{ "status": "OK", "loyaltyPoints": 25, "programType": "MAK_SCAN_EARN", "qrCode": "MAK-SCAN-44102" }List dashboard programmes
GET
/v1/loyalty/programsopendataLists loyalty and commercial programmes the signed-in account can enrol in.
Auth: Bearer access_token from OTP sign-in. Query channel=MOBILE.
- programs
- programCode
- programType
- enrolled
- channel
GET /v1/loyalty/programs?channel=MOBILE HTTP/1.1 Authorization: Bearer <bearer-token> Accept: application/json{ "programs": [ { "programCode": "SF_LOYALTY", "programType": "SMARTFLEET", "enrolled": true, "channel": "MOBILE" }, { "programCode": "MAK_SCAN_EARN", "programType": "LUBES", "enrolled": false, "channel": "MOBILE" } ] }
Data categories
- balances
- fleet-cards
- loyalty
- industrial-indents
- ledgers
- lpg-connections
- kyc
Where teams use this data
Fleet-card treasury reconciliation
A fleet operator's ERP pulls cmsBalance and walletAmount nightly, matches them to CMS-to-card loads and sdWalletTransfer rows, and flags cards whose cardCount or availableCredit drifted from the pump-side ledger.
Industrial indent and GST quote bot
A bulk-fuel buyer posts indents with shipToParty, supplyLocationId and productCode, then reads the price/simulate quote (including GST) before the indent is confirmed, writing indentNumber back into the purchase-order system.
LPG cylinder delivery audit
A distributor handheld scans the cylinder QR, looks up lpgId and delivery details, and posts verifyCustomer so the cash memo matches the physical bottle handed over.
Petromiles expiry and voucher ops
A loyalty desk reads petromilesBalance, redeems points into GyFTR vouchers, and cross-checks programme enrolment from getDashboadPrograms so expiring miles are spent before they lapse.
Frequently asked questions
What fleet-card data does HelloBPCL for Business expose?
The SmartFleet wallet summary returns cmsBalance and walletAmount for CMS-to-card loads, cardCount lists cards on the account, a transfer call moves prepaid balance between SmartDrive cards, and a redeem call reports petromilesBalance. All of those calls ride the OTP session minted at sign-in.
How do industrial buyers place indents?
After the industrial OTP, a create-indent call writes indentNumber, shipToParty, supplyLocationId and productCode. A quote call prices the same basket including GST, and a ledger call pages the payer-code customer ledger.
How does cylinder QR delivery work?
A cylinder-scan helper resolves a scanned commercial cylinder QR to lpgId and delivery details after a helper login. A verify call confirms the commercial LPG account, and MAK retailers post a pack-scan call to credit Scan & Earn points.
How does the app authenticate?
Retail and SmartFleet calls start with a mobile OTP, then a sign-in that mints access_token and sessionKey sent as Authorization: Bearer (channel=MOBILE). Industrial customers use a separate encrypted OTP pair. Cylinder QR uses its own helper login before the delivery-details call.
Apps similar to HelloBPCL for Business
- HP PAY — HPCL's consumer and commercial fuel-wallet app, with Instafuel paycodes and HP Gas cylinder booking.
- IndianOil ONE — Indian Oil's consumer super-app for Indane LPG refills and XTRAREWARDS at IndianOil pumps.
- Bharatgas — BPCL's consumer LPG app for domestic cylinder booking, the household counterpart to this commercial client.
- SmartDrive BPCL — BPCL's earlier SmartDrive loyalty / fuel-card companion that this HelloBPCL for Business client now hosts as a module.
Topics
- HelloBPCL for Business API
- SmartFleet wallet cmsBalance
- BPCL industrial indent
- petromilesBalance
- LPG cylinder QR lpgId
- Bharat Petroleum commercial API
- shipToParty supplyLocationId
- HelloBPCL data API
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