JMO (Jamsostek Mobile) icon

JMO Data API: JHT Balances, KPJ Cards and Claims

BPJS Ketenagakerjaan · Banking

JMO (Jamsostek Mobile) is the official Android app of BPJS Ketenagakerjaan, Indonesia's employment social-security administrator (Jamsostek). After a member signs in, Home and Account screens show Jaminan Hari Tua (JHT) old-age savings, Jaminan Pensiun (JP) pension details, a digital KPJ card for PU, BPU and PMI membership segments, JHT claim tracking with in-app liveness and face-match checks, JKK/JKM/JHT tuition payments, branch-office antrian booking, and worker-scholarship applications. Dana Siaga / Xtradana, BSU wage-subsidy checks, JKP job-loss benefits, syariah e-akad and an office locator sit on the same menu. The app serves Indonesian formal employees (PU), informal workers (BPU) and Indonesian migrant workers (PMI) who hold a KPJ number, sitting next to BPJS Kesehatan's JKN Mobile for health coverage and the rest of the government's social-protection stack.

JHT ledgers land in a saldoJht array: each row carries nomSaldo, kodePerusahaan, namaPerusahaan, npp, kpj, bulanIuranTerakhir and statusKepesertaan for the signed-in worker. Contribution months arrive as blth with jhtContribution and salary. The member card under profile holds namaLengkap, nik, noKk and msisdn; digital-card rows add hash, kodeSegmen and kodeTk. JP benefit rows expose nomManfaatNetto, nomRapel, kodeKlaim and statusLunas. Tuition settlements split amountJht, amountJkk, amountJkm and amountTotal. Branch bookings return kodePengajuan, tanggalBooking, namaKantorCabang and layanan.

Payroll and HR stacks reconcile employer npp against the worker's nomSaldo. Claims desks watch tahapKlaim and isPaid. Branch operations consume antrian slots and office kode / nama pins. openData Studio turns those fields into callable open data.

Screenshots

  • JMO (Jamsostek Mobile) screenshot 1
  • JMO (Jamsostek Mobile) screenshot 2
  • JMO (Jamsostek Mobile) screenshot 3
  • JMO (Jamsostek Mobile) screenshot 4
  • JMO (Jamsostek Mobile) screenshot 5

