# KSEI — Zapi reference > Kustodian Sentral Efek Indonesia: demografi investor pasar modal, sebaran investor domestik per wilayah, dan kepemilikan efek per instrumen dipecah lokal/asing. **Base URL:** `https://api.zpi.web.id` **Auth:** Send `x-api-key: YOUR_KEY` header on every request. Get a free key at https://zpi.web.id/dashboard/keys. **Response envelope:** `{ status, message, content }` **Rate limit:** 60 req/min on free tier. **Related:** - Detail page: https://zpi.web.id/api/finance/ksei - Endpoint catalog: https://zpi.web.id/category/finance - Concise index: https://zpi.web.id/llms.txt - Full reference: https://zpi.web.id/llms-full.txt --- ## KSEI **Category:** finance · **Slug:** `ksei` **Detail page:** https://zpi.web.id/api/finance/ksei Kustodian Sentral Efek Indonesia: demografi investor pasar modal, sebaran investor domestik per wilayah, dan kepemilikan efek per instrumen dipecah lokal/asing. **Tags:** ksei, investor, kepemilikan, scripless, indonesia, finance ### Investor Demographics Demografi investor individu per bulan — jenis kelamin, usia, pendidikan, pekerjaan, atau penghasilan. Aset dilaporkan dalam triliun rupiah. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/finance:ksei/demographics` - **Cache TTL:** 21600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `by` | enum(gender|age|education|occupation|income) | query | no | Breakdown to return. Default gender. | | `month` | string | query | no | Keep only this month (YYYY-MM). Omit for the whole published series. | **cURL:** ```bash curl "https://api.zpi.web.id/v1/finance:ksei/demographics?by=age&month=2026-04" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/finance:ksei/demographics?by=age&month=2026-04", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/finance:ksei/demographics?by=age&month=2026-04", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "count": 22, "items": [ { "group": "< 30 Years Old", "month": "2026-06", "investors": 15643100, "totalAsset": 64.88 }, { "group": "> 60 Years Old", "month": "2026-06", "investors": 798396, "totalAsset": 862.25 }, { "group": "31 - 40 Years Old", "month": "2026-06", "investors": 7140574, "totalAsset": 238.45 }, { "group": "41 - 50 Years Old", "month": "2026-06", "investors": 3691232, "totalAsset": 230.68 }, { "group": "51 - 60 Years Old", "month": "2026-06", "investors": 1629234, "totalAsset": 313 }, { "group": "< 30 Years Old", "month": "2026-05", "investors": 15057862, "totalAsset": 69.99 }, { "group": "> 60 Years Old", "month": "2026-05", "investors": 761503, "totalAsset": 921.57 }, { "group": "31 - 40 Years Old", "month": "2026-05", "investors": 6826882, "totalAsset": 233.5 } ], "source": "ksei", "assetUnit": "IDR trillion", "breakdown": "age", "latestMonth": "2026-06" } ``` --- ### Domestic Distribution Sebaran investor domestik per wilayah: porsi jumlah investor, porsi aset, dan total asetnya. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/finance:ksei/distribution` - **Cache TTL:** 21600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `month` | string | query | no | Keep only this month (YYYY-MM). Omit for the whole published series. | **cURL:** ```bash curl "https://api.zpi.web.id/v1/finance:ksei/distribution?month=2026-05" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/finance:ksei/distribution?month=2026-05", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/finance:ksei/distribution?month=2026-05", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "count": 25, "items": [ { "area": "Jawa", "month": "2026-06", "assetPct": 94.17, "totalAsset": 5148.75, "investorPct": 65.41 }, { "area": "Sumatera", "month": "2026-06", "assetPct": 2.52, "totalAsset": 137.55, "investorPct": 18.93 }, { "area": "Kalimantan", "month": "2026-06", "assetPct": 2.24, "totalAsset": 122.2, "investorPct": 5.47 }, { "area": "Bali, NTT, dan NTB", "month": "2026-06", "assetPct": 0.49, "totalAsset": 26.83, "investorPct": 3.54 }, { "area": "Sulawesi", "month": "2026-06", "assetPct": 0.44, "totalAsset": 24.05, "investorPct": 5.65 }, { "area": "Maluku dan Papua", "month": "2026-06", "assetPct": 0.1, "totalAsset": 5.7, "investorPct": 0.94 }, { "area": "Jawa", "month": "2026-05", "assetPct": 94.49, "totalAsset": 5440.29, "investorPct": 65.8 }, { "area": "Sumatera", "month": "2026-05", "assetPct": 2.43, "totalAsset": 140.14, "investorPct": 18.66 } ], "source": "ksei", "assetUnit": "IDR trillion", "latestMonth": "2026-06" } ``` --- ### Securities Ownership Kepemilikan efek per instrumen dari berkas posisi bulanan KSEI: porsi lokal dan asing dipecah sembilan tipe investor, dengan dua basis persentase asing yang dinamai eksplisit. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/finance:ksei/ownership` - **Cache TTL:** 86400s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `date` | string | query | no | Exact publication date (YYYY-MM-DD / YYYYMMDD), or a month (YYYY-MM) to take that month's file. Omit for the latest published. | | `code` | string | query | no | Keep a single security code. | | `type` | string | query | no | Keep one instrument type — EQUITY, CORPORATE BOND, SUKUK, MUTUAL FUND, … | | `length` | number | query | no | Rows to return (default 50, max 1000) | | `start` | number | query | no | Row offset (default 0) | **cURL:** ```bash curl "https://api.zpi.web.id/v1/finance:ksei/ownership?date=2026-07-31&code=BBCA&type=EQUITY&length=50&start=0" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/finance:ksei/ownership?date=2026-07-31&code=BBCA&type=EQUITY&length=50&start=0", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/finance:ksei/ownership?date=2026-07-31&code=BBCA&type=EQUITY&length=50&start=0", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "code": "BBCA", "date": "2026-07-31", "items": [ { "code": "BBCA", "date": "2026-07-31", "type": "EQUITY", "local": { "total": 16323584367, "others": 14283100, "corporate": 639358985, "insurance": 2406061790, "foundation": 73486060, "individual": 11091661113, "mutualFund": 1223560978, "securities": 110263741, "pensionFund": 327545000, "financialInstitution": 437363600 }, "price": 6325, "foreign": { "total": 36130106753, "others": 5736807195, "corporate": 989616284, "insurance": 651011685, "foundation": 299882405, "individual": 326311580, "mutualFund": 20232370180, "securities": 434821897, "pensionFund": 4948602260, "financialInstitution": 2510683267 }, "outstanding": 123275050000, "recordedTotal": 52453691120, "foreignPctOfRecorded": 68.88, "foreignPctOfOutstanding": 29.31 } ], "start": 0, "total": 1, "length": 50, "source": "ksei" } ``` --- _Generated: 2026-08-08T12:07:33.884Z_