Co APIidx.co.id ↗
Access IDX stock listings, trading summaries, company profiles, financial reports, IPO data, and market indices via a structured JSON API.
What is the Co API?
The IDX API provides structured access to 12 endpoints covering Indonesia Stock Exchange data, including stock listings, daily trading summaries, company profiles, financial reports, IPO information, and the IHSG composite index. The get_company_profile endpoint alone returns directors, commissioners, shareholders, subsidiaries, dividends, and bond data for any listed company by stock code.
curl -X GET 'https://api.parse.bot/scraper/3344e652-0a91-4a3c-96f6-d64b4d7f7369/get_stock_list?board=Utama' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace idx-co-id-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: IDX SDK — bounded, re-runnable; every call capped."""
from parse_apis.idx_indonesia_stock_exchange_api import (
IDX, ListingBoard, ReportPeriod, ReportType, CalendarRange,
StockNotFound,
)
idx = IDX()
# List stocks on the main board, capped at 5
for stock in idx.stocks.list(board=ListingBoard.UTAMA, limit=5):
print(stock.code, stock.name, stock.listing_date, stock.shares)
# Daily trading data — take one item and inspect it
trade = idx.dailytrades.list(limit=1).first()
if trade:
print(trade.stock_code, trade.close, trade.volume, trade.change)
# Market indices overview
for index in idx.marketindexes.list(limit=5):
print(index.index_code, index.last_val, index.chg_pct)
# Navigate to a company profile and explore sub-resources
bbca = idx.companyprofile("BBCA")
for director in bbca.directors.list(limit=3):
print(director.nama, director.jabatan)
# Financial reports with enum filters
for report in idx.financialreports.list(
stock_code="BBCA",
period=ReportPeriod.TW1,
report_type=ReportType.RDF,
limit=3,
):
print(report.kode_emiten, report.report_period, report.file_modified)
# Typed error handling — catch a not-found stock
try:
missing = idx.companyprofile("ZZZZ")
for d in missing.directors.list(limit=1):
print(d.nama)
except StockNotFound as exc:
print(f"Stock not found: {exc.stock_code}")
# Calendar events for this month
for event in idx.calendarevents.list(range=CalendarRange.MONTH, limit=3):
print(event.title, event.jenis, event.start)
print("exercised: stocks.list / dailytrades.list / marketindexes.list / "
"companyprofile.directors.list / financialreports.list / "
"calendarevents.list")
Retrieve the complete list of stocks listed on IDX. Returns stock codes, names, listing dates, share counts, and listing boards. Supports filtering by listing board. Returns all results in a single response.
| Param | Type | Description |
|---|---|---|
| board | string | Filter by listing board. |
{
"type": "object",
"fields": {
"data": "array of stock objects with Code, Name, ListingDate, Shares, ListingBoard",
"recordsTotal": "integer total number of matching stocks"
},
"sample": {
"data": {
"data": [
{
"Code": "AALI",
"Name": "Astra Agro Lestari Tbk.",
"Shares": 1924688333,
"ListingDate": "1997-12-09T00:00:00",
"ListingBoard": "Utama"
}
],
"draw": 0,
"recordsTotal": 957,
"recordsFiltered": 957
},
"status": "success"
}
}About the Co API
Stock and Market Data
The get_stock_list endpoint returns the complete IDX equity listing with fields like Code, Name, ListingDate, Shares, and ListingBoard. You can filter by board using the board parameter — accepted values include Utama, Pengembangan, Akselerasi, and Pemantauan Khusus. For intraday trading activity, get_stock_summary returns Close, Volume, Value, Frequency, High, and Low per stock, paginated via limit and start. get_market_index_summary covers the IHSG composite and all sector indices, returning PrevVal, HighVal, LowVal, LastVal, ChgVal, and ChgPct per index.
Company and Corporate Data
get_company_profiles_list provides a paginated directory of listed companies including Sektor, Industri, and PapanPencatatan. For a specific ticker, get_company_profile returns arrays for Direktur, Komisaris, PemegangSaham, and Profiles, giving you board composition and ownership structure in one call. get_financial_reports accepts parameters for year, period (tw1, tw2, tw3, audit), stock_code, and report_type (rdf for financial reports, rdt for annual reports), and returns metadata with Attachments pointing to the actual report files.
Calendar, Announcements, and IPO
get_company_calendar retrieves corporate events such as RUPS (shareholder meetings) and dividend schedules. It accepts a date in YYYYMMDD format and a range parameter (m for month, d for day). get_company_announcements returns paginated official announcements with JudulPengumuman, Kode_Emiten, TglPengumuman, and PDF attachments. get_ipo_information lists recent IPOs and relisters with TanggalPencatatan, PapanPencatatan, and SahamIPOValue, ordered by most recent listing date.
Earnings and Market Overview
get_earnings_this_week identifies companies that submitted financial reports during the current week, returning stock_code, company_name, report_period, report_year, and submitted_date. It falls back to the most recent submissions when no reports exist for the current week. get_ikhtisar_pasar returns the IDX homepage market overview including banner content and popup metadata, useful for tracking site-level market commentary.
The Co API is a managed, monitored endpoint for idx.co.id — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when idx.co.id changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official idx.co.id API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Screen all IDX-listed stocks by listing board (Utama, Pengembangan) using
get_stock_list. - Track daily price movements and trading volume for IDX equities via
get_stock_summary. - Monitor IHSG composite and sector index changes with
get_market_index_summary. - Build an ownership and board-composition dataset from
PemegangSaham,Direktur, andKomisarisfields inget_company_profile. - Aggregate quarterly and annual financial report filings by sector using
get_financial_reportswithperiodandreport_typefilters. - Alert on upcoming RUPS events and dividend announcements by polling
get_company_calendarmonthly. - Track IPO activity on the Indonesia exchange by listing date using
get_ipo_information.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does IDX (idx.co.id) have an official developer API?+
What does `get_company_profile` return beyond basic company info?+
get_company_profile returns structured arrays for Direktur (directors with name and title), Komisaris (commissioners including an Independen flag), PemegangSaham (shareholders with name, share count, and percentage), and a Profiles array with address, sector, and other registration details. You pass a stock_code like BBCA or TLKM as a required parameter.Does `get_financial_reports` support filtering by both company and reporting period simultaneously?+
stock_code, period (tw1, tw2, tw3, audit), year, and report_type (rdf or rdt) in a single request. Each result in Results includes an Attachments field with links to the actual report files.Does the API return real-time tick data or order book depth?+
Close, High, Low, Volume, Value, Frequency) via get_stock_summary, and index-level values via get_market_index_summary. You can fork this API on Parse and revise it to add an endpoint targeting intraday or order book data if the source makes it available.Is historical price data available across multiple trading days?+
get_financial_reports does allow year-based filtering for report submissions, but daily price history by date range is not covered. You can fork this API on Parse and revise it to add a historical price endpoint.