API Endpoints

Detailed reference for the Index Alpha API endpoints.

Data Scope & Schedule: Data is available from 2025-01-01 for both the Regular Market (RG) and the Negotiated Market (NG). Requests with a from date before 2025-01-01 are rejected. Older data may be available on the Enterprise plan; contact support at @neon_scale for access. Records are updated every trading day at 12:00 GMT (19:00 Asia/Jakarta).

1. Broker Summary

Retrieve aggregated daily activity for brokers on a specific stock ticker.

Endpoint: GET /stocks/broker-summary

Aggregation: Date ranges are aggregated, not per-day. A request for from=2025-01-01 to to=2025-01-31 returns one row per broker for the whole month (totals across the range), not 30 separate daily rows. Foreign flow returns a single total for the range. Request single days (from = to) if you need daily records.

Query Parameters

ParameterTypeRequiredDescription
tickerStringYesStock ticker symbol (e.g., BBCA, TLKM)
fromDateYesStart date in YYYY-MM-DD format
toDateYesEnd date in YYYY-MM-DD format
investorEnumYesType of investor. One of: all (all investors), f (foreign), d (domestic).
marketEnumNoMarket segment: RG (Regular, default), NG (Negotiated), ALL (both). NG available from 2025-01-01.

Example Request

curl -X 'GET' \
  'https://api.indexalpha.id/stocks/broker-summary?ticker=BBCA&from=2026-03-26&to=2026-03-26&investor=all' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer <your_api_token>'

Response Format

{
	"success": true,
	"data": [
		{
			"code": "SQ",
			"buy_freq": 4044,
			"buy_volume": 26837300,
			"buy_value": 185357180000,
			"sell_freq": 586,
			"sell_volume": 1499300,
			"sell_value": 10374017500,
			"buy_avg": 6906.7,
			"sell_avg": 6919.24
		},
		{
			"code": "AK",
			"buy_freq": 4355,
			"buy_volume": 16591800,
			"buy_value": 114517012500,
			"sell_freq": 5542,
			"sell_volume": 19340600,
			"sell_value": 133580562500,
			"buy_avg": 6902.02,
			"sell_avg": 6906.74
		}
	],
	"error": null
}

NG Market Example

curl -X 'GET' \
  'https://api.indexalpha.id/stocks/broker-summary?ticker=BBCA&from=2025-01-02&to=2025-01-02&investor=all&market=NG' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer <your_api_token>'

2. Batch Broker Summary (Multi-Ticker)

Retrieve aggregated broker activity for multiple stock tickers in a single HTTP request.

Endpoint: POST /stocks/broker-summary/batch

Usage Counting: Each requested ticker symbol creates 1 usage log entry against your monthly quota. For example, requesting ['BBCA', 'BBRI', 'TLKM'] consumes 3 units from your monthly limit - the same as 3 individual single-ticker calls.

Request Body Parameters

FieldTypeRequiredDescription
tickersArray[String]YesList of stock tickers (e.g. ["BBCA", "BBRI", "TLKM"]). Min 1, Max 50 tickers.
fromDateYesStart date in YYYY-MM-DD format
toDateYesEnd date in YYYY-MM-DD format
investorEnumNoInvestor type: all (default), f (foreign), d (domestic).
marketEnumNoMarket segment: RG (Regular, default), NG (Negotiated), ALL (both).

Example Request

curl -X 'POST' \
  'https://api.indexalpha.id/stocks/broker-summary/batch' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <your_api_token>' \
  -d '{
    "tickers": ["BBCA", "BBRI", "TLKM"],
    "from": "2026-03-26",
    "to": "2026-03-26",
    "investor": "all",
    "market": "RG"
  }'

Response Format

{
	"success": true,
	"data": {
		"BBCA": [
			{
				"code": "SQ",
				"buy_freq": 4044,
				"buy_volume": 26837300,
				"buy_value": 185357180000,
				"sell_freq": 586,
				"sell_volume": 1499300,
				"sell_value": 10374017500,
				"buy_avg": 6906.7,
				"sell_avg": 6919.24
			}
		],
		"BBRI": [
			{
				"code": "AK",
				"buy_freq": 1200,
				"buy_volume": 15000000,
				"buy_value": 75000000000,
				"sell_freq": 800,
				"sell_volume": 10000000,
				"sell_value": 50000000000,
				"buy_avg": 5000.0,
				"sell_avg": 5000.0
			}
		],
		"TLKM": []
	},
	"error": null
}

3. Foreign Flow

Retrieve aggregated foreign buy, sell, and net trading activity for a stock ticker across all foreign brokers.

Like broker summary, a multi-day range returns a single aggregated total, not per-day values.

Endpoint: GET /foreign-flow

Data Source: Foreign flow is calculated from the same underlying data as Broker Summary, but aggregated across all foreign brokers instead of per-broker. Foreign columns use data tagged with investor type f (foreign).

Query Parameters

ParameterTypeRequiredDescription
tickerStringYesStock ticker symbol (e.g., BBCA, TLKM)
fromDateYesStart date in YYYY-MM-DD format
toDateYesEnd date in YYYY-MM-DD format
marketEnumNoMarket segment: RG (Regular), NG (Negotiated), ALL (both, default). NG available from 2025-01-01.

Example Request

curl -X 'GET' \
  'https://api.indexalpha.id/foreign-flow?ticker=BBCA&from=2026-07-01&to=2026-07-28' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer <your_api_token>'

Response Format

{
	"success": true,
	"data": {
		"foreign_buy": 125000000000,
		"foreign_sell": 83000000000,
		"net_foreign": 42000000000
	},
	"error": null
}

