REST API Complete Reference¶
Added in v1.4.85. Auto-generated by the FutuOpenD-rs build pipeline and refreshed with every daemon release.
This page covers all 220 REST endpoints of futu-opend,
organized into 9 functional groups. Each endpoint documents:
- HTTP method + URL
- Backend
proto_id - Required auth scope
- Parameter docs (in proto definitions)
- Error hints
- curl example
Quick nav:
| Group | Endpoints | Link |
|---|---|---|
| System / Status | 7 | System / Status |
| Quote Subscriptions | 5 | Quote Subscriptions |
| Quote Queries | 26 | Quote Queries |
| Plates / Filter / Metadata | 8 | Plates / Filter / Metadata |
| Reference / Derivatives | 49 | Reference / Derivatives |
| Price Reminders | 2 | Price Reminders |
| Trading Accounts (Read) | 28 | Trading Accounts (Read) |
| Trading Write | 8 | Trading Write |
| Admin | 87 | Admin |
Global conventions¶
- Legacy read-only Base URL:
http://127.0.0.1:22499(default REST port; change it with--rest-port). Credential-free reads remain available over HTTP when no keys file is configured: - Scope mode Base URL:
https://127.0.0.1:22499. Configuringrest_keys_fileenables REST scope mode and requires bothrest_tls_certandrest_tls_key. The daemon validates the certificate/private key before broker login and refuses to bind authenticated REST over plaintext. - WebSocket: use
wss://127.0.0.1:22499/wsfor/wson the same listener in scope mode. Legacy no-key compatibility may continue to usews://. - Content-Type:
application/json - Auth:
Authorization: Bearer <API_KEY>(ifkeys.jsonis configured; otherwise legacy mode without auth — and since v1.4.86 fail-closed is the production default) -
Response envelope:
ret_type == 0means success; other values see common error codes. -
Field naming: v1.4.83+ accepts aliases (SDK-style
code/stocks/trd_env); canonical is snake_case (symbol/symbols/env). At the REST layer, enum fields (trd_market/trd_env/kl_type/op/reference_type…) accept int only (½/3...); the string form ("HK"/"US"/"day") is supported only at the MCP layer (futu_*tools) which auto-converts to int. Unknown fields since v1.4.84 loud fail (unknown fielderror). -
Rate / limits: Controlled via startup flags (
--allowed-markets,--max-order-value, etc.). Seedocs/guide/auth.en.md.
System / Status¶
Health checks are public. /api/* system read endpoints stay public in legacy mode without keys.json, and use the listed scope in scope-mode.
GET /api/delay-statistics¶
proto_id: GET_DELAY_STATISTICS (1007)
Scope: legacy/public: —; scope-mode: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
POST /api/delay-statistics¶
proto_id: GET_DELAY_STATISTICS (1007)
Scope: legacy/public: —; scope-mode: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"type_list":[1],"qot_push_stage":1}' \
https://127.0.0.1:22499/api/delay-statistics
GET /api/global-state¶
proto_id: GET_GLOBAL_STATE (1002)
Scope: legacy/public: —; scope-mode: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
GET /api/ping¶
proto_id: GET_GLOBAL_STATE (1002)
Scope: legacy/public: —; scope-mode: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
GET /api/push-subscriber-info¶
proto_id: — (non-proto / no backend forwarding)
Scope: legacy/public: —; scope-mode: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
GET /api/quote-rights¶
proto_id: TEST_CMD (1008)
Scope: legacy/public: —; scope-mode: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
GET /api/user-info¶
proto_id: GET_USER_INFO (1005)
Scope: legacy/public: —; scope-mode: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
Quote Subscriptions¶
Subscribe/unsubscribe quote push, query subscription state, and receive push via WebSocket /ws. All three use qot:read.
POST /api/query-subscription¶
proto_id: QOT_GET_SUB_INFO (3003)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"is_req_all_conn":true}' \
https://127.0.0.1:22499/api/query-subscription
GET /api/sub-info¶
proto_id: QOT_GET_SUB_INFO (3003)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
POST /api/subscribe¶
proto_id: QOT_SUB (3001)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"symbols":["HK.00700"],"sub_types":[1],"is_sub_or_un_sub":true}' \
https://127.0.0.1:22499/api/subscribe
POST /api/unsubscribe¶
proto_id: QOT_SUB (3001)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"symbols":["HK.00700"],"sub_types":[1],"is_sub_or_un_sub":false}' \
https://127.0.0.1:22499/api/unsubscribe
GET /ws¶
proto_id: — (non-proto / no backend forwarding)
Scope: legacy/public: —; scope-mode: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Legacy mode without keys.json stays public for compatibility. In scope-mode,
the handshake must carry ?token= or Authorization: Bearer <key>, and the key
must have qot:read.
Example:
Quote Queries¶
Real-time quotes, K-line, order book, broker queue, time-sharing, ticker, ticker statistics, risk-free rate, spread table, and quote quota. Requires qot:read.
POST /api/broker¶
proto_id: QOT_GET_BROKER (3014)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"symbol":"HK.00700"}' \
https://127.0.0.1:22499/api/broker
POST /api/capital-distribution¶
proto_id: QOT_GET_CAPITAL_DISTRIBUTION (3212)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"symbol":"HK.00700"}' \
https://127.0.0.1:22499/api/capital-distribution
POST /api/capital-flow¶
proto_id: QOT_GET_CAPITAL_FLOW (3211)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"symbol":"HK.00700","period_type":1}' \
https://127.0.0.1:22499/api/capital-flow
POST /api/history-kl-quota¶
proto_id: QOT_REQUEST_HISTORY_KL_QUOTA (3104)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Quota source: used_quota / remain_quota use the account's dynamic historical K-line quota returned by CMD6024 after login.
FUTU_HISTORY_KL_QUOTA_MAX only overrides that dynamic quota when explicitly set. Before the dynamic quota arrives, Rust uses the C++ cold-start default 100 as a fail-closed fallback.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"b_get_detail":false}' \
https://127.0.0.1:22499/api/history-kl-quota
POST /api/history-kline¶
proto_id: QOT_REQUEST_HISTORY_KL (3103)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Note: REST kl_type accepts integers only (e.g. 1=Day / 2=Week / 3=Month / 5=Min1 / 6=Min5 / 7=Min15 / 8=Min30 / 9=Min60 / 10=Min3 / 11=Min4); the string form ("day") is supported only at the MCP layer. Field count is alias-mapped to proto req_num (both accepted).
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"symbol":"HK.00700","rehab_type":0,"kl_type":1,"max_count":100,"begin_time":"2026-01-01 00:00:00","end_time":"2026-04-01 23:59:59"}' \
https://127.0.0.1:22499/api/history-kline
POST /api/kline¶
proto_id: QOT_GET_KL (3006)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Note: Same as /api/history-kline — REST kl_type accepts integers only; proto field is canonical req_num, count is the v1.4.83+ alias.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"symbol":"HK.00700","rehab_type":0,"kl_type":1,"req_num":100}' \
https://127.0.0.1:22499/api/kline
POST /api/kline-pattern¶
proto_id: QOT_GET_KLINE_PATTERN (2131755021)
Scope: qot:read
Disabled by default: requires --enable-v18-kline-patterns. Evidence is source-aligned + local-green; live backend behavior remains unverified. Point/line values are restored from 1e9 scale and field presence is preserved.
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"stock_id":7001,"kline_type":2,"extension_version":1}' \
https://127.0.0.1:22499/api/kline-pattern
POST /api/kline-pattern-catalog¶
proto_id: QOT_GET_KLINE_PATTERN_CATALOG (2131755025)
Scope: qot:read
Disabled by default: requires --enable-v18-kline-patterns. count<=0 requests all rows (Desktop sends -1); URLs/strings are returned unchanged and are not opened or validated by the daemon.
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"filter":0,"count":-1,"start_count":0,"color":0,"extension_version":1}' \
https://127.0.0.1:22499/api/kline-pattern-catalog
POST /api/kline-pattern-performance¶
proto_id: QOT_GET_KLINE_PATTERN_PERFORMANCE (2131755024)
Scope: qot:read
Independently disabled / UNVERIFIED: requires --enable-v18-kline-pattern-performance. The pinned Desktop source has a proto and registry entry but no business caller, so responses must explicitly contain ret_code=0; profit fields remain signed raw values because the source defines no scale.
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"shape":1,"duration":0,"extension_version":1}' \
https://127.0.0.1:22499/api/kline-pattern-performance
POST /api/kline-pattern-statistics¶
proto_id: QOT_GET_KLINE_PATTERN_STATISTICS (2131755022)
Scope: qot:read
Disabled by default: requires --enable-v18-kline-patterns. Forecast/backtest fields are descriptive statistics, not deterministic investment advice. URLs/strings are opaque metadata and are neither fetched nor rewritten by the daemon.
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"stock_id":7001,"kline_type":2,"shape":1,"color":0,"extension_version":1}' \
https://127.0.0.1:22499/api/kline-pattern-statistics
POST /api/kline-pattern-stocks¶
proto_id: QOT_GET_KLINE_PATTERN_STOCKS (2131755023)
Scope: qot:read
Disabled by default: requires --enable-v18-kline-patterns. sort_type=-1 preserves backend-default ordering; count<=0 requests all rows; watchlist/holding ID order and duplicates are sent unchanged.
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"kline_type":2,"shape":1,"market":3,"sort_order":1,"sort_type":-1,"count":-1,"start_count":0,"user_stock_list_mode":0,"extension_version":1}' \
https://127.0.0.1:22499/api/kline-pattern-stocks
POST /api/market-state¶
proto_id: QOT_GET_MARKET_STATE (3223)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"symbols":["HK.00700"]}' \
https://127.0.0.1:22499/api/market-state
POST /api/orderbook¶
proto_id: QOT_GET_ORDER_BOOK (3012)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"symbol":"HK.00700","depth":10}' \
https://127.0.0.1:22499/api/orderbook
POST /api/quote¶
proto_id: QOT_GET_BASIC_QOT (3004)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"symbol":"HK.00700"}' \
https://127.0.0.1:22499/api/quote
GET /api/quote-capability¶
proto_id: TEST_CMD (1008)
Scope: legacy/public: —; scope-mode: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
GET /api/risk-free-rate¶
proto_id: QOT_GET_RISK_FREE_RATE (20231)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Purpose: Risk-free rate for HK / US / JP, required for Black-Scholes option pricing.
Field table (no required field):
| Field | Type | Required | Description |
|---|---|---|---|
rate_time |
int64 | optional | Unix ms timestamp; omit for latest rate |
Response: s2c includes hk_rate_pct / us_rate_pct / jp_rate_pct (percent, e.g. 4.5 for 4.5%). The raw uint64 (×10^9) values are also exposed so callers can verify on their own.
Example:
POST /api/risk-free-rate¶
proto_id: QOT_GET_RISK_FREE_RATE (20231)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Purpose: Risk-free rate for HK / US / JP, required for Black-Scholes option pricing.
Field table (no required field):
| Field | Type | Required | Description |
|---|---|---|---|
rate_time |
int64 | optional | Unix ms timestamp; omit for latest rate |
Response: s2c includes hk_rate_pct / us_rate_pct / jp_rate_pct (percent, e.g. 4.5 for 4.5%). The raw uint64 (×10^9) values are also exposed so callers can verify on their own.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{}' \
https://127.0.0.1:22499/api/risk-free-rate
POST /api/rt¶
proto_id: QOT_GET_RT (3008)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"symbol":"HK.00700"}' \
https://127.0.0.1:22499/api/rt
POST /api/snapshot¶
proto_id: QOT_GET_SECURITY_SNAPSHOT (3203)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"symbol":"HK.00700"}' \
https://127.0.0.1:22499/api/snapshot
GET /api/spread-table¶
proto_id: QOT_GET_SPREAD_TABLE (6503)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Purpose: Spread table for tick-size lookup across price bands (e.g. HK stocks 0.01~0.25 → step 0.001). Required for client-side price validation in PlaceOrder / ModifyOrder.
Field table (no business parameter):
| Field | Type | Required | Description |
|---|---|---|---|
reserved |
int | optional | Placeholder; always returns the full spread tables |
Response: s2c.spread_table_list contains each spread table (spread_code + spread_item_list); each item carries price_from / price_to / value as f64 (raw int64 ÷ 1e9 already applied).
Example:
POST /api/spread-table¶
proto_id: QOT_GET_SPREAD_TABLE (6503)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Purpose: Spread table for tick-size lookup across price bands (e.g. HK stocks 0.01~0.25 → step 0.001). Required for client-side price validation in PlaceOrder / ModifyOrder.
Field table (no business parameter):
| Field | Type | Required | Description |
|---|---|---|---|
reserved |
int | optional | Placeholder; always returns the full spread tables |
Response: s2c.spread_table_list contains each spread table (spread_code + spread_item_list); each item carries price_from / price_to / value as f64 (raw int64 ÷ 1e9 already applied).
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{}' \
https://127.0.0.1:22499/api/spread-table
POST /api/static-info¶
proto_id: QOT_GET_STATIC_INFO (3202)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"symbols":["HK.00700","US.AAPL"]}' \
https://127.0.0.1:22499/api/static-info
POST /api/ticker¶
proto_id: QOT_GET_TICKER (3010)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"symbol":"HK.00700","count":50}' \
https://127.0.0.1:22499/api/ticker
POST /api/ticker-statistic¶
proto_id: QOT_GET_TICKER_STATISTIC (6365)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Purpose: Ticker statistics. Aggregates per-tick deals into time intervals (cumulative volume / turnover / avg price).
Field table:
| Field | Type | Required | Description |
|---|---|---|---|
security or symbol |
object/string | ✅ | Underlying; shorthand "HK.00700" |
interval_type |
int | ✅ | Aggregation granularity enum (see proto) |
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"symbol":"HK.00700","interval_type":1}' \
https://127.0.0.1:22499/api/ticker-statistic
POST /api/ticker-statistic-detail¶
proto_id: QOT_GET_TICKER_STATISTIC_DETAIL (6366)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"security":{"market":1,"code":"00700"}}' \
https://127.0.0.1:22499/api/ticker-statistic-detail
POST /api/used-quota¶
proto_id: GET_USED_QUOTA (1010)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{}' \
https://127.0.0.1:22499/api/used-quota
Plates / Filter / Metadata¶
Plate list/stocks, stock filter, trading days, suspend, code change, IPO calendar.
POST /api/code-change¶
proto_id: QOT_GET_CODE_CHANGE (3216)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"search":{"code_change_type_list":[1],"time_filter_list":[{"type":1,"begin_time":"2026-01-01","end_time":"2026-04-01"}]}}' \
https://127.0.0.1:22499/api/code-change
POST /api/ipo-list¶
proto_id: QOT_GET_IPO_LIST (3217)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Field table:
| Field | Type | Required | Description |
|---|---|---|---|
market |
int/string | ✅ | IPO endpoint-local market: 1/HK, 2/HK_FUTURE, 11/US, 21/CN/SH, 22/SZ, 31/SG, 41/JP, 61/MY |
Note: The backend distinguishes HK / US / A-share / SG / JP / MY. Wrong market returns invalid-market.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"c2s":{"market":1}}' \
https://127.0.0.1:22499/api/ipo-list
POST /api/list-plates¶
proto_id: QOT_GET_PLATE_SET (3204)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":1,"plate_set_type":0}' \
https://127.0.0.1:22499/api/list-plates
POST /api/plate-security¶
proto_id: QOT_GET_PLATE_SECURITY (3205)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"plate":{"market":1,"code":"BK1001"}}' \
https://127.0.0.1:22499/api/plate-security
POST /api/plate-set¶
proto_id: QOT_GET_PLATE_SET (3204)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":1,"plate_set_type":0}' \
https://127.0.0.1:22499/api/plate-set
POST /api/stock-filter¶
proto_id: QOT_STOCK_FILTER (3215)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"begin":0,"num":50,"market":1,"plate":{"market":1,"code":"BK1001"}}' \
https://127.0.0.1:22499/api/stock-filter
POST /api/suspend¶
proto_id: QOT_GET_SUSPEND (3201)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"symbols":["HK.00700"],"begin_time":"2026-01-01","end_time":"2026-04-01"}' \
https://127.0.0.1:22499/api/suspend
POST /api/trading-days¶
proto_id: QOT_REQUEST_TRADE_DATE (3219)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":1,"begin_time":"2026-01-01","end_time":"2026-04-01"}' \
https://127.0.0.1:22499/api/trading-days
Reference / Derivatives¶
Warrant references, option chain, option expiration dates, future info, rehab, watchlist, holding change, and v10.6 F10/financials/research/valuation/corporate-actions/shareholders/insider/screen/unusual endpoints. Since v1.8.0 /api/modify-user-security uses qot:write; this major still accepts qot:read for compatibility.
POST /api/company-executive-background¶
proto_id: QOT_GET_COMPANY_EXECUTIVE_BACKGROUND (3245)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"security":{"market":1,"code":"00700"},"leader_name":"Pony Ma"}' \
https://127.0.0.1:22499/api/company-executive-background
POST /api/company-executives¶
proto_id: QOT_GET_COMPANY_EXECUTIVES (3244)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"security":{"market":1,"code":"00700"}}' \
https://127.0.0.1:22499/api/company-executives
POST /api/company-operational-efficiency¶
proto_id: QOT_GET_COMPANY_OPERATIONAL_EFFICIENCY (3246)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"security":{"market":1,"code":"00700"}}' \
https://127.0.0.1:22499/api/company-operational-efficiency
POST /api/company-profile¶
proto_id: QOT_GET_COMPANY_PROFILE (3243)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"security":{"market":1,"code":"00700"}}' \
https://127.0.0.1:22499/api/company-profile
POST /api/corporate-actions-buybacks¶
proto_id: QOT_GET_CORPORATE_ACTIONS_BUYBACKS (3235)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"security":{"market":1,"code":"00700"}}' \
https://127.0.0.1:22499/api/corporate-actions-buybacks
POST /api/corporate-actions-dividends¶
proto_id: QOT_GET_CORPORATE_ACTIONS_DIVIDENDS (3234)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"security":{"market":1,"code":"00700"}}' \
https://127.0.0.1:22499/api/corporate-actions-dividends
POST /api/corporate-actions-stock-splits¶
proto_id: QOT_GET_CORPORATE_ACTIONS_STOCK_SPLITS (3236)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"security":{"market":1,"code":"00700"}}' \
https://127.0.0.1:22499/api/corporate-actions-stock-splits
POST /api/daily-short-volume¶
proto_id: QOT_GET_DAILY_SHORT_VOLUME (3248)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"security":{"market":1,"code":"00700"}}' \
https://127.0.0.1:22499/api/daily-short-volume
POST /api/derivative-unusual¶
proto_id: QOT_GET_DERIVATIVE_UNUSUAL (3803)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"stock_symbol":"HK.00700"}' \
https://127.0.0.1:22499/api/derivative-unusual
POST /api/financial-unusual¶
proto_id: QOT_GET_FINANCIAL_UNUSUAL (3802)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"stock_symbol":"HK.00700"}' \
https://127.0.0.1:22499/api/financial-unusual
POST /api/financials-earnings-price-history¶
proto_id: QOT_GET_FINANCIALS_EARNINGS_PRICE_HISTORY (3226)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"security":{"market":1,"code":"00700"}}' \
https://127.0.0.1:22499/api/financials-earnings-price-history
POST /api/financials-earnings-price-move¶
proto_id: QOT_GET_FINANCIALS_EARNINGS_PRICE_MOVE (3225)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"security":{"market":1,"code":"00700"}}' \
https://127.0.0.1:22499/api/financials-earnings-price-move
POST /api/financials-revenue-breakdown¶
proto_id: QOT_GET_FINANCIALS_REVENUE_BREAKDOWN (3228)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"security":{"market":1,"code":"00700"}}' \
https://127.0.0.1:22499/api/financials-revenue-breakdown
POST /api/financials-statements¶
proto_id: QOT_GET_FINANCIALS_STATEMENTS (3227)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"security":{"market":1,"code":"00700"}}' \
https://127.0.0.1:22499/api/financials-statements
POST /api/future-info¶
proto_id: QOT_GET_FUTURE_INFO (3218)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Field table:
| Field | Type | Required | Description |
|---|---|---|---|
security_list or symbols |
array | ✅ | Futures contracts; e.g. ["HK.HSImain", "US.NQmain"] |
Note: An empty security_list triggers a backend no stock specified error; supply at least one contract.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"c2s":{"securityList":[{"market":1,"code":"HSImain"}]}}' \
https://127.0.0.1:22499/api/future-info
POST /api/get-reference¶
proto_id: QOT_GET_REFERENCE (3206)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Field table:
| Field | Type | Required | Description |
|---|---|---|---|
security or symbol |
object/string | ✅ | Underlying stock; shorthand "HK.00700" |
reference_type |
int | ✅ | 1=Warrant / 2=Future (main-continuous related contracts) |
Option NOT supported: The backend ReferenceType proto only defines Warrant / Future. Passing "reference_type":3 returns unsupported reference type. The MCP tool futu_get_reference likewise rejects anything other than warrant / future.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"symbol":"HK.00700","reference_type":1}' \
https://127.0.0.1:22499/api/get-reference
POST /api/holding-change¶
proto_id: QOT_GET_HOLDING_CHANGE_LIST (3208)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
⚠️ Deprecated: The upstream backend abandoned this endpoint after 2020-12-21. Calls return
ret_type=-1with"will be abandoned after 2020-12-21". No longer guaranteed to work; do not use in new code.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"symbol":"HK.00700","holder_category":1,"begin_time":"2026-01-01","end_time":"2026-04-01"}' \
https://127.0.0.1:22499/api/holding-change
POST /api/insider-holder-list¶
proto_id: QOT_GET_INSIDER_HOLDER_LIST (3241)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"security":{"market":1,"code":"00700"}}' \
https://127.0.0.1:22499/api/insider-holder-list
POST /api/insider-trade-list¶
proto_id: QOT_GET_INSIDER_TRADE_LIST (3242)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"security":{"market":1,"code":"00700"}}' \
https://127.0.0.1:22499/api/insider-trade-list
POST /api/modify-user-security¶
proto_id: QOT_MODIFY_USER_SECURITY (3214)
Scope: qot:write (qot:read accepted for v1.8 compatibility)
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Stateful write: Mutates the user's watchlist. Unknown fields are loud-fail rejected since v1.4.84, but a successful call cannot be rolled back.
Field table (REST accepts int enums only):
| Field | Type | Required | Description |
|---|---|---|---|
group_name |
string | ✅ | Group name; ties resolve to first match |
op |
int | ✅ | 1=Add / 2=Del / 3=MoveOut |
security_list |
array | ✅ | Stock list; each item {market: int, code: string} |
No top-level symbol/symbols shorthand: must use explicit security_list.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"group_name":"自选","op":1,"security_list":[{"market":1,"code":"00700"}]}' \
https://127.0.0.1:22499/api/modify-user-security
POST /api/option-chain¶
proto_id: QOT_GET_OPTION_CHAIN (3209)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Field table:
| Field | Type | Required | Description |
|---|---|---|---|
owner or symbol |
object/string | ✅ | Underlying stock (HK/US blue chips, HSI/HSCEI/major US indices); shorthand "HK.00700" |
begin_time |
string | ✅ | Strike date start (YYYY-MM-DD) |
end_time |
string | ✅ | Strike date end (YYYY-MM-DD) |
condition |
object | optional | Option filter (type / strike range / quote) |
Owner shorthand: Only top-level "owner":"HK.00700" auto-expands to a Security object; do not pass "security":{...} explicitly (proto field is owner, not security).
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"owner":"HK.00700","begin_time":"2026-05-01","end_time":"2026-06-01"}' \
https://127.0.0.1:22499/api/option-chain
POST /api/option-exercise-probability¶
proto_id: QOT_GET_OPTION_EXERCISE_PROBABILITY (3251)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"security":{"market":11,"code":"AAPL260116C200000"}}' \
https://127.0.0.1:22499/api/option-exercise-probability
POST /api/option-expiration-date¶
proto_id: QOT_GET_OPTION_EXPIRATION_DATE (3224)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Field table:
| Field | Type | Required | Description |
|---|---|---|---|
owner or symbol |
object/string | ✅ | Underlying stock; shorthand "HK.00700" |
index_option_type |
int | optional | HSI / HSCEI only: IndexOptionType |
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"owner":"HK.00700"}' \
https://127.0.0.1:22499/api/option-expiration-date
POST /api/option-quote¶
proto_id: QOT_GET_OPTION_QUOTE (3255)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"c2s":{"multi_legs":[{"security":{"market":11,"code":"AAPL260116C200000"},"side":1,"qty_ratio":1.0}]}}' \
https://127.0.0.1:22499/api/option-quote
POST /api/option-screen¶
proto_id: QOT_OPTION_SCREEN (3253)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"page_from":0,"page_count":20}' \
https://127.0.0.1:22499/api/option-screen
POST /api/option-strategy¶
proto_id: QOT_GET_OPTION_STRATEGY (3256)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"c2s":{"owner":{"market":11,"code":"AAPL"},"option_strategy":1}}' \
https://127.0.0.1:22499/api/option-strategy
POST /api/option-strategy-analysis¶
proto_id: QOT_GET_OPTION_STRATEGY_ANALYSIS (3257)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"c2s":{"multi_legs":[{"security":{"market":11,"code":"AAPL260116C200000"},"side":1,"qty_ratio":1.0}]}}' \
https://127.0.0.1:22499/api/option-strategy-analysis
POST /api/option-strategy-spread¶
proto_id: QOT_GET_OPTION_STRATEGY_SPREAD (3258)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"c2s":{"owner":{"market":11,"code":"AAPL"},"option_strategy":4}}' \
https://127.0.0.1:22499/api/option-strategy-spread
POST /api/option-volatility¶
proto_id: QOT_GET_OPTION_VOLATILITY (3250)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"security":{"market":11,"code":"AAPL260116C200000"},"query_time_period":2,"hv_time_period":30}' \
https://127.0.0.1:22499/api/option-volatility
POST /api/owner-plate¶
proto_id: QOT_GET_OWNER_PLATE (3207)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Field table:
| Field | Type | Required | Description |
|---|---|---|---|
security_list or symbols |
array | ✅ | Stock array; shorthand ["HK.00700"] auto-expands |
Note: Empty security_list returns empty plate list with no business meaning; supply at least one stock.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"symbols":["HK.00700"]}' \
https://127.0.0.1:22499/api/owner-plate
POST /api/reference¶
proto_id: QOT_GET_REFERENCE (3206)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Note: /api/reference is equivalent to /api/get-reference (same proto_id 3206); /api/get-reference is the v1.4.74 alias. Same field contract — see /api/get-reference section.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"symbol":"HK.00700","reference_type":1}' \
https://127.0.0.1:22499/api/reference
POST /api/rehab¶
proto_id: QOT_REQUEST_REHAB (3105)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"symbols":["HK.00700"]}' \
https://127.0.0.1:22499/api/rehab
POST /api/research-analyst-consensus¶
proto_id: QOT_GET_RESEARCH_ANALYST_CONSENSUS (3229)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"security":{"market":1,"code":"00700"}}' \
https://127.0.0.1:22499/api/research-analyst-consensus
POST /api/research-morningstar-report¶
proto_id: QOT_GET_RESEARCH_MORNINGSTAR_REPORT (3231)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"security":{"market":1,"code":"00700"}}' \
https://127.0.0.1:22499/api/research-morningstar-report
POST /api/research-rating-summary¶
proto_id: QOT_GET_RESEARCH_RATING_SUMMARY (3230)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"security":{"market":1,"code":"00700"}}' \
https://127.0.0.1:22499/api/research-rating-summary
POST /api/shareholders-holder-detail¶
proto_id: QOT_GET_SHAREHOLDERS_HOLDER_DETAIL (3239)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"security":{"market":1,"code":"00700"}}' \
https://127.0.0.1:22499/api/shareholders-holder-detail
POST /api/shareholders-holding-changes¶
proto_id: QOT_GET_SHAREHOLDERS_HOLDING_CHANGES (3238)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"security":{"market":1,"code":"00700"}}' \
https://127.0.0.1:22499/api/shareholders-holding-changes
POST /api/shareholders-institutional¶
proto_id: QOT_GET_SHAREHOLDERS_INSTITUTIONAL (3240)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"security":{"market":1,"code":"00700"}}' \
https://127.0.0.1:22499/api/shareholders-institutional
POST /api/shareholders-overview¶
proto_id: QOT_GET_SHAREHOLDERS_OVERVIEW (3237)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"security":{"market":1,"code":"00700"}}' \
https://127.0.0.1:22499/api/shareholders-overview
POST /api/short-interest¶
proto_id: QOT_GET_SHORT_INTEREST (3249)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"security":{"market":1,"code":"00700"}}' \
https://127.0.0.1:22499/api/short-interest
POST /api/stock-screen¶
proto_id: QOT_STOCK_SCREEN (3252)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"page_from":0,"page_count":20}' \
https://127.0.0.1:22499/api/stock-screen
POST /api/technical-unusual¶
proto_id: QOT_GET_TECHNICAL_UNUSUAL (3801)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"stock_symbol":"HK.00700"}' \
https://127.0.0.1:22499/api/technical-unusual
POST /api/top-ten-buy-sell-brokers¶
proto_id: QOT_GET_TOP_TEN_BUY_SELL_BROKERS (3247)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"security":{"market":1,"code":"00700"}}' \
https://127.0.0.1:22499/api/top-ten-buy-sell-brokers
POST /api/user-security¶
proto_id: QOT_GET_USER_SECURITY (3213)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"group_name":"自选"}' \
https://127.0.0.1:22499/api/user-security
POST /api/user-security-groups¶
proto_id: QOT_GET_USER_SECURITY_GROUP (3222)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"group_type":3}' \
https://127.0.0.1:22499/api/user-security-groups
POST /api/valuation-detail¶
proto_id: QOT_GET_VALUATION_DETAIL (3232)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"security":{"market":1,"code":"00700"}}' \
https://127.0.0.1:22499/api/valuation-detail
POST /api/valuation-plate-stock-list¶
proto_id: QOT_GET_VALUATION_PLATE_STOCK_LIST (3233)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"security":{"market":1,"code":"00700"}}' \
https://127.0.0.1:22499/api/valuation-plate-stock-list
POST /api/warrant¶
proto_id: QOT_GET_WARRANT (3210)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Core field table:
| Field | Type | Required | Description |
|---|---|---|---|
begin |
int | ✅ | Start row (pagination) |
num |
int | ✅ | Page size (≤200) |
sort_field |
int | ✅ | WarrantField sort enum |
ascend |
bool | ✅ | Ascending order |
owner or symbol |
object/string | optional | Underlying; shorthand "HK.00700" |
Full field set: includes type_list / issuer_list / strike-price ranges and other filters; see proto definition.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"begin":0,"num":50,"sort_field":1,"ascend":false,"owner":"HK.00700"}' \
https://127.0.0.1:22499/api/warrant
POST /api/warrant-screen¶
proto_id: QOT_WARRANT_SCREEN (3254)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market_type":1,"page_from":0,"page_count":20}' \
https://127.0.0.1:22499/api/warrant-screen
Price Reminders¶
Query/set/modify/delete price reminders. Since v1.8.0 /api/set-price-reminder uses qot:write (qot:read remains compatible for this major); /api/price-reminder reads stay on qot:read.
POST /api/price-reminder¶
proto_id: QOT_GET_PRICE_REMINDER (3221)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"symbol":"HK.00700"}' \
https://127.0.0.1:22499/api/price-reminder
POST /api/set-price-reminder¶
proto_id: QOT_SET_PRICE_REMINDER (3220)
Scope: qot:write (qot:read accepted for v1.8 compatibility)
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Stateful write: Add / modify / delete a price alert.
Field table (REST accepts int enums only; proto field is type, not reminder_type):
| Field | Type | Required | Description |
|---|---|---|---|
security or symbol |
object/string | ✅ | Stock; shorthand "HK.00700" |
op |
int | ✅ | 1=Add / 2=Del / 3=Enable / 4=Disable / 5=Modify / 6=DelAll |
key |
int64 | for Modify/Del | Alert key from GetPriceReminder |
type |
int | for Add | PriceReminderType (1=PriceUp / 2=PriceDown / ...) |
freq |
int | for Add | PriceReminderFreq (1=Always / 2=OnceADay / 3=OnlyOnce); on Modify the backend preserves the old value when omitted |
value |
f64 | for Add | Alert value (3 decimals max); on Modify the backend preserves the old value when omitted |
note |
string | optional | Note (≤20 chars in CN) |
Add (op=1) required: type + freq + value. The gateway aligns with the reference implementation and rejects Add without all three.
Modify (op=5) does not require type / freq / value: the gateway fetches the existing alert first, applies user-provided field overrides, and preserves omitted fields (aligning with the overwrite-style Modify semantics).
reminder_session_list (optional, array): PriceReminderMarketStatus values — 1=Open / 2=USPre / 3=USAfter / 4=USOverNight. Any value outside 1..4 is loud-rejected by the gateway (-1 + error text). For US stocks an empty list defaults to [1, 2, 3]; for non-US securities the list is cleared.
Note: REST does not accept "op":"SetAdd" string form; only MCP layer maps strings to int.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"symbol":"HK.00700","op":1,"type":1,"freq":1,"value":300.0}' \
https://127.0.0.1:22499/api/set-price-reminder
Trading Accounts (Read)¶
Account list, funds, positions, today orders/deals, history orders/deals, max trade qty, margin ratio, order fee. Requires acc:read.
POST /api/acc-cash-flow¶
proto_id: TRD_FLOW_SUMMARY (2226)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":1,"acc_id":123456,"env":1,"clearing_date":"2026-04-01"}' \
https://127.0.0.1:22499/api/acc-cash-flow
POST /api/account-flag¶
proto_id: TRD_GET_ACCOUNT_FLAG (22705)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"acc_id":123456,"env":1}' \
https://127.0.0.1:22499/api/account-flag
GET /api/accounts¶
proto_id: TRD_GET_ACC_LIST (2001)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
POST /api/biz-group¶
proto_id: TRD_GET_BIZ_GROUP (22703)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"acc_id":123456,"env":1,"market":1}' \
https://127.0.0.1:22499/api/biz-group
POST /api/bond-answer-state¶
proto_id: TRD_GET_BOND_ANSWER_STATE (22709)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"acc_id":123456,"env":1}' \
https://127.0.0.1:22499/api/bond-answer-state
POST /api/bond-position-list¶
proto_id: TRD_GET_BOND_POSITION_LIST (22708)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"acc_id":123456,"env":1}' \
https://127.0.0.1:22499/api/bond-position-list
POST /api/bond-screen¶
proto_id: QOT_BOND_SCREEN (2131755020)
Scope: qot:read
Enablement and evidence boundary: start with --enable-v18-experimental-reads; the feature is off by default. Current evidence is source-aligned + local-green; live backend behavior remains unverified.
data_max_count is 1..100; source_types accepts only 1 (Hong Kong) or 2 (Singapore). String-screen factor_id values are dynamic backend catalogs; range screens accept intervals only. Per the source contract, the single sort takes precedence over sorts.
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"conditions":[{"type_id":2,"intervals":[{"lower":{"value":0}}]}],"data_from":0,"data_max_count":20,"source_types":[1],"extension_version":1}' \
https://127.0.0.1:22499/api/bond-screen
POST /api/bond-single-asset¶
proto_id: TRD_GET_BOND_SINGLE_ASSET (22707)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"acc_id":123456,"env":1}' \
https://127.0.0.1:22499/api/bond-single-asset
POST /api/bond-total-asset¶
proto_id: TRD_GET_BOND_TOTAL_ASSET (22706)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"acc_id":123456,"env":1}' \
https://127.0.0.1:22499/api/bond-total-asset
POST /api/bond-trade-reminder¶
proto_id: TRD_GET_BOND_TRADE_REMINDER (22710)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"acc_id":123456,"env":1}' \
https://127.0.0.1:22499/api/bond-trade-reminder
POST /api/cash-detail¶
proto_id: TRD_GET_CASH_DETAIL (22702)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"acc_id":123456,"env":1,"flow_id":"<flow_id>"}' \
https://127.0.0.1:22499/api/cash-detail
POST /api/cash-log¶
proto_id: TRD_GET_CASH_LOG (22701)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"acc_id":123456,"env":1,"begin_time":"2026-01-01","end_time":"2026-04-01"}' \
https://127.0.0.1:22499/api/cash-log
POST /api/combo-max-trd-qtys¶
proto_id: TRD_GET_COMBO_MAX_TRD_QTYS (2112)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"c2s":{"header":{"trd_env":1,"acc_id":123456,"trd_market":2},"combo_legs":[{"security":{"market":11,"code":"AAPL260116C200000"},"side":1,"qty_ratio":1.0},{"security":{"market":11,"code":"AAPL260116C205000"},"side":2,"qty_ratio":1.0}],"qty":1.0,"price":1.0,"order_type":1}}' \
https://127.0.0.1:22499/api/combo-max-trd-qtys
POST /api/flow-summary¶
proto_id: TRD_FLOW_SUMMARY (2226)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":1,"acc_id":123456,"env":1,"clearing_date":"2026-04-01"}' \
https://127.0.0.1:22499/api/flow-summary
POST /api/funds¶
proto_id: TRD_GET_FUNDS (2101)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":1,"acc_id":123456,"env":1}' \
https://127.0.0.1:22499/api/funds
POST /api/history-order-fills¶
proto_id: TRD_GET_HISTORY_ORDER_FILL_LIST (2222)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":1,"acc_id":123456,"env":1,"begin_time":"2026-01-01 00:00:00","end_time":"2026-04-01 23:59:59"}' \
https://127.0.0.1:22499/api/history-order-fills
POST /api/history-orders¶
proto_id: TRD_GET_HISTORY_ORDER_LIST (2221)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":1,"acc_id":123456,"env":1,"begin_time":"2026-01-01 00:00:00","end_time":"2026-04-01 23:59:59"}' \
https://127.0.0.1:22499/api/history-orders
GET /api/list-accounts¶
proto_id: TRD_GET_ACC_LIST (2001)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
POST /api/margin-info¶
proto_id: TRD_GET_MARGIN_INFO (22704)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"acc_id":123456,"env":1,"market":1}' \
https://127.0.0.1:22499/api/margin-info
POST /api/margin-ratio¶
proto_id: TRD_GET_MARGIN_RATIO (2223)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":1,"acc_id":123456,"env":1,"symbols":["HK.00700"]}' \
https://127.0.0.1:22499/api/margin-ratio
POST /api/max-trd-qtys¶
proto_id: TRD_GET_MAX_TRD_QTYS (2111)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":1,"acc_id":123456,"env":1,"code":"00700","price":300.0,"order_type":1}' \
https://127.0.0.1:22499/api/max-trd-qtys
POST /api/order-fee¶
proto_id: TRD_GET_ORDER_FEE (2225)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"acc_id":123456,"env":1,"order_id_ex_list":["987"]}' \
https://127.0.0.1:22499/api/order-fee
POST /api/order-fills¶
proto_id: TRD_GET_ORDER_FILL_LIST (2211)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":1,"acc_id":123456,"env":1}' \
https://127.0.0.1:22499/api/order-fills
POST /api/orders¶
proto_id: TRD_GET_ORDER_LIST (2201)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":1,"acc_id":123456,"env":1}' \
https://127.0.0.1:22499/api/orders
POST /api/positions¶
proto_id: TRD_GET_POSITION_LIST (2102)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":1,"acc_id":123456,"env":1}' \
https://127.0.0.1:22499/api/positions
POST /api/reconfirm-order¶
proto_id: TRD_RECONFIRM_ORDER (2237)
Scope: trade:real or trade:simulate (based on env)
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"acc_id":123456,"order_id":"987","reconfirm_op":1}' \
https://127.0.0.1:22499/api/reconfirm-order
GET /api/token-state¶
proto_id: GET_TOKEN_STATE (1326)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
POST /api/token-state¶
proto_id: GET_TOKEN_STATE (1326)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"acc_id":123456}' \
https://127.0.0.1:22499/api/token-state
Trading Write¶
Place order, modify order, cancel one order, cancel-all, unlock trade cipher, account push sub. Place/modify/cancel requires trade:real / trade:simulate (env-double-check) + --enable-trading. Since v1.4.104 /api/unlock-trade strictly requires trade:unlock (no longer satisfied by other trade super-scopes).
POST /api/cancel-all-order¶
proto_id: TRD_MODIFY_ORDER (2205)
Scope: trade:real or trade:simulate (based on env)
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"acc_id":123456,"env":1,"market":1}' \
https://127.0.0.1:22499/api/cancel-all-order
POST /api/cancel-order¶
proto_id: TRD_MODIFY_ORDER (2205)
Scope: trade:real or trade:simulate (based on env)
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Semantic single-order cancel endpoint: it still sends Trd_ModifyOrder(Cancel) underneath, but REST clients only need the trading account, env, market, and either order_id or order_id_ex; low-level packet_id / modify_order_op are not required.
Friendly fields: flat bodies accept env (real / simulate / sim), market (US / HK / official non-fund trading-market int), and optional op (cancel / 2). If op is provided, it must mean cancel.
Response semantics: ret_type=0 only means the backend accepted the Cancel operation request; it is not proof of the final cancelled state. The Rust daemon runs one bounded authoritative order refresh before returning the ACK to help REST/CLI follow-up order reads converge sooner. It does not implicitly refresh positions after the cancel ACK; can_sell_qty still comes from later trade push events or an explicit positions query with refresh_cache=true. Final state still comes from push events or refresh queries.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"acc_id":123456,"env":"real","market":"US","order_id_ex":"FH1C8ABB517AE56000"}' \
https://127.0.0.1:22499/api/cancel-order
POST /api/combo-order¶
proto_id: TRD_PLACE_COMBO_ORDER (2227)
Scope: trade:real or trade:simulate (based on env)
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Note: REST clients may omit packet_id; the daemon fills it from the current connection before forwarding.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"c2s":{"header":{"trd_env":1,"acc_id":123456,"trd_market":2},"combo_legs":[{"security":{"market":11,"code":"AAPL260116C200000"},"side":1,"qty_ratio":1.0},{"security":{"market":11,"code":"AAPL260116C205000"},"side":2,"qty_ratio":1.0}],"qty":1.0,"price":1.0,"order_type":1}}' \
https://127.0.0.1:22499/api/combo-order
POST /api/modify-order¶
proto_id: TRD_MODIFY_ORDER (2205)
Scope: trade:real or trade:simulate (based on env)
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Field table (REST accepts int enums only):
| Field | Type | Required | Description |
|---|---|---|---|
c2s.header.trd_env |
int | ✅ | 0=Real / 1=Simulate |
c2s.header.acc_id |
uint64 | ✅ | Trading account ID |
c2s.header.trd_market |
int | ✅ | Trading market enum |
order_id / order_id_ex |
uint64 / string | ✅ | Order to modify / cancel; pass one of them |
modify_order_op |
int | ✅ | 1=Normal modify / 2=Cancel / 3=Disable / 4=Enable / 5=DeleteOutofdate |
qty / price |
float | Required for Normal modify depending on original order type | New quantity / price |
Single-order cancel: prefer the semantic /api/cancel-order endpoint. This low-level endpoint remains compatible with the historical modify_order_op: 2 cancel shape; /api/cancel-all-order is the bulk-cancel endpoint.
Low-level strict endpoint: /api/modify-order does not accept the flat env / market / op=cancel friendly fields from /api/cancel-order; when using the c2s shape, pass fields according to the low-level ModifyOrder contract. Normal REST single-order cancels should use /api/cancel-order directly.
Response semantics: ret_type=0 means the backend accepted the Modify/Cancel operation request; it is not proof of the final filled/cancelled state. Final order status should be read from trade push events or later order queries with refresh_cache=true; sellable quantity should be read from trade push events or explicit position refresh queries. This matches the official OpenD ModifyOrder ACK semantics. For a successful single-order cancel, the Rust daemon also runs one bounded authoritative order refresh before returning the ACK to help REST/CLI follow-up order reads converge sooner. It does not implicitly refresh positions after the cancel ACK, avoiding unrelated account-info query failures in cancel result handling. Refresh timeout/failure does not rewrite a backend-accepted cancel into a failure; final state still comes from push events or refresh queries.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"c2s":{"header":{"trd_env":1,"acc_id":123456,"trd_market":1},"order_id":987,"modify_order_op":2}}' \
https://127.0.0.1:22499/api/modify-order
POST /api/order¶
proto_id: TRD_PLACE_ORDER (2202)
Scope: trade:real or trade:simulate (based on env)
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":1,"acc_id":123456,"env":1,"side":1,"code":"00700","qty":100,"price":300.0}' \
https://127.0.0.1:22499/api/order
POST /api/sub-acc-push¶
proto_id: TRD_SUB_ACC_PUSH (2008)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"acc_id_list":[123456]}' \
https://127.0.0.1:22499/api/sub-acc-push
POST /api/unlock-trade¶
proto_id: TRD_UNLOCK_TRADE (2005)
Scope: trade:unlock
Transport boundary: this endpoint only accepts loopback peers. For remote
access, terminate HTTPS in a same-host reverse proxy and forward to the REST
listener on 127.0.0.1. Direct non-loopback plaintext HTTP is rejected with
403 and diagnostic key rest.unlock_trade.local_transport_required.
Loopback HTTP, like the official OpenD local FTAPI transport, does not defend
against an administrator process with local packet-capture or debugging access.
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"unlock":true,"pwd_md5":"<md5-of-trade-password>"}' \
https://127.0.0.1:22499/api/unlock-trade
POST /api/unsub-acc-push¶
proto_id: — (non-proto / no backend forwarding)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"acc_id_list":[123456]}' \
https://127.0.0.1:22499/api/unsub-acc-push
Admin¶
Daemon management endpoints. Requires admin scope.
Runtime contract:
- GET /api/admin/status: Synchronous read-only snapshot. Includes last_reload_refresh field (never_run / running / succeeded / failed / skipped / not_applicable) for monitoring the background reload refresh task.
- POST /api/admin/shutdown: Returns 200 synchronously, then triggers daemon exit through the internal shutdown signal.
- POST /api/admin/reload: Synchronously clears cipher cache and returns immediately; credentials refresh runs in the background (check /api/admin/status → last_reload_refresh for outcome).
Body validation: POST /api/admin/shutdown + POST /api/admin/reload accept only empty body / {} / null. Any user-supplied field returns 400 (handler does not read body).
POST /api/admin/reload¶
proto_id: — (non-proto / no backend forwarding)
Scope: admin
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{}' \
https://127.0.0.1:22499/api/admin/reload
POST /api/admin/shutdown¶
proto_id: — (non-proto / no backend forwarding)
Scope: admin
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{}' \
https://127.0.0.1:22499/api/admin/shutdown
GET /api/admin/status¶
proto_id: — (non-proto / no backend forwarding)
Scope: admin
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
platform and every brokers[] entry also include lifecycle_state,
lifecycle_generation, and optional last_lifecycle_event. Broker reconnect
counters and the latest attempt/success/failure timestamps come from the same
lifecycle snapshot, so operators can tell whether recovery is still progressing.
Example:
POST /api/ark-active-transaction¶
proto_id: QOT_GET_ARK_ACTIVE_TRANSACTION (3425)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"holding_type":1,"cycle_type":1,"count":50}' \
https://127.0.0.1:22499/api/ark-active-transaction
POST /api/ark-fund-holding¶
proto_id: QOT_GET_ARK_FUND_HOLDING (3423)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"holding_type":1,"count":20}' \
https://127.0.0.1:22499/api/ark-fund-holding
POST /api/ark-stock-dynamic¶
proto_id: QOT_GET_ARK_STOCK_DYNAMIC (3424)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"security":{"market":11,"code":"AAPL"}}' \
https://127.0.0.1:22499/api/ark-stock-dynamic
POST /api/dividend-calendar¶
proto_id: QOT_GET_DIVIDEND_CALENDAR (3408)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":1,"date":"2026-06-24","count":20}' \
https://127.0.0.1:22499/api/dividend-calendar
POST /api/dividend-rank¶
proto_id: QOT_GET_DIVIDEND_RANK (3407)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":1,"rank_type":1,"count":10}' \
https://127.0.0.1:22499/api/dividend-rank
POST /api/earnings-beat-rank¶
proto_id: QOT_GET_EARNINGS_BEAT_RANK (3406)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":11,"beat_type":1,"count":30}' \
https://127.0.0.1:22499/api/earnings-beat-rank
POST /api/earnings-calendar¶
proto_id: QOT_GET_EARNINGS_CALENDAR (3401)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":11,"begin_date":"2026-06-24","end_date":"2026-06-25"}' \
https://127.0.0.1:22499/api/earnings-calendar
POST /api/economic-calendar¶
proto_id: QOT_GET_ECONOMIC_CALENDAR (3409)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"begin_date":"2026-06-24","end_date":"2026-06-24","market_list":[11],"count":50}' \
https://127.0.0.1:22499/api/economic-calendar
POST /api/etf-screen¶
proto_id: QOT_ETF_SCREEN (2131755017)
Scope: qot:read
Enablement and evidence boundary: start with --enable-v18-experimental-reads; the feature is off by default. Current evidence is source-aligned + local-green; live backend behavior remains unverified.
data_max_count is 1..500; static market/field/period/content/sort catalogs are declared in the public proto. Dynamic issuer, region, sector, and holding subkeys are backend-owned selection data and must not be guessed locally.
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":1,"data_from":0,"data_max_count":20,"need_fields":[{"field_id":5}],"extension_version":1}' \
https://127.0.0.1:22499/api/etf-screen
POST /api/fed-watch-dot-plot¶
proto_id: QOT_GET_FED_WATCH_DOT_PLOT (3405)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{}' \
https://127.0.0.1:22499/api/fed-watch-dot-plot
POST /api/fed-watch-target-rate¶
proto_id: QOT_GET_FED_WATCH_TARGET_RATE (3404)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{}' \
https://127.0.0.1:22499/api/fed-watch-target-rate
POST /api/financial-calendar¶
proto_id: QOT_GET_FINANCIAL_CALENDAR_VIEW_INTERNAL (20025)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market_list":[1],"count":20,"begin_date":"20260624","end_date":"20260625"}' \
https://127.0.0.1:22499/api/financial-calendar
POST /api/financial-calendar-target¶
proto_id: QOT_SEARCH_TARGET_FINANCIAL_CALENDAR (20426)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"stock_id":[7000700],"market_list":[1],"size":20,"start":0}' \
https://127.0.0.1:22499/api/financial-calendar-target
POST /api/fund-screen¶
proto_id: QOT_FUND_SCREEN (2131755018)
Scope: qot:read
Enablement and evidence boundary: start with --enable-v18-experimental-reads; the feature is off by default. Current evidence is source-aligned + local-green; live backend behavior remains unverified.
data_max_count is 1..500; the full 33-field fund contract does not share a DTO with ETF/future/bond screeners. Company, theme, and set IDs are dynamic backend catalogs. This public protocol preserves the full backend contract rather than one Desktop list widget's selected/no-search/region defaults. Per the source contract, non-empty sorts takes precedence over the single sort.
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"fund_types":[1],"risk_levels":[1],"currency_units":[1],"data_from":0,"data_max_count":20,"field_ids":[3],"source_types":[1],"extension_version":1}' \
https://127.0.0.1:22499/api/fund-screen
POST /api/future-screen¶
proto_id: QOT_FUTURE_SCREEN (2131755019)
Scope: qot:read
Enablement and evidence boundary: start with --enable-v18-experimental-reads; the feature is off by default. Current evidence is source-aligned + local-green; live backend behavior remains unverified.
data_max_count is 1..100; crypto-future filtering is derived from the daemon's fresh quote entitlement. Fixed screen/factor catalogs are declared in the public proto; newly introduced factors remain owned by backend discovery. Per the source contract, the single sort takes precedence over sorts.
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"conditions":[{"type_id":1,"factor_ids":[1]}],"data_from":0,"data_max_count":20,"extension_version":1}' \
https://127.0.0.1:22499/api/future-screen
POST /api/heat-map-data¶
proto_id: QOT_GET_HEAT_MAP_DATA (3432)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":1,"count":30}' \
https://127.0.0.1:22499/api/heat-map-data
POST /api/high-dividend-soe-rank¶
proto_id: QOT_GET_HIGH_DIVIDEND_SOE_RANK (3417)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"count":50}' \
https://127.0.0.1:22499/api/high-dividend-soe-rank
POST /api/hot-list¶
proto_id: QOT_GET_HOT_LIST (3414)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":1,"count":50}' \
https://127.0.0.1:22499/api/hot-list
POST /api/hot-news¶
proto_id: QOT_GET_HOT_NEWS (2131755011)
Scope: qot:read
Enablement and evidence boundary: start with --enable-v18-experimental-reads; the feature is off by default. Current evidence is source-aligned + local-green; live backend behavior remains unverified.
Callers pass only page_size (1..50) and extension_version=1.
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"page_size":20,"extension_version":1}' \
https://127.0.0.1:22499/api/hot-news
POST /api/indicator-list¶
proto_id: QOT_GET_INDICATOR_LIST (3259)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{}' \
https://127.0.0.1:22499/api/indicator-list
POST /api/industrial-chain-by-plate¶
proto_id: QOT_GET_INDUSTRIAL_CHAIN_BY_PLATE (3429)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"plate_id":1}' \
https://127.0.0.1:22499/api/industrial-chain-by-plate
POST /api/industrial-chain-detail¶
proto_id: QOT_GET_INDUSTRIAL_CHAIN_DETAIL (3428)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"chain_id":1}' \
https://127.0.0.1:22499/api/industrial-chain-detail
POST /api/industrial-chain-list¶
proto_id: QOT_GET_INDUSTRIAL_CHAIN_LIST (3427)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":1,"count":20}' \
https://127.0.0.1:22499/api/industrial-chain-list
POST /api/industrial-plate-info¶
proto_id: QOT_GET_INDUSTRIAL_PLATE_INFO (3430)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"plate_id":1}' \
https://127.0.0.1:22499/api/industrial-plate-info
POST /api/industrial-plate-stock¶
proto_id: QOT_GET_INDUSTRIAL_PLATE_STOCK (3431)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"plate_id":1,"count":50}' \
https://127.0.0.1:22499/api/industrial-plate-stock
POST /api/institution-distribution¶
proto_id: QOT_GET_INSTITUTION_DISTRIBUTION (3420)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":11,"institution_id":700}' \
https://127.0.0.1:22499/api/institution-distribution
POST /api/institution-holding-change¶
proto_id: QOT_GET_INSTITUTION_HOLDING_CHANGE (3421)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":1,"institution_id":700,"count":20}' \
https://127.0.0.1:22499/api/institution-holding-change
POST /api/institution-holding-list¶
proto_id: QOT_GET_INSTITUTION_HOLDING_LIST (3422)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":41,"institution_id":701,"count":20}' \
https://127.0.0.1:22499/api/institution-holding-list
POST /api/institution-list¶
proto_id: QOT_GET_INSTITUTION_LIST (3418)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":11,"count":20}' \
https://127.0.0.1:22499/api/institution-list
POST /api/institution-profile¶
proto_id: QOT_GET_INSTITUTION_PROFILE (3419)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":11,"institution_id":700}' \
https://127.0.0.1:22499/api/institution-profile
POST /api/ipo-calendar¶
proto_id: QOT_GET_IPO_LIST (3217)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":1,"event_types":["list"],"begin_date":"20260624","end_date":"20260630"}' \
https://127.0.0.1:22499/api/ipo-calendar
POST /api/latest-news¶
proto_id: QOT_GET_LATEST_NEWS (2131755012)
Scope: qot:read
Enablement and evidence boundary: start with --enable-v18-experimental-reads; the feature is off by default. Current evidence is source-aligned + local-green; live backend behavior remains unverified.
page_flip=0 pages older; page_flip=1 requires a nonempty newest cursor. An empty cursor always means the first page. Read-only filter sidecars use include_flash_filter / include_market_filter and require a nonnegative filter_version.
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"page_size":20,"seq_mark":"","page_flip":0,"tag_indexes":[0],"extension_version":1}' \
https://127.0.0.1:22499/api/latest-news
POST /api/macro-indicator-history¶
proto_id: QOT_GET_MACRO_INDICATOR_HISTORY (3403)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"indicator_id":88,"time":"2026-06-24","max_count":100}' \
https://127.0.0.1:22499/api/macro-indicator-history
POST /api/macro-indicator-list¶
proto_id: QOT_GET_MACRO_INDICATOR_LIST (3402)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"region":2}' \
https://127.0.0.1:22499/api/macro-indicator-list
POST /api/market-trading-sessions¶
proto_id: QOT_GET_MARKET_TRADING_SESSIONS (2131755010)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"items":[{"market_id":2,"begin_date":20261101,"num":1}],"extension_version":1}' \
https://127.0.0.1:22499/api/market-trading-sessions
POST /api/option-earnings-screener¶
proto_id: QOT_GET_OPTION_EARNINGS_SCREENER (3313)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"option_market":1,"count":50}' \
https://127.0.0.1:22499/api/option-earnings-screener
POST /api/option-event¶
proto_id: QOT_GET_OPTION_EVENT (3307)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"option_market":1,"count":50}' \
https://127.0.0.1:22499/api/option-event
POST /api/option-event-alert¶
proto_id: QOT_GET_OPTION_EVENT_ALERT (3308)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"count":50}' \
https://127.0.0.1:22499/api/option-event-alert
POST /api/option-market-statistic¶
proto_id: QOT_GET_OPTION_MARKET_STATISTIC (3301)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"option_market":1,"data_type":0,"begin_time":"2026-08-01","end_time":"2026-08-30"}' \
https://127.0.0.1:22499/api/option-market-statistic
POST /api/option-rank¶
proto_id: QOT_GET_OPTION_RANK (3306)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"option_market":1,"sort_type":1,"count":50}' \
https://127.0.0.1:22499/api/option-rank
POST /api/option-seller-screener¶
proto_id: QOT_GET_OPTION_SELLER_SCREENER (3314)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"option_market":1,"seller_type":1}' \
https://127.0.0.1:22499/api/option-seller-screener
POST /api/option-underlying-his-statistic¶
proto_id: QOT_GET_OPTION_UNDERLYING_HIS_STATISTIC (3302)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"owner":{"market":11,"code":"AAPL"},"begin_time":"2026-08-01","end_time":"2026-08-30"}' \
https://127.0.0.1:22499/api/option-underlying-his-statistic
POST /api/option-underlying-his-volatility¶
proto_id: QOT_GET_OPTION_UNDERLYING_HIS_VOLATILITY (3304)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"owner":{"market":11,"code":"AAPL"},"begin_time":"2026-08-01","end_time":"2026-08-30"}' \
https://127.0.0.1:22499/api/option-underlying-his-volatility
POST /api/option-underlying-overview¶
proto_id: QOT_GET_OPTION_UNDERLYING_OVERVIEW (3303)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"owner_list":[{"market":11,"code":"AAPL"}]}' \
https://127.0.0.1:22499/api/option-underlying-overview
POST /api/option-underlying-rank¶
proto_id: QOT_GET_OPTION_UNDERLYING_RANK (3305)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"option_market":1,"sort_type":1,"count":50}' \
https://127.0.0.1:22499/api/option-underlying-rank
POST /api/option-zero-dte-contract¶
proto_id: QOT_GET_OPTION_ZERO_DTE_CONTRACT (3312)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"owner":{"market":11,"code":"AAPL"},"strike_date_timestamp":1800000000,"chain_info":{"strike_date_timestamp":1800000000,"product_code":"AAPL","multiplier":100.0,"contract_share_size":100.0,"expiration_type":1,"underlying":{"market":11,"code":"AAPL"}}}' \
https://127.0.0.1:22499/api/option-zero-dte-contract
POST /api/option-zero-dte-screener¶
proto_id: QOT_GET_OPTION_ZERO_DTE_SCREENER (3311)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"option_market":1,"count":50}' \
https://127.0.0.1:22499/api/option-zero-dte-screener
POST /api/period-change-rank¶
proto_id: QOT_GET_PERIOD_CHANGE_RANK (3416)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":1,"count":50}' \
https://127.0.0.1:22499/api/period-change-rank
POST /api/preview-order-impact¶
proto_id: TRD_PREVIEW_ORDER_IMPACT (22711)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"header":{"trd_env":1,"acc_id":9001,"trd_market":2},"order":{"single":{"security":{"code":"AAPL","market_id":11,"stock_market":2,"exchange":"US","currency":"USD","security_type":1},"side":1,"order_type":2,"volume":{"quantity":"10"}}},"extension_version":1}' \
https://127.0.0.1:22499/api/preview-order-impact
POST /api/rating-change¶
proto_id: QOT_GET_RATING_CHANGE (3426)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":11,"count":10}' \
https://127.0.0.1:22499/api/rating-change
POST /api/rise-fall-distribution¶
proto_id: QOT_GET_RISE_FALL_DISTRIBUTION (3433)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":1}' \
https://127.0.0.1:22499/api/rise-fall-distribution
POST /api/search-news¶
proto_id: QOT_GET_SEARCH_NEWS (3263)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"keyword":"earnings","max_count":10,"news_sub_type":0}' \
https://127.0.0.1:22499/api/search-news
POST /api/search-quote¶
proto_id: QOT_GET_SEARCH_QUOTE (3262)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"keyword":"AAPL","max_count":10}' \
https://127.0.0.1:22499/api/search-quote
POST /api/security-trading-sessions¶
proto_id: QOT_GET_SECURITY_TRADING_SESSIONS (2131755009)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"code":"AAPL","exchange":"US","begin_date":20261101,"num":1,"extension_version":1}' \
https://127.0.0.1:22499/api/security-trading-sessions
POST /api/set-option-event-alert¶
proto_id: QOT_SET_OPTION_EVENT_ALERT (3309)
Scope: qot:write (qot:read accepted for v1.8 compatibility)
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"oper_type":1,"alert_list":[{"enable":true,"underlying":{"market":11,"code":"AAPL"}}]}' \
https://127.0.0.1:22499/api/set-option-event-alert
POST /api/set-stock-note¶
proto_id: QOT_SET_STOCK_NOTE (2131755028)
Scope: qot:write (configured API key required; no qot:read fallback)
Private write / two independent default-off gates: requires both --enable-v18-stock-notes and --enable-v18-stock-note-writes, keys.json, and strict qot:write. The request is sent once and never auto-resubmitted. A route-fence rejection before writer admission is explicitly not sent; after the frame enters the writer queue, a route change or uncertain ACK returns SUBMITTED_UNKNOWN. Synchronous 0 means accepted only. DELETE may be confirmed by a private push that causes an actual state transition; CREATE/UPDATE must also pass 9432 reconciliation because 9430 carries no detail. Title/detail are never logged.
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"operation":3,"stock_id":7001,"title":"watch","detail":"review later","is_display":1,"extension_version":1}' \
https://127.0.0.1:22499/api/set-stock-note
POST /api/short-selling-rank¶
proto_id: QOT_GET_SHORT_SELLING_RANK (3415)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":11,"count":10}' \
https://127.0.0.1:22499/api/short-selling-rank
POST /api/stock-news¶
proto_id: QOT_GET_STOCK_NEWS (2131755016)
Scope: qot:read
Enablement and evidence boundary: start with --enable-v18-experimental-reads; the feature is off by default. Current evidence is source-aligned + local-green; live backend behavior remains unverified.
For pagination, echo the previous response's seq_mark, dedup_ids, and request-level track_info; id_type accepts only 1 (security) or 2 (plate).
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"stock_id":7000700,"page_size":20,"id_type":1,"seq_mark":"","dedup_ids":[],"extension_version":1}' \
https://127.0.0.1:22499/api/stock-news
POST /api/stock-note-labels¶
proto_id: QOT_GET_STOCK_NOTE_LABELS (2131755026)
Scope: acc:read (configured API key required)
Private data / disabled by default: requires --enable-v18-stock-notes, configured keys.json, and acc:read. FULL(1) is encoded by the daemon as is_full=1 + stock_id=[0]; IDS(2) preserves caller order and duplicates.
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"mode":1,"stock_ids":[],"extension_version":1}' \
https://127.0.0.1:22499/api/stock-note-labels
POST /api/stock-notes¶
proto_id: QOT_GET_STOCK_NOTES (2131755027)
Scope: acc:read (configured API key required)
Private data / disabled by default: requires --enable-v18-stock-notes and acc:read. Explicit nonzero IDs are sent unchanged; an ordinary query never mutates or persists the authoritative basic cache.
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"stock_ids":[7001],"extension_version":1}' \
https://127.0.0.1:22499/api/stock-notes
POST /api/top-movers-rank¶
proto_id: QOT_GET_TOP_MOVERS_RANK (3413)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"market":1,"count":50}' \
https://127.0.0.1:22499/api/top-movers-rank
POST /api/trd/algo-order-logs¶
proto_id: TRD_GET_ALGO_ORDER_LOGS (22723)
Scope: acc:read
Backend read disabled by default: requires --enable-v18-experimental-reads and acc:read. page_index is zero-based and page_size is 1..50. With fetch_all=true, the daemon uses only total_cnt to fetch all pages; there is no page_flag/completed. A later-page failure never returns a silent partial result.
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"header":{"trd_env":1,"acc_id":900001,"trd_market":2},"algo_order_id":"ORDER_ID","page_index":0,"page_size":50,"fetch_all":false,"extension_version":1}' \
https://127.0.0.1:22499/api/trd/algo-order-logs
POST /api/trd/asset-trend¶
proto_id: TRD_GET_ASSET_TREND (22712)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"header":{"trd_env":1,"acc_id":9001,"trd_market":2},"range":{"query_type":3,"currency":"USD","start_date":"2026-08-01 00:00:00","end_date":"2026-08-30 23:59:59","time_location":"America/New_York","price_context":{"use_pre_market":true,"use_after_hours":false,"use_overnight":true}},"extension_version":1}' \
https://127.0.0.1:22499/api/trd/asset-trend
POST /api/trd/batch-close-positions¶
proto_id: TRD_BATCH_CLOSE_POSITIONS (22727)
Scope: trade:real
Real-money write, disabled by default: accepts only explicit deduplicated non-portfolio positions in Desktop-supported markets and integer quantities within current closable quantity; FUTU_JP and unsupported markets reject. Side, order type, BA/TIF/session are derived from fresh position and stock-list facts, with short positions sent as source-aligned Buy. KRX uses collision-guarded local contracts TrdMarket=18, TrdSecMarket=121, and QotMarket=111. One CMD4737 requires one unique original-req_id 4718/push result.
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"header":{"trd_env":1,"acc_id":900001,"trd_market":2},"idempotency_key":"batch-demo-1","mode":1,"target_list":[{"position_id":9002,"qty":"10"}],"extension_version":1}' \
https://127.0.0.1:22499/api/trd/batch-close-positions
POST /api/trd/cancel-order-group¶
proto_id: TRD_CANCEL_ORDER_GROUP (22719)
Scope: trade:real
Real-money write, disabled by default: cancels only a complete authoritative current server order group; requires --enable-group-orders and trade:real.
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"header":{"trd_env":1,"acc_id":900001,"trd_market":2},"initial":{"idempotency_key":"group-cancel-demo-1","group_type":3,"order_id_list":["ORDER_ID"]},"extension_version":1}' \
https://127.0.0.1:22499/api/trd/cancel-order-group
POST /api/trd/clear-futures-positions¶
proto_id: TRD_CLEAR_FUTURES_POSITIONS (22726)
Scope: trade:real
Real-money write, disabled by default: explicit targets use custom_contract=true and may include supported futures options, but not calendar-spread futures. Account-wide clear requires both all_positions=true and daemon flag --allow-all-position-clear; any unsupported contract in scope rejects the whole action. A synchronous result=0 is admission only; final state requires one unique original-req_id 4718/push result.
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"header":{"trd_env":1,"acc_id":900001,"trd_market":5},"idempotency_key":"clear-demo-1","position_id_list":[9001],"price_type":1,"all_positions":false,"extension_version":1}' \
https://127.0.0.1:22499/api/trd/clear-futures-positions
POST /api/trd/delete-order-group¶
proto_id: TRD_DELETE_ORDER_GROUP (22720)
Scope: trade:real
Real-money write, disabled by default: deletes only a complete authoritative current server order group; requires --enable-group-orders and trade:real.
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"header":{"trd_env":1,"acc_id":900001,"trd_market":2},"initial":{"idempotency_key":"group-delete-demo-1","group_type":3,"order_id_list":["ORDER_ID"]},"extension_version":1}' \
https://127.0.0.1:22499/api/trd/delete-order-group
POST /api/trd/modify-algo-order¶
proto_id: TRD_MODIFY_ALGO_ORDER (22722)
Scope: trade:real
Real-money write, disabled by default: modifies only a nonterminal authoritative current algorithm-order snapshot. Product, market, and algorithm market/limit shape cannot change; modify never overwrites the server vendor and revalidates static/live/customer-company facts. Requires --enable-algo-orders and trade:real.
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"header":{"trd_env":1,"acc_id":900001,"trd_market":2},"initial":{"idempotency_key":"algo-modify-1","order_id":"ORDER_ID","order_version":1,"new_qty":"200","algo":{"algo_type":2,"start_time":1788138000000000,"end_time":1788141600000000,"vwap":{"participation_rate":"0.25"}}},"extension_version":1}' \
https://127.0.0.1:22499/api/trd/modify-algo-order
POST /api/trd/modify-order-group¶
proto_id: TRD_MODIFY_ORDER_GROUP (22718)
Scope: trade:real
Real-money write, disabled by default: accepts only one authoritative current server order group; requires --enable-group-orders and trade:real. Never auto-resubmit an unknown result.
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"header":{"trd_env":1,"acc_id":900001,"trd_market":2},"initial":{"idempotency_key":"group-modify-demo-1","group_type":3,"order_list":[{"order_id":"ORDER_ID","order_version":1,"new_price":"101"}]},"extension_version":1}' \
https://127.0.0.1:22499/api/trd/modify-order-group
POST /api/trd/order-relations¶
proto_id: TRD_GET_ORDER_RELATIONS (22715)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"header":{"trd_env":1,"acc_id":9001,"trd_market":2},"order_id_ex":"ORDER_ID","extension_version":1}' \
https://127.0.0.1:22499/api/trd/order-relations
POST /api/trd/place-algo-order¶
proto_id: TRD_PLACE_ALGO_ORDER (22721)
Scope: trade:real
Real-money write, disabled by default: explicitly enable --enable-algo-orders and satisfy trade:real, the source-pinned product/market-limit/side/round-lot matrix, live order_ability_config_v3, dynamic customer-company and required BCAN facts, static-security, broker/cipher, and durable-intent gates. The API exposes typed market/limit variants for six algorithms, but sends only combinations allowed by the pinned rows (for example, US rejects Slicer/Peg and Iceberg market; CN, HK common, and HK futures use their own rows). Evidence is source-aligned + local-green; live backend is unverified. Unknown outcomes are never auto-resubmitted.
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"header":{"trd_env":1,"acc_id":900001,"trd_market":2},"initial":{"idempotency_key":"algo-demo-1","client_order_id":"algo-client-1","code":"AAPL","sec_market":2,"trd_side":1,"qty":"100","price_mode":2,"limit_price":"100","lot_type":2,"order_trade_time_type":1,"position_open_type":1,"pdt_protection":true,"algo":{"algo_type":2,"start_time":1788138000000000,"end_time":1788141600000000,"vwap":{"participation_rate":"0.25"}}},"extension_version":1}' \
https://127.0.0.1:22499/api/trd/place-algo-order
POST /api/trd/place-order-group¶
proto_id: TRD_PLACE_ORDER_GROUP (22717)
Scope: trade:real
Real-money write, disabled by default: explicitly enable --enable-group-orders and satisfy trade:real, account/broker/cipher/capability, and durable-intent gates. Evidence is source-aligned + local-green only; live backend behavior is unverified. Timeout/disconnect returns an unknown result and is never auto-resubmitted.
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"header":{"trd_env":1,"acc_id":900001,"trd_market":2},"initial":{"idempotency_key":"group-demo-1","group_type":3,"order_list":[{"acc_id":900001,"client_order_id":"leg-1","code":"AAPL","sec_market":2,"trd_side":1,"order_type":1,"qty":"1","price":"100","lot_type":2,"time_in_force":0,"order_trade_time_type":1,"children_relation":0,"brother_relation":0}],"pdt_protection":true},"extension_version":1}' \
https://127.0.0.1:22499/api/trd/place-order-group
POST /api/trd/position-corporate-actions¶
proto_id: TRD_GET_POSITION_CORPORATE_ACTIONS (22716)
Scope: acc:read
Enablement and evidence boundary: start with --enable-v18-experimental-reads; the feature is off by default. Current evidence is source-aligned + local-green; live backend behavior remains unverified.
The instrument set comes only from the account's fresh position snapshot; callers cannot supply or override positions/symbols. The daemon queries yesterday through tomorrow in each market timezone and completes stock and derivative backend pagination independently. Mapping or per-job failures are explicit partial status.
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"header":{"trd_env":1,"acc_id":900000001,"trd_market":2},"extension_version":1}' \
https://127.0.0.1:22499/api/trd/position-corporate-actions
POST /api/trd/return-calendar¶
proto_id: TRD_GET_RETURN_CALENDAR (22714)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"header":{"trd_env":1,"acc_id":9001,"trd_market":2},"currency":"USD","query_type":1,"method":2,"time":1788112000000,"calendar_date":"2026-08-01 00:00:00","time_location":"America/New_York","price_context":{"use_pre_market":true,"use_after_hours":false,"use_overnight":true},"extension_version":1}' \
https://127.0.0.1:22499/api/trd/return-calendar
POST /api/trd/reverse-position¶
proto_id: TRD_REVERSE_POSITION (22724)
Scope: trade:real
Real-money write, disabled by default: accepts only a fresh authoritative position and complete stock-list facts for an ordinary monthly future. Close and implicit-open symbols, sides, and notionals are authorized atomically. After one CMD4732, success requires a fresh current-order snapshot plus 21056 to prove two distinct orders in one relation_type=1 group with exact symbol/side/qty/static identity; unknown outcomes are never auto-resubmitted.
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"header":{"trd_env":1,"acc_id":900001,"trd_market":5},"initial":{"idempotency_key":"reverse-demo-1","position_id":9001,"price_type":1},"extension_version":1}' \
https://127.0.0.1:22499/api/trd/reverse-position
POST /api/trd/roll-position¶
proto_id: TRD_ROLL_POSITION (22725)
Scope: trade:real
Real-money write, disabled by default: source and target must be different ordinary monthly futures sharing one non-zero linkage_future_id, and source-close/target-open symbols and sides are checked separately. CMD4733 carries no target price, so the daemon does not treat a quote cache as trade notional; API keys with per-order or daily value limits fail closed. After one CMD4733, a fresh current-order snapshot plus 21056 must prove both relation_type=2 members.
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"header":{"trd_env":1,"acc_id":900001,"trd_market":5},"initial":{"idempotency_key":"roll-demo-1","position_id":9001,"target_code":"HSI2610","target_sec_market":1},"extension_version":1}' \
https://127.0.0.1:22499/api/trd/roll-position
POST /api/trd/yield-trend¶
proto_id: TRD_GET_YIELD_TREND (22713)
Scope: acc:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"header":{"trd_env":1,"acc_id":9001,"trd_market":2},"range":{"query_type":3,"currency":"USD","start_date":"2026-08-01 00:00:00","end_date":"2026-08-30 23:59:59","time_location":"America/New_York","price_context":{"use_pre_market":true,"use_after_hours":false,"use_overnight":true}},"method":2,"extension_version":1}' \
https://127.0.0.1:22499/api/trd/yield-trend
POST /api/us-after-hours-rank¶
proto_id: QOT_GET_US_AFTER_HOURS_RANK (3411)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"count":50}' \
https://127.0.0.1:22499/api/us-after-hours-rank
POST /api/us-overnight-rank¶
proto_id: QOT_GET_US_OVERNIGHT_RANK (3412)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"count":50}' \
https://127.0.0.1:22499/api/us-overnight-rank
POST /api/us-pre-market-rank¶
proto_id: QOT_GET_US_PRE_MARKET_RANK (3410)
Scope: qot:read
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"count":50}' \
https://127.0.0.1:22499/api/us-pre-market-rank
POST /api/verification¶
proto_id: VERIFICATION (1006)
Scope: auth:setup
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"type":1,"op":1}' \
https://127.0.0.1:22499/api/verification
POST /api/watchlist-announcement¶
proto_id: QOT_GET_WATCHLIST_ANNOUNCEMENT (2131755014)
Scope: qot:read
Enablement and evidence boundary: start with --enable-v18-experimental-reads; the feature is off by default. Current evidence is source-aligned + local-green; live backend behavior remains unverified.
stock_ids are explicit. notice_types accepts 0..5; 0 means all and must be used alone.
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"page_size":20,"seq_mark":"","stock_ids":[7000700],"notice_types":[0],"extension_version":1}' \
https://127.0.0.1:22499/api/watchlist-announcement
POST /api/watchlist-news¶
proto_id: QOT_GET_WATCHLIST_NEWS (2131755013)
Scope: qot:read
Enablement and evidence boundary: start with --enable-v18-experimental-reads; the feature is off by default. Current evidence is source-aligned + local-green; live backend behavior remains unverified.
stock_ids must be supplied explicitly and cannot be empty; there is no whole-market fallback.
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"page_size":20,"seq_mark":"","stock_ids":[7000700],"extension_version":1}' \
https://127.0.0.1:22499/api/watchlist-news
POST /api/watchlist-rating¶
proto_id: QOT_GET_WATCHLIST_RATING (2131755015)
Scope: qot:read
Enablement and evidence boundary: start with --enable-v18-experimental-reads; the feature is off by default. Current evidence is source-aligned + local-green; live backend behavior remains unverified.
stock_ids must be supplied explicitly and cannot be empty; there is no whole-market fallback.
Parameters / Response: See proto definition. Fields use snake_case; v1.4.83+ alias support + v1.4.84+ enum int/string dual-accept.
Example:
curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
-d '{"page_size":20,"seq_mark":"","stock_ids":[7000700],"extension_version":1}' \
https://127.0.0.1:22499/api/watchlist-rating
Further reading¶
- rustdoc API: https://futuapi.com/api/
- MCP tool docs: /reference/mcp-tools
- gRPC proto_id table: /reference/grpc-api
- Common error codes + pits: /guide/common-pitfalls