# Halal, BPOM, trademarks and OJK

> Documentation index for AI agents: [/llms.txt](https://docs.apiindonesia.id/llms.txt). Every page is also available as markdown: add `.md` to 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](https://docs.apiindonesia.id/authentication.md)) and return the standard [envelope](https://docs.apiindonesia.id/errors.md). A successful request costs 2 credits.

## Endpoints on this page

- [`GET /api/v1/halal`](#get-api-v1-halal): Search halal
- [`GET /api/v1/halal/{id}`](#get-api-v1-halal-id): Supervisor detail
- [`GET /api/v1/bpom`](#get-api-v1-bpom): Search products
- [`GET /api/v1/bpom/{nie}`](#get-api-v1-bpom-nie): NIE detail
- [`GET /api/v1/ojk/products`](#get-api-v1-ojk-products): List legal investment products
- [`GET /api/v1/ojk/products/{id}`](#get-api-v1-ojk-products-id): Investment product detail
- [`GET /api/v1/ojk/apps`](#get-api-v1-ojk-apps): List legal investment apps
- [`GET /api/v1/ojk/apps/{id}`](#get-api-v1-ojk-apps-id): Investment app detail
- [`GET /api/v1/ojk/illegals`](#get-api-v1-ojk-illegals): List illegal investments
- [`GET /api/v1/ojk/illegals/{id}`](#get-api-v1-ojk-illegals-id): Illegal investment detail
- [`GET /api/v1/merek/search`](#get-api-v1-merek-search): Search registered trademarks
- [`GET /api/v1/merek/{appNumber}`](#get-api-v1-merek-appnumber): Trademark detail
- [`GET /api/v1/merek/journal`](#get-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 |

```bash
curl "https://use.apiindonesia.id/api/v1/halal?q=indomie" \
  -H "x-api-key: YOUR_API_KEY"
```

Example response (shortened):

```json
{
  "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 |

```bash
curl "https://use.apiindonesia.id/api/v1/halal/C7A753BB-3282-4D57-A485-B2B724D8267C" \
  -H "x-api-key: YOUR_API_KEY"
```

Example response (shortened):

```json
{
  "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) |

```bash
curl "https://use.apiindonesia.id/api/v1/bpom?q=paracetamol" \
  -H "x-api-key: YOUR_API_KEY"
```

Example response (shortened):

```json
{
  "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 |

```bash
curl "https://use.apiindonesia.id/api/v1/bpom/DBL9424502004A1" \
  -H "x-api-key: YOUR_API_KEY"
```

Example response (shortened):

```json
{
  "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. |

```bash
curl "https://use.apiindonesia.id/api/v1/merek/search?q=garuda" \
  -H "x-api-key: YOUR_API_KEY"
```

Example response (shortened):

```json
{
  "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. |

```bash
curl "https://use.apiindonesia.id/api/v1/merek/DID2019050403" \
  -H "x-api-key: YOUR_API_KEY"
```

Example response (shortened):

```json
{
  "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. |

```bash
curl "https://use.apiindonesia.id/api/v1/merek/journal" \
  -H "x-api-key: YOUR_API_KEY"
```

Example response (shortened):

```json
{
  "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). |

```bash
curl "https://use.apiindonesia.id/api/v1/ojk/products" \
  -H "x-api-key: YOUR_API_KEY"
```

Example response (shortened):

```json
{
  "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. |

```bash
curl "https://use.apiindonesia.id/api/v1/ojk/products/1" \
  -H "x-api-key: YOUR_API_KEY"
```

Example response (shortened):

```json
{
  "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). |

```bash
curl "https://use.apiindonesia.id/api/v1/ojk/apps" \
  -H "x-api-key: YOUR_API_KEY"
```

Example response (shortened):

```json
{
  "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. |

```bash
curl "https://use.apiindonesia.id/api/v1/ojk/apps/1" \
  -H "x-api-key: YOUR_API_KEY"
```

Example response (shortened):

```json
{
  "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). |

```bash
curl "https://use.apiindonesia.id/api/v1/ojk/illegals" \
  -H "x-api-key: YOUR_API_KEY"
```

Example response (shortened):

```json
{
  "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. |

```bash
curl "https://use.apiindonesia.id/api/v1/ojk/illegals/1" \
  -H "x-api-key: YOUR_API_KEY"
```

Example response (shortened):

```json
{
  "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"
  }
}
```