API surface

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

  • Login v2

    POST /user/login-v2 osint

    Signs the member in with email and password and mints the accessToken and refreshToken later calls attach as Bearer.

    Auth: email and password in the JSON body; response mints accessToken and refreshToken.

    • email
    • password
    • deviceId
    • lastInstalledVersion
    • deviceBrand
    • deviceModel
    • latitude
    • longitude
    • locality
    • publicKey
    • signature
    • accessToken
    • refreshToken
    • titleMessage
    • jenisForm
    • transactionId
    • ret
    POST /user/login-v2 HTTP/1.1
    Content-Type: application/json
    
    {
      "email": "[email protected]",
      "password": "********",
      "deviceId": "a1b2c3d4e5",
      "lastInstalledVersion": "4.18.4",
      "deviceBrand": "samsung",
      "deviceModel": "SM-S911B",
      "latitude": "-6.2088",
      "longitude": "106.8456",
      "locality": "Jakarta",
      "publicKey": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A",
      "signature": "base64-signature"
    }
    {
      "accessToken": "eyJhbGciOi...",
      "refreshToken": "rt_8f21c0",
      "titleMessage": "Login berhasil",
      "jenisForm": "HOME",
      "transactionId": "TRX-20261015-001",
      "ret": "0",
      "deviceId": "a1b2c3d4e5"
    }
  • Member profile

    POST /user/profile osint

    Loads the signed-in member card wrapped as profile: namaLengkap, nik, noKk, msisdn, address fields and the kpj membership list used on Account.

    Auth: Bearer accessToken from POST /user/login-v2. Client methods take the session token as the first String argument.

    • profile
    • namaLengkap
    • nik
    • noKk
    • email
    • msisdn
    • jenisKelamin
    • tempatLahir
    • tglLahir
    • alamat
    • propinsi
    • kabupaten
    • kecamatan
    • kodePos
    • statusPeserta
    • statusPelapor
    • isEligibleRaya
    • displayPict
    • listFitur
    • kpj
    POST /user/profile HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Content-Type: application/json
    
    {
      "email": "[email protected]",
      "deviceId": "a1b2c3d4e5"
    }
    {
      "profile": {
        "namaLengkap": "Siti Nurhaliza",
        "nik": "3174011204940001",
        "noKk": "3174010101010001",
        "email": "[email protected]",
        "msisdn": "081234567890",
        "jenisKelamin": "P",
        "tempatLahir": "Jakarta",
        "tglLahir": "1994-04-12",
        "alamat": "Jl. Sudirman No. 1",
        "propinsi": "DKI Jakarta",
        "kabupaten": "Jakarta Pusat",
        "kecamatan": "Tanah Abang",
        "kodePos": "10270",
        "statusPeserta": "AKTIF",
        "statusPelapor": "0",
        "isEligibleRaya": false,
        "displayPict": "https://example.invalid/pict.jpg",
        "listFitur": ["JHT", "JP", "JKP"],
        "kpj": [{
          "kpj": "19011234567",
          "kodeTk": "TK001",
          "kodeSegmen": "PU",
          "namaTk": "Siti Nurhaliza",
          "nomorIdentitas": "3174011204940001",
          "program": "JHT,JP,JKK,JKM",
          "statusKepesertaan": "AKTIF",
          "tglKepesertaan": "2018-03-01"
        }]
      }
    }
  • KPJ membership cards

    POST /user/kpj openfinance

    Returns the worker's KPJ numbers with kodeSegmen (PU/BPU/PMI), subscribed program codes and statusKepesertaan.

    Auth: Bearer accessToken from POST /user/login-v2. Client methods take the session token as the first String argument.

    • kpj
    • kodeTk
    • kodeSegmen
    • namaTk
    • nomorIdentitas
    • program
    • statusKepesertaan
    • tglKepesertaan
    POST /user/kpj HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Content-Type: application/json
    
    {
      "email": "[email protected]",
      "deviceId": "a1b2c3d4e5"
    }
    {
      "kpj": [{
        "kpj": "19011234567",
        "kodeTk": "TK001",
        "kodeSegmen": "PU",
        "namaTk": "Siti Nurhaliza",
        "nomorIdentitas": "3174011204940001",
        "program": "JHT,JP,JKK,JKM",
        "statusKepesertaan": "AKTIF",
        "tglKepesertaan": "2018-03-01"
      }]
    }
  • JHT balance

    POST /jht/balance openbanking

    Returns JHT old-age savings as saldoJht rows: nomSaldo, employer kodePerusahaan / npp / namaPerusahaan, last tuition month and membership status.

    Auth: Bearer accessToken from POST /user/login-v2. Client methods take the session token as the first String argument.

    • saldoJht
    • kodePerusahaan
    • kodeSegmen
    • kodeTk
    • kpj
    • namaPerusahaan
    • nomSaldo
    • npp
    • jumlahTk
    • program
    • bulanIuranTerakhir
    • tanggalIuranTerakhir
    • statusKepesertaan
    • kodeDivisi
    POST /jht/balance HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Content-Type: application/json
    
    {
      "email": "[email protected]",
      "isRecordPoin": false
    }
    {
      "saldoJht": [{
        "kodePerusahaan": "P1234567",
        "kodeSegmen": "PU",
        "kodeTk": "TK001",
        "kpj": "19011234567",
        "namaPerusahaan": "PT Contoh Sejahtera",
        "nomSaldo": "87543000",
        "npp": "123456789012",
        "jumlahTk": "1",
        "program": "JHT",
        "bulanIuranTerakhir": "202610",
        "tanggalIuranTerakhir": "2026-10-10",
        "statusKepesertaan": "AKTIF",
        "kodeDivisi": "01"
      }]
    }
  • JHT contribution detail

    POST /jht/contribution-detail openbanking

    Pages JHT contribution months as blth rows with jhtContribution, salary, rapel and paymentDate against the employer companyCode.

    Auth: Bearer accessToken from POST /user/login-v2. Client methods take the session token as the first String argument.

    • workerCode
    • companyCode
    • divisionCode
    • membershipCode
    • contributionCode
    • segmenCode
    • blth
    • paymentDate
    • jhtContribution
    • salary
    • rapel
    • sort
    POST /jht/contribution-detail HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Content-Type: application/json
    
    {
      "email": "[email protected]",
      "kpj": "19011234567"
    }
    {
      "data": [{
        "workerCode": "TK001",
        "companyCode": "P1234567",
        "divisionCode": "01",
        "membershipCode": "19011234567",
        "contributionCode": "IUR-202610",
        "segmenCode": "PU",
        "blth": "202610",
        "paymentDate": "2026-10-10",
        "jhtContribution": "450000",
        "salary": "8500000",
        "rapel": "0",
        "sort": "1"
      }]
    }
  • Track JHT claim

    POST /jht/track-claim openfinance

    Tracks a JHT claim: isSuccessful, tahapKlaim stages and isPaid so the claim screen can show whether the benefit has settled.

    Auth: Bearer accessToken from POST /user/login-v2. Client methods take the session token as the first String argument.

    • isSuccessful
    • message
    • isPaid
    • titleKlaim
    • tahapKlaim
    POST /jht/track-claim HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Content-Type: application/json
    
    {
      "email": "[email protected]",
      "kpj": "19011234567"
    }
    {
      "isSuccessful": true,
      "message": "Klaim diproses",
      "isPaid": "N",
      "titleKlaim": {
        "title": "Klaim JHT"
      },
      "tahapKlaim": [{
        "tahap": "VERIFIKASI",
        "status": "PROSES"
      }]
    }
  • Digital KPJ cards

    POST /digital-card/cards opendata

    Lists digital KPJ cards the member can render: hash, kodeSegmen, kodeTk and kpj. PU/BPU/PMI membership information rides sibling methods on the same client.

    Auth: Bearer accessToken from POST /user/login-v2. Client methods take the session token as the first String argument.

    • hash
    • kodeSegmen
    • kodeTk
    • kpj
    POST /digital-card/cards HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Content-Type: application/json
    
    {
      "email": "[email protected]",
      "deviceId": "a1b2c3d4e5"
    }
    {
      "data": [{
        "hash": "9f2c1a8b0e",
        "kodeSegmen": "PU",
        "kodeTk": "TK001",
        "kpj": "19011234567"
      }]
    }
  • JP benefit information

    POST /jp/benefit-information openfinance

    Returns JP pension benefit amounts: nomManfaatNetto, nomRapel, nomBerjalan, kodeKlaim, statusLunas and tglKonfirmasiBaru.

    Auth: Bearer accessToken from POST /user/login-v2. Client methods take the session token as the first String argument.

    • dataFound
    • kodeKlaim
    • noProses
    • nomRapel
    • nomKompensasi
    • nomBerjalan
    • nomManfaatNetto
    • blthProses
    • countRapel
    • countRapelAll
    • statusLunas
    • tglKonfirmasiBaru
    POST /jp/benefit-information HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Content-Type: application/json
    
    {
      "email": "[email protected]",
      "kpj": "19011234567"
    }
    {
      "dataFound": "Y",
      "kodeKlaim": "JP-2026-00421",
      "noProses": "PR-8891",
      "nomRapel": "1500000",
      "nomKompensasi": "0",
      "nomBerjalan": "2100000",
      "nomManfaatNetto": "3600000",
      "blthProses": "202610",
      "countRapel": "2",
      "countRapelAll": "2",
      "statusLunas": "BELUM",
      "tglKonfirmasiBaru": "2026-10-20"
    }
  • Nearest branch office

    POST /office/nearest-branch opendata

    Returns the nearest BPJS Ketenagakerjaan branch: nama, kode, alamat and lat/long (wire aliases namaKantorCabang, kodeKantorCabang, alamatKantorCabang).

    Auth: Bearer accessToken from POST /user/login-v2. Client methods take the session token as the first String argument.

    • alamat
    • kode
    • latitude
    • longitude
    • nama
    POST /office/nearest-branch HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Content-Type: application/json
    
    {
      "latitude": -6.2088,
      "longitude": 106.8456
    }
    {
      "alamat": "Jl. Gatot Subroto Kav. 79",
      "kode": "KCJKT01",
      "latitude": -6.2395,
      "longitude": 106.8321,
      "nama": "Kantor Cabang Jakarta Gatot Subroto"
    }
  • Branch queue booking

    POST /queueing/antrian opendata

    Reads a booked branch antrian: kodePengajuan, tanggalBooking, namaKantorCabang, layanan, shift codes and the qrCode the member shows at the counter.

    Auth: Bearer accessToken from POST /user/login-v2. Client methods take the session token as the first String argument. Queueing overloads also send an x-transaction-id header.

    • isSuccessful
    • message
    • qrCode
    • data
    • kodePengajuan
    • nama
    • nomorIdentitas
    • kpj
    • handphone
    • email
    • alamatKantor
    • kantorCabang
    • namaKantorCabang
    • kodeProvinsi
    • kodeShift
    • namaShift
    • layanan
    • tanggalBooking
    POST /queueing/antrian HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    x-transaction-id: TRX-20261015-001
    Content-Type: application/json
    
    {
      "email": "[email protected]",
      "kpj": "19011234567"
    }
    {
      "isSuccessful": true,
      "message": "Antrian ditemukan",
      "qrCode": "JMO-QR-88421",
      "data": {
        "kodePengajuan": "ANTR-20261015-0042",
        "nama": "Siti Nurhaliza",
        "nomorIdentitas": "3174011204940001",
        "kpj": "19011234567",
        "handphone": "081234567890",
        "email": "[email protected]",
        "alamatKantor": "Jl. Gatot Subroto Kav. 79",
        "kantorCabang": "KCJKT01",
        "namaKantorCabang": "Kantor Cabang Jakarta Gatot Subroto",
        "kodeProvinsi": "31",
        "kodeShift": "PAGI",
        "namaShift": "Pagi",
        "layanan": "KLAIM JHT",
        "tanggalBooking": "2026-10-20"
      }
    }
  • Tuition payment history

    POST /tuition/payment-history openbanking

    Lists JKK/JKM/JHT tuition settlements: per-program amounts, amountTotal, paymentMethod, transactionDate and settlementDate.

    Auth: Bearer accessToken from POST /user/login-v2. Client methods take the session token as the first String argument.

    • transactionId
    • amountJkk
    • amountJkm
    • amountJht
    • amountTotal
    • status
    • quantity
    • fullname
    • transactionDate
    • settlementDate
    • customerIdentifier
    • paymentMethod
    • customField
    POST /tuition/payment-history HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Content-Type: application/json
    
    {
      "email": "[email protected]"
    }
    {
      "data": [{
        "transactionId": "PAY-889120",
        "amountJkk": "12000",
        "amountJkm": "8000",
        "amountJht": "450000",
        "amountTotal": "470000",
        "status": "SETTLED",
        "quantity": "1",
        "fullname": "Siti Nurhaliza",
        "transactionDate": "2026-10-10T09:14:00+07:00",
        "settlementDate": "2026-10-10T09:16:22+07:00",
        "customerIdentifier": "19011234567",
        "paymentMethod": "MIDTRANS",
        "customField": "JHT+JKK+JKM"
      }]
    }
  • Scholarship eligibility

    POST /scholarship/eligible opendata

    Checks worker-scholarship eligibility: statusDesc, eligibleData, signature, plus chosen-scholar lists dataPenerimaManfaatBeasiswa and dataDaftarPenerimaBeasiswa.

    Auth: Bearer accessToken from POST /user/login-v2. Client methods take the session token as the first String argument.

    • statusDesc
    • eligibleData
    • signature
    • dataPenerimaManfaatBeasiswa
    • dataDaftarPenerimaBeasiswa
    POST /scholarship/eligible HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Content-Type: application/json
    
    {
      "email": "[email protected]",
      "kpj": "19011234567"
    }
    {
      "statusDesc": "ELIGIBLE",
      "eligibleData": [{
        "kpj": "19011234567",
        "eligible": true
      }],
      "signature": "base64-signature",
      "dataPenerimaManfaatBeasiswa": [],
      "dataDaftarPenerimaBeasiswa": []
    }

