Halal, BPOM, trademarks and OJK
Documentation index for AI agents: /llms.txt. Every page is also available as markdown: add
.mdto the URL.
BPJPH halal certificates, BPOM products, DJKI trademarks and OJK legal/illegal investment lists.
Lookups against public registers: halal certification (BPJPH), BPOM registered products, DJKI trademarks and OJK lists of licensed and illegal investment products and apps.
All endpoints need the x-api-key header (see Authentication) and return the standard envelope. A successful request costs 2 credits.
Endpoints on this page
GET /api/v1/halal: Search halalGET /api/v1/halal/{id}: Supervisor detailGET /api/v1/bpom: Search productsGET /api/v1/bpom/{nie}: NIE detailGET /api/v1/ojk/products: List legal investment productsGET /api/v1/ojk/products/{id}: Investment product detailGET /api/v1/ojk/apps: List legal investment appsGET /api/v1/ojk/apps/{id}: Investment app detailGET /api/v1/ojk/illegals: List illegal investmentsGET /api/v1/ojk/illegals/{id}: Illegal investment detailGET /api/v1/merek/search: Search registered trademarksGET /api/v1/merek/{appNumber}: Trademark detailGET /api/v1/merek/journal: Search the trademark journal
Halal (BPJPH)
Search halal supervisors/businesses from the BPJPH portal. On-demand: fetches upstream on cache miss, 24h TTL per keyword.
GET /api/v1/halal
Search halal. Search by business or supervisor name.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
q | query | yes | string | Keyword (min. 2 chars) |
limit | query | no | integer | Max 200, default 50 |
curl "https://use.apiindonesia.id/api/v1/halal?q=indomie" \
-H "x-api-key: YOUR_API_KEY"
Example response (shortened):
{
"data": [
{
"id_penyelia": "...",
"company_name": "Dapoer indomie",
"supervisor_name": "..."
}
],
"meta": {
"attribution": "Sumber: BPJPH",
"refreshed": true,
"cache_ttl_hours": 24
}
}
GET /api/v1/halal/{id}
Supervisor detail. Get one record by id_penyelia UUID.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | string | Supervisor UUID |
curl "https://use.apiindonesia.id/api/v1/halal/C7A753BB-3282-4D57-A485-B2B724D8267C" \
-H "x-api-key: YOUR_API_KEY"
Example response (shortened):
{
"data": {
"id_penyelia": "...",
"company_name": "...",
"issuer": "BPJPH"
}
}
BPOM Products
Search BPOM registered products (NIE, name, ingredients). On-demand with 24h cache per keyword.
GET /api/v1/bpom
Search products. Search registered medicine/traditional/cosmetic products.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
q | query | yes | string | Keyword (min. 2 chars) |
curl "https://use.apiindonesia.id/api/v1/bpom?q=paracetamol" \
-H "x-api-key: YOUR_API_KEY"
Example response (shortened):
{
"data": [
{
"nie": "DBL9424502004A1",
"product_name": "PANADOL EXTRA",
"status": "Berlaku"
}
],
"meta": {
"attribution": "Sumber: BPOM RI",
"refreshed": true
}
}
GET /api/v1/bpom/{nie}
NIE detail. Get product by NIE (registration number).
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
nie | path | yes | string | NIE e.g. DBL9424502004A1 |
curl "https://use.apiindonesia.id/api/v1/bpom/DBL9424502004A1" \
-H "x-api-key: YOUR_API_KEY"
Example response (shortened):
{
"data": {
"nie": "DBL9424502004A1",
"product_name": "PANADOL EXTRA",
"category": "Obat"
}
}
Trademarks (DJKI)
Indonesian trademark data from DJKI.
- 900,000+ registered marks with application numbers, owners, NICE classes, and consultants
- The trademark journal (Berita Resmi Merek) to monitor new filings by your brand or competitors
- Search by name, owner, and class
GET /api/v1/merek/search
Search registered trademarks. Returns registered trademarks matching a keyword. Search covers the mark-name column; use optional parameters to filter by owner, NICE class, or search within the owner column instead.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
q | query | yes | string | Search keyword, e.g. garuda. |
page | query | no | integer | Page to retrieve. Defaults to 1. |
limit | query | no | integer | Items per page. Defaults to 20. |
owner | query | no | string | Filter by trademark owner name. |
class | query | no | string | Filter by NICE class, e.g. 35. |
in | query | no | string | Set in=owner to search the keyword within the owner column instead of the mark name. |
curl "https://use.apiindonesia.id/api/v1/merek/search?q=garuda" \
-H "x-api-key: YOUR_API_KEY"
Example response (shortened):
{
"success": true,
"data": [
{
"app_number": "DID2019050403",
"mark_name": "GARUDA SUPER",
"class": "16",
"owner": "DARWIN EFFENDY",
"consultant": null,
"reg_date": "2019-09-03"
},
{
"app_number": "JID2019056084",
"mark_name": "GARUDA + GAMBAR",
"class": "35",
"owner": "SURYA CHANDRA",
"consultant": "Hendra Prasetya M.Si",
"reg_date": "2019-09-24"
}
],
"pagination": {
"page": 1,
"limit": 5,
"total": 1755
}
}
GET /api/v1/merek/{appNumber}
Trademark detail. Returns details of a single trademark by application number. If the number only appears in the publication journal (not yet registered), the response still returns 200 with journal data plus a journal_events list.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
appNumber | path | yes | string | Trademark application number, e.g. DID2019050403. |
curl "https://use.apiindonesia.id/api/v1/merek/DID2019050403" \
-H "x-api-key: YOUR_API_KEY"
Example response (shortened):
{
"success": true,
"data": {
"app_number": "DID2019050403",
"mark_name": "GARUDA SUPER",
"class": "16",
"owner": "DARWIN EFFENDY",
"consultant": null,
"reg_date": "2019-09-03",
"journal_events": []
}
}
GET /api/v1/merek/journal
Search the trademark journal. Returns trademark applications published in the DJKI Berita Resmi Merek journal. Coverage is a rolling window of recent editions (roughly twice a month, last few months). Use it to monitor lookalike filings during the opposition window.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
q | query | no | string | Search keyword, e.g. garuda. |
page | query | no | integer | Page to retrieve. Defaults to 1. |
limit | query | no | integer | Items per page. Defaults to 20. |
journal_no | query | no | string | Filter by journal number, e.g. 140/P-M/VII/A/2026. |
curl "https://use.apiindonesia.id/api/v1/merek/journal" \
-H "x-api-key: YOUR_API_KEY"
Example response (shortened):
{
"success": true,
"data": [
{
"app_number": "DID2026064189",
"journal_no": "140/P-M/VII/A/2026",
"journal_date": "2026-07-10",
"opposition_end": "2026-09-10",
"mark_name": "GLS Garuda Lintas Segoro + Logo",
"class": "20",
"owner": "LILY",
"filing_date": "2026-07-02"
},
{
"app_number": "JID2026033404",
"journal_no": "137/P-M/VII/A/2026",
"journal_date": "2026-07-06",
"opposition_end": "2026-09-06",
"mark_name": "Sama Juga Bohong",
"class": "41",
"owner": "PT Garuda Film",
"filing_date": "2026-04-15"
}
],
"pagination": {
"page": 1,
"limit": 5,
"total": 51
}
}
OJK Investment
Investment data from Otoritas Jasa Keuangan (OJK): legal products and apps, plus the illegal investment list.
- Legal mutual fund products
- Legal investment apps
- Illegal investment watchlist supervised by OJK
- Source: Namchee/ojk-invest-api (MIT License)
GET /api/v1/ojk/products
List legal investment products. Returns a list of legal mutual fund products registered with OJK. Supports pagination and name search.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
name | query | no | string | Search products by name (fuzzy match). |
limit | query | no | number | Items per page (max 200, default 50). |
offset | query | no | number | Number of items to skip (for pagination). |
curl "https://use.apiindonesia.id/api/v1/ojk/products" \
-H "x-api-key: YOUR_API_KEY"
Example response (shortened):
{
"data": [
{
"id": 1,
"name": "Schroder Dana Likuid",
"management": "Schroder Investment Management Indonesia",
"custodian": "PT Bank HSBC Indonesia",
"type": "Money Market"
}
],
"meta": {
"total": 2189,
"page": 1,
"per_page": 5,
"total_pages": 438
}
}
GET /api/v1/ojk/products/{id}
Investment product detail. Returns details of a single mutual fund product by ID.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | number | Product ID. |
curl "https://use.apiindonesia.id/api/v1/ojk/products/1" \
-H "x-api-key: YOUR_API_KEY"
Example response (shortened):
{
"data": {
"id": 1,
"name": "Schroder Dana Likuid",
"management": "Schroder Investment Management Indonesia",
"custodian": "PT Bank HSBC Indonesia",
"type": "Money Market"
}
}
GET /api/v1/ojk/apps
List legal investment apps. Returns a list of legal investment apps registered with OJK. Supports pagination and name search.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
name | query | no | string | Search apps by name (fuzzy match). |
limit | query | no | number | Items per page (max 200, default 50). |
offset | query | no | number | Number of items to skip (for pagination). |
curl "https://use.apiindonesia.id/api/v1/ojk/apps" \
-H "x-api-key: YOUR_API_KEY"
Example response (shortened):
{
"data": [
{
"id": 1,
"name": "Ajaib",
"url": "https://ajaib.co.id",
"owner": "Ajaib Sekuritas Asia"
}
],
"meta": {
"total": 93,
"page": 1,
"per_page": 5,
"total_pages": 19
}
}
GET /api/v1/ojk/apps/{id}
Investment app detail. Returns details of a single investment app by ID.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | number | App ID. |
curl "https://use.apiindonesia.id/api/v1/ojk/apps/1" \
-H "x-api-key: YOUR_API_KEY"
Example response (shortened):
{
"data": {
"id": 1,
"name": "Ajaib",
"url": "https://ajaib.co.id",
"owner": "Ajaib Sekuritas Asia"
}
}
GET /api/v1/ojk/illegals
List illegal investments. Returns a list of illegal investments flagged by OJK. Each entry may include aliases, addresses, phone numbers, emails, websites, entity type, activity types, and a description. Supports pagination and name search.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
name | query | no | string | Search illegal investments by name (fuzzy match). |
limit | query | no | number | Items per page (max 200, default 50). |
offset | query | no | number | Number of items to skip (for pagination). |
curl "https://use.apiindonesia.id/api/v1/ojk/illegals" \
-H "x-api-key: YOUR_API_KEY"
Example response (shortened):
{
"data": [
{
"id": 1,
"name": "PT Jelita Harmoni Mas",
"alias": [],
"address": [
"Jakarta"
],
"phone": [],
"email": [],
"web": [],
"entity_type": "Investasi Bodong",
"activity_type": [
"Penipuan"
],
"input_date": "20/01/2020",
"description": "SP1/III/INFEST/2019"
}
],
"meta": {
"total": 11278,
"page": 1,
"per_page": 3,
"total_pages": 3760
}
}
GET /api/v1/ojk/illegals/{id}
Illegal investment detail. Returns details of a single illegal investment by ID.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | number | Illegal investment ID. |
curl "https://use.apiindonesia.id/api/v1/ojk/illegals/1" \
-H "x-api-key: YOUR_API_KEY"
Example response (shortened):
{
"data": {
"id": 1,
"name": "PT Jelita Harmoni Mas",
"alias": [],
"address": [
"Jakarta"
],
"phone": [],
"email": [],
"web": [],
"entity_type": "Investasi Bodong",
"activity_type": [
"Penipuan"
],
"input_date": "20/01/2020",
"description": "SP1/III/INFEST/2019"
}
}