An insider holder roster is the keys a live body prints after meta.modules reads insider-holders.
Insider trades are GET /v1/markets/insider-trades. The roster is module=insider-holders on GET https://api.mboum.com/v1/markets/stock/modules. Send a Bearer token from Get your API key. The route is covered in the stock modules docs.
Ask for the holder roster
The sample uses ticker=AAPL. symbol is accepted in place of ticker, one company per call. Leave timeframe off. That parameter is applied to income-statement-v2, balance-sheet-v2, cashflow-statement-v2, and ratios.
Save the keys that print
The script checks the module label, then prints the symbol and the keys. A dictionary body contributes its own keys. A list contributes the keys of the first object. An empty body prints an empty key list.
import requests
url = "https://api.mboum.com/v1/markets/stock/modules"
headers = {"Authorization": "Bearer YOUR_API_KEY"}
params = {"ticker": "AAPL", "module": "insider-holders"}
response = requests.get(url, headers=headers, params=params)
response.raise_for_status()
payload = response.json()
if payload.get("success") is False:
raise SystemExit(payload.get("message"))
meta = payload["meta"]
if meta.get("modules") != "insider-holders":
raise SystemExit(meta.get("modules"))
body = payload["body"]
if isinstance(body, dict):
keys = sorted(body.keys())
elif isinstance(body, list) and body and isinstance(body[0], dict):
keys = sorted(body[0].keys())
else:
keys = []
print(meta["symbol"], meta["modules"], keys)
The sample records the label and leaves body empty.
{
"meta": {
"symbol": "AAPL",
"modules": "insider-holders"
},
"body": {}
}