12 endpoint
https://api.blave.orgapi-key + secret-key trong mọi requestAPI plan or Blave Agent plan/studio/market/twfutures/ohlcv/<symbol>/<schema> | Tên | Mô tả | Giá trị hợp lệ | Mặc định |
|---|---|---|---|
symbolstring · pathBắt buộc | Hợp đồng liên tục tháng gần nhất | TXF (台指期), MXF (小台), hoặc một mã hợp đồng tương lai cổ phiếu có trong ohlcv/symbols (không phân biệt hoa thường) | |
schemastring · pathBắt buộc | Khung thời gian nến | 1m, 5m, 15m, 30m, 60m, 1d | |
startstring · query | Ngày bắt đầu | YYYY-MM-DD | end − khoảng tối đa của khung thời gian đó |
endstring · query | Ngày cuối cùng | YYYY-MM-DD | hôm nay (UTC) |
Khoảng tối đa mỗi request (end − start): 1m 31 ngày · 5m 62 ngày · 15m 93 ngày · 30m 186 ngày · 60m 365 ngày · 1d 3650 ngày.
from datetime import date, timedeltadata = requests.get(f"{BASE_URL}/studio/market/twfutures/ohlcv/TXF/1d" , headers=headers, params={"start": "2024-01-01", "end": "2024-12-31"}, timeout=60).json()["data"]# [{"ts": "2024-01-01 16:00:00+00:00", "open": 17838.0, "high": 17920.0, "low": 17751.0, "close": 17798.0, "volume": 82820},# {"ts": "2024-01-02 16:00:00+00:00", "open": 17793.0, "high": 17817.0, "low": 17507.0, "close": 17546.0, "volume": 149638}, ...]def fetch_txf_chunked(schema, start, end, chunk_days=28): result, cur, end_date = [], date.fromisoformat(start), date.fromisoformat(end) while cur < end_date: chunk_end = min(cur + timedelta(days=chunk_days), end_date) resp = requests.get(f"{BASE_URL}/studio/market/twfutures/ohlcv/TXF/{schema}" , headers=headers, params={"start": cur.isoformat(), "end": chunk_end.isoformat()}, timeout=60) result.extend(resp.json().get("data", [])) cur = chunk_end return result{"symbol", "schema", "data": [...]}.
| Trường | Kiểu | Đơn vị | Mô tả |
|---|---|---|---|
ts | string | UTC ISO | Thời điểm mở nến |
open / high / low / close | float | điểm chỉ số (giá với hợp đồng tương lai cổ phiếu) | Giá |
volume | int | hợp đồng (口) | Khối lượng |
| Mã trạng thái | Nội dung phản hồi | Trường hợp |
|---|---|---|
| 400 | {"error": "Invalid symbol. Allowed: [...]"} | Mã không được hỗ trợ |
| 400 | {"error": "Invalid schema. Allowed: [...]"} | Khung thời gian không hợp lệ |
| 400 | {"error": "Invalid date format. Use YYYY-MM-DD"} | Ngày sai định dạng |
| 400 | {"error": "date_range_too_large", "message": "...", "max_days": <n>} | Khoảng thời gian vượt giới hạn |
| 503 | thông báo lỗi | Nguồn dữ liệu tạm thời không khả dụng |
TXF, MXF và hợp đồng tương lai cổ phiếu): ngày thanh toán hằng tháng — thứ Tư thứ 3 của tháng, hoặc ngày giao dịch kế tiếp nếu thứ Tư đó nghỉ — thuộc về tháng đáo hạn trong cả ngày. Hợp đồng đó giao dịch đến hết giờ đóng cửa 13:30 giờ Đài Bắc, không có nến nào mang nhãn 13:31–14:59 giờ Đài Bắc trong ngày đó, và chuỗi dữ liệu chuyển sang tháng kế tiếp từ phiên đêm 15:00 trở đi. Nến 1d của ngày thanh toán thuộc về tháng đáo hạn, nên giá đóng cửa của nó là giao dịch cuối cùng của hợp đồng đó lúc 13:30.ohlcv/<symbol>/export/<year> thay vì JSON chia đoạn.200 kèm [].MXF và CAF khi được yêu cầu toàn bộ dữ liệu đến ngày request đều trả về nến cuối cùng cũ đến vài tháng. Hãy đọc data[-1]["ts"].1d mang phần giờ 16:00:00+00:00 (00:00 giờ Đài Bắc), không phải nửa đêm UTC — hãy lấy ngày từ ts thay vì giả định dấu thời gian đã căn theo ngày.1d và trong phiên; của MXF là cho 1d. Hợp đồng tương lai cổ phiếu bắt đầu tùy từng hợp đồng — CAF có nến 1d ít nhất từ 2016-09-18./studio/market/twfutures/ohlcv/symbols Không có.
symbols = requests.get(f"{BASE_URL}/studio/market/twfutures/ohlcv/symbols" , headers=headers, timeout=30).json()["data"]{"data": ["CDF", "DHF", "MXF", "TXF", ...]} — các mã được ohlcv, ohlcv/export và bid_ask_vol chấp nhận: TXF, MXF, cùng nhóm hợp đồng tương lai cổ phiếu được chọn theo thanh khoản và có dữ liệu nến phút (phần lớn trong 231 hợp đồng tương lai cổ phiếu không được hỗ trợ).
Chỉ có các lỗi dùng chung.
/studio/market/twfutures/ohlcv/<symbol>/export/<year> | Tên | Mô tả | Giá trị hợp lệ | Mặc định |
|---|---|---|---|
symbolstring · pathBắt buộc | Mã | Như ohlcv/symbols | |
yearint · pathBắt buộc | Năm dương lịch | 2014 – năm hiện tại |
import ioimport pandas as pdr = requests.get(f"{BASE_URL}/studio/market/twfutures/ohlcv/TXF/export/2024" , headers=headers, timeout=120)raw = pd.read_parquet(io.BytesIO(r.content))raw.index = pd.to_datetime(raw["ts"], utc=True)bars_60m = (raw[["open", "high", "low", "close", "volume"]] .resample("60min") .agg(open=("open", "first"), high=("high", "max"), low=("low", "min"), close=("close", "last"), volume=("volume", "sum")) .dropna(subset=["open"]))application/octet-stream, một tệp parquet (<SYMBOL>_<year>_1m.parquet) với các cột ts, open, high, low, close, volume (nến 1m).
| Mã trạng thái | Nội dung phản hồi | Trường hợp |
|---|---|---|
| 400 | {"error": "Invalid symbol. Allowed: [...]"} | Mã không được hỗ trợ |
| 400 | {"error": "Invalid year. Allowed: 2014-<current>"} | Năm nằm ngoài phạm vi |
| 404 | {"error": "no_data", "message": "No 1m data on disk for <symbol> in <year>"} | Không có tệp |
ohlcv/<symbol>/1m, theo cùng quy tắc chuyển tháng vào ngày thanh toán (không có nến mang nhãn 13:31–14:59 giờ Đài Bắc trong ngày thanh toán hằng tháng)./studio/market/twfutures/bid_ask_vol/<symbol> | Tên | Mô tả | Giá trị hợp lệ | Mặc định |
|---|---|---|---|
symbolstring · pathBắt buộc | Mã | TXF, MXF (cả hai đã được xác nhận là trả về dữ liệu); các mã khác trong ohlcv/symbols chưa được kiểm thử | |
startstring · query | Ngày bắt đầu | YYYY-MM-DD | end − 31 ngày |
endstring · query | Ngày cuối cùng; end − start ≤ 31 ngày | YYYY-MM-DD | hôm nay (UTC) |
data = requests.get(f"{BASE_URL}/studio/market/twfutures/bid_ask_vol/TXF" , headers=headers, params={"start": "2026-05-29", "end": "2026-05-29"}, timeout=60).json()["data"]# [{"ts": "2026-05-29 00:45:00+00:00", "bid_vol": 669, "ask_vol": 447, "total_vol": 1156}, ...]{"symbol", "start", "end", "data": [...]}, các dòng 1 phút, cả phiên ngày và phiên đêm.
| Trường | Kiểu | Đơn vị | Mô tả |
|---|---|---|---|
ts | string | UTC ISO | Thời điểm mở nến |
bid_vol | int | hợp đồng | 內盤 — giao dịch khớp tại giá mua (bên bán chủ động) |
ask_vol | int | hợp đồng | 外盤 — giao dịch khớp tại giá bán (bên mua chủ động) |
total_vol | int | hợp đồng | Tổng, gồm cả các tick không phân loại được |
| Mã trạng thái | Nội dung phản hồi | Trường hợp |
|---|---|---|
| 400 | {"error": "Invalid symbol. Allowed: [...]"} | Mã không được hỗ trợ |
| 400 | {"error": "Invalid date format. Use YYYY-MM-DD"} | Ngày sai định dạng |
| 400 | {"error": "date_range_too_large", "message": "...", "max_days": 31} | Khoảng trên 31 ngày |
| 503 | thông báo lỗi | Nguồn dữ liệu tạm thời không khả dụng |
ohlcv: trong ngày thanh toán hằng tháng không có dòng nào giữa giờ đóng cửa 13:30 giờ Đài Bắc của tháng đáo hạn và giờ mở phiên đêm 15:00; từ phiên đêm trở đi các dòng thuộc tháng kế tiếp./studio/market/twfutures/daily/<futures_id> | Tên | Mô tả | Giá trị hợp lệ | Mặc định |
|---|---|---|---|
futures_idstring · pathBắt buộc | Sản phẩm | 2–6 chữ cái, không phân biệt hoa thường — ví dụ TX, MTX, TMF, TE, TF, hoặc một mã hợp đồng tương lai cổ phiếu (ví dụ CDF) | |
startstring · query | Ngày đầu tiên | YYYY-MM-DD | 1998-07-01 |
endstring · query | Ngày cuối cùng | YYYY-MM-DD | hôm nay |
data = requests.get(f"{BASE_URL}/studio/market/twfutures/daily/TX" , headers=headers, params={"start": "2026-08-01"}, timeout=60).json()["data"]{"futures_id", "data": [...]}; mỗi ngày vài dòng (mỗi tháng hợp đồng × phiên giao dịch).
| Trường | Mô tả |
|---|---|
date, futures_id | Ngày, sản phẩm |
contract_date | Tháng hợp đồng (hợp đồng spread có chứa /) |
open / max / min / close | Giá (max = cao nhất, min = thấp nhất) |
spread / spread_per | Thay đổi / % thay đổi |
volume | Hợp đồng |
settlement_price | Giá thanh toán |
open_interest | Hợp đồng mở |
trading_session | position (phiên thường) hoặc after_market (phiên đêm) |
| Mã trạng thái | Nội dung phản hồi | Trường hợp |
|---|---|---|
| 400 | {"error": "Invalid futures_id"} | Không qua kiểm tra định dạng |
| 404 | {"error": "No data found for futures_id: <id>"} | Không có dữ liệu |
| 503 | {"error": "Upstream rate limit. Please retry shortly."} | Quota upstream đã hết |
TX / MTX / TMF lấy từ dữ liệu công bố chính thức của TAIFEX.TX là sản phẩm sớm nhất; các sản phẩm khác bắt đầu muộn hơn (CDF là hợp đồng tương lai cổ phiếu)./studio/market/twfutures/stock_futures/batch/daily | Tên | Mô tả | Giá trị hợp lệ | Mặc định |
|---|---|---|---|
futures_idsstring · queryBắt buộc | Mã | Các mã hợp đồng tương lai cổ phiếu phân tách bằng dấu phẩy, ≤ 250 | |
startstring · query | Ngày đầu tiên | YYYY-MM-DD | 1998-07-01 |
endstring · query | Ngày cuối cùng | YYYY-MM-DD | hôm nay |
body = requests.get(f"{BASE_URL}/studio/market/twfutures/stock_futures/batch/daily" , headers=headers, params={"futures_ids": "CDF,DHF", "start": "2026-08-01"}, timeout=120).json(){"data": {"<futures_id>": [...rows as /daily...]}, "failed": [...]}. failed = các mã lấy dữ liệu thất bại (thử lại); mã không có trong cả hai thì thực sự không có dữ liệu.
| Mã trạng thái | Nội dung phản hồi | Trường hợp |
|---|---|---|
| 400 | {"error": "futures_ids parameter required"} | Thiếu |
| 400 | {"error": "futures_ids exceeds max 250 per request"} | Quá nhiều |
| 400 | {"error": "Invalid stock futures_id(s): [...]"} | Có mã không phải hợp đồng tương lai cổ phiếu |
| 503 | {"error": "Stock futures symbol list temporarily unavailable. Please retry shortly."} | Danh sách mã không khả dụng |
/studio/market/twfutures/institutional/<futures_id> | Tên | Mô tả | Giá trị hợp lệ | Mặc định |
|---|---|---|---|
futures_idstring · pathBắt buộc | Sản phẩm | Hợp đồng tương lai chỉ số — TX, MTX, TMF, TE, TF (tất cả đã được xác nhận là trả về dữ liệu); không hỗ trợ hợp đồng tương lai cổ phiếu | |
startstring · query | Ngày đầu tiên | YYYY-MM-DD | 2018-06-05 |
endstring · query | Ngày cuối cùng | YYYY-MM-DD | hôm nay |
data = requests.get(f"{BASE_URL}/studio/market/twfutures/institutional/TX" , headers=headers, params={"start": "2026-08-01"}, timeout=60).json()["data"]{"futures_id", "data": [...]}, 3 dòng mỗi ngày (自營商 / 投信 / 外資).
| Trường | Mô tả |
|---|---|
date, futures_id | Ngày, sản phẩm |
institutional_investors | Loại nhà đầu tư |
long_deal_volume / long_deal_amount | Giao dịch long (hợp đồng / nghìn TWD) |
short_deal_volume / short_deal_amount | Giao dịch short |
long_open_interest_balance_volume / long_open_interest_balance_amount | OI long |
short_open_interest_balance_volume / short_open_interest_balance_amount | OI short |
| Mã trạng thái | Nội dung phản hồi | Trường hợp |
|---|---|---|
| 400 | {"error": "Invalid futures_id"} | Không qua kiểm tra định dạng |
| 404 | {"error": "institutional data not available for stock futures (<id>)"} | Hợp đồng tương lai cổ phiếu |
| 404 | thông báo lỗi | Không có dữ liệu |
| 503 | giới hạn tần suất upstream / danh sách mã không khả dụng | Thử lại sau |
*_amount tính bằng nghìn TWD — suy ra từ độ lớn, upstream không ghi rõ, nhưng phép tính xác nhận điều đó: một dòng TX có long_open_interest_balance_amount 722870036 chia cho ..._volume 78292 là 9,233 mỗi hợp đồng, mà một hợp đồng TX bằng chỉ số × 200, nên 9,233 nghìn ÷ 200 ≈ 46,160 điểm chỉ số, đúng vùng chỉ số giao dịch hôm đó. Nếu đọc theo TWD thì con số sẽ nhỏ đi 1,000×./studio/market/twfutures/large_traders/<futures_id> | Tên | Mô tả | Giá trị hợp lệ | Mặc định |
|---|---|---|---|
futures_idstring · pathBắt buộc | Sản phẩm | Hợp đồng tương lai chỉ số, ví dụ TX; không hỗ trợ hợp đồng tương lai cổ phiếu | |
startstring · query | Ngày đầu tiên | YYYY-MM-DD | 1998-07-01 |
endstring · query | Ngày cuối cùng | YYYY-MM-DD | hôm nay |
data = requests.get(f"{BASE_URL}/studio/market/twfutures/large_traders/TX" , headers=headers, params={"start": "2026-08-01"}, timeout=60).json()["data"]{"futures_id", "data": [...]}, 3 dòng mỗi ngày (contract_type: tuần / tháng hiện tại / tất cả).
| Trường | Mô tả |
|---|---|
date, futures_id, name, contract_type | Ngày, sản phẩm, tên sản phẩm, phạm vi hợp đồng |
buy_top5_trader_open_interest / buy_top10_trader_open_interest (+ _per) | OI long của top 5 / 10 nhà giao dịch (hợp đồng, % toàn thị trường) |
sell_top5_trader_open_interest / sell_top10_trader_open_interest (+ _per) | OI short của top 5 / 10 nhà giao dịch |
buy_top5_specific_open_interest / buy_top10_specific_open_interest (+ _per) | OI long của top 5 / 10 pháp nhân đặc thù |
sell_top5_specific_open_interest / sell_top10_specific_open_interest (+ _per) | OI short của top 5 / 10 pháp nhân đặc thù |
market_open_interest | Tổng OI toàn thị trường |
| Mã trạng thái | Nội dung phản hồi | Trường hợp |
|---|---|---|
| 400 | {"error": "Invalid futures_id"} | Không qua kiểm tra định dạng |
| 404 | {"error": "large_traders data not available for stock futures (<id>)"} | Hợp đồng tương lai cổ phiếu |
| 404 | thông báo lỗi | Không có dữ liệu |
| 503 | giới hạn tần suất upstream / danh sách mã không khả dụng | Thử lại sau |
/studio/market/twfutures/option/institutional/<option_id> | Tên | Mô tả | Giá trị hợp lệ | Mặc định |
|---|---|---|---|
option_idstring · pathBắt buộc | Sản phẩm quyền chọn | TXO (chấp nhận 2–6 chữ cái) | |
startstring · query | Ngày đầu tiên | YYYY-MM-DD | 2018-06-05 |
endstring · query | Ngày cuối cùng | YYYY-MM-DD | hôm nay |
data = requests.get(f"{BASE_URL}/studio/market/twfutures/option/institutional/TXO" , headers=headers, params={"start": "2026-08-01"}, timeout=60).json()["data"]{"option_id", "data": [...]}, 6 dòng mỗi ngày (3 loại nhà đầu tư × call / put). Các trường: date, option_id, call_put (買權 / 賣權), institutional_investors, cùng các trường khối lượng / giá trị giao dịch và hợp đồng mở long_* / short_* giống như nhà đầu tư tổ chức hợp đồng tương lai.
400 {"error": "Invalid option_id"}; 404 không có dữ liệu; 503 giới hạn tần suất upstream.
/studio/market/twfutures/option/large_traders/<option_id> | Tên | Mô tả | Giá trị hợp lệ | Mặc định |
|---|---|---|---|
option_idstring · pathBắt buộc | Sản phẩm quyền chọn | TXO (chấp nhận 2–6 chữ cái) | |
startstring · query | Ngày đầu tiên | YYYY-MM-DD | 1998-07-01 |
endstring · query | Ngày cuối cùng | YYYY-MM-DD | hôm nay |
data = requests.get(f"{BASE_URL}/studio/market/twfutures/option/large_traders/TXO" , headers=headers, params={"start": "2026-08-01"}, timeout=60).json()["data"]{"option_id", "data": [...]}, 6 dòng mỗi ngày (call / put × tuần / tháng hiện tại / tất cả). Các trường: date, option_id, name, put_call, contract_type, cùng các trường hợp đồng mở của top-5 / top-10 nhà giao dịch và pháp nhân đặc thù giống như nhà giao dịch lớn hợp đồng tương lai, thêm market_open_interest.
400 {"error": "Invalid option_id"}; 404 không có dữ liệu; 503 giới hạn tần suất upstream.
/studio/market/twfutures/option/pcr | Tên | Mô tả | Giá trị hợp lệ | Mặc định |
|---|---|---|---|
startstring · query | Ngày đầu tiên | YYYY-MM-DD | 2001-12-24 |
endstring · query | Ngày cuối cùng | YYYY-MM-DD | hôm nay |
data = requests.get(f"{BASE_URL}/studio/market/twfutures/option/pcr" , headers=headers, params={"start": "2024-01-01", "end": "2024-12-31"}, timeout=60).json()["data"]# [{"date": "2024-01-02", "put_volume": 309583, "call_volume": 404231, "volume_pcr": 76.59,# "put_oi": 263673, "call_oi": 246495, "oi_pcr": 106.97, "pcr": 106.97},# {"date": "2024-01-03", "put_volume": 622854, "call_volume": 729547, "volume_pcr": 85.38,# "put_oi": 177203, "call_oi": 178062, "oi_pcr": 99.52, "pcr": 99.52}, ...]{"data": [...]}, mỗi ngày giao dịch một dòng.
| Trường | Đơn vị | Mô tả |
|---|---|---|
date | — | Ngày giao dịch |
put_volume / call_volume | hợp đồng | Khối lượng put / call |
volume_pcr | % | Tỷ lệ khối lượng put/call |
put_oi / call_oi | hợp đồng | Hợp đồng mở put / call |
oi_pcr | % | Tỷ lệ hợp đồng mở put/call (買賣權未平倉量比率) |
pcr | % | Giống oi_pcr (giữ lại để tương thích) |
404 không có dữ liệu; 503 kho dữ liệu chưa sẵn sàng hoặc giới hạn tần suất upstream.
/studio/market/twfutures/carrying_cost/<identity> Ước tính của Blave về giá vốn bình quân của vị thế ròng hợp đồng tương lai TAIEX của một tổ chức, kèm lãi/lỗ chưa thực hiện và đã thực hiện. Đây là ước tính từ số liệu tổng hợp hằng ngày, không phải các lệnh khớp thực tế của tổ chức đó.
Phương pháp:
scope=all), hoặc chỉ TX (scope=tx).| Tên | Mô tả | Giá trị hợp lệ | Mặc định |
|---|---|---|---|
identitystring · pathBắt buộc | 外資 / 投信 / 自營商 | foreign, investment_trust, dealer | |
startstring · query | Ngày giao dịch đầu tiên, bao gồm cả ngày đó | YYYY-MM-DD | 2023-10-18 (toàn bộ lịch sử) |
endstring · query | Ngày giao dịch cuối cùng, bao gồm cả ngày đó | YYYY-MM-DD | hôm nay |
scopestring · query | all = TX + MTX + TMF quy đổi theo hợp đồng TX; tx = chỉ 大台 (cơ sở mà phần lớn các trang Đài Loan trích dẫn) | all, tx | all |
Sổ ghi luôn chạy từ đầu lịch sử đã lưu; start / end chỉ cắt cửa sổ, nên cùng một ngày có cùng giá trị dù bạn yêu cầu cửa sổ nào.
body = requests.get(f"{BASE_URL}/studio/market/twfutures/carrying_cost/foreign" , headers=headers, params={"start": "2026-10-06"}, timeout=60).json()rows = body["data"]# Live capture 2026-10-07 (scope=all):# {"identity": "foreign", "scope": "all", "data": [# {"date": "2026-10-06", "net_open_interest": -78570.7, "net_open_interest_change": -3923.5,# "cost": 46527.57, "txf_close": 50060.0, "mark_price": 50088.51,# "unrealized_pnl": -55957022956, "realized_pnl": -5893982992, "total_pnl": -61851005948,# "cycle_start": "2026-09-16"},# {"date": "2026-10-07", "net_open_interest": -78435.8, "net_open_interest_change": 134.9,# "cost": 46527.57, "txf_close": 49979.0, "mark_price": 49974.38,# "unrealized_pnl": -54070636128, "realized_pnl": -5988669182, "total_pnl": -60059305310,# "cycle_start": "2026-09-16"}]}gap = rows[-1]["txf_close"] - rows[-1]["cost"] # points the market is above (+) / below (−) their cost{"identity", "scope", "data": [...]}, mỗi ngày giao dịch một dòng, cũ nhất → mới nhất; "stale": true chỉ được thêm khi bản sao của máy chủ chậm hơn ngày công bố gần nhất của TAIFEX (dòng mới nhất có thể bị thiếu).
| Trường | Kiểu | Đơn vị | Mô tả |
|---|---|---|---|
date | string | — | Ngày giao dịch (giờ Đài Bắc) |
net_open_interest | float | hợp đồng quy đổi theo TX | OI long − OI short (âm = short ròng) |
net_open_interest_change | float | hợp đồng | Thay đổi so với ngày giao dịch trước |
cost | float | null | điểm chỉ số | Giá vốn bình quân gia quyền của vị thế ròng; null khi không có vị thế |
txf_close | float | null | điểm chỉ số | Giá đóng cửa phiên ngày của TX tháng gần nhất (hợp đồng đáo hạn bị bỏ qua trong ngày thanh toán) |
mark_price | float | null | điểm chỉ số | Mức định giá vị thế của TAIFEX, theo giá thanh toán |
unrealized_pnl | int | TWD | (mark − giá vốn) × số hợp đồng ròng × 200 |
realized_pnl | int | TWD | Đã thực hiện kể từ cycle_start; đặt lại về 0 vào mỗi ngày thanh toán |
total_pnl | int | TWD | unrealized_pnl + realized_pnl |
cycle_start | string | — | Ngày thanh toán mở ra chu kỳ hiện tại |
| Mã trạng thái | Nội dung phản hồi | Trường hợp |
|---|---|---|
| 400 | {"error": "Invalid identity. Allowed: ['dealer', 'foreign', 'investment_trust']"} | identity không xác định |
| 400 | {"error": "Invalid scope. Allowed: ['all', 'tx']"} | scope không xác định |
| 400 | {"error": "Invalid start date, expected YYYY-MM-DD"} (hoặc end) / {"error": "start must not be after end"} | Ngày không hợp lệ / khoảng bị đảo ngược |
| 503 | {"error": "Market data is not ready on this server. Please retry later."} | Kho dữ liệu chưa sẵn sàng — thử lại sau, không bao giờ đọc thành "không có vị thế" |
| 500 | {"error": "Internal error"} | Lỗi máy chủ không mong muốn |
scope=tx).