Pefindo Biro Kredit/ Eagle API-2/ TMB Staging/ Rev. 2 — 18 Aug 2026

What product 132 actually returns

A field-level reference for the credit report Pefindo serves to member MILIKIRUMAH, measured across 17 live subjects and 4,162 facilities — from single-facility thin files to a 705-facility portfolio. It documents what arrives, what never does, and the four places the payload will mislead you if you read it literally.

Endpoint
tmb-eagle-api.idscoresystem.id
Product ID
132
Inquiry reason
15
Member
MILIKIRUMAH · 372
Payload size
7.4 – 344 KB
Latency
~5.2 s

01 — OrientationThe shape of it

Product 132 is a substantially reduced tier against the P1 structure spec. The spec describes ~170 debtor fields and ~90 per facility. What arrives is exactly 40 and exactly 13 — identical on every one of the 17 subjects tested, whether they had one facility or 705.

40
debitur fields
13
facility fields
4,162
facilities seen
253
distinct lenders
13
monthly scores
0
collateral rows

Evidence base

Every claim here is measured, not inferred from the spec. 17 subjects drawn from Pefindo's own staging test lists — including a list explicitly titled "Debitur dengan agunan personal" (debtors with personal collateral) and one titled "fasilitas banyak" (many facilities). Counts in the n / 17 column say how many subjects support each finding.

02 — Call sequenceFour calls, about five seconds

1
GET /api/v1/getToken
Basic auth. JWT at data.token, valid 3600 s.
0.22 s
2
POST /api/v1/product/search
Returns inquiry_id plus candidates carrying id_pefindo.
0.07 s
3
POST /api/v1/product/generateReport
You mint the event_id UUID. Reuse is rejected with code 35.
0.04 s
4
GET /api/v1/product/getReport/eventId/{uuid}
Returns code 32 while scoring runs. Poll until 01.
5.11 s

One poll cycle was enough for all 17 subjects, including the 705-facility one — report build time does not scale visibly with portfolio size.

Request body

POST /api/v1/product/search
{
  "type": "PERSONAL",
  "product_id": 132,
  "inquiry_reason": 15,
  "reference_code": "your-correlation-id",
  "params": [
    {
      "id_type": "KTP",
      "id_no": "3529116903740002",
      "name": "TRI MURYATUN",
      "date_of_birth": "1982-12-17"
    }
  ]
}

Entitlement

Product 132 with reason 15 is what MILIKIRUMAH is provisioned for. Documented products 123 and 148 return "Akses tidak diberikan"; reasons 12/13/14 from appendix 3.4.3 return "Inquiry Reason Tidak Valid" — Eagle does not recognise them at all.

03 — EnvelopeWhere each section lives, and how often

The important column is n / 17. Several sections are not simply "present" or "absent" — they appear for some subjects and not others, with no relationship to portfolio size.

SectionTypen / 17Row counts seenVerdict
report.headerobject173 fieldsAlways
report.debiturobject1740 fieldsAlways
report.fasilitasarray171 – 705Always
scoring (top level)array1713Always
report.riwayat_identitas_debiturarray145, 9, 10, 23Usually
report.summary_riwayat_debiturarray613, 24Sometimes
report.permintaan_dataarray0—Never
report.summary_permintaan_dataarray0—Never
report.pengurusarray0—Never
report.other_dataarray0—Never
fasilitas[].riwayat_fasilitasarray00 / 4,162 fac.Never
fasilitas[].agunanarray00 / 4,162 fac.Never
fasilitas[].penjaminarray00 / 4,162 fac.Never
CurrentContract · otherDataSourcenull0nullNull
InquiriesAnalysis · PastDueInformationnull0nullNull
RepaymentInformationnull0nullNull

Revised in this edition

An earlier draft, based on two subjects, recorded summary_riwayat_debitur as reliably present. It is not — it appears for 6 of 17 subjects. Critically, absence does not track portfolio size: subjects with 705, 677 and 524 facilities returned zero months of history, while others with comparable portfolios returned 24. Nothing in the payload predicts which you will get.

Trap 1 — scoring is not inside report

scoring[] is a sibling of report, not a child of it, though the API doc's worked example nests it. Reading report.scoring returned an empty result on all 17 subjects — no error, no empty array, just a missing key. Read payload.scoring.

Collateral: the decisive test

Six of the 17 subjects came from a Pefindo staging list titled "Debitur dengan agunan personal" — debtors with personal collateral. All six returned agunan absent on every facility. Across all 17 subjects and all 4,162 facilities, the count of facilities carrying agunan, riwayat_fasilitas, or penjamin is zero. These blocks are withheld at this tier, not merely sparse.

04 — report.debiturForty fields, invariant

The same 40 keys on all 17 subjects. Every id_* field is a code requiring a lookup table. Note the absence of the sector-prefixed aggregates (bank_*, mf_*, p2p_*…) the spec describes — no sector breakdown exists at this tier.

