# FlowSight — Sectors API v2 Reference (learned from schema.json + docs) Source: `https://docs.sectors.app/schema.json` (OpenAPI, 70 paths) + llms.txt. Base: `https://api.sectors.app/v2/`. Auth header: `Authorization: ` (REST). v1 discontinued 2026-05-11 — all `/v1/*` return 410. Use v2 only. ## Global constraints - IDX symbol: 4 letters, optional `.jk`, case-insensitive (`BBCA`, `bbca.jk`). - Broker codes: 2-letter exchange-member IDs (`MG`, `AK`, `CC`) — valid list from `GET /v2/brokers/`. - Date windows: broker endpoints max 14 days; daily/foreign-flow/idx-total/most-traded max 90 days (clamped). Future `end` → 400. - Pagination: `limit`/`offset` where listed. `GET /v2/close/` paginated per trading day. - Credit traps (defaults are expensive — always narrow params): - `top-changes` default (2 class × 5 periods) = 10 credits → always set `classifications` + `periods`. - `company/report` default (all 8 sections) = 8 credits → always set `sections`. - `subsector/report` default (all 6 sections) = 6 credits → always set `sections`. - `financials/quarterly` = 1 credit per quarter → bound `n_quarters`. - Universe quarterly-dates full sweep ≈ 32 pages → poll incrementally with `since`. - `free-float` = 1 credit per 100 companies; filters mutually exclusive (one per request). - `news`: `extension=idx` vs `extension=mining` params mutually exclusive (400 if mixed). ## A. Screener & taxonomy (7) | Method + path | Params | Cost | FlowSight use | |---|---|---|---| | GET `/v2/companies/` | `where`, `q`, `order_by`, `desc`, `limit`≤200, `offset`, `include_query_values` (`q` overrides all) | 1 (structured) | NL + SQL screener core | | GET `/v2/free-float/` | one of `sector`/`sub_sector`/`industry`/`sub_industry` | 1/100 cos | Liquidity grade, sector sweep | | GET `/v2/subsectors/` | — | 1 | Slug source (cache daily) | | GET `/v2/industries/` | — | 1 | Slug source (cache daily) | | GET `/v2/subindustries/` | — | 1 | Slug source (cache daily) | | GET `/v2/tags/` | — | 1 | News/filing tag filter values (cache daily) | | GET `/v2/companies/list_companies_with_segments/` | — | 1 | Check segment availability (cache weekly) | ## B. Company core (7) | Method + path | Params | Cost | FlowSight use | |---|---|---|---| | GET `/v2/company/report/{symbol}/` (or `?symbol=`) | `sections` ∈ overview, valuation, future, peers, financials, dividend, management, ownership | 1/section | Fundamental agent; report sections | | GET `/v2/company/get-segments/{symbol}/` | `financial_year` | 1 | Revenue breakdown (Sankey-ready) | | GET `/v2/company/get_quarterly_financial_dates/{symbol}/` | — | 1 | Valid `report_date` values per ticker | | GET `/v2/financials/quarterly/{symbol}/` | `report_date`, `approx`, `n_quarters` | 1/quarter | Earnings trend (banks add net_interest_income, gross_loan, total_deposit) | | GET `/v2/company/corporate-actions/{symbol}/` | — | 1 | Splits/rights/warrants/AGM/dividends → Dividend Calendar, Event agent | | GET `/v2/company/shareholders-composition/{symbol}/` | `year` (≥2021) | 1 | Local vs foreign holder mix (9 categories × _l/_f) | | GET `/v2/listing-performance/{symbol}/` | — (post-May-2005 only) | 1 | IPO context (7/30/90/365d windows) | ## C. Universe polling (2) — cheap sweeps, no per-ticker loop | Method + path | Params | Cost | FlowSight use | |---|---|---|---| | GET `/v2/close/` | `date` (default latest), `limit`, `offset` | 1/page | Full-universe close, one sweep per cycle | | GET `/v2/companies/quarterly-financial-dates/` | `year`, `since`, `limit`≤30, `offset` | 1/page | Freshness polling: `since=` returns only newly-reported companies | ## D. Market & rankings (5) | Method + path | Params | Cost | FlowSight use | |---|---|---|---| | GET `/v2/daily/{symbol}/` | `start`, `end` (≤90d) | 1 | Price+volume+MCap series per watchlist ticker | | GET `/v2/idx-total/` | `start`, `end` (≤90d, ≥2021-01-01) | 1 | IHSG total MCap trend (macro context) | | GET `/v2/index-daily/{index_code}/` | lq45, idx30, kompas100, ihsg, jii70… (≥2019-01-02) | 1 | Index benchmark for beta/correlation | | GET `/v2/companies/top-changes/` | `classifications` top_gainers/top_losers, `periods` 1d/7d/14d/30d/365d, `sub_sector`, `n_stock`, `min_mcap_billion` | 1 per class×period | Momentum input (request minimal combos) | | GET `/v2/most-traded/` | `start`, `end`, `sub_sector`, `n_stock`, `adjusted` | 2 | Relative volume leaders | ## E. Brokers — the moat (7) | Method + path | Params | Cost | FlowSight use | |---|---|---|---| | GET `/v2/brokers/` | `cohort` (retail/mixed/institutional/unknown), `origin` (foreign/domestic) | 1 | Registry cache → classify every code seen | | GET `/v2/brokers/top/` | `date`, `metric`, `n_brokers`, `origin`, `cohort` | 2 | Daily broker ranking → who is active today | | GET `/v2/broker-activity/{broker_code}/` | `symbol`, `start`, `end` (≤14d) | 1 | All (stock,day) rows per broker | | GET `/v2/broker-activity/{broker_code}/top/` | `start`, `end`, `n_brokers` | 2 | Top accumulations/distributions per broker | | GET `/v2/broker-summary/{symbol}/` | `broker_code`, `start`, `end` (≤14d) | 1 | Per-broker daily rows per ticker (lots, freq, avg price) | | GET `/v2/broker-summary/{symbol}/top/` | `start`, `end`, `cohort`, `origin`, `n_brokers` | 2 | Top buyers/sellers per ticker → accumulation rule | | GET `/v2/foreign-flow/{symbol}/` | `start`, `end` (≤90d) | 1 | Net foreign inflow series → reversal + sentiment | ## F. News & events (3) | Method + path | Params | Cost | FlowSight use | |---|---|---|---| | GET `/v2/news/` | `extension`=idx, `sector`, `sub_sector`, `tags`, `symbols`, `keyword`, `start`, `end` | 1 | Sentiment agent input (incremental via `since`-style start) | | GET `/v2/filings/` | `symbol`, `sector`, `sub_sector`, `tags`, `transaction_type`, `holder_type`, `start`, `end` | 1 | Insider Tape routine | | GET `/v2/suspensions/` | `symbol`, `start`, `end` | 1 | Suspension Watch (reason + IDX PDF link) | ## G. Subsector (2) | Method + path | Params | Cost | FlowSight use | |---|---|---|---| | GET `/v2/subsector/report/{sub_sector}/` (or `?sub_sector=`) | kebab-case slug; `sections` ∈ statistics, market_cap, stability, valuation, growth, companies | 1/section | Sector rotation map, peer medians | ## H. SGX (9) — phase 2, regional extension `sgx/companies/` (where/q), `sgx/companies/top/`, `sgx/company/report[/{symbol}]`, `sgx/daily/{symbol}/`, `sgx/filings/`, `sgx/news/`, `sgx/buybacks/`, `sgx/short-sell/`, `sgx/sectors/`, `sgx/subsectors/`, `sgx/tags/`. Symbols 3–4 chars, output carries `.SI`. Killer angle: apply the same routine engine to SGX (short-sell + buybacks have no IDX equivalent). ## I. KLSE (4) — phase 2 `klse/sectors/`, `klse/companies/?sector=`, `klse/companies/top/`, `klse/company/report[/{symbol}]`. Symbols are 4-digit codes (`1155`). Basic coverage only. ## J. Mining (19) — optional commodity vertical Companies: list/detail/financials (USD millions)/ownership/performance by `slug`. Trade: commodities list, price history (≤3y range), exports (Gold/Copper/Coal), global-commodity, sales-destination by slug. Sites: index + detail (lat/long), resources-reserves index + per-province detail, total-production. Licenses: IUP/IUPK list, auctions + WIUP detail, contracts. Angle: commodity-price → mining-stock linkage routine (coal/nickel price moves → watchlist miners). ## Credit budget (per 30-min cycle, W = 20 watchlist tickers) | Step | Calls | Credits | |---|---|---| | close/ sweep | ~10 pages | ~10 | | top-changes (1 class × 2 periods) | 1 | 2 | | most-traded | 1 | 2 | | idx-total | 1 | 1 | | brokers/top | 1 | 2 | | broker-summary/top + foreign-flow + daily per ticker | 3 × 20 | 80 | | news + filings + suspensions (incremental) | 3 | 3 | | quarterly-dates universe (`since=`) | ~2 pages | ~2 | | **Total per cycle** | | **≈100** | Morning briefing extra: report (2–3 sections × 5 tickers ≈ 10–15) + corporate-actions ×5 + quarterly (n=4 ×5 = 20) ≈ 35–40. Rules: never full universe quarterly sweep without `since`; cache registry/taxonomy/tags daily; `sections` always explicit.