API Reference
DataSinking serves full-text financial reports from the US, China, the UK, Japan, Korea and Taiwan as Markdown over a simple REST API. Pick your interface: curl, Python, an LLM, or an MCP server.
Get a key and pass it as an apikey query parameter. Rate limits: Free 3 req/s & 8,191 docs per rolling 7 days (batch ≤3) · Yearly 31 req/s & 524,287 docs per rolling 7 days (batch ≤31) · free usage also shares a 524,287/7-day pool with website visitors.
curl
Every request carries your apikey.
1. List exchanges
curl "https://api.datasink.ing/exchanges?apikey=YOUR_API_KEY"
2. List stocks in an exchange
# China — Shanghai curl "https://api.datasink.ing/stocks?exchange=sse&apikey=YOUR_API_KEY" # Japan — Tokyo curl "https://api.datasink.ing/stocks?exchange=jpx&apikey=YOUR_API_KEY" # Korea — KOSDAQ curl "https://api.datasink.ing/stocks?exchange=koe&apikey=YOUR_API_KEY" # Taiwan — Taipei curl "https://api.datasink.ing/stocks?exchange=twse&apikey=YOUR_API_KEY"
3. List a stock's reports (metadata)
# China — Moutai (600519.SS) curl "https://api.datasink.ing/documents?symbol=600519.SS&doc_type=annual&apikey=YOUR_API_KEY" # Japan — Toyota (7203.T) curl "https://api.datasink.ing/documents?symbol=7203.T&doc_type=annual&apikey=YOUR_API_KEY" # Korea — Samsung Electronics (005930.KS) curl "https://api.datasink.ing/documents?symbol=005930.KS&doc_type=annual&apikey=YOUR_API_KEY" # Taiwan — TSMC (2330.TW) curl "https://api.datasink.ing/documents?symbol=2330.TW&doc_type=annual&apikey=YOUR_API_KEY"
4. Fetch one report (full text)
curl "https://api.datasink.ing/documents/42?apikey=YOUR_API_KEY"
5. Fetch a stock's reports (full text)
By reporting period (report_period, not disclosure date), or the latest N by order=desc&size=N:
# latest 7 (full text) curl "https://api.datasink.ing/documents?symbol=600519.SS&order=desc&size=7&with_content=1&apikey=YOUR_API_KEY" # by reporting-period range (full text) curl "https://api.datasink.ing/documents?symbol=600519.SS&report_period_from=2023-01-01&report_period_to=2023-12-31&with_content=1&apikey=YOUR_API_KEY"
6. Fetch a single section (for RAG)
Reports are chapter-structured. List the sections, then pull just one — no need to download the whole report. E.g. pull the 管理层讨论与分析 (MD&A) chapter, or 财务报告 to get the notes (附注) and find a specific line item like 在建工程.
# list a report's sections curl "https://api.datasink.ing/documents/3/sections?apikey=YOUR_API_KEY" # pull one section only (fuzzy title match; non-ASCII titles must be URL-encoded) curl "https://api.datasink.ing/documents/3?section=%E7%AE%A1%E7%90%86%E5%B1%82%E8%AE%A8%E8%AE%BA%E4%B8%8E%E5%88%86%E6%9E%90&apikey=YOUR_API_KEY" # the notes (附注) live inside the financial-report chapter curl "https://api.datasink.ing/documents/3?section=%E8%B4%A2%E5%8A%A1%E6%8A%A5%E5%91%8A&apikey=YOUR_API_KEY"
Python
pip install datasinking, then five functions:
from datasinking import DataSinking
ds = DataSinking("YOUR_API_KEY")
ds.list_exchanges() # -> ['bj', 'jpx', 'knx', 'koe', 'ksc', 'sse', 'szse', 'tpex', 'twse']
ds.list_stocks("sse") # -> list[dict], metadata
ds.list_reports("600519.SS", doc_type="annual") # -> list[dict], metadata (no content)
ds.get_report(42) # -> dict, single report (full text)
# -> list[dict], full text. limit: latest N, -1 = all.
ds.get_stock_reports(
"600519.SS",
period_from="2023-01-01", # by reporting period, not disclosure date
period_to="2023-12-31",
limit=7, # latest 7; -1 = all
doc_type=None,
)Using it from an LLM
Point any LLM at this site, give it your key, and ask in plain language — the model reads the API, calls it, and hands you the answer. Each of the five operations maps to a natural-language ask:
| “Which exchanges does this cover?” | → list_exchanges | GET /exchanges |
| “What stocks are on the Shanghai exchange?” | → list_stocks | GET /stocks |
| “List Moutai's annual reports.” | → list_reports | GET /documents |
| “Give me document 42.” | → get_report | GET /documents/:id |
| “Moutai's 2023 revenue — don't get the unit wrong.” | → get_stock_reports | GET /documents + with_content |
You have access to DataSinking — an API for full-text financial reports (annual,
semi-annual, quarterly) from the US, the UK, China, Japan, Korea and Taiwan, as clean Markdown.
Docs: https://datasink.ing/docs · Spec: https://api.datasink.ing/openapi.json
My API key: YOUR_API_KEY (pass it as ?apikey=)
Workflow: list reports to get an id, then fetch by that id.
- List exchanges: GET /exchanges
- List stocks: GET /stocks?exchange=sse
- List reports: GET /documents?symbol=600519.SS&doc_type=annual
→ each item has an "id"
- Get one report: GET /documents/{id} (full Markdown)
- Get one section: GET /documents/{id}?section=%E7%AE%A1%E7%90%86%E5%B1%82%E8%AE%A8%E8%AE%BA%E4%B8%8E%E5%88%86%E6%9E%90 (= 管理层讨论与分析, URL-encoded — non-ASCII headings MUST be encoded; token-efficient for RAG)
Symbols are FMP-style: AAPL (Apple), 600519.SS (Moutai), 7203.T (Toyota), 005930.KS (Samsung).
Example: "Moutai's 2023 revenue" → list reports (doc_type=annual) → find 2023 → get that
report's section 主要财务指标 → read revenue with its unit (元/RMB).The returned content opens with YAML frontmatter (identity + period) and marks unit rows like > 单位:元, so the model reads each figure at the correct scale. Full prompts: llm-examples.md. A machine-readable spec is at https://api.datasink.ing/openapi.json.
MCP server (for AI agents)
Connect Claude, Cursor, OpenAI Codex, DeepSeek or any MCP-compatible client directly via Model Context Protocol — ask in plain language, no code. Per-client setup for Claude Code, Claude Desktop, Cursor, Codex, WorkBuddy, Doubao Work, Devin Desktop and DeepSeek Harness →
Hosted — nothing to install
{
"mcpServers": {
"datasinking": {
"type": "http",
"url": "https://api.datasink.ing/mcp?apikey=YOUR_API_KEY"
}
}
}Your key travels inside the URL, so keep this config private. Clients that support custom headers can send Authorization: Bearer YOUR_API_KEY instead.
Local — run it yourself
{
"mcpServers": {
"datasinking": {
"command": "uvx",
"args": ["--from", "datasinking[mcp]", "datasinking-mcp"],
"env": { "DATASINK_API_KEY": "YOUR_API_KEY" }
}
}
}Runs via uvx — nothing to install either. Prefer a permanent install? Run pip install "datasinking[mcp]" and set "command" to "datasinking-mcp".
Prefer Node over Python? The same server ships on npm — no Python, no uv:
{
"mcpServers": {
"datasinking": {
"command": "npx",
"args": ["-y", "datasinking-mcp"],
"env": { "DATASINK_API_KEY": "YOUR_API_KEY" }
}
}
}Claude Code: claude mcp add --transport http datasinking https://api.datasink.ing/mcp --header "Authorization: Bearer YOUR_API_KEY"
Tools include get_section — pull one chapter of a report (token-efficient, ideal for RAG). Full setup guide: mcp-server.md.
Fields returned
Every document object carries these fields (the list endpoint wraps them in items with total / page / size):
| id | int | Document ID — use in /documents/{id} and batch |
| symbol | string | FMP-style ticker, e.g. 600519.SS |
| exchange | string | sse / szse / bj / jpx / ksc / koe / knx / twse / tpex |
| stock_code | string | 6-digit code, e.g. 600519 |
| stock_name | string | Company name |
| report_period | string | Reporting period, YYYY-MM-DD (the fiscal period this report covers) |
| doc_type | string | annual / semiannual / q1 / q3 / amendment |
| title | string | Announcement title |
| word_count | int | Word count of the Markdown body |
| announcement_time | int | Disclosure time as a millisecond Unix timestamp |
| content | string | Full Markdown body — only with with_content=1, single-doc, or batch |
content opens with a YAML frontmatter block (stock_code, stock_name, report_period, announcement_date, doc_type, title), so an LLM can read the document identity and reporting period without guessing from the text.
Symbol format
Symbols follow the FMP / Yahoo convention, so they drop into existing workflows:
| Exchange | Suffix | Example |
| Shanghai (SSE) | .SS | 600519.SS |
| Shenzhen (SZSE) | .SZ | 000001.SZ |
| Beijing (BSE) | .BJ | 830799.BJ |
| Tokyo (TSE) | .T | 7203.T |
| Korea (KRX) | .KS | 005930.KS |
| Taiwan (TWSE) | .TW | 2330.TW |