4. Batch Foreign Flow (Multi-Ticker)

Retrieve aggregated foreign flow for multiple stock tickers in a single HTTP request.

Like broker summary, a multi-day range returns a single aggregated total, not per-day values.

Endpoint: POST /foreign-flow/batch

Usage Counting: Each requested ticker symbol creates 1 usage log entry against your monthly quota. For example, requesting ['BBCA', 'BBRI', 'TLKM'] consumes 3 units from your monthly limit - the same as 3 individual single-ticker calls.

Request Body Parameters

FieldTypeRequiredDescription
tickersArray[String]YesList of stock tickers (e.g. ["BBCA", "BBRI", "TLKM"]). Min 1, Max 50 tickers.
fromDateYesStart date in YYYY-MM-DD format
toDateYesEnd date in YYYY-MM-DD format
marketEnumNoMarket segment: RG (Regular), NG (Negotiated), ALL (both, default).

Example Request

curl -X 'POST' \
  'https://api.indexalpha.id/foreign-flow/batch' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <your_api_token>' \
  -d '{
    "tickers": ["BBCA", "BBRI", "TLKM"],
    "from": "2026-07-01",
    "to": "2026-07-28",
    "market": "ALL"
  }'

Response Format

{
	"success": true,
	"data": {
		"BBCA": {
			"foreign_buy": 125000000000,
			"foreign_sell": 83000000000,
			"net_foreign": 42000000000
		},
		"BBRI": {
			"foreign_buy": 45000000000,
			"foreign_sell": 52000000000,
			"net_foreign": -7000000000
		},
		"TLKM": {
			"foreign_buy": 18000000000,
			"foreign_sell": 15000000000,
			"net_foreign": 3000000000
		}
	},
	"error": null
}

5. Check Usage & Limits

Monitor your monthly call usage and remaining quota.

Endpoint: GET /usage

Example Request

curl -X 'GET' \
  'https://api.indexalpha.id/usage' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer <your_api_token>'

Response Format

{
	"success": true,
	"data": {
		"api_key": "ia_l...H_Qv",
		"key": {
			"key_id": "uuid-of-your-key",
			"key_name": "Default Key",
			"current_usage": 3,
			"monthly_limit": 25000,
			"remaining": 24997
		},
		"account": {
			"plan": "Starter",
			"current_usage": 42,
			"monthly_limit": 25000,
			"remaining": 24958,
			"period_end": "2026-08-29T00:00:00"
		}
	},
	"error": null
}

The response shows your key-level usage (key.current_usage) alongside your account-level usage (account.current_usage). The monthly quota guard is enforced at the account level - usage from all keys under the same account is aggregated. The key-level counters are informational, allowing you to monitor per-key consumption.


6. Market News (RSS)

Fetches the latest articles from Indonesian market news RSS feeds, grouped by source.

Endpoint: GET /news

Live Data: Articles are fetched from the publisher RSS feeds at request time and held only in a short 30-second cache — nothing is stored long-term. A source that is temporarily unreachable is skipped, so the response can vary between calls.

Query Parameters

None. The response includes only sources that returned at least one article; a temporarily unreachable source is simply absent. Filter client-side.

Response Format

data is an object mapping each source name to a newest-first array of articles. Only sources that returned at least one article are present. Each article contains:

FieldTypeMeaning
sourceStringSource name (e.g. CNBC-Indonesia, Stockwatch)
titleStringArticle headline (HTML stripped)
descriptionStringSummary text (HTML stripped)
linkStringURL to the full article
image_urlStringThumbnail/hero image URL, or "" when none
guidString / nullFeed unique identifier when the feed provides one
published_dateString / nullISO-8601 UTC timestamp (2026-09-02T07:30:49Z), or null when unparseable
{
	"success": true,
	"data": {
		"CNBC-Indonesia": [
			{
				"source": "CNBC-Indonesia",
				"title": "IHSG Ditutup Menguat",
				"description": "Indeks Harga Saham Gabungan ditutup menguat…",
				"link": "https://www.cnbcindonesia.com/market/…",
				"image_url": "https://…",
				"guid": "…",
				"published_date": "2026-09-02T07:30:49Z"
			}
		],
		"Stockwatch": [
			{
				"source": "Stockwatch",
				"title": "…",
				"description": "…",
				"link": "https://stockwatch.id/…",
				"image_url": "",
				"guid": null,
				"published_date": "2026-09-02T06:00:00Z"
			}
		]
	},
	"error": null
}

Sources: CNBC Indonesia, Tempo Bisnis, Detik Finance, Investing.com (Saham & Ekonomi), which appears as the two data keys Investing-Saham and Investing-Ekonomi, Stockwatch (4 category feeds merged), and Mikir Duit.

Field Reference

Every row in a broker-summary response uses the following fields:

FieldTypeMeaningUnit
codeStringBroker code (e.g. SQ, AK)-
buy_freqIntegerNumber of buy transactionstransactions
sell_freqIntegerNumber of sell transactionstransactions
buy_volumeIntegerTotal shares boughtshares
sell_volumeIntegerTotal shares soldshares
buy_valueIntegerTotal value of buysIDR
sell_valueIntegerTotal value of sellsIDR
buy_avgNumberWeighted average buy priceIDR
sell_avgNumberWeighted average sell priceIDR

Foreign-flow fields:

FieldTypeMeaningUnit
foreign_buyIntegerTotal foreign buy transaction valueIDR
foreign_sellIntegerTotal foreign sell transaction valueIDR
net_foreignIntegerNet foreign flow (foreign_buy - foreign_sell)IDR

On this page