rename directory
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
# SGX Endpoint Discovery
|
||||
|
||||
Generated: 2026-06-24T09:41:50.973290+00:00
|
||||
|
||||
|
||||
# Knowledge-Derivative Section
|
||||
|
||||
This section maps the 15 trader objectives defined in `build.md` to the discovered SGX endpoints. It indicates which endpoints appear useful as-is, which need cross-referencing, and which are blocked or returned error payloads and require further investigation. File paths are relative to `/home/thanthos/Documents/workspace/agents_workspace/app_sgx_scrapper/discovery/`.
|
||||
|
||||
## 1. Market Trend
|
||||
|
||||
**Relevant API:** `INDICES_API_URL`
|
||||
|
||||
**Remarks:** `cache/INDICES_API_URL.json` returns 854 index records. The key fields for trend monitoring are `n` (index name), `c` (change), `lp` (last price), `op` (open), `h` (high), `l` (low), `pc` (previous close), `vl` (volume/value) and `trading_time`. One of the records is the Straits Times Index (`n` = "Straits Times Index", `pid` = ".STI"), so this endpoint can directly feed the STI trend view.<br>*Update (2026-06-25):* Browser recon proved `/indices/v1.0/charts/intraday/pid/.STI/{period}?params=lp,trading_time,vl` and `/charts/historic/pid/.STI/{period}?params=...` work for intraday and daily STI trend charts.
|
||||
|
||||
## 2. Sector Taxonomy
|
||||
|
||||
**Relevant API:** `V1_SECURITIES_CPFIS_LIST_URL`
|
||||
|
||||
**Remarks:** `cache/V1_SECURITIES_CPFIS_LIST_URL.json` contains 1,285 securities and the field `Sector (SSIC Standard)` together with `Full Name`, `Market`, `Status` and `CPFIS` eligibility. This is the most direct source found for classifying SGX-listed instruments into SSIC sectors. `METADATA_API_URL` was also inspected, but its `sector` and `industry` fields were largely empty in the sampled records, so it is not currently reliable for sector taxonomy.
|
||||
|
||||
## 3. Sector Heat Maps
|
||||
|
||||
**Relevant APIs:** `INDICES_API_URL`, `SECURITIES_API_URL`, `V1_SECURITIES_CPFIS_LIST_URL`
|
||||
|
||||
**Remarks:** No single endpoint produces a ready-made sector heat map. `cache/INDICES_API_URL.json` does contain sector-themed indices (e.g. FTSE ST Industrials, FTSE ST Telecommunications, iEdge S-REIT Index) which can be used as sector-level proxies. `cache/SECURITIES_API_URL.json` provides 1,313 price records with `change_vs_pc_percentage`, `vl`/`v` (volume/value), `nc` (stock code) and `cur` (currency). By joining these prices with the SSIC sector mapping from `cache/V1_SECURITIES_CPFIS_LIST_URL.json`, an aggregate sector performance heat map can be derived.<br>*Update (2026-06-25):* Browser recon proved `https://api.sgx.com/securities/v1.1/sectorbreakdown` returns a ready-made 20-sector heat map with `change` and `changePercentage`, plus per-sector total volume/value. `THIRDPARTY_INDICES_API_URL` is accessible via `/thirdpartyindices/v1.0/chinabonds`; further sub-paths for other third-party benchmarks are still to be discovered.
|
||||
|
||||
## 4. Earnings Calendar
|
||||
|
||||
**Relevant APIs:** `V1_CORPORATE_ANNOUNCEMENTS_LIST_URL`, `ANNOUNCEMENTS_API_URL`, `MEETING_SCHEDULES_API_URL`, `CORPORATE_ACTIONS_API_URL`, `CORPORATE_INFORMATION_API_URL`, `CIRCULARS_API_URL`
|
||||
|
||||
**Remarks:** `cache/V1_CORPORATE_ANNOUNCEMENTS_LIST_URL.json` contains 2,984 announcement entries with `IssuerName`, `SecurityName`, `AnnouncementTitle`, `Date`, `Time` and `BroadcastDateTime`. Titles such as "Financial Statements" or "Results" can be filtered to build an earnings calendar. `cache/MEETING_SCHEDULES_API_URL.json` lists 27 upcoming meetings (AGMs/EGMs) with `meetingDateTime`, `issuerName` and `announcementTitle`, useful for confirming reporting dates. `cache/CORPORATE_ACTIONS_API_URL.json` includes dated corporate actions (`exDate`, `datePaid`, `dateAnnc`) and `particulars` that can contain dividend/coupon notices around earnings seasons.<br>*Update (2026-06-25):* `ANNOUNCEMENTS_API_URL` is accessible when called with an `authorizationtoken` header and the correct sub-path (`/count`, `/?periodstart=...&periodend=...&pagestart=...&pagesize=...`, `/summary/company`). This is now the preferred source for paginated, filterable earnings/announcement data. Browser recon also proved the paginated list sub-paths for `MEETING_SCHEDULES_API_URL` and `CORPORATE_INFORMATION_API_URL`, which can be joined with announcement data to confirm issuer details, meeting dates, and reporting timelines. `CIRCULARS_API_URL` (`/circulars/v1.0`) provides prospectus and supplement documents that often accompany earnings seasons and new issuance.
|
||||
|
||||
## 5. Liquidity Screen
|
||||
|
||||
**Relevant APIs:** `SECURITIES_API_URL`, `STOCKSCREENER_API_URL` (v2.0)
|
||||
|
||||
**Remarks:** `cache/SECURITIES_API_URL.json` returns 1,313 security price records with volume/value fields (`v`, `vl`), last price (`lt`), bid/ask sizes (`bv`, `sv`), board lot (`bl`) and currency (`cur`). Average daily volume can be computed by combining this snapshot with historical trade files. However, market capitalisation is not present in the original accessible endpoints.<br>*Update (2026-06-25):* Browser recon found `/stockscreener/v2.0/all?params=marketCapitalization,salesTTM,priceToEarningsRatio,dividendYield,fourWeekPricePercentChange,thirteenWeekPricePercentChange,twentySixWeekPricePercentChange,fiftyTwoWeekPricePercentChange,netProfitMargin,returnOnAvgCommonEquity,priceToCashFlowPerShareRatio,totalDebtToTotalEquityRatio,salesPercentageChange,sector,priceToBookRatio,priceCurrCode`. It returns ~701 records with `marketCapitalization`, P/E, yield, price-change windows, margins, ROE, debt/equity, sector, and price currency, which directly supports the liquidity and quant screen. `STOCKS_API_URL` (TRKD) remains unresolved.
|
||||
|
||||
## 6. Volatility (ATR%)
|
||||
|
||||
**Relevant APIs:** `V1_SECURITIES_HISTORICAL_LIST_URL`, `SECURITIES_API_URL`
|
||||
|
||||
**Remarks:** `cache/V1_SECURITIES_HISTORICAL_LIST_URL.json` does not contain OHLC data directly; instead it returns 21 daily rows with `Trade Date`, `Price WinZip File Link` and `Price File Link` pointing to downloadable `.zip`/`.dat` historical price files. These files are the source needed to calculate weekly ATR%. `cache/INDICES_API_URL.json` gives current index OHLC for the STI and sector indices. `V1_CHART_API_URL` might provide pre-computed chart data, but it returned "Not a valid request !" and requires query parameters; it is deferred.<br>*Update (2026-06-25):* Browser recon proved per-stock chart endpoints: `/securities/v1.1//charts/historic/stocks/code/{code}/{1w,1m,1y,5y}?params=trading_time,vl,lt` and `/securities/v1.1//charts/intraday/stocks/code/{code}/1d?params=...`. These can feed multi-timeframe OHLC and ATR% calculations without downloading daily `.zip` files.
|
||||
|
||||
## 7. Relative Strength
|
||||
|
||||
**Relevant APIs:** `V1_SECURITIES_HISTORICAL_LIST_URL`, `INDICES_API_URL`, `SECURITIES_API_URL`, `V1_SECURITIES_CPFIS_LIST_URL`
|
||||
|
||||
**Remarks:** Relative strength requires price histories for individual stocks, sector proxies and the STI. `cache/V1_SECURITIES_HISTORICAL_LIST_URL.json` provides download links to daily security price files, which can be used to compute stock returns. `cache/INDICES_API_URL.json` supplies current STI and sector index levels. `cache/V1_SECURITIES_CPFIS_LIST_URL.json` maps each stock to its SSIC sector so that sector-relative strength can be calculated.<br>*Update (2026-06-25):* Browser recon proved per-stock chart endpoints (`/securities/v1.1//charts/historic/stocks/code/{code}/{period}`) and index chart endpoints (`/indices/v1.0/charts/historic/pid/{pid}/{period}`). These can be used to compute stock vs sector vs STI returns over 1w/1m/1y/5y windows. No endpoint returns pre-computed relative-strength values.
|
||||
|
||||
## 8. Catalyst Flags
|
||||
|
||||
**Relevant APIs:** `V1_CORPORATE_ANNOUNCEMENTS_LIST_URL`, `ANNOUNCEMENTS_API_URL`, `CORPORATE_ACTIONS_API_URL`, `MEETING_SCHEDULES_API_URL`, `IPO_PROSPECTUS_API_URL`, `CIRCULARS_API_URL`, `NLT_API_URL`
|
||||
|
||||
**Remarks:** `cache/V1_CORPORATE_ANNOUNCEMENTS_LIST_URL.json` is the richest accessible catalyst feed, with announcement titles covering buying-ins, disclosures and corporate events. `cache/CORPORATE_ACTIONS_API_URL.json` provides dated action particulars (dividends, coupons, rights issues) tied to `ibmCode`. `cache/MEETING_SCHEDULES_API_URL.json` gives AGM/EGM dates which often coincide with strategy or results catalysts. `cache/IPO_PROSPECTUS_API_URL.json` lists new listings (`status`, `closing_date`, `name`, `url`) for IPO-related catalysts.<br>*Update (2026-06-25):* `ANNOUNCEMENTS_API_URL` (authenticated) and `IPO_PERFORMANCE_API_URL` (`?year=YYYY`) are now proven working. `IPO_PERFORMANCE_API_URL` gives first-day/post-listing performance metrics that can flag new-listing catalysts. Browser recon resolved the paginated `CORPORATE_ACTIONS_API_URL` global feed and `CIRCULARS_API_URL` (prospectus/supplement documents), both useful for dividend/rights/new-issue catalysts. `NLT_API_URL` provides large off-market derivative trades that can flag institutional positioning. Insider-buying and analyst upgrades are still not directly available from any accessible endpoint.
|
||||
|
||||
## 9. Multi-Timeframe Charts
|
||||
|
||||
**Relevant APIs:** `V1_SECURITIES_HISTORICAL_LIST_URL`, `SECURITIES_API_URL`, `INDICES_API_URL`
|
||||
|
||||
**Remarks:** Chart data is not delivered as a ready chart object. `cache/V1_SECURITIES_HISTORICAL_LIST_URL.json` provides links to historical daily price files in `.zip` and `.dat` formats. Once downloaded and parsed, monthly/weekly/daily OHLC series can be built. `V1_CHART_API_URL` would be the natural candidate for pre-rendered or raw chart data, but it returned an invalid-request message and is deferred.<br>*Update (2026-06-25):* Browser recon found both index charts (`/indices/v1.0/charts/{intraday,historic}/pid/{pid}/{period}`) and stock charts (`/securities/v1.1//charts/{intraday,historic}/stocks/code/{code}/{period}`). These support 1d intraday, 1w, 1m, 1y, and 5y historic views, enabling monthly → weekly → daily multi-timeframe analysis.
|
||||
|
||||
## 10. Fundamentals
|
||||
|
||||
**Relevant APIs:** `FINANCIAL_STATEMENT_REPORTS_API_URL`, `RATIOS_REPORTS_API_URL`, `SNAPSHOT_REPORTS_API_URL`, `STOCKSCREENER_API_URL` (v2.0), `FINANCIAL_REPORTS_API_URL`
|
||||
|
||||
**Remarks:** `cache/CORPORATE_INFORMATION_API_URL.json` only has basic company metadata (incorporation date, country, listed date, trading currency, market), and the original discovery endpoints did not expose revenue, earnings, margin, FCF or balance-sheet data.<br>*Update (2026-06-25):* Browser recon on `investors.sgx.com` uncovered a family of `api.sgx.com` v2.0 reporting endpoints:
|
||||
|
||||
- `/financialstatementreports/v2.0/balanceSheet/countryCode/SGP/stockCode/{code}?params=all`
|
||||
- `/financialstatementreports/v2.0/cashFlow/countryCode/SGP/stockCode/{code}?params=all`
|
||||
- `/financialstatementreports/v2.0/incomeStatement/countryCode/SGP/stockCode/{code}?params=all`
|
||||
- `/ratiosreports/v2.0/countryCode/SGP/stockCode/{code}?params=...` (market cap, P/E, EPS, margins, ROA/ROE, debt/equity, dividend yield, beta, 52-week range, analyst consensus, target price)
|
||||
- `/snapshotreports/v2.0/countryCode/SGP/stockCode/{code}?params=...` (enterprise value, ROE, sector/industry, reporting/traded currency)
|
||||
- `/stockscreener/v2.0/all?params=...` (cross-sectional fundamentals for ~701 stocks)
|
||||
|
||||
These endpoints provide the core inputs for fundamentals analysis. `STOCKS_API_URL` (TRKD) remains unresolved but is no longer the only candidate.<br>*Update (2026-06-25):* `FINANCIAL_REPORTS_API_URL` was manually probed and confirmed as a paginated metadata list of filed reports (`?pagestart={n}&pagesize=2000¶ms=id,companyName,documentDate,securityName,title,url`). Each record links to a `links.sgx.com` HTML detail page hosting the actual PDF. It can be used to fetch full financial statements and periodic disclosures that complement the v2.0 reporting endpoints.
|
||||
|
||||
## 11. Risk/Reward Math
|
||||
|
||||
**Relevant API:** No relevant API found.
|
||||
|
||||
**Remarks:** Entry zone, stop-loss and target calculations are derived from price history and user-defined rules. The raw inputs come from `V1_SECURITIES_HISTORICAL_LIST_URL` and `SECURITIES_API_URL`, but no endpoint computes risk/reward ratios automatically.
|
||||
|
||||
## 12. Conviction Score
|
||||
|
||||
**Relevant API:** No relevant API found.
|
||||
|
||||
**Remarks:** A conviction score is a composite metric built from technical and fundamental signals. The individual inputs would come from `SECURITIES_API_URL`, `V1_SECURITIES_HISTORICAL_LIST_URL`, `INDICES_API_URL` and `V1_CORPORATE_ANNOUNCEMENTS_LIST_URL`, but no endpoint provides a pre-computed score.
|
||||
|
||||
## 13. Currency Exposure
|
||||
|
||||
**Relevant APIs:** `CORPORATE_INFORMATION_API_URL`, `SECURITIES_API_URL`, `SNAPSHOT_REPORTS_API_URL`, `RATIOS_REPORTS_API_URL`
|
||||
|
||||
**Remarks:** `cache/CORPORATE_INFORMATION_API_URL.json` gives the country of incorporation (`country`) and the trading/registration currency is sometimes available. `cache/SECURITIES_API_URL.json` has `cur` (trading currency) per instrument.<br>*Update (2026-06-25):* Browser recon found `/snapshotreports/v2.0/countryCode/SGP/stockCode/{code}?params=reportingCurrency,tradedCurrency,currencyIdForMarketCap` and `/ratiosreports/v2.0/countryCode/SGP/stockCode/{code}?params=currencyIdForSecurityTrading,currencyIdForMarketCap,currencyIdForBalanceSheet,currencyIdForIncomeStatement,currencyIdForProfitability`. These give reporting vs. traded currency and the currency of financial-statement line items. The paginated `CORPORATE_INFORMATION_API_URL` list also exposes `tradingCurrency`, `country`, `industry`, and `listedDate` for cross-sectional currency exposure screening. Revenue-currency breakdown (SGD-reporting vs. foreign revenue) is still not directly available; it would require parsing company financial statements or segment disclosures.
|
||||
|
||||
## 14. Dividend Yield
|
||||
|
||||
**Relevant APIs:** `CORPORATE_ACTIONS_API_URL`, `RATIOS_REPORTS_API_URL`, `STOCKSCREENER_API_URL` (v2.0), `CIRCULARS_API_URL`
|
||||
|
||||
**Remarks:** `cache/CORPORATE_ACTIONS_API_URL.json` contains dated corporate action `particulars` that include dividend and coupon announcements (e.g. "Annual Coupon Rate"). It does not contain a pre-computed trailing dividend yield. Yield would need to be calculated by aggregating the last 12 months of cash dividends per stock and dividing by the last price from `cache/SECURITIES_API_URL.json`.<br>*Update (2026-06-25):* Browser recon found pre-computed dividend yield in `/ratiosreports/v2.0/countryCode/SGP/stockCode/{code}?params=dividendYield,dividendYield5YearAverage` and in `/stockscreener/v2.0/all?params=dividendYield`. The corporate-actions endpoint can also be queried per stock via `/corporateactions/v1.0?pagesize=10&pagestart=0&ibmcode={ibmcode}¶ms=id,anncType,dateAnnc,exDate,name,particulars,recDate,datePaid&order=desc&orderBy=dateAnnc` for historical dividend verification. The global `CORPORATE_ACTIONS_API_URL` feed (`/?pagestart=...&pagesize=...¶ms=id,anncType,datePaid,exDate,name,particulars,recDate`) contains all dividend/coupon records across the market. `CIRCULARS_API_URL` can surface prospectus/supplement documents around rights issues and distributions. `EVALUATED_BONDS_PRICES_API_URL` and `WHOLESALE_BONDS_API_URL` are bond endpoints and are not relevant to equity dividend yield.
|
||||
|
||||
## 15. SGX Circuit-Breaker / Liquidity Risk
|
||||
|
||||
**Relevant APIs:** `METADATA_API_URL`, `SECURITIES_API_URL`, `V1_SECURITIES_CPFIS_LIST_URL`
|
||||
|
||||
**Remarks:** `cache/METADATA_API_URL.json` has 18,204 instrument records with fields such as `cpfEligible`, `assetClass`, `sgsBond`, `leveragedProduct`, `sip` and `denominationCurrency`, which help classify instrument type and CPFIS status. `cache/SECURITIES_API_URL.json` provides volume/value (`v`, `vl`) and board lot (`bl`) for liquidity screening. `cache/V1_SECURITIES_CPFIS_LIST_URL.json` adds the `CPFIS` flag per security.<br>*Update (2026-06-25):* `https://api.sgx.com/securities/v1.1/circuitbreaker` is now proven working and returns active circuit-breaker records (empty at capture time but callable). This directly supports SGX circuit-breaker risk monitoring. Liquidity risk still relies on volume, market cap (deferred) and board lot.
|
||||
|
||||
---
|
||||
@@ -0,0 +1,25 @@
|
||||
# ANNOUNCEMENTS_API_URL
|
||||
|
||||
- **URL:** https://api.sgx.com/announcements/v1.1/
|
||||
- **Status:** 401
|
||||
- **Classification:** BLOCKED
|
||||
- **Content-Type:** application/json
|
||||
- **Content-Length:** 46 bytes
|
||||
- **Elapsed:** 0.0 s
|
||||
- **Probed at:** 2026-06-24T09:39:30.987268+00:00
|
||||
|
||||
- **Error:** HTTPError: HTTP Error 401: Unauthorized
|
||||
|
||||
- **Block reasons:** HTTP 401
|
||||
## Notes
|
||||
|
||||
Browser recon showed this endpoint is usable once the required headers and sub-paths are supplied.
|
||||
|
||||
- **Headers:** send `Origin: https://www.sgx.com` and `Referer: https://www.sgx.com/` (or the matching `investors.sgx.com` variants). The `api.sgx.com/announcements/v1.1/*` paths additionally require an `authorizationtoken` header. The token is hard-coded in the SGX frontend bundle; treat it as a credential and do not commit it in plain text.
|
||||
- **Filter / dependent calls:** call `/companylist` and `/securitylist` first to populate issuer/security filter dropdowns.
|
||||
- **Useful patterns:**
|
||||
- `/count?periodstart={ts}&periodend={ts}` — total announcements in a date window.
|
||||
- `/?periodstart={ts}&periodend={ts}&pagestart=0&pagesize=20` — paginated list.
|
||||
- `/summary/company?periodstart={ts}&cat={cat}` or `&sub={sub1,sub2,...}` — category summary (`ANNC`, `CACT`, `PLST`, `TRAD`).
|
||||
- `/securitycode?value={code}&cat=ANNC&securityCodeParams=securitycode&sub=ANNC17&pagestart=0&pagesize=250&periodstart={ts}` — per-stock announcements (used by `investors.sgx.com`).
|
||||
- Timestamp format is `yyyyMMdd_HHmmss` (e.g. `20260624_160000`). The bare `/announcements/v1.1/` path returns HTTP 401 only because the auth header is missing.
|
||||
@@ -0,0 +1,16 @@
|
||||
# CIRCULARS_API_URL
|
||||
|
||||
- **URL:** https://api.sgx.com/circulars/v1.0
|
||||
- **Status:** 200
|
||||
- **Classification:** ACCESSIBLE
|
||||
- **Content-Type:** application/json
|
||||
- **Content-Length:** 84727 bytes
|
||||
- **Elapsed:** 1.094 s
|
||||
- **Probed at:** 2026-06-24T09:39:32.631276+00:00
|
||||
## Notes
|
||||
|
||||
This endpoint returns prospectus and supplement/circular metadata when called with a sub-path or pagination.
|
||||
|
||||
- **Filter values:** `/metalist` returns `companyName` filter values.
|
||||
- **List:** `/?pagestart=0&pagesize=5` returns paginated records with `id`, `documentDate`, `prospectusType`, `subject`, `companyName`.
|
||||
- As with other `api.sgx.com` calls, include `Origin: https://www.sgx.com` and `Referer: https://www.sgx.com/`.
|
||||
@@ -0,0 +1,18 @@
|
||||
# CMS_API_URL
|
||||
|
||||
- **URL:** https://api2.sgx.com/content-api
|
||||
- **Status:** 200
|
||||
- **Classification:** ACCESSIBLE
|
||||
- **Content-Type:** application/json
|
||||
- **Content-Length:** 170 bytes
|
||||
- **Elapsed:** 0.123 s
|
||||
- **Probed at:** 2026-06-24T09:40:07.355568+00:00
|
||||
## Notes
|
||||
|
||||
This is a GraphQL-style content API on `api2.sgx.com/content-api`. A bare call returns an error because it requires a `queryId` and `variables`.
|
||||
|
||||
- **Pattern:** `https://api2.sgx.com/content-api?queryId={CMS_VERSION}:{operation}&variables={urlencoded_json}`
|
||||
- `CMS_VERSION` is taken from `appconfig.json` (currently `70f75ec90c030bab34d750ee55d74b016f70d4b6`).
|
||||
- **Operations observed on `www.sgx.com`:** `page`, `all_menus`, `alerts`, `advertisement_list`, `derivatives_products_list`, `index_list`, `market_updates_list`, `taxonomy_terms`, `we_chat_qr_validator`, `data_settlement_prices_list`, `prices_list`.
|
||||
- **`investors.sgx.com`** uses a different `queryId` prefix and the `document_list` operation (e.g. to locate the `IP-CA-TABLE` JSON).
|
||||
- CORS headers: `Origin` and `Referer` must match the calling site (`www.sgx.com` or `investors.sgx.com`).
|
||||
@@ -0,0 +1,18 @@
|
||||
# CORPORATE_ACTIONS_API_URL
|
||||
|
||||
- **URL:** https://api.sgx.com/corporateactions/v1.0
|
||||
- **Status:** 200
|
||||
- **Classification:** ACCESSIBLE
|
||||
- **Content-Type:** application/json
|
||||
- **Content-Length:** 131012 bytes
|
||||
- **Elapsed:** 0.123 s
|
||||
- **Probed at:** 2026-06-24T09:39:35.255476+00:00
|
||||
## Notes
|
||||
|
||||
The base URL returns a large payload; use sub-paths and pagination to consume it.
|
||||
|
||||
- **Filter values:** `/metalist` returns `companyName` filter values.
|
||||
- **Global paginated list:** `/?pagestart=0&pagesize=20¶ms=id,anncType,datePaid,exDate,name,particulars,recDate` (39k+ records). Increase `pagesize` as needed.
|
||||
- **Per-stock list:** `/?pagesize=10&pagestart=0&ibmcode={ibmcode}¶ms=id,anncType,dateAnnc,exDate,name,particulars,recDate,datePaid&order=desc&orderBy=dateAnnc`.
|
||||
- The `ibmcode` for a stock can be obtained from `METADATA_API_URL` or the per-stock page on `investors.sgx.com`.
|
||||
- Useful for dividend/coupon dates and rights-issue catalysts. Include `Origin`/`Referer` headers.
|
||||
@@ -0,0 +1,16 @@
|
||||
# CORPORATE_INFORMATION_API_URL
|
||||
|
||||
- **URL:** https://api.sgx.com/corporateinformation/v1.0
|
||||
- **Status:** 200
|
||||
- **Classification:** ACCESSIBLE
|
||||
- **Content-Type:** application/json
|
||||
- **Content-Length:** 340885 bytes
|
||||
- **Elapsed:** 0.158 s
|
||||
- **Probed at:** 2026-06-24T09:39:36.915775+00:00
|
||||
## Notes
|
||||
|
||||
Returns issuer profile records when paginated and projected correctly.
|
||||
|
||||
- **Filter values:** `/metalist` returns `issuerName`, `securityName`, `industry`, `country` filter lists.
|
||||
- **List:** `/?pagestart=0&pagesize=20¶ms=issuerName,securityName,industry,country,incorporationDate,listedDate,tradingCurrency,url,email`.
|
||||
- Useful for currency exposure, incorporation country, industry, and listing dates. Include `Origin`/`Referer` headers.
|
||||
@@ -0,0 +1,25 @@
|
||||
# DAILY_MARGINING_API_URL
|
||||
|
||||
- **URL:** https://api.sgx.com/dailymargining/v1.0
|
||||
- **Status:** 200
|
||||
- **Classification:** ACCESSIBLE (auth-gated)
|
||||
- **Content-Type:** application/json
|
||||
- **Content-Length:** 33 bytes
|
||||
- **Elapsed:** ~0.1 s
|
||||
- **Probed at:** 2026-06-25
|
||||
|
||||
## Notes
|
||||
|
||||
This endpoint is authentication-gated. Direct calls to the base path return:
|
||||
|
||||
```json
|
||||
{"message":"Missing Authentication Token"}
|
||||
```
|
||||
|
||||
- **No observable public consumer:** The frontend CMS route `/derivatives/daily-margining` loads as an HTML page but its CMS `page` call returns `{"data":{"route":null}}`; no JSON data API call is triggered on first load.
|
||||
- **Tested sub-paths that also fail with "Missing Authentication Token":**
|
||||
- `https://api.sgx.com/dailymargining/v1.0`
|
||||
- `https://api.sgx.com/dailymargining/v1.0/metalist`
|
||||
- **Likely requirement:** An API Gateway key or internal SGX `authorizationtoken` that is not exposed in the current public frontend bundle.
|
||||
- **Practical status:** Not usable without additional authentication research. For margining/derivatives risk context, prefer `DERIVATIVES_API_URL` (e.g. `?aggregate=true&aggregate-option=total-volume`, `?groupby=cc&category=futures`).
|
||||
- Include `Origin: https://www.sgx.com` and `Referer: https://www.sgx.com/` on any replay attempts.
|
||||
@@ -0,0 +1,17 @@
|
||||
# DERIVATIVES_API_URL
|
||||
|
||||
- **URL:** https://api.sgx.com/derivatives/v1.0
|
||||
- **Status:** 200
|
||||
- **Classification:** ACCESSIBLE
|
||||
- **Content-Type:** application/json
|
||||
- **Content-Length:** 99 bytes
|
||||
- **Elapsed:** 0.077 s
|
||||
- **Probed at:** 2026-06-24T09:39:40.202648+00:00
|
||||
## Notes
|
||||
|
||||
The bare URL returns `SGX_4000 Too much data returned, please use pagination`; the frontend never calls it directly.
|
||||
|
||||
- **Aggregate volume:** `/?aggregate=true&aggregate-option=total-volume`.
|
||||
- **Futures by commodity:** `/?groupby=cc&category=futures`.
|
||||
- **Symbol history:** `/history/symbol/{symbol}?days=10d&category=futures¶ms=base-date,total-volume,last-traded-price-abs`.
|
||||
- Use `params` to select fields and keep responses small. Include `Origin: https://www.sgx.com` and `Referer: https://www.sgx.com/`.
|
||||
@@ -0,0 +1,20 @@
|
||||
# ETF_API_URL
|
||||
|
||||
- **URL:** https://api.sgx.com/etfscreener/v1.0
|
||||
- **Status:** 403
|
||||
- **Classification:** BLOCKED
|
||||
- **Content-Type:** application/json
|
||||
- **Content-Length:** 42 bytes
|
||||
- **Elapsed:** 0.0 s
|
||||
- **Probed at:** 2026-06-24T09:39:41.800674+00:00
|
||||
|
||||
- **Error:** HTTPError: HTTP Error 403: Forbidden
|
||||
|
||||
- **Block reasons:** HTTP 403
|
||||
## Notes
|
||||
|
||||
The bare `/etfscreener/v1.0` path returns HTTP 403; a documented sub-path works.
|
||||
|
||||
- **Working sub-path:** `/documents` returns ETF factsheet/document metadata.
|
||||
- For live ETF price snapshots use `SECURITIES_API_URL` `/etfs?params=n,nc,cx,lt,c,p,vl,v,sc`.
|
||||
- Include `Origin`/`Referer` headers for `api.sgx.com` calls.
|
||||
@@ -0,0 +1,16 @@
|
||||
# EVALUATED_BONDS_PRICES_API_URL
|
||||
|
||||
- **URL:** https://api.sgx.com/evaluatedbondprices/v1.0
|
||||
- **Status:** 200
|
||||
- **Classification:** ACCESSIBLE
|
||||
- **Content-Type:** application/json
|
||||
- **Content-Length:** 244368 bytes
|
||||
- **Elapsed:** 0.107 s
|
||||
- **Probed at:** 2026-06-24T09:39:43.400544+00:00
|
||||
## Notes
|
||||
|
||||
Paginated and projected calls return evaluated bond prices.
|
||||
|
||||
- **Filter values:** `/metalist` returns `issuerName`, `securityName` filter lists.
|
||||
- **List:** `/?pagestart=0&pagesize=20¶ms=issuerName,securityName,cleanPrice,dirtyPrice,evaluatedPriceDate,bidPrice,offerPrice,yield,couponRate,maturityDate`.
|
||||
- Include `Origin`/`Referer` headers.
|
||||
@@ -0,0 +1,26 @@
|
||||
# FFA_API_URL
|
||||
|
||||
- **URL:** https://api.sgx.com/ffa
|
||||
- **Status:** 200
|
||||
- **Classification:** ACCESSIBLE (auth-gated)
|
||||
- **Content-Type:** application/json
|
||||
- **Content-Length:** 33 bytes
|
||||
- **Elapsed:** ~0.1 s
|
||||
- **Probed at:** 2026-06-25
|
||||
|
||||
## Notes
|
||||
|
||||
This endpoint is authentication-gated. Direct calls return:
|
||||
|
||||
```json
|
||||
{"message":"Missing Authentication Token"}
|
||||
```
|
||||
|
||||
- **No observable public consumer:** The frontend CMS route `/derivatives/freight-forward-agreements` returns HTTP 404, so there is no current public page driving this API.
|
||||
- **Tested sub-paths that also fail with "Missing Authentication Token":**
|
||||
- `https://api.sgx.com/ffa`
|
||||
- `https://api.sgx.com/ffa/v1.0`
|
||||
- `https://api.sgx.com/ffa/metalist`
|
||||
- **Likely requirement:** An API Gateway key or internal SGX `authorizationtoken` that is not exposed in the current public frontend bundle.
|
||||
- **Practical status:** Not usable without additional authentication research. For freight/derivatives data, prefer the working `DERIVATIVES_API_URL` endpoints.
|
||||
- Include `Origin: https://www.sgx.com` and `Referer: https://www.sgx.com/` on any replay attempts.
|
||||
@@ -0,0 +1,19 @@
|
||||
# FINANCIAL_REPORTS_API_URL
|
||||
|
||||
- **URL:** https://api.sgx.com/financialreports/v1.0
|
||||
- **Status:** 200
|
||||
- **Classification:** ACCESSIBLE
|
||||
- **Content-Type:** application/json
|
||||
- **Content-Length:**
|
||||
- **Elapsed:**
|
||||
- **Probed at:**
|
||||
## Notes
|
||||
|
||||
`FINANCIAL_REPORTS_API_URL` was exempt from the initial discovery probe and must be called paginated. Manual probing on 2026-06-25 confirmed it works with `Origin`/`Referer` headers.
|
||||
|
||||
- **Filter values:** `/metalist` returns a `companyName` list for UI filtering.
|
||||
- **List pattern:** `https://api.sgx.com/financialreports/v1.0?pagestart={n}&pagesize=2000¶ms=id,companyName,documentDate,securityName,title,url`
|
||||
- `pagestart` begins at 1 (not 0). At `pagesize=2000` the corpus is ~7 pages (13,348 records observed).
|
||||
- **Response fields:** `id`, `companyName`, `documentDate` (ms since epoch), `securityName`, `title`, `url`.
|
||||
- **Document retrieval:** each `url` is a `https://links.sgx.com/1.0.0/corporate-announcements/{id}/{hash}` HTML detail page that hosts the actual PDF attachment(s). The API returns metadata only.
|
||||
- **Captured payloads:** `adv-investigation/payloads/resp_1300_financialreports_page1.json`, `resp_1301_financialreports_page2.json`, `resp_1302_financialreports_metalist.json`.
|
||||
@@ -0,0 +1,20 @@
|
||||
# INDICES_API_URL
|
||||
|
||||
- **URL:** https://api.sgx.com/indices/v1.0/
|
||||
- **Status:** 200
|
||||
- **Classification:** ACCESSIBLE
|
||||
- **Content-Type:** application/json
|
||||
- **Content-Length:** 261413 bytes
|
||||
- **Elapsed:** 0.041 s
|
||||
- **Probed at:** 2026-06-24T09:39:45.046260+00:00
|
||||
## Notes
|
||||
|
||||
The base path returns a master list; chart and metadata sub-paths support trend analysis.
|
||||
|
||||
- **Master list:** `/` returns ~854 indices with current OHLC/change.
|
||||
- **Single index metadata:** `/pid/{pid}/` (e.g. `.STI`, `SGN50N`, `.SREIT`, `SGLC40CN`).
|
||||
- **Charts:**
|
||||
- Intraday: `/charts/intraday/pid/{pid}/{period}?params=lp,trading_time,vl`
|
||||
- Historic: `/charts/historic/pid/{pid}/{period}?params=lp,trading_time,vl`
|
||||
- Periods seen: `5d`, `1m`.
|
||||
- Use the `.STI` PID for STI trend monitoring. Include `Origin`/`Referer` headers.
|
||||
@@ -0,0 +1,16 @@
|
||||
# IPO_PERFORMANCE_API_URL
|
||||
|
||||
- **URL:** https://api.sgx.com/ipoperformance/v1.0
|
||||
- **Status:** 200
|
||||
- **Classification:** ACCESSIBLE
|
||||
- **Content-Type:** application/json
|
||||
- **Content-Length:** 80 bytes
|
||||
- **Elapsed:** 0.319 s
|
||||
- **Probed at:** 2026-06-24T09:39:48.323148+00:00
|
||||
## Notes
|
||||
|
||||
The bare URL returns `SGX_4016 Invalid or empty parameter`; it requires a date/identifier parameter.
|
||||
|
||||
- **Filter dropdowns:** `/yearlist`, `/issuerlist`, `/companylist`.
|
||||
- **Performance data:** `/?year=2026` (replace with the desired year).
|
||||
- Useful for first-day/post-listing catalyst flags. Include `Origin`/`Referer` headers.
|
||||
@@ -0,0 +1,16 @@
|
||||
# IPO_PROSPECTUS_API_URL
|
||||
|
||||
- **URL:** https://api.sgx.com/ipoprospectus/v1.0/
|
||||
- **Status:** 200
|
||||
- **Classification:** ACCESSIBLE
|
||||
- **Content-Type:** application/json
|
||||
- **Content-Length:** 820312 bytes
|
||||
- **Elapsed:** 0.134 s
|
||||
- **Probed at:** 2026-06-24T09:39:50.160865+00:00
|
||||
## Notes
|
||||
|
||||
The base path returns data only when a closing-time parameter is supplied.
|
||||
|
||||
- **Pattern:** `/?closing_time={yyyyMMdd_HHmmss}` (e.g. `closing_time=20260624_160000`).
|
||||
- Returns open/closed IPO issues with `status`, `closing_date`, `name`, `url`.
|
||||
- Include `Origin`/`Referer` headers.
|
||||
@@ -0,0 +1,16 @@
|
||||
# MEETING_SCHEDULES_API_URL
|
||||
|
||||
- **URL:** https://api.sgx.com/meetingschedules/v1.0
|
||||
- **Status:** 200
|
||||
- **Classification:** ACCESSIBLE
|
||||
- **Content-Type:** application/json
|
||||
- **Content-Length:** 12452 bytes
|
||||
- **Elapsed:** 1.764 s
|
||||
- **Probed at:** 2026-06-24T09:39:51.856458+00:00
|
||||
## Notes
|
||||
|
||||
Paginated sub-paths return AGM/EGM schedules.
|
||||
|
||||
- **Filter values:** `/metalist` returns `issuerName`, `securityName`, `anncType` filter lists.
|
||||
- **List:** `/?pagestart=0&pagesize=20¶ms=issuerName,securityName,meetingDateTime,anncType,anncTitle,recDateTime`.
|
||||
- Useful for confirming reporting dates around earnings season. Include `Origin`/`Referer` headers.
|
||||
@@ -0,0 +1,16 @@
|
||||
# METADATA_API_URL
|
||||
|
||||
- **URL:** https://api.sgx.com/marketmetadata/v2
|
||||
- **Status:** 200
|
||||
- **Classification:** ACCESSIBLE
|
||||
- **Content-Type:** application/json
|
||||
- **Content-Length:** 8183039 bytes
|
||||
- **Elapsed:** 0.049 s
|
||||
- **Probed at:** 2026-06-24T09:39:55.146602+00:00
|
||||
## Notes
|
||||
|
||||
`/marketmetadata/v2` is the instrument master (~11 MB uncompressed). It is the authoritative mapping of symbols, names, listing status, currencies, board lots, etc.
|
||||
|
||||
- **Single-stock scope:** `/?stock-code={code}` can be appended to narrow the response (observed on `investors.sgx.com`).
|
||||
- While `METADATA_API_URL` is the best instrument master, the `sector`/`industry` fields were largely empty in the sampled records; use `V1_SECURITIES_CPFIS_LIST_URL` for SSIC sector taxonomy and `SECURITIES_API_URL` for live price fields.
|
||||
- Include `Origin`/`Referer` headers.
|
||||
@@ -0,0 +1,16 @@
|
||||
# NLT_API_URL
|
||||
|
||||
- **URL:** https://api.sgx.com/negotiatedlargetrades/v1.0
|
||||
- **Status:** 200
|
||||
- **Classification:** ACCESSIBLE
|
||||
- **Content-Type:** application/json
|
||||
- **Content-Length:** 70620 bytes
|
||||
- **Elapsed:** 0.072 s
|
||||
- **Probed at:** 2026-06-24T09:39:56.918986+00:00
|
||||
## Notes
|
||||
|
||||
Negotiated Large Trades are available via simple pagination.
|
||||
|
||||
- **Pattern:** `/?pagestart=0&pagesize=20`.
|
||||
- Response fields include `contractCode`, `instrumentGroup`, `category`, `month`, `year`, `strikePrice`, `quantity`, `businessDate`, `tradedDate`, `clearedOnDate`, `premium`, `session`.
|
||||
- Useful for detecting institutional derivative positioning. Include `Origin`/`Referer` headers.
|
||||
@@ -0,0 +1,27 @@
|
||||
# SECURITIES_API_URL
|
||||
|
||||
- **URL:** https://api.sgx.com/securities/v1.1
|
||||
- **Status:** 200
|
||||
- **Classification:** ACCESSIBLE
|
||||
- **Content-Type:** application/json
|
||||
- **Content-Length:** 929855 bytes
|
||||
- **Elapsed:** 0.106 s
|
||||
- **Probed at:** 2026-06-24T09:39:58.517503+00:00
|
||||
## Notes
|
||||
|
||||
This is the primary market-data endpoint. The frontend never calls the bare base URL; it appends resource paths and `params` projections.
|
||||
|
||||
- **Market aggregates:** `/aggregate/`, `/aggregate/volume?securitytype=stocks`, `/aggregate/value?securitytype=stocks`.
|
||||
- **Sector heat map:** `/sectorbreakdown` (20 SSIC sectors with `change`/`changePercentage`).
|
||||
- **Circuit breakers:** `/circuitbreaker`.
|
||||
- **Top movers:** `/advancers/{stocks,reits,etfs,structuredwarrants,dlcertificates}/{N}/v?params=...`.
|
||||
- **ETF snapshot:** `/etfs?params=n,nc,cx,lt,c,p,vl,v,sc`.
|
||||
- **Full screener:** `/?excludetypes=bonds&pagestart=0&pagesize=500&sort=vl&sortdir=desc¶ms=...`.
|
||||
- **Reference snapshot:** `/?params=nc,n,type,ls,m,sc,bl,sip,ex,ej,clo,cr,cur,el,r,i,cc,ig,lf`.
|
||||
- **Full quote snapshot:** `/?params=nc,adjusted-vwap,bond_accrued_interest,bond_clean_price,bond_dirty_price,bond_date,b,bv,p,c,change_vs_pc,change_vs_pc_percentage,cx,cn,dp,dpc,du,ed,fn,h,iiv,iopv,lt,l,o,p_,pv,ptd,s,sv,trading_time,v_,v,vl,vwap,vwap-currency`.
|
||||
- **Per-stock quote:** `/stocks/code/{code}?ts={timestamp}`.
|
||||
- **Stock charts (use these instead of `V1_CHART_API_URL`):**
|
||||
- `/charts/historic/stocks/code/{code}/{1w,1m,1y,5y}?params=trading_time,vl,lt`
|
||||
- `/charts/intraday/stocks/code/{code}/1d?params=trading_time,vl,lt`
|
||||
- **Bond endpoints:** `/bonds?params=...`, `/retailbonds/code/{code}?params=...`, `/retailpreferenceshares/code/{code}?params=...`, `/charts/historic/retailbonds/code/{code}/{period}?params=...`.
|
||||
- Always include `Origin: https://www.sgx.com` and `Referer: https://www.sgx.com/`.
|
||||
@@ -0,0 +1,23 @@
|
||||
# STOCKS_API_URL
|
||||
|
||||
- **URL:** https://apitrkd.trkd-hs.com/apitrkd/api/
|
||||
- **Status:** 500
|
||||
- **Classification:** BLOCKED
|
||||
- **Content-Type:** application/json
|
||||
- **Content-Length:** 146 bytes
|
||||
- **Elapsed:** 0.0 s
|
||||
- **Probed at:** 2026-06-24T09:40:00.183696+00:00
|
||||
|
||||
- **Error:** HTTPError: HTTP Error 500: Internal Server Error
|
||||
|
||||
- **Block reasons:** HTTP 500
|
||||
## Notes
|
||||
|
||||
`STOCKS_API_URL` points to the Refinitiv/TRKD host (`apitrkd.trkd-hs.com/apitrkd/api/`). Direct calls return HTTP 500, likely because required query parameters or a subscription token are missing.
|
||||
|
||||
- Browser recon found equivalent fundamentals, market cap, and quant data on SGX-hosted v2.0 endpoints instead:
|
||||
- `/stockscreener/v2.0/all?params=...`
|
||||
- `/ratiosreports/v2.0/countryCode/SGP/stockCode/{code}?params=...`
|
||||
- `/snapshotreports/v2.0/countryCode/SGP/stockCode/{code}?params=...`
|
||||
- `/financialstatementreports/v2.0/{balanceSheet,cashFlow,incomeStatement}/countryCode/SGP/stockCode/{code}?params=all`
|
||||
- Until the TRKD parameter contract is identified, prefer the v2.0 endpoints above.
|
||||
@@ -0,0 +1,16 @@
|
||||
# STRUCTURED_PRODUCTS_API_URL
|
||||
|
||||
- **URL:** https://api.sgx.com/marketmetadata/v2/structure-warrants
|
||||
- **Status:** 200
|
||||
- **Classification:** ACCESSIBLE
|
||||
- **Content-Type:** application/json
|
||||
- **Content-Length:** 870572 bytes
|
||||
- **Elapsed:** 0.448 s
|
||||
- **Probed at:** 2026-06-24T09:40:03.735357+00:00
|
||||
## Notes
|
||||
|
||||
`/marketmetadata/v2/structure-warrants` returns structured-warrant instrument metadata.
|
||||
|
||||
- **Pattern:** `/?pagestart=0&pagesize=...` (1,183 records observed).
|
||||
- The corresponding CMS route `/derivatives/structured-products` is a 404, but the API endpoint works directly.
|
||||
- Include `Origin`/`Referer` headers.
|
||||
@@ -0,0 +1,20 @@
|
||||
# THIRDPARTY_INDICES_API_URL
|
||||
|
||||
- **URL:** https://api.sgx.com/thirdpartyindices/v1.0/
|
||||
- **Status:** 403
|
||||
- **Classification:** BLOCKED
|
||||
- **Content-Type:** application/json
|
||||
- **Content-Length:** 42 bytes
|
||||
- **Elapsed:** 0.0 s
|
||||
- **Probed at:** 2026-06-24T09:39:46.621254+00:00
|
||||
|
||||
- **Error:** HTTPError: HTTP Error 403: Forbidden
|
||||
|
||||
- **Block reasons:** HTTP 403
|
||||
## Notes
|
||||
|
||||
The bare `/thirdpartyindices/v1.0/` path returns HTTP 403; a known sub-path works.
|
||||
|
||||
- **Working sub-path:** `/chinabonds` returns ChinaBond index data.
|
||||
- Other third-party benchmark sub-paths (e.g. FTSE, MSCI, iEdge) remain to be discovered.
|
||||
- Include `Origin`/`Referer` headers.
|
||||
@@ -0,0 +1,18 @@
|
||||
# V1_CHART_API_URL
|
||||
|
||||
- **URL:** https://api3.sgx.com/JsonRead/chartdata
|
||||
- **Status:** 200
|
||||
- **Classification:** ACCESSIBLE
|
||||
- **Content-Type:** text/plain
|
||||
- **Content-Length:** 22 bytes
|
||||
- **Elapsed:** 0.293 s
|
||||
- **Probed at:** 2026-06-24T09:41:13.898403+00:00
|
||||
## Notes
|
||||
|
||||
`https://api3.sgx.com/JsonRead/chartdata` still returns `Not a valid request !` for all guessed parameters (`qryId`, `code`, `noCache`).
|
||||
|
||||
- The current `www.sgx.com` frontend does not appear to call this endpoint.
|
||||
- **Use the modern chart endpoints instead:**
|
||||
- `SECURITIES_API_URL`: `/charts/historic/stocks/code/{code}/{period}` and `/charts/intraday/stocks/code/{code}/1d`.
|
||||
- `INDICES_API_URL`: `/charts/historic/pid/{pid}/{period}` and `/charts/intraday/pid/{pid}/{period}`.
|
||||
- Include `Origin`/`Referer` headers for `api3.sgx.com` calls.
|
||||
@@ -0,0 +1,20 @@
|
||||
# V1_CORPORATE_ACTIONS_DATA_URL
|
||||
|
||||
- **URL:** https://links.sgx.com/1.0.0/corporate-actions
|
||||
- **Status:** 404
|
||||
- **Classification:** BLOCKED
|
||||
- **Content-Type:** text/html
|
||||
- **Content-Length:** 1245 bytes
|
||||
- **Elapsed:** 0.0 s
|
||||
- **Probed at:** 2026-06-24T09:41:31.204871+00:00
|
||||
|
||||
- **Error:** HTTPError: HTTP Error 404: Not Found
|
||||
|
||||
- **Block reasons:** HTTP 404, unexpected HTML for API endpoint
|
||||
## Notes
|
||||
|
||||
Base path `https://links.sgx.com/1.0.0/corporate-actions` returns HTTP 404.
|
||||
|
||||
- This is a document-delivery layer, not a bulk JSON API.
|
||||
- Individual detail pages such as `https://links.sgx.com/1.0.0/corporate-actions/{id}` work as HTML pages.
|
||||
- The bulk corporate-actions feed is better obtained from `CORPORATE_ACTIONS_API_URL` (`api.sgx.com/corporateactions/v1.0`).
|
||||
@@ -0,0 +1,19 @@
|
||||
# V1_CORPORATE_ANNOUNCEMENTS_DATA_URL
|
||||
|
||||
- **URL:** https://links.sgx.com/1.0.0/corporate-announcements
|
||||
- **Status:** 404
|
||||
- **Classification:** BLOCKED
|
||||
- **Content-Type:** text/html
|
||||
- **Content-Length:** 1245 bytes
|
||||
- **Elapsed:** 0.0 s
|
||||
- **Probed at:** 2026-06-24T09:41:37.744810+00:00
|
||||
|
||||
- **Error:** HTTPError: HTTP Error 404: Not Found
|
||||
|
||||
- **Block reasons:** HTTP 404, unexpected HTML for API endpoint
|
||||
## Notes
|
||||
|
||||
Base path `https://links.sgx.com/1.0.0/corporate-announcements` returns HTTP 404.
|
||||
|
||||
- This is a document-delivery layer. Individual announcement documents use URLs like `https://links.sgx.com/1.0.0/corporate-announcements/{key}/{hash}` and return HTML/PDF.
|
||||
- For a searchable, paginated announcement feed use `ANNOUNCEMENTS_API_URL` (`api.sgx.com/announcements/v1.1/`) with the required `authorizationtoken` header.
|
||||
@@ -0,0 +1,18 @@
|
||||
# V1_CORPORATE_ANNOUNCEMENTS_LIST_URL
|
||||
|
||||
- **URL:** https://api3.sgx.com/infofeed/Apps?A=COW_CorpAnnouncement_Content&B=annccdpbuyingininfo&C_T=-1
|
||||
- **Status:** 200
|
||||
- **Classification:** ACCESSIBLE
|
||||
- **Content-Type:** text/plain; charset=iso-8859-1
|
||||
- **Content-Length:** 1053396 bytes
|
||||
- **Elapsed:** 0.778 s
|
||||
- **Probed at:** 2026-06-24T09:41:23.867132+00:00
|
||||
## Notes
|
||||
|
||||
Legacy infofeed endpoint that returns a text list of corporate announcements.
|
||||
|
||||
- **URL pattern:** `https://api3.sgx.com/infofeed/Apps?A=COW_CorpAnnouncement_Content&B=annccdpbuyingininfo&C_T=-1`
|
||||
- Contains ~3,000 entries with `IssuerName`, `SecurityName`, `AnnouncementTitle`, `Date`, `Time`, `BroadcastDateTime`.
|
||||
- Titles such as "Financial Statements" can be filtered to build an earnings calendar.
|
||||
- For a modern, filterable feed with category/sub-category filters, use `ANNOUNCEMENTS_API_URL` instead.
|
||||
- Include `Origin`/`Referer` headers.
|
||||
@@ -0,0 +1,19 @@
|
||||
# V1_CORPORATE_INFORMATION_DATA_URL
|
||||
|
||||
- **URL:** https://links.sgx.com/1.0.0/corporate-information
|
||||
- **Status:** 404
|
||||
- **Classification:** BLOCKED
|
||||
- **Content-Type:** text/html
|
||||
- **Content-Length:** 1245 bytes
|
||||
- **Elapsed:** 0.0 s
|
||||
- **Probed at:** 2026-06-24T09:41:32.931488+00:00
|
||||
|
||||
- **Error:** HTTPError: HTTP Error 404: Not Found
|
||||
|
||||
- **Block reasons:** HTTP 404, unexpected HTML for API endpoint
|
||||
## Notes
|
||||
|
||||
Base path `https://links.sgx.com/1.0.0/corporate-information` returns HTTP 404.
|
||||
|
||||
- This is a document-delivery/HTML layer; no public bulk JSON consumer was observed.
|
||||
- Use `CORPORATE_INFORMATION_API_URL` (`api.sgx.com/corporateinformation/v1.0`) for structured issuer profiles.
|
||||
@@ -0,0 +1,19 @@
|
||||
# V1_DERIVATIVES_DAILY_DATA_URL
|
||||
|
||||
- **URL:** https://links.sgx.com/1.0.0/derivatives-daily
|
||||
- **Status:** 404
|
||||
- **Classification:** BLOCKED
|
||||
- **Content-Type:** text/html
|
||||
- **Content-Length:** 1245 bytes
|
||||
- **Elapsed:** 0.0 s
|
||||
- **Probed at:** 2026-06-24T09:41:34.535236+00:00
|
||||
|
||||
- **Error:** HTTPError: HTTP Error 404: Not Found
|
||||
|
||||
- **Block reasons:** HTTP 404, unexpected HTML for API endpoint
|
||||
## Notes
|
||||
|
||||
Base path `https://links.sgx.com/1.0.0/derivatives-daily` returns HTTP 404.
|
||||
|
||||
- This is a document-delivery layer. The corresponding daily data file links are exposed by the legacy list endpoint `V1_DERIVATIVES_DAILY_LIST_URL`.
|
||||
- No public bulk JSON consumer was observed for the base `links.sgx.com` path.
|
||||
@@ -0,0 +1,17 @@
|
||||
# V1_DERIVATIVES_DAILY_LIST_URL
|
||||
|
||||
- **URL:** https://api3.sgx.com/infofeed/Apps?A=COW_Infopubdtstat_Content&B=DailyDataDownload&S_T=1&C_T=60
|
||||
- **Status:** 200
|
||||
- **Classification:** ACCESSIBLE
|
||||
- **Content-Type:** text/plain; charset=iso-8859-1
|
||||
- **Content-Length:** 24120 bytes
|
||||
- **Elapsed:** 0.096 s
|
||||
- **Probed at:** 2026-06-24T09:41:18.989845+00:00
|
||||
## Notes
|
||||
|
||||
Legacy infofeed endpoint that returns a text list of daily derivatives download links.
|
||||
|
||||
- **URL pattern:** `https://api3.sgx.com/infofeed/Apps?A=COW_Infopubdtstat_Content&B=DailyDataDownload&S_T=1&C_T=60`
|
||||
- Can be called with `&noCache={timestamp}` to defeat caching (observed in browser traffic).
|
||||
- Response contains links to daily derivatives data files that can be downloaded and parsed.
|
||||
- Include `Origin`/`Referer` headers for `api3.sgx.com`.
|
||||
@@ -0,0 +1,19 @@
|
||||
# V1_DERIVATIVES_HISTORICAL_DATA_URL
|
||||
|
||||
- **URL:** https://links.sgx.com/1.0.0/derivatives-historical
|
||||
- **Status:** 404
|
||||
- **Classification:** BLOCKED
|
||||
- **Content-Type:** text/html
|
||||
- **Content-Length:** 1245 bytes
|
||||
- **Elapsed:** 0.0 s
|
||||
- **Probed at:** 2026-06-24T09:41:36.144727+00:00
|
||||
|
||||
- **Error:** HTTPError: HTTP Error 404: Not Found
|
||||
|
||||
- **Block reasons:** HTTP 404, unexpected HTML for API endpoint
|
||||
## Notes
|
||||
|
||||
Base path `https://links.sgx.com/1.0.0/derivatives-historical` returns HTTP 404.
|
||||
|
||||
- This is a document-delivery layer. Historical derivatives file links are exposed by `V1_DERIVATIVES_HISTORICAL_LIST_URL`.
|
||||
- No public bulk JSON consumer was observed for the base path.
|
||||
@@ -0,0 +1,17 @@
|
||||
# V1_DERIVATIVES_HISTORICAL_LIST_URL
|
||||
|
||||
- **URL:** https://api3.sgx.com/infofeed/Apps?A=COW_Tickdownload_Content&B=TimeSalesData&C_T=20
|
||||
- **Status:** 200
|
||||
- **Classification:** ACCESSIBLE
|
||||
- **Content-Type:** text/plain; charset=iso-8859-1
|
||||
- **Content-Length:** 3108 bytes
|
||||
- **Elapsed:** 0.124 s
|
||||
- **Probed at:** 2026-06-24T09:41:20.613909+00:00
|
||||
## Notes
|
||||
|
||||
Legacy infofeed endpoint that returns a text list of historical derivatives time/sales download links.
|
||||
|
||||
- **URL pattern:** `https://api3.sgx.com/infofeed/Apps?A=COW_Tickdownload_Content&B=TimeSalesData&C_T=20`
|
||||
- Can be called with `&noCache={timestamp}` to defeat caching (observed in browser traffic).
|
||||
- Response points to `.dat`/`.zip` files for historical tick/trade data.
|
||||
- Include `Origin`/`Referer` headers for `api3.sgx.com`.
|
||||
@@ -0,0 +1,19 @@
|
||||
# V1_IPO_PROSPECTUS_DATA_URL
|
||||
|
||||
- **URL:** https://links.sgx.com/1.0.0/ipo-prospectus
|
||||
- **Status:** 404
|
||||
- **Classification:** BLOCKED
|
||||
- **Content-Type:** text/html
|
||||
- **Content-Length:** 1245 bytes
|
||||
- **Elapsed:** 0.0 s
|
||||
- **Probed at:** 2026-06-24T09:41:39.317221+00:00
|
||||
|
||||
- **Error:** HTTPError: HTTP Error 404: Not Found
|
||||
|
||||
- **Block reasons:** HTTP 404, unexpected HTML for API endpoint
|
||||
## Notes
|
||||
|
||||
Base path `https://links.sgx.com/1.0.0/ipo-prospectus` returns HTTP 404.
|
||||
|
||||
- This is a document-delivery layer. Live IPO prospectus/open-issue data is available from `IPO_PROSPECTUS_API_URL` (`api.sgx.com/ipoprospectus/v1.0/?closing_time=...`).
|
||||
- No public bulk JSON consumer was observed for the base path.
|
||||
@@ -0,0 +1,19 @@
|
||||
# V1_ISIN_DATA_URL
|
||||
|
||||
- **URL:** https://links.sgx.com/1.0.0/isin
|
||||
- **Status:** 404
|
||||
- **Classification:** BLOCKED
|
||||
- **Content-Type:** text/html
|
||||
- **Content-Length:** 1245 bytes
|
||||
- **Elapsed:** 0.0 s
|
||||
- **Probed at:** 2026-06-24T09:41:41.972522+00:00
|
||||
|
||||
- **Error:** HTTPError: HTTP Error 404: Not Found
|
||||
|
||||
- **Block reasons:** HTTP 404, unexpected HTML for API endpoint
|
||||
## Notes
|
||||
|
||||
Base path `https://links.sgx.com/1.0.0/isin` returns HTTP 404.
|
||||
|
||||
- This is a document-delivery layer with no observed public bulk consumer.
|
||||
- ISIN/security master data is better obtained from `METADATA_API_URL` or `V1_SECURITIES_CPFIS_LIST_URL`.
|
||||
@@ -0,0 +1,17 @@
|
||||
# V1_NEW_STRUCTURED_WARRANTS_URL
|
||||
|
||||
- **URL:** https://api3.sgx.com/JsonRead/JsonstData?qryId=RSWnew&timeout=60
|
||||
- **Status:** 200
|
||||
- **Classification:** ACCESSIBLE
|
||||
- **Content-Type:** text/plain; charset=utf-8
|
||||
- **Content-Length:** 6999 bytes
|
||||
- **Elapsed:** 0.17 s
|
||||
- **Probed at:** 2026-06-24T09:41:15.715557+00:00
|
||||
## Notes
|
||||
|
||||
Legacy endpoint that returns newly listed structured warrants data.
|
||||
|
||||
- **URL pattern:** `https://api3.sgx.com/JsonRead/JsonstData?qryId=RSWnew&timeout=60`
|
||||
- Returns text/plain payload (~7 KB).
|
||||
- For current structured-warrant metadata and prices, also consider `STRUCTURED_PRODUCTS_API_URL` and `SECURITIES_API_URL`.
|
||||
- Include `Origin`/`Referer` headers for `api3.sgx.com`.
|
||||
@@ -0,0 +1,19 @@
|
||||
# V1_PROSPECTUS_CIRCULARS_DATA_URL
|
||||
|
||||
- **URL:** https://links.sgx.com/1.0.0/prospectus-circulars
|
||||
- **Status:** 404
|
||||
- **Classification:** BLOCKED
|
||||
- **Content-Type:** text/html
|
||||
- **Content-Length:** 1245 bytes
|
||||
- **Elapsed:** 0.0 s
|
||||
- **Probed at:** 2026-06-24T09:41:29.603453+00:00
|
||||
|
||||
- **Error:** HTTPError: HTTP Error 404: Not Found
|
||||
|
||||
- **Block reasons:** HTTP 404, unexpected HTML for API endpoint
|
||||
## Notes
|
||||
|
||||
Base path `https://links.sgx.com/1.0.0/prospectus-circulars` returns HTTP 404.
|
||||
|
||||
- This is a document-delivery layer. Prospectus/circular metadata is available from `CIRCULARS_API_URL` (`api.sgx.com/circulars/v1.0`).
|
||||
- No public bulk JSON consumer was observed for the base path.
|
||||
@@ -0,0 +1,18 @@
|
||||
# V1_SECURITIES_CPFIS_LIST_URL
|
||||
|
||||
- **URL:** https://api3.sgx.com/infofeed/Apps?A=COW_App_DB&B=StocksNameByInitial&R_C=A&C_T=-1
|
||||
- **Status:** 200
|
||||
- **Classification:** ACCESSIBLE
|
||||
- **Content-Type:** text/plain; charset=iso-8859-1
|
||||
- **Content-Length:** 219003 bytes
|
||||
- **Elapsed:** 0.242 s
|
||||
- **Probed at:** 2026-06-24T09:41:27.817865+00:00
|
||||
## Notes
|
||||
|
||||
Legacy infofeed endpoint that returns a list of securities and their CPFIS/SSIC classification.
|
||||
|
||||
- **URL pattern:** `https://api3.sgx.com/infofeed/Apps?A=COW_App_DB&B=StocksNameByInitial&R_C=A&C_T=-1`
|
||||
- Contains 1,285 securities with fields including `Full Name`, `Market`, `Status`, `CPFIS`, and `Sector (SSIC Standard)`.
|
||||
- This is the most direct source found for SSIC sector taxonomy; combine with `SECURITIES_API_URL` price data to build sector heat maps.
|
||||
- The `R_C=A` parameter may be intended to iterate by initial; `C_T=-1` appears to request all records.
|
||||
- Include `Origin`/`Referer` headers for `api3.sgx.com`.
|
||||
@@ -0,0 +1,19 @@
|
||||
# V1_SECURITIES_HISTORICAL_DATA_URL
|
||||
|
||||
- **URL:** https://links.sgx.com/1.0.0/securities-historical
|
||||
- **Status:** 404
|
||||
- **Classification:** BLOCKED
|
||||
- **Content-Type:** text/html
|
||||
- **Content-Length:** 1245 bytes
|
||||
- **Elapsed:** 0.0 s
|
||||
- **Probed at:** 2026-06-24T09:41:43.567113+00:00
|
||||
|
||||
- **Error:** HTTPError: HTTP Error 404: Not Found
|
||||
|
||||
- **Block reasons:** HTTP 404, unexpected HTML for API endpoint
|
||||
## Notes
|
||||
|
||||
Base path `https://links.sgx.com/1.0.0/securities-historical` returns HTTP 404.
|
||||
|
||||
- This is a document-delivery layer. Bulk historical security price file links are exposed by `V1_SECURITIES_HISTORICAL_LIST_URL`.
|
||||
- For OHLC chart data without parsing `.zip`/`.dat` files, prefer the modern chart endpoints on `SECURITIES_API_URL`.
|
||||
@@ -0,0 +1,18 @@
|
||||
# V1_SECURITIES_HISTORICAL_LIST_URL
|
||||
|
||||
- **URL:** https://api3.sgx.com/infofeed/Apps?A=COW_Prices_Content&B=SecuritiesHistoricalPrice&C_T=20
|
||||
- **Status:** 200
|
||||
- **Classification:** ACCESSIBLE
|
||||
- **Content-Type:** text/plain; charset=iso-8859-1
|
||||
- **Content-Length:** 15759 bytes
|
||||
- **Elapsed:** 0.1 s
|
||||
- **Probed at:** 2026-06-24T09:41:26.197243+00:00
|
||||
## Notes
|
||||
|
||||
Legacy infofeed endpoint that returns links to daily historical security price files.
|
||||
|
||||
- **URL pattern:** `https://api3.sgx.com/infofeed/Apps?A=COW_Prices_Content&B=SecuritiesHistoricalPrice&C_T=20`
|
||||
- Response rows contain `Trade Date`, `Price WinZip File Link`, and `Price File Link` pointing to `.zip`/`.dat` files.
|
||||
- These files can be downloaded to compute weekly ATR%, returns, and relative strength.
|
||||
- For convenience, the modern per-stock chart endpoints on `SECURITIES_API_URL` (`/charts/historic/stocks/code/{code}/{1w,1m,1y,5y}`) provide ready OHLC-like series.
|
||||
- Include `Origin`/`Referer` headers for `api3.sgx.com`.
|
||||
@@ -0,0 +1,19 @@
|
||||
# V1_WARRANTS_DATA_URL
|
||||
|
||||
- **URL:** https://links.sgx.com/1.0.0/warrants
|
||||
- **Status:** 404
|
||||
- **Classification:** BLOCKED
|
||||
- **Content-Type:** text/html
|
||||
- **Content-Length:** 1245 bytes
|
||||
- **Elapsed:** 0.0 s
|
||||
- **Probed at:** 2026-06-24T09:41:46.190645+00:00
|
||||
|
||||
- **Error:** HTTPError: HTTP Error 404: Not Found
|
||||
|
||||
- **Block reasons:** HTTP 404, unexpected HTML for API endpoint
|
||||
## Notes
|
||||
|
||||
Base path `https://links.sgx.com/1.0.0/warrants` returns HTTP 404.
|
||||
|
||||
- This is a document-delivery layer with no observed public bulk consumer.
|
||||
- Structured-warrant metadata is available from `STRUCTURED_PRODUCTS_API_URL` (`/marketmetadata/v2/structure-warrants`).
|
||||
@@ -0,0 +1,16 @@
|
||||
# WHOLESALE_BONDS_API_URL
|
||||
|
||||
- **URL:** https://api.sgx.com/wholesalebonds/v1.0
|
||||
- **Status:** 200
|
||||
- **Classification:** ACCESSIBLE
|
||||
- **Content-Type:** application/json
|
||||
- **Content-Length:** 39628 bytes
|
||||
- **Elapsed:** 0.071 s
|
||||
- **Probed at:** 2026-06-24T09:40:02.143083+00:00
|
||||
## Notes
|
||||
|
||||
Paginated and projected calls return wholesale bond price/yield records.
|
||||
|
||||
- **Filter values:** `/metalist` returns `issuerName`, `securityName` filter lists.
|
||||
- **List:** `/?pagestart=0&pagesize=20¶ms=issuerName,securityName,bondType,lastTradedPrice,lastTradedDate,lastTradedYield,couponRate,maturityDate,bondPriceType`.
|
||||
- Include `Origin`/`Referer` headers.
|
||||
Reference in New Issue
Block a user