PLN Mobile icon

PLN Mobile Data API: IDPEL meters, token and bills

P L N · Utilities 4.9 ★

PLN Mobile is the official self-care app of PT PLN (Persero), Indonesia's state electricity utility, published on Play by P L N (PT PLN Pusat) for households and small businesses that the app addresses as Electrizen. After a phone OTP sign-in, the home tiles buy prepaid token listrik, pay a postpaid tagihan, run Catat Meter Mandiri (SwaCAM) instead of waiting for a reader, file a pengaduan with Auto Dispatch to the nearest crew, apply for pasang baru or ubah daya, order ICONNET fibre, book ListrikQu repairs, and start a Charge.In session at a public SPKLU. Checkout for token and bills goes through bank virtual account, e-wallet or credit card, and the app pushes padam / nyala notices for the house and the surrounding feeder. Copy is Indonesian; helpdesk is [email protected] and the contact centre is (area code) 123. The Play listing is rated 4.9 from about 1.65 million reviews with 10 million-plus downloads, and it is the nationwide official client rather than a competing utility — sitting beside MyPertamina, PDAM city apps and other Indonesian state-service clients.

Linked meters hang on idpel with tarif, daya, jenisLayanan and noMeter, plus the serving unitUlp and a live statusSambungan flag. Postpaid rows carry billing periode, standAwal / standAkhir, pemakaianKwh, IDR tagihan / totalBayar and statusBayar. Prepaid purchases return a 20-digit kodeToken with nominal, rpStroom, kwh and adminFee. SwaCAM posts a customer standMeter and fotoMeter and comes back with statusValidasi and nomorAgenda.

Disturbance tickets stamp kategoriGangguan, autoDispatch, petugas and estimasiTindak. Feeder outages expose statusPadam, estimasiNyala and jumlahIdpelTerdampak. New-connect and load-change files jenisPengajuan, dayaBaru, nomorPermohonan and estimasiBiaya. Charge.In stations list connectorType, availableConnectors and tarifPerKwh; a session then records kwhDelivered and totalBiaya. IconCash adds saldoIconCash and energyPoint.

Home-energy ledgers can bind spend to idpel and kodeToken; ops boards can plot statusPadam next to open nomorAgenda rows; EV routers can pick a CCS2 stall by tarifPerKwh and store sessionId. openData Studio turns that Electrizen record into callable open data.

Screenshots

  • PLN Mobile screenshot 1
  • PLN Mobile screenshot 2
  • PLN Mobile screenshot 3
  • PLN Mobile screenshot 4
  • PLN Mobile screenshot 5
  • PLN Mobile screenshot 6