Data categories

  • balances
  • contributions
  • identity
  • claims
  • locations
  • payments

Where teams use this data

  • Employer JHT reconciliation

    Payroll stacks match npp and kodePerusahaan on saldoJht rows against the worker's nomSaldo, bulanIuranTerakhir and blth contribution months so HR can spot missing JHT tuition before month-close.

  • Claims-desk status board

    Benefits operations pull tahapKlaim and isPaid for JHT, and nomManfaatNetto / statusLunas / tglKonfirmasiBaru for JP, to drive a shared queue of unsettled claims.

  • Branch antrian operations

    Branch software consumes kodePengajuan, tanggalBooking, layanan and namaKantorCabang so the counter can scan the member's qrCode against the booked shift.

  • Scholarship eligibility check

    HR benefits tools read statusDesc and eligibleData before opening a worker-scholarship file, then keep dataPenerimaManfaatBeasiswa as the chosen-recipient roster.

Frequently asked questions

What member identifiers does JMO expose?

The profile object carries namaLengkap, nik, noKk, msisdn and a kpj list. Digital-card rows add hash, kodeSegmen and kodeTk for PU, BPU and PMI segments.

How is JHT savings represented?

JHT balances arrive as a saldoJht array of nomSaldo rows keyed by kpj, npp and kodePerusahaan, with bulanIuranTerakhir and statusKepesertaan. Contribution months use blth, jhtContribution and salary.

