MyPertamina data API: wallet, quota and SPBU
MyPertamina is the official consumer app of PT Pertamina (Persero), Indonesia's state-owned oil and gas company, for motorists, household LPG buyers and EV drivers who pay at Pertamina SPBU pumps, Bright Gas kiosks and public SPKLU chargers. After a mobile-number PIN (and OTP when the device is new), the home grid scans a pump QR, binds LinkAja, GoPay, OVO, ShopeePay, AstraPay, debit or credit as the source of funds, spends loyalty vouchers, looks up nearby SPBU with live product prices, registers vehicles on the government's Subsidi Tepat BBM programme, orders Pertamina Delivery Service (PDS) jerry-can drops, and opens Bright Gas and SPKLU microsites. Copy is Indonesian; the client is Indonesia-only and sits beside Shell, BP-AKR and other pump apps as Pertamina's first-party till rather than a multi-brand wallet.
Registered-vehicle remainingQuota and linked sourceOfFund cash are the two numbers the pump QR ticket is built from. Each paired wallet row returns balance.amount, isPaired and a source of LINKAJA, GOPAY, OVO, SHOPEEPAY or ASTRAPAY; the loyalty card adds point plus grade.accumulatedValue. Nearby SPBU records carry agentNumber, per-product price and queueDensity.isCrowded, while BBM history rows stamp transactionId, paymentAmount and litres in quantity. Fleet-expense bots, subsidy-quota monitors and station-intelligence dashboards consume those fields; openData Studio turns them 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.
PIN login and session tokens
POST
/v1/session/pinosintExchanges the registered mobile and PIN for authToken, refreshToken and a PDS deliverySessionKey that gate every later wallet, quota and pump-QR call.
Auth: x-geolocation plus a client Authorization header. Body is mobileNumber, pin, fcmToken and isFreshInstall. Response authToken is stored and sent as Authorization: Bearer on later calls; refreshToken renews the session when auth-token-expired elapses.
- mobileNumber
- pin
- fcmToken
- isFreshInstall
- authToken
- authTokenExpired
- refreshToken
- refreshTokenExpired
- deliverySessionKey
- name
- success
POST /v1/session/pin HTTP/1.1 Authorization: Bearer <client> x-geolocation: -6.2088,106.8456 Content-Type: application/json { "mobileNumber": "081234567890", "pin": "******", "fcmToken": "fcm-device-token", "isFreshInstall": false }{ "success": true, "data": { "authToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.session", "authTokenExpired": 1760000000, "refreshToken": "rt-myp-7c11", "refreshTokenExpired": 1762580000, "deliverySessionKey": "pds-sess-4419", "name": "Budi Santoso" } }Signed-in profile
GET
/v1/me/cardosintReads the signed-in customer card: NIK, loyalty point, Subsidi Tepat link flags and how many subsidised vehicles sit on the account.
Auth: Authorization: Bearer authToken from PIN login.
- id
- name
- mobileNumber
- nationalityId
- dob
- point
- isConnectedSubsidy
- isSingleProfile
- activeSubsidyVehicleCount
- linkAjaPairedStatus
- isEmailVerified
- isBiometricEnabled
- status
GET /v1/me/card HTTP/1.1 Authorization: Bearer <session-token>{ "data": { "id": "usr-88421", "name": "Budi Santoso", "nickname": "Budi", "mobileNumber": "081234567890", "email": "[email protected]", "isEmailVerified": true, "nationalityId": "3174xxxxxxxxxxxx", "dob": "1990-04-12", "pob": "Jakarta", "gender": "M", "point": 1250, "status": "ACTIVE", "isConnectedSubsidy": true, "isSingleProfile": true, "activeSubsidyVehicleCount": 2, "linkAjaPairedStatus": true, "isBiometricEnabled": false, "isBlacklistedPoint": false, "isBlacklistedPromo": false, "onboardingStatus": true, "vehicles": [] } }Linked wallet balances
GET
/v1/wallets/floatopenbankingLists every paired source of funds with the spendable balance.amount shown on the home payment strip (LinkAja, GoPay, OVO, ShopeePay, AstraPay, debit, credit).
Auth: Authorization: Bearer authToken from PIN login. Query product selects the product line (BBM / NFR).
- product
- id
- name
- sourceOfFund
- type
- isActive
- isPaired
- isDefault
- isAllowVoucher
- balance.amount
- status
- iconUrl
GET /v1/wallets/float?product=BBM HTTP/1.1 Authorization: Bearer <session-token>{ "data": [ { "id": "pm-linkaja", "name": "LinkAja", "sourceOfFund": "LINKAJA", "type": "WALLET", "isActive": true, "isPaired": true, "isDefault": true, "isAllowVoucher": true, "iconUrl": "https://cdn.example.com/static/payment/linkaja.png", "balance": { "amount": "185000" }, "card": null, "status": "ACTIVE" }, { "id": "pm-gopay", "name": "GoPay", "sourceOfFund": "GOPAY", "type": "WALLET", "isActive": true, "isPaired": true, "isDefault": false, "balance": { "amount": "42000" }, "status": "ACTIVE" } ] }Available payment methods
GET
/v1/tills/methodsopenfinanceReturns the bindable till mix (wallets, debit, credit, QRIS) plus card.maskedNumber and whether debit/credit binding is currently capped.
Auth: Authorization: Bearer authToken from PIN login.
- isLimitCreditBinding
- isLimitDebitBinding
- isReleaseCreditBinding
- isReleaseDebitBinding
- listPaymentMethod
- sourceOfFund
- isRegistered
- isPaired
- card.bankName
- card.maskedNumber
- card.panNumber
- isSnap
GET /v1/tills/methods HTTP/1.1 Authorization: Bearer <session-token>{ "data": { "isLimitCreditBinding": false, "isLimitDebitBinding": false, "isReleaseCreditBinding": true, "isReleaseDebitBinding": true, "listPaymentMethod": [ { "id": "pm-debit-bca", "name": "BCA Debit", "sourceOfFund": "DEBIT", "type": "DEBIT", "isRegistered": true, "isPaired": true, "isSnap": false, "card": { "bankName": "BCA", "maskedNumber": "****1234", "panNumber": "pan-4419", "isTokenExpired": false }, "isActive": true } ] } }Loyalty grade and points
GET
/v1/rewards/gradeopendataReads the loyalty card: current point balance and expiry, referralCode, voucher count and the Gold/Silver grade window driven by accumulatedValue.
Auth: Authorization: Bearer authToken from PIN login.
- userId
- referralCode
- totalVoucher
- point.point
- point.expiredAt
- grade.accumulatedValue
- grade.startPeriod
- grade.endPeriod
- grade.levels.name
- grade.levels.targetValue
- grade.levels.isCurrentValue
GET /v1/rewards/grade HTTP/1.1 Authorization: Bearer <session-token>{ "success": true, "data": { "userId": "usr-88421", "referralCode": "BUDI88421", "totalVoucher": "3", "point": { "point": "1250", "expiredAt": "2026-12-31T17:00:00Z" }, "grade": { "accumulatedValue": 4500000, "startPeriod": "2026-01-01", "endPeriod": "2026-12-31", "levels": [ { "name": "Silver", "targetValue": 1000000, "isCurrentValue": false }, { "name": "Gold", "targetValue": 5000000, "isCurrentValue": true } ] } } }Loyalty voucher wallet
GET
/v1/rewards/vouchersopendataPages the customer's active fuel and non-fuel vouchers with redeem code, amount and expiredAt used at pump checkout.
Auth: Authorization: Bearer authToken from PIN login. Query page, perPage, isActive, isFuel.
- page
- perPage
- isActive
- isFuel
- name
- description
- terms
- detailVoucher.code
- detailVoucher.amount
- detailVoucher.expiredAt
- detailVoucher.status
GET /v1/rewards/vouchers?page=1&perPage=20&isActive=true&isFuel=true HTTP/1.1 Authorization: Bearer <session-token>{ "success": true, "data": [ { "name": "Diskon Pertamax 2.000/L", "isFuel": true, "description": "Potongan harga Pertamax", "terms": "Berlaku di SPBU MyPertamina", "headerImage": "https://cdn.example.com/voucher/header.png", "bannerImage": "https://cdn.example.com/voucher/banner.png", "tileImage": "https://cdn.example.com/voucher/tile.png", "detailVoucher": { "code": "PTMX2000", "amount": "2000", "expiredAt": "2026-11-30T17:00:00Z", "status": "ACTIVE" } } ], "pagination": { "page": 1, "perPage": 20 } }Nearby SPBU with prices
POST
/v1/pumps/nearbyopendataReturns nearby Pertamina outlets with agentNumber, live product prices, facilities and a queueDensity flag used by the Cari SPBU map.
Auth: Authorization: Bearer authToken from PIN login.
- latitude
- longitude
- fuelType
- agentNumber
- avgRating
- range
- isMyPertaminaSupport
- facilities
- address.formattedAddress
- location.latitude
- location.longitude
- products.name
- products.price
- queueDensity.isCrowded
- queueDensity.label
POST /v1/pumps/nearby HTTP/1.1 Authorization: Bearer <session-token> Content-Type: application/json { "latitude": -6.2088, "longitude": 106.8456, "fuelType": "Pertamax" }{ "data": [ { "agentNumber": "34.12345", "avgRating": 4.6, "range": 1.2, "isMyPertaminaSupport": true, "facilities": ["Toilet", "Musholla", "Mini Market"], "address": { "street": "Jl. Gatot Subroto", "formattedAddress": "SPBU 34.12345, Jl. Gatot Subroto, Jakarta" }, "location": { "latitude": -6.2101, "longitude": 106.8440 }, "products": [ { "name": "Pertamax", "price": 13500.0 }, { "name": "Pertalite", "price": 10000.0 } ], "queueDensity": { "isCrowded": false, "label": "Lancar" } } ] }BBM transaction history
GET
/v1/fills/ledgeropenbankingPages the BBM passbook: litres, pump agentNumber, sourceOfFund and paymentAmount for each successful or pending fill.
Auth: Authorization: Bearer authToken from PIN login. Query status filters the passbook (e.g. SUCCESS, PENDING).
- status
- transactionId
- agentNumber
- productName
- quantity
- unit
- price
- amount
- paymentAmount
- paymentStatus
- sourceOfFund
- orderType
- createdAt
- label
GET /v1/fills/ledger?status=SUCCESS HTTP/1.1 Authorization: Bearer <session-token>{ "success": true, "data": [ { "transactionId": "TRX-BBM-20261008-4419", "agentNumber": "34.12345", "productName": "Pertamax", "quantity": 20.5, "unit": "L", "price": 13500, "amount": 276750, "paymentAmount": 256750, "paymentStatus": "SUCCESS", "sourceOfFund": "LINKAJA", "orderType": "BBM", "createdAt": "2026-10-08T09:14:22Z", "label": "SPBU Gatot Subroto", "icon": "https://cdn.example.com/product/pertamax.png" } ] }BBM transaction detail
GET
/v1/fills/ledger/{transactionId}openbankingLoads one BBM receipt: line items in litres, discount, adminFee, claimedPoint and the wallet referenceNumber used to settle the pump.
Auth: Authorization: Bearer authToken from PIN login.
- transactionId
- invoiceId
- paymentId
- agentNumber
- mId
- sourceOfFund
- originalPrice
- discount
- adminFee
- paymentAmount
- paymentStatus
- claimedPoint
- referenceNumber
- items.productName
- items.quantity
- items.unit
GET /v1/fills/ledger/TRX-BBM-20261008-4419 HTTP/1.1 Authorization: Bearer <session-token>{ "success": true, "data": { "id": "ord-4419", "transactionId": "TRX-BBM-20261008-4419", "invoiceId": "INV-4419", "paymentId": "pay-8821", "agentNumber": "34.12345", "mId": "MID-SPBU-3412345", "mobileNumber": "081234567890", "orderType": "BBM", "sourceOfFund": "LINKAJA", "cardNumber": "****1234", "originalPrice": 276750, "discount": 20000, "adminFee": 0, "amount": 256750, "paymentAmount": 256750, "paymentStatus": "SUCCESS", "claimedPoint": 25, "referenceNumber": "REF-LINKAJA-9901", "createdAt": "2026-10-08T09:14:22Z", "items": [ { "productName": "Pertamax", "quantity": 20.5, "unit": "L", "price": 13500, "icon": "https://cdn.example.com/product/pertamax.png" } ] } }Confirm pump QR payment
POST
/v1/pumps/confirmopenfinanceCommits a scanned pump QR: litres, subsidy flag, voucherAmount and the source-of-fund QR used to debit LinkAja / GoPay / OVO at the nozzle.
Auth: Authorization: Bearer authToken from PIN login plus Authorization-Transaction (biometric / PIN transaction token).
- transactionId
- agentNumber
- merchantId
- terminalId
- status
- initialAmount
- finalAmount
- voucherAmount
- item.name
- item.qty
- item.isSubsidy
- payment.sof
- payment.qrContent
- payment.referenceNumber
- payment.paymentId
POST /v1/pumps/confirm HTTP/1.1 Authorization: Bearer <session-token> Authorization-Transaction: txn-token-8f21 Content-Type: application/json { "transactionId": "TRX-QR-20261008-8821" }{ "success": true, "data": { "transactionId": "TRX-QR-20261008-8821", "agentNumber": "34.12345", "merchantId": "MID-SPBU-3412345", "terminalId": "TID-01", "type": "BBM", "status": "SUCCESS", "initialAmount": 276750, "finalAmount": 256750, "voucherAmount": 20000, "specialAmount": 0, "label": "SPBU Gatot Subroto", "paymentDate": "2026-10-08T09:14:22Z", "transactionDate": "2026-10-08T09:14:22Z", "item": [ { "code": "PTMX", "name": "Pertamax", "qty": 20.5, "unit": "L", "price": 13500, "subTotal": 276750, "isSubsidy": false } ], "payment": { "paymentId": "pay-8821", "sof": "LINKAJA", "qrContent": "00020101021226...", "qrExpireTime": "2026-10-08T09:19:22Z", "referenceNumber": "REF-LINKAJA-9901", "redirectUrl": null } } }Subsidi Tepat vehicle list
GET
/v1/fleet/platesopendataPages the Subsidi Tepat fleet: plate, bbmType, remainingQuota in litres and APPROVE/BLOCKED/QR_EXPIRED status for each registered vehicle.
Auth: Authorization: Bearer authToken from PIN login. Query page, perPage, q, status (APPROVE, SUBMIT, BLOCKED, QR_EXPIRED, …).
- page
- perPage
- status
- id
- licenseNumber
- licensePlateColor
- bbmType
- chassisNumber
- cylinderVolume
- wheelsNumber
- transportationTypeName
- remainingQuota
- isDefault
- isOwner
- isDynamic
GET /v1/fleet/plates?page=1&perPage=20&q=&status=APPROVE HTTP/1.1 Authorization: Bearer <session-token>{ "success": true, "data": [ { "id": 441902, "licenseNumber": "B 1234 XYZ", "licensePlateColor": "BLACK", "bbmType": "Pertalite", "chassisNumber": "MHKAA*******1234", "cylinderVolume": "1198", "wheelsNumber": "4", "transportationTypeName": "Mobil Penumpang", "remainingQuota": 60.0, "isDefault": true, "isOwner": true, "isDynamic": false, "status": "APPROVE" } ], "pagination": { "page": 1, "perPage": 20 } }Subsidi Tepat vehicle QR and quota
POST
/v1/fleet/plates/{vehicleId}opendataLoads the owner vehicle card: NIK, subsidyType and the QR payload whose remainingQuota the pump decrements on each subsidised litre.
Auth: Authorization: Bearer authToken from PIN login.
- vehicleId
- licensePlate
- bbmType
- licenseNumber
- nationalityId
- customerType
- subsidyType
- isOwner
- isPinSet
- qrCode.qrUniqueId
- qrCode.productName
- qrCode.quota
- qrCode.remainingQuota
- qrCode.isDynamic
- qrCode.expiredAt
POST /v1/fleet/plates/441902 HTTP/1.1 Authorization: Bearer <session-token> Content-Type: application/json { "vehicleId": "441902", "licensePlate": "B 1234 XYZ", "bbmType": "Pertalite" }{ "success": true, "data": { "id": 441902, "licenseNumber": "B 1234 XYZ", "licensePlateColor": "BLACK", "nationalityId": "3174xxxxxxxxxxxx", "customerType": "INDIVIDU", "subsidyType": "BBM", "chassisNumber": "MHKAA*******1234", "cylinderVolume": "1198", "wheelsNumber": "4", "transportationTypeName": "Mobil Penumpang", "isOwner": true, "isDefault": true, "isPinSet": true, "isNationalityIdSet": true, "status": "APPROVE", "qrCode": { "id": 88210, "qrUniqueId": "QR-SUB-441902", "productName": "Pertalite", "quota": 80.0, "remainingQuota": 60.0, "isDynamic": false, "qrOnly": false, "wheelsNumber": "4", "expiredAt": "2026-12-31T17:00:00Z", "createdAt": "2026-01-15T03:00:00Z" } } }Subsidised fill history per vehicle
GET
/v1/fleet/fillsopenbankingPages subsidised litres drawn against one vehicleId — product, volume and totalAmount used to reconcile remainingQuota.
Auth: Authorization: Bearer authToken from PIN login. Query page, perPage, vehicleId.
- page
- perPage
- vehicleId
- transactionId
- product
- volume
- totalAmount
- transactionDate
GET /v1/fleet/fills?page=1&perPage=20&vehicleId=441902 HTTP/1.1 Authorization: Bearer <session-token>{ "success": true, "data": [ { "transactionId": "SUB-TX-20261007-12", "product": "Pertalite", "volume": 15.0, "totalAmount": 150000.0, "transactionDate": "2026-10-07T18:22:01Z" } ], "pagination": { "page": 1, "perPage": 20 } }SPKLU charging history
GET
/v1/chargers/sessionsopenfinancePages public SPKLU charging sessions with kWh settlement finalAmount, claimedPoint and session status.
Auth: Authorization: Bearer authToken from PIN login. Query page, limit, status.
- page
- limit
- status
- transactionId
- transactionType
- finalAmount
- claimedPoint
- mobileNumber
- createdAt
GET /v1/chargers/sessions?page=1&limit=20&status=SUCCESS HTTP/1.1 Authorization: Bearer <session-token>{ "data": [ { "transactionId": "SPKLU-20261005-77", "transactionType": "CHARGING", "status": "SUCCESS", "finalAmount": 85000.0, "claimedPoint": 8, "mobileNumber": "081234567890", "createdAt": "2026-10-05T21:40:11Z" } ], "pagination": { "page": 1, "limit": 20 } }PDS fuel-delivery order
GET
/v1/drops/{orderId}opendataReads one Pertamina Delivery Service order: jerry-can items, deliveryCost, runner and paymentStatus for a doorstep BBM drop.
Auth: Authorization: Bearer authToken from PIN login (deliverySessionKey from login is used on the PDS customer client).
- id
- transactionId
- orderStatus
- paymentStatus
- sourceOfFund
- paymentReferenceNumber
- totalAmount
- deliveryCost
- claimedPoint
- items
- deliveryAddress
- runner
GET /v1/drops/PDS-20261008-19 HTTP/1.1 Authorization: Bearer <session-token>{ "data": { "id": "PDS-20261008-19", "transactionId": "TRX-PDS-19", "orderStatus": "ON_DELIVERY", "paymentStatus": "PAID", "sourceOfFund": "LINKAJA", "paymentReferenceNumber": "REF-PDS-19", "totalAmount": 320000, "deliveryCost": 25000, "claimedPoint": 12, "createdAt": "2026-10-08T11:02:00Z", "deliveryDescription": "Jerigen 20L Pertamax", "items": [ { "productName": "Pertamax", "quantity": 20.0, "unit": "L" } ], "deliveryAddress": { "label": "Rumah", "location": { "latitude": -6.2088, "longitude": 106.8456 } }, "runner": { "name": "Andi", "phoneNumber": "0812xxxxxxx" } } }
Data categories
- balances
- transactions
- loyalty
- fuel-stations
- vehicles
- subsidy-quota
- ev-charging
Where teams use this data
Fleet fuel-spend reconciliation
A logistics ERP pulls nightly BBM passbook rows (transactionId, agentNumber, quantity, paymentAmount, sourceOfFund) and matches them to vehicle plates so finance can close the fuel ledger without waiting on paper SPBU struk.
Subsidi Tepat quota monitor
A compliance bot watches remainingQuota and VehicleStatus on each licenseNumber, then pages the per-vehicle transaction list (volume, product, totalAmount) to flag quota exhaustion or BLOCKED / QR_EXPIRED plates before the next fill.
SPBU price and queue intelligence
A station-finder overlay posts lat/lon to the nearby fuel-station call and maps agentNumber, products.price and queueDensity.isCrowded so dispatchers route drivers to a Pertamina pump that still has Pertamax and is not crowded.
Loyalty and voucher ledger
A rewards dashboard reads point.point, grade.accumulatedValue and the voucher wallet (detailVoucher.code, amount, expiredAt) to decide which fuel voucher to auto-apply on the next QR confirm.
Frequently asked questions
How does MyPertamina authenticate wallet and quota calls?
PIN login exchanges mobileNumber and pin for authToken and refreshToken. Later calls send Authorization: Bearer authToken. Pump QR confirm also sends an Authorization-Transaction header minted from a biometric or PIN step. The client refreshes the Bearer token when auth-token-expired elapses.
Which balances and sources of funds are exposed?
The wallet-float call returns every paired sourceOfFund with balance.amount — LinkAja, GoPay, OVO, ShopeePay, AstraPay, debit and credit — plus isDefault and isAllowVoucher. Loyalty points sit on a separate rewards card (point, expiredAt, grade).
What is remainingQuota on a Subsidi Tepat vehicle?
Each registered plate has a remainingQuota in litres for its bbmType (typically Pertalite). The owner-detail call returns the QR payload (qrUniqueId, quota, remainingQuota, isDynamic); the per-vehicle fill list pages volume drawn against that vehicleId so the quota can be reconciled.
Can nearby SPBU prices and queues be read?
Yes. Posting latitude, longitude and fuelType returns agentNumber, products with live price, facilities, isMyPertaminaSupport and queueDensity.isCrowded for each Pertamina outlet on the Cari SPBU map.
Apps similar to MyPertamina
- Shell Go+ Indonesia — Official loyalty app of PT Isla Energy Indonesia, a Shell licensee, for finding nearby Shell stations, tracking a fill, managing membership cards and redeeming offers by scanning in-store QR codes.
- LinkAja — Indonesian e-wallet that MyPertamina integrates for non-cash fuel payments at Pertamina public filling stations.
- GoPay — Indonesian e-wallet for QRIS checkout, bank transfers and topping up from other wallets such as LinkAja, OVO and ShopeePay.
- OVO — Indonesian payments and savings app for cashless checkout, with listed cashback on groceries, food and gas-station spend.
- Voltron — Indonesian EV charging app for finding nearby chargers, checking live availability, starting a session and paying, operated by a private charging-point company.
- PLN Mobile — Official PLN app for buying prepaid electricity tokens, paying bills, reporting meter readings and filing outage complaints in Indonesia.
- IndianOil ONE — Indian Oil's consumer app for Indane LPG cylinder booking, nearest petrol-pump lookup and XTRAREWARDS loyalty points.
Topics
- MyPertamina API
- Pertamina wallet balance
- Subsidi Tepat remainingQuota
- SPBU agentNumber prices
- LinkAja GoPay fuel payment
- Pertamina loyalty points
- SPKLU charging history
- Pertamina Delivery Service order
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