FieldTypeMeaningExample
nama_lengkap_debiturstringFull nameTRI MURYATUN
nama_sesuai_identitasstringName as on ID documentTRI MURYATUN
nomor_identitasstringKTP number3529116903740002
npwpstringTax number3529116903740002
id_debitur_golden_recordintPefindo ID — the stable subject key102171282000021
tanggal_lahirstringDate of birth1982-12-17
tempat_lahirstringPlace of birthSUMENEP
nama_gadis_ibu_kandungstringMother's maiden nameHJ ARIFAH
id_jenis_kelaminstringGender · L / PP
id_status_perkawinanstringMarital status1
id_status_gelarstringEducation level00
id_pekerjaanstringOccupation code099
tempat_bekerjastringEmployerSUMENEP
alamat_tempat_bekerjastringEmployer addressSUMENEP
alamat_debiturstringAddressDUSUN KACANGAN…
kecamatanstringDistrictPAKAMBAN LAOK
kelurahanstringSub-districtPAKAMBAN LAOK
id_lokasistringLocation code — use instead of city69465
id_kabupaten_kotastringCity — "0000" on every subject tested0000
id_negarastringCountryID
emailstringEmailTRIMURYATUN@…
teleponstringPhone081999026024
telepon_selulerstringMobile — trailing spaces"081999026024 "
id_tipe_debiturintDebtor type · 1 = individual1
id_golongan_debiturstringDebtor groupS14
id_sektor_ekonomistringEconomic sectorX-013000
jml_aktif_fasilitasintOpen facilities8
jml_tutup_fasilitasintClosed facilities137
jml_fasilitas_tertunggakintDelinquent facilities0
jml_fasilitas_surat_berhargaintSecurities facilities0
jml_plafonintTotal credit limit — opaque, Trap 3156,893,774
jml_saldo_terutangfloatTotal outstanding — opaque, Trap 3361,778,471
jml_tunggakanfloatTotal overdue20,000.0
tunggakan_terburukfloatWorst overdue amount20,000.0
jml_hari_tunggakanintTotal days past due180
jml_hari_tunggakan_terburukintWorst DPD — unreliable, Trap 20
kolektabilitas_terburukintWorst collectibility — unreliable, Trap 22
tgl_buka_fasilitas_terakhirstringLast facility opened2023-11-30
tgl_tutup_fasilitas_terakhirstringLast facility closed2024-04-05
tgl_tunggakan_terakhirnullLast overdue date — null on every subjectnull

05 — report.fasilitas[]Thirteen fields, up to 705 rows

Identical field set on all 4,162 facilities observed. No nama_ljk — the lender resolves from id_pelapor. No id_kolektabilitas — there is no per-facility collectibility at this tier.

FieldTypeMeaningObserved range
id_pelaporintLender id — signed 32-bit, often negative253 distinct values
id_jenis_kreditstringCredit type10 distinct codes
id_kondisiintFacility condition1,3,4,5,6,8,9,10,13
fase_fasilitasint1 = open, 2 = closed1 · 2
plafonfloat/intCredit limit0 – 170,000,000
baki_debetfloat/intPrincipal outstanding0 – …
nominal_tunggakanfloatOverdue amount0 – …
tunggakan_terburukfloat/intWorst overdue amount0 – …
jumlah_hari_tunggakanintCurrent days past duemostly 0
jml_hari_tunggakan_terburukintWorst days past due0 – 23
tanggal_awal_kredit_atau_pembiayaanstringStart date2011 – 2024
tanggal_akhirstringEnd date2011 – 2024
tahun_bulan_datastringReporting period of this row2017-03 – 2024-05
Absent versus spec: nama_ljk, id_kolektabilitas, saldo_terutang, id_jenis_pelapor, kantor_cabang, suku_bunga_atau_imbalan, tunggakan_pokok, id_valuta, nomor_akad_*, and ~75 others.

Facility condition across all 4,162 facilities

id_kondisiMeaningCountSignal
3Lunas — settled3,822Good
1Fasilitas Aktif — active152Neutral
4Dihapusbukukan — written off44Adverse
13Lunas dengan diskon — settled at a discount40Adverse
9Dialihkan ke fasilitas lain36Watch
8Dialihkan atau dijual ke pelapor lain35Watch
10Dialihkan ke pihak lain non-pelapor25Watch
6Lunas karena pengambilalihan agunan — collateral seized8Adverse
5Hapus tagih — debt forgiven1Adverse
85 of 4,162 facilities (2.0%) carry a write-off condition (4, 5, 6 or 13).

Use condition, not DPD, as the adverse signal

Facility-level jumlah_hari_tunggakan was 0 on almost every facility tested, and jml_hari_tunggakan_terburuk never exceeded 23 days. Yet one 705-facility subject carries 14 written-off facilities. Delinquency is simply not expressed through the DPD fields at this tier — id_kondisi is where it shows up. Build adverse rules on condition codes.

Lender resolution

All 253 distinct id_pelapor values resolved against the reporter registry extracted from Pefindo's structure workbook — a 100% hit rate across 4,162 facilities. Sector must then be inferred from the lender's name: that yields bank 60.4%, multifinance 17.6%, and 22.0% unclassified, since names like "PT Woka Internasional" carry no sector marker.