API surface

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

  • Create Electrizen session via OTP

    POST /v1/auth/electrizen-session osint

    Exchanges the registered mobile and SMS OTP for the session that gates every later IDPEL, bill, token and complaint call.

    Auth: None on this call. Registered mobile number plus the SMS OTP mint accessToken, used as Authorization: Bearer on later calls.

    • msisdn
    • otp
    • channel
    • deviceId
    • accessToken
    • refreshToken
    • userId
    • email
    • namaUser
    • ktpMasked
    POST /v1/auth/electrizen-session HTTP/1.1
    Content-Type: application/json
    
    {
      "msisdn": "081234567890",
      "otp": "482193",
      "channel": "SMS",
      "deviceId": "android-8.1.1"
    }
    {
      "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.session",
      "refreshToken": "rt-pln-7c11",
      "userId": "u-441902",
      "msisdn": "081234567890",
      "email": "[email protected]",
      "namaUser": "Budi Santoso",
      "ktpMasked": "3275****1234"
    }
  • List linked IDPEL meters

    GET /v1/meters opendata

    Returns every IDPEL the signed-in Electrizen has added, with prepaid/postpaid flag, tariff class and connected load in VA.

    Auth: Bearer accessToken from POST /v1/auth/electrizen-session.

    • userId
    • idpel
    • alias
    • namaPelanggan
    • jenisLayanan
    • tarif
    • daya
    • noMeter
    • isDefault
    GET /v1/meters HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.session
    {
      "userId": "u-441902",
      "meters": [
        {
          "idpel": "321234567890",
          "alias": "Rumah Depok",
          "namaPelanggan": "BUDI SANTOSO",
          "jenisLayanan": "PREPAID",
          "tarif": "R1",
          "daya": 1300,
          "noMeter": "88001234567",
          "isDefault": true
        },
        {
          "idpel": "321298765432",
          "alias": "Toko",
          "namaPelanggan": "BUDI SANTOSO",
          "jenisLayanan": "POSTPAID",
          "tarif": "B1",
          "daya": 3500,
          "noMeter": "88009876543",
          "isDefault": false
        }
      ]
    }
  • IDPEL meter snapshot

    GET /v1/meters/{idpel} opendata

    Reads the supply-point record behind one IDPEL: tariff, VA, meter serial, ULP unit and live/padam connection flag.

    Auth: Bearer accessToken from POST /v1/auth/electrizen-session. Scoped to an IDPEL the user has linked.

    • idpel
    • namaPelanggan
    • jenisLayanan
    • tarif
    • daya
    • golongan
    • noMeter
    • merkMeter
    • alamat
    • kelurahan
    • unitUlp
    • unitInduk
    • statusSambungan
    • latitude
    • longitude
    GET /v1/meters/321234567890 HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.session
    {
      "idpel": "321234567890",
      "namaPelanggan": "BUDI SANTOSO",
      "jenisLayanan": "PREPAID",
      "tarif": "R1",
      "daya": 1300,
      "golongan": "R1/1300VA",
      "noMeter": "88001234567",
      "merkMeter": "ITRON",
      "alamat": "JL MARGONDA RAYA NO 12, DEPOK",
      "kelurahan": "BEJI",
      "unitUlp": "ULP DEPOK",
      "unitInduk": "UID JABAR",
      "statusSambungan": "NYALA",
      "latitude": -6.387,
      "longitude": 106.828
    }
  • Current postpaid tagihan

    GET /v1/bills/postpaid/{idpel} openfinance

    Returns the open postpaid electricity bill for an IDPEL with kWh used, IDR amounts, due date and payment status.

    Auth: Bearer accessToken from POST /v1/auth/electrizen-session.

    • idpel
    • namaPelanggan
    • periode
    • standAwal
    • standAkhir
    • pemakaianKwh
    • tagihan
    • denda
    • ppn
    • materai
    • totalBayar
    • currency
    • statusBayar
    • jatuhTempo
    • noRef
    GET /v1/bills/postpaid/321298765432 HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.session
    {
      "idpel": "321298765432",
      "namaPelanggan": "BUDI SANTOSO",
      "periode": "202610",
      "standAwal": 18420,
      "standAkhir": 19105,
      "pemakaianKwh": 685,
      "tagihan": 812400,
      "denda": 0,
      "ppn": 0,
      "materai": 10000,
      "totalBayar": 822400,
      "currency": "IDR",
      "statusBayar": "UNPAID",
      "jatuhTempo": "2026-10-20",
      "noRef": "BL-202610-321298765432"
    }
  • Purchase prepaid token listrik

    POST /v1/prepaid/token openfinance

    Buys a prepaid electricity token for an IDPEL and returns the 20-digit kodeToken plus kWh and IDR breakdown.

    Auth: Bearer accessToken from POST /v1/auth/electrizen-session. Checkout is a bank VA, e-wallet or card reference returned on this call.

    • idpel
    • namaPelanggan
    • tarif
    • daya
    • nominal
    • adminFee
    • rpStroom
    • kwh
    • kodeToken
    • noMeter
    • noRef
    • statusBayar
    • currency
    • vaNumber
    • paymentMethod
    POST /v1/prepaid/token HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.session
    Content-Type: application/json
    
    {
      "idpel": "321234567890",
      "nominal": 100000,
      "paymentMethod": "VA_MANDIRI"
    }
    {
      "idpel": "321234567890",
      "namaPelanggan": "BUDI SANTOSO",
      "tarif": "R1",
      "daya": 1300,
      "nominal": 100000,
      "adminFee": 2500,
      "rpStroom": 97500,
      "kwh": 62.4,
      "kodeToken": "1234-5678-9012-3456-7890",
      "noMeter": "88001234567",
      "noRef": "TKN-20261009-88021",
      "statusBayar": "PAID",
      "currency": "IDR",
      "vaNumber": "8800123456789012"
    }
  • Submit SwaCAM self meter reading

    POST /v1/swacam/readings opendata

    Records a customer-taken kWh stand (Catat Meter Mandiri / SwaCAM) with a meter photo so the next postpaid bill uses a real reading.

    Auth: Bearer accessToken from POST /v1/auth/electrizen-session. Camera permission is used to attach fotoMeter.

    • idpel
    • noMeter
    • standMeter
    • fotoMeter
    • latitude
    • longitude
    • standSebelumnya
    • pemakaianKwh
    • periode
    • statusValidasi
    • nomorAgenda
    • pesan
    POST /v1/swacam/readings HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.session
    Content-Type: application/json
    
    {
      "idpel": "321298765432",
      "noMeter": "88009876543",
      "standMeter": 19105,
      "fotoMeter": "https://cdn.example/swacam/19105.jpg",
      "latitude": -6.387,
      "longitude": 106.828
    }
    {
      "idpel": "321298765432",
      "noMeter": "88009876543",
      "standMeter": 19105,
      "standSebelumnya": 18420,
      "pemakaianKwh": 685,
      "periode": "202610",
      "statusValidasi": "ACCEPTED",
      "nomorAgenda": "SWC-2026-11820",
      "pesan": "Stand meter diterima"
    }
  • File pengaduan with Auto Dispatch

    POST /v1/complaints opendata

    Opens a disturbance ticket for an IDPEL and, where Auto Dispatch is live, assigns the nearest technical crew with a tracking agenda number.

    Auth: Bearer accessToken from POST /v1/auth/electrizen-session.

    • idpel
    • kategoriGangguan
    • deskripsi
    • latitude
    • longitude
    • fotoLampiran
    • nomorAgenda
    • statusLaporan
    • autoDispatch
    • petugas
    • nomerPetugas
    • unitUlp
    • estimasiTindak
    POST /v1/complaints HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.session
    Content-Type: application/json
    
    {
      "idpel": "321234567890",
      "kategoriGangguan": "PADAM",
      "deskripsi": "Listrik padam sejak 21:10, MCB aman",
      "latitude": -6.387,
      "longitude": 106.828,
      "fotoLampiran": "https://cdn.example/aduan/padam-1.jpg"
    }
    {
      "nomorAgenda": "PGD-2026-441902",
      "idpel": "321234567890",
      "kategoriGangguan": "PADAM",
      "statusLaporan": "DISPATCHED",
      "autoDispatch": true,
      "petugas": "Ahmad Fauzi",
      "nomerPetugas": "0812xxxx321",
      "unitUlp": "ULP DEPOK",
      "estimasiTindak": "2026-10-09T23:40:00+07:00"
    }
  • Outage (padam) status around an IDPEL

    GET /v1/outages opendata

    Reports whether the house and surrounding feeder are padam, with restoration estimate and affected IDPEL count.

    Auth: Bearer accessToken from POST /v1/auth/electrizen-session. Query is the linked idpel or the device lat/lng.

    • idpel
    • statusPadam
    • statusSambungan
    • penyebab
    • feeder
    • wilayah
    • unitUlp
    • estimasiNyala
    • jumlahIdpelTerdampak
    • notifikasiNyala
    • latitude
    • longitude
    GET /v1/outages?idpel=321234567890&latitude=-6.387&longitude=106.828 HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.session
    {
      "idpel": "321234567890",
      "statusPadam": true,
      "statusSambungan": "PADAM",
      "penyebab": "GANGGUAN_PENYULANG",
      "feeder": "PYL DEPOK 07",
      "wilayah": "DEPOK",
      "unitUlp": "ULP DEPOK",
      "estimasiNyala": "2026-10-09T23:15:00+07:00",
      "jumlahIdpelTerdampak": 1840,
      "notifikasiNyala": false
    }
  • Pasang baru / ubah daya application

    POST /v1/services/applications opendata

    Files a new-connection or load-change request and returns the tracking nomorPermohonan plus an IDR cost estimate.

    Auth: Bearer accessToken from POST /v1/auth/electrizen-session. New-install applications may omit an existing idpel.

    • jenisPengajuan
    • idpel
    • dayaLama
    • dayaBaru
    • tarif
    • alamatPasang
    • nomorPermohonan
    • estimasiBiaya
    • currency
    • statusPengajuan
    • unitUlp
    • slaHari
    POST /v1/services/applications HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.session
    Content-Type: application/json
    
    {
      "jenisPengajuan": "UBAH_DAYA",
      "idpel": "321298765432",
      "dayaLama": 1300,
      "dayaBaru": 3500,
      "tarif": "R1",
      "alamatPasang": "JL MARGONDA RAYA NO 12, DEPOK"
    }
    {
      "nomorPermohonan": "PB-2026-77821",
      "jenisPengajuan": "UBAH_DAYA",
      "idpel": "321298765432",
      "dayaLama": 1300,
      "dayaBaru": 3500,
      "tarif": "R1",
      "estimasiBiaya": 2450000,
      "currency": "IDR",
      "statusPengajuan": "IN_REVIEW",
      "unitUlp": "ULP DEPOK",
      "slaHari": 5
    }
  • SPKLU Charge.In station map

    GET /v1/spklu/stations opendata

    Lists nearby public SPKLU Charge.In chargers with connector types, free stalls, queue length and IDR per kWh.

    Auth: Bearer accessToken from POST /v1/auth/electrizen-session.

    • stationId
    • namaStasiun
    • latitude
    • longitude
    • connectorType
    • availableConnectors
    • totalConnectors
    • tarifPerKwh
    • currency
    • statusStasiun
    • antrian
    • radiusKm
    GET /v1/spklu/stations?latitude=-6.2088&longitude=106.8456&radiusKm=5 HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.session
    {
      "stations": [
        {
          "stationId": "SPKLU-JKT-0018",
          "namaStasiun": "SPKLU Rest Area KM 19",
          "latitude": -6.214,
          "longitude": 106.891,
          "connectorType": ["CCS2", "CHAdeMO", "AC"],
          "availableConnectors": 3,
          "totalConnectors": 6,
          "tarifPerKwh": 2467,
          "currency": "IDR",
          "statusStasiun": "AVAILABLE",
          "antrian": 0
        }
      ]
    }
  • Start SPKLU charging session

    POST /v1/spklu/sessions openfinance

    Starts or snapshots a Charge.In charging session with delivered kWh, duration and IDR total.

    Auth: Bearer accessToken from POST /v1/auth/electrizen-session. NFC or QR at the charger identifies connectorId.

    • stationId
    • connectorId
    • connectorType
    • vehicleId
    • sessionId
    • statusCharging
    • kwhDelivered
    • durasiMenit
    • tarifPerKwh
    • totalBiaya
    • currency
    • socPercent
    POST /v1/spklu/sessions HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.session
    Content-Type: application/json
    
    {
      "stationId": "SPKLU-JKT-0018",
      "connectorId": "C-CCS2-02",
      "connectorType": "CCS2",
      "vehicleId": "B1234ABC"
    }
    {
      "sessionId": "CHG-2026-99012",
      "stationId": "SPKLU-JKT-0018",
      "connectorId": "C-CCS2-02",
      "connectorType": "CCS2",
      "statusCharging": "CHARGING",
      "kwhDelivered": 18.4,
      "durasiMenit": 27,
      "tarifPerKwh": 2467,
      "totalBiaya": 45400,
      "currency": "IDR",
      "socPercent": 64
    }
  • IconCash wallet snapshot

    GET /v1/iconcash/wallet openfinance

    Reads the in-app IconCash balance, energy points and KYC/withdraw flags used on the wallet and NFC-card screens.

    Auth: Bearer accessToken from POST /v1/auth/electrizen-session. KTP upgrade screens gate withdraw.

    • userId
    • saldoIconCash
    • currency
    • energyPoint
    • statusKyc
    • ktpMasked
    • canWithdraw
    • nfcCardId
    GET /v1/iconcash/wallet HTTP/1.1
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.session
    {
      "userId": "u-441902",
      "saldoIconCash": 185000,
      "currency": "IDR",
      "energyPoint": 240,
      "statusKyc": "VERIFIED",
      "ktpMasked": "3275****1234",
      "canWithdraw": true,
      "nfcCardId": "NFC-8812"
    }

