Files
flowsight/docs/API-REFERENCE.md
T

113 lines
8.0 KiB
Markdown
Raw Normal View History

# 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: <raw-key>` (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.