Can I follow a JHT or JP claim?

JHT tracking returns tahapKlaim stages plus isPaid. JP benefit information returns nomManfaatNetto, nomRapel, kodeKlaim, statusLunas and tglKonfirmasiBaru.

How does JMO authenticate members?

Login v2 accepts email and password (plus device and location fields) and returns accessToken and refreshToken. Later calls send Authorization: Bearer; queueing overloads also send x-transaction-id.

Apps similar to JMO (Jamsostek Mobile)

  • Mobile JKN — Mobile JKN is BPJS Kesehatan's Android app for Indonesia's Jaminan Kesehatan Nasional: members look up membership by card number, NIK or family-card number, find nearby faskes, check iuran bills and virtual-account numbers, and register as informal (BPU) participants.
  • Andal by Taspen — Andal by Taspen is PT TASPEN's app for Indonesian civil servants (ASN), with online claim and non-claim filings, THT old-age benefit estimates, monthly pension information and workplace-accident (JKK) reporting.
  • MyJasfren — MyJasfren is PT Jasa Raharja's app for Indonesia's compulsory traffic-accident cover, with online santunan claims, public-transport vehicle protection payments and SWDKLLJ checks for private motorcycles.
  • SIAPkerja — SIAPkerja is the Indonesian Ministry of Manpower (Kemnaker) labour-services app that bundles job matching (Karirhub), skills training, competency certificates and JKP job-loss social security for laid-off workers.
  • MyASN BKN — MyASN BKN is Badan Kepegawaian Negara's personnel app for Indonesian civil servants, showing ASN profile data plus linked BPJS Ketenagakerjaan, BPJS Kesehatan, Taspen and KTP records.
  • VssID — VssID is Vietnam Social Security's citizen app for looking up social-, health- and unemployment-insurance records and presenting a digital health-insurance card in place of the physical BHYT card.
  • GOSI — GOSI is the Android client of Saudi Arabia's General Organization for Social Insurance, the agency that runs contributory social insurance for private-sector workers, employers and beneficiaries.

Topics

  • JMO API
  • Jamsostek Mobile
  • BPJS Ketenagakerjaan
  • JHT nomSaldo
  • KPJ card
  • JP nomManfaatNetto
  • antrian booking
  • Indonesia employment social security

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