Data categories

  • meters
  • electricity bills
  • prepaid tokens
  • meter readings
  • outages
  • service tickets
  • EV charging
  • wallets

Where teams use this data

  • Household kWh and bill reconciliation

    A home-energy or personal-finance app binds each supply point by idpel, pulls pemakaianKwh / standAwal / standAkhir from the postpaid tagihan, and records kodeToken plus kwh from prepaid purchases so IDR spend on listrik is one ledger.

  • Feeder outage operations board

    A municipal or building-ops dashboard maps statusPadam, feeder, estimasiNyala and jumlahIdpelTerdampak, then joins open pengaduan rows (nomorAgenda, autoDispatch, petugas) so crews and residents see the same padam window.

  • Charge.In trip planner

    An EV routing client lists nearby stationId rows with connectorType, availableConnectors and tarifPerKwh, then records kwhDelivered and totalBiaya per sessionId after a CCS2 or CHAdeMO stop.

  • New-connect and load-change tracker

    A contractor or property CRM files jenisPengajuan PASANG_BARU or UBAH_DAYA with dayaLama / dayaBaru and tracks nomorPermohonan, estimasiBiaya and statusPengajuan against the serving unitUlp.

Frequently asked questions

How does PLN Mobile identify a meter?

Each supply point is an idpel the Electrizen links after OTP sign-in. The meter snapshot returns tarif, daya (VA), jenisLayanan (PREPAID or POSTPAID), noMeter, alamat and unitUlp. Later bills, tokens, SwaCAM readings and complaints all key off that idpel.

