Module: ojk

Source portal: api.ojk.go.id (REST API) + investor.ojk.go.id (Waspada Investasi) Scrape method: REST wrapper + httpx fallback for portal HTML Phase: 2 License: MIT Status: ACTIVE


Source

FieldValue
Portal URLhttps://api.ojk.go.id/v1/lembaga (primary) + https://investor.ojk.go.id/InvestorAlert (waspada)
OperatorOtoritas Jasa Keuangan (OJK RI)
Data typeLicensed financial institution registry — banks, fintech, insurance, pension funds, investment managers, securities firms
Auth requiredNone — public API
Last verified2026-03-13

Rate Limits & Block Behaviour

ParameterValue
Safe request rate~30 req/min (~0.5 req/s)
Block triggerUnknown — API is stable
Block typeTBD — needs testing
MitigationBuilt-in token-bucket rate limiter
IP rotation neededNot required for normal use; supply proxy_url for bulk scraping

Normalized Schema (result object)

{
    "institution_name": str,           # e.g. "PT AKULAKU FINANCE INDONESIA"
    "license_no": str,                 # e.g. "KEP-249/NB.11/2018"
    "institution_type": str,           # e.g. "fintech-pendanaan", "bank-umum"
    "license_status": str,             # ACTIVE | EXPIRED | REVOKED | SUSPENDED
    "regulated_products": list[str],   # Products/services the institution is licensed for
    "domicile": str | None,            # City/region
    "website": str | None,             # Institution website
    "on_waspada_list": bool,           # True if on investment alert list
}

Institution types:

  • bank-umum — Commercial banks
  • bpr — Rural banks (Bank Perkreditan Rakyat)
  • fintech-pendanaan — Peer-to-peer lending platforms
  • fintech-pembayaran — Payment gateway providers
  • asuransi — Insurance companies
  • dana-pensiun — Pension funds
  • manajer-investasi — Investment managers
  • perusahaan-efek — Securities firms

MCP Tools

ToolSignatureDescription
check_ojk_license(name_or_id: str) -> dictSingle institution lookup by name or license number
search_ojk_institutions(keyword: str, institution_type: str?) -> list[dict]Multi-result search with optional type filter
get_ojk_status(name_or_id: str) -> dictStatus-only lookup (lighter weight)
check_ojk_waspada(entity_name: str) -> dictCheck if entity is on investment alert list

claude mcp add

claude mcp add civic-stack -- civic-stack-mcp  # all 40 tools

FastAPI Endpoints

MethodPathDescription
GET/ojk/check/{name_or_id}Single institution lookup
GET/ojk/search?q=keyword&institution_type=...&status=...Multi-result search with filters
GET/ojk/status/{name_or_id}Status-only lookup
GET/ojk/waspada?q=entity_nameCheck investment alert list

Example Response

{
  "result": {
    "institution_name": "PT AKULAKU FINANCE INDONESIA",
    "license_no": "KEP-249/NB.11/2018",
    "institution_type": "fintech-pendanaan",
    "license_status": "ACTIVE",
    "regulated_products": [
      "Pendanaan Bersama Berbasis Teknologi Informasi",
      "P2P Lending"
    ],
    "domicile": "Jakarta Selatan",
    "website": "https://akulaku.com",
    "on_waspada_list": false
  },
  "found": true,
  "status": "ACTIVE",
  "confidence": 1.0,
  "source_url": "https://api.ojk.go.id/v1/lembaga/pencarian",
  "fetched_at": "2026-03-13T10:00:00Z",
  "last_updated": null,
  "module": "ojk",
  "raw": null
}

Known Issues & Quirks

  • The API sometimes returns duplicate records for the same institution with different license numbers — this is expected when institutions have multiple licenses for different product types
  • Waspada Investasi entities are flagged with status: SUSPENDED and on_waspada_list: true
  • The portal HTML fallback is used only when the API returns no results (rare)
  • License status mapping: “aktif”, “izin usaha”, “beroperasi” → ACTIVE; “dicabut”, “likuidasi” → REVOKED; “pembekuan”, “dibekukan” → SUSPENDED; “tidak aktif” → EXPIRED

VCR Fixtures

CassetteScenario
tests/ojk/cassettes/institution_found.yamlActive institution — Akulaku fintech
tests/ojk/cassettes/institution_not_found.yamlNo results for keyword
tests/ojk/cassettes/waspada_found.yamlEntity on investment alert list

This module fetches data from OJK’s public REST API and the Waspada Investasi portal, both of which publish licensed institution data for consumer protection purposes. No authentication is required. Data is fetched on demand and not persisted by this library. Scraping is conducted at low request rates consistent with normal API usage. No personal data beyond what is voluntarily published on the public portal is accessed.