06 — summary_riwayat_debitur[]The history block — when you get it

Three fields per month at portfolio level: no amounts, no per-lender attribution. Present for only 6 of 17 subjects, at either 13 or 24 rows.

FieldTypeMeaning
tahun_bulan_datastringMonth-end period, newest first
kolektabilitas_terburukstringWorst collectibility that month · 1 Lancar → 5 Macet
jml_hari_tunggakan_terburukintWorst days past due that month · seen up to 2,653

Trap 2 — the debtor aggregates understate the history

debitur.kolektabilitas_terburuk was null on 6 of 17 subjects, and on 4 of the 6 subjects that had history it reported a better grade than the history contains. One subject reads 2 (Dalam Perhatian Khusus) against a history holding ten months at 5 (Macet) and 266 days past due; another reads null against a history reaching Macet.

Taken together the field is unusable on 10 of 17 subjects. Always compute worst-case across summary_riwayat_debitur where it exists, and fall back to id_kondisi write-off flags where it does not.

Worked example — one subject's 24 months

PeriodCollectibilityDPDStatus
2024-05 → 2023-051 · Lancar013 months clean
2023-042 · Dalam Perhatian Khusus20Watch
2023-03 → 2022-125 · Macet180Default
2022-11 → 2022-105 · Macet266Default
2022-09 → 2022-065 · Macet264Default
Ten adverse months of 24. The debtor aggregate for this subject reports collectibility 2 and worst DPD 0.

07 — scoring[]Thirteen monthly scores, always present

Exactly 13 entries on every subject, oldest first, ending with a score dated the day of the request. Present universally — but calculable on only 10 of 17.

200–624
real score range
10 / 17
scorable
7 / 17
unscorable
8
risk grades seen
FieldTypeMeaningExample
periodstringScoring period2026-08-18
scoreintScore — 9999 is a sentinel624
podfloat/intProbability of default, %10.23
risk_gradestringGrade codeRRD1
risk_grade_descstringGrade descriptionRisiko Tinggi
risk_descstringRisk descriptionRisiko Tinggi
reason_codearrayUp to 5 reason codes["NSS1","MSD6"]
reason_descarrayMatching descriptions…
id_pefindostringSubject key102171282000021

Grades observed across all series, best to worst: RRC1, RRC2, RRC3, RRD1, RRD2, RRD3, RRE1, RRE3, plus XX for unscorable. Response language follows the language parameter on generateReport: 01 Bahasa, 02 English.

Trap 3 — 9999 is not a score

Seven of 17 subjects returned score: 9999, risk_grade: "XX", pod: 100, reason ND01 — "score cannot be calculated, at least 2 months of payment information required in the last 24 months". That is a sentinel meaning unscorable, not a score of 9999 or a 100% default probability. At 41% of subjects this is a common path, not an edge case. Gate on score == 9999 || risk_grade == "XX".

Scorability does not follow portfolio size: one single-facility subject scored 582, another single-facility subject was unscorable.

08 — Implementation notesEverything else that bites

Trap 4 — the money aggregates do not reconcile

An earlier draft reported that jml_saldo_terutang ties exactly to sum(baki_debet) + sum(nominal_tunggakan). Across 15 subjects it ties on only 5; on the rest it is understated by 5–20%. jml_plafon is worse: it matches the sum of all facility limits on 3 subjects, matches the open-facility sum on 5, and matches neither on 7 — one subject reports 746 M against a facility total of 8.18 bn.

Treat both as opaque bureau-computed figures. Do not derive them, do not validate against them, and do not compute utilisation from their ratio.

Parsing

Transport

09 — AssessmentWhat this supports, and what it doesn't

As a fallback bureau source, product 132 answers portfolio-level questions and facility-level ones not at all. Two of its most useful signals are also conditional on data that arrives only sometimes.

Underwriting questionSupportedSource · coverage
Does this person have credit history?Yesfasilitas[] · 17/17
What is their credit score and PD?Oftenscoring[] · 10/17 calculable
How much do they owe in total?Approxaggregates · do not reconcile
How many lenders, and who?Yesid_pelapor · 253/253 resolved
Has anything been written off?Yesid_kondisi 4/5/6/13
Have they defaulted in 24 months, how badly?Sometimessummary_riwayat_debitur · 6/17
Current delinquency and days past due?NoDPD fields ~always 0
Which facility went bad, and with whom?Noneeds riwayat_fasilitas
Per-facility collectibility?Nono id_kolektabilitas
Month-by-month balance and arrears trend?Noneeds riwayat_fasilitas
Credit-hungry — recent inquiry velocity?Nopermintaan_data · 0/17
What collateral secures the exposure?Noagunan · 0/4,162 facilities
Exposure split by lender sector?Partialinferred · 22% unclassified

Open with Pefindo

Rev. 2 · compiled from 17 live captures against tmb-eagle-api.idscoresystem.id, 18 Aug 2026 · member MILIKIRUMAH · product 132 · inquiry reason 15 · 4,162 facilities · 253 distinct lenders · staging test data