What is returned when buying token listrik?

POST /v1/prepaid/token takes idpel and nominal and, once the virtual-account or e-wallet checkout clears, returns kodeToken (20 digits), kwh, rpStroom, adminFee and noRef — the same receipt the success-token screen shows.

Can outages and complaints be tracked?

GET /v1/outages reports statusPadam, feeder, estimasiNyala and jumlahIdpelTerdampak for the house and nearby feeder. POST /v1/complaints opens a pengaduan with Auto Dispatch and returns nomorAgenda, petugas and estimasiTindak so the ticket can be followed like the in-app history.

Is this a public PLN developer API?

No. The paths here are reconstructed from the app's own screens (IDPEL, token, tagihan, SwaCAM, pengaduan, padam, pasang baru, Charge.In, IconCash) as the private surface those features talk to after login — not a documented third-party API.

Apps similar to PLN Mobile

  • MyPertamina — MyPertamina is Pertamina's official fuel and loyalty app for Indonesian motorists, sitting beside PLN Mobile as another nationwide state-enterprise self-care client.
  • Saudi Energy — Saudi Energy is Saudi Electricity Company's self-care app for contract-account bills, prepaid meter recharges and outage tickets — the same utility pattern as PLN Mobile, for the Saudi grid.
  • Enel São Paulo — Enel São Paulo is ENEL BRASIL's customer app for the São Paulo distribution concession, with duplicate bills, PIX payment, self meter reading and outage protocols.
  • Hathway Broadband — Hathway Broadband is an Indian ISP self-care app for plan, bill and ticket data; ICONNET fibre inside PLN Mobile is the closest in-app analogue.

Topics

  • PLN Mobile data API
  • IDPEL meter
  • token listrik kodeToken
  • tagihan listrik postpaid
  • SwaCAM catat meter
  • pengaduan Auto Dispatch
  • padam outage statusPadam
  • SPKLU Charge.In
  • IconCash saldoIconCash
  • PT PLN Persero

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