Skip to content

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 127 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 20 Quote Queries
Plates / Filter / Metadata 8 Plates / Filter / Metadata
Reference / Derivatives 48 Reference / Derivatives
Price Reminders 2 Price Reminders
Trading Accounts (Read) 27 Trading Accounts (Read)
Trading Write 7 Trading Write
Admin 3 Admin

Global conventions

  • Base URL: http://127.0.0.1:22499 (default REST port, change via --rest-port)
  • Content-Type: application/json
  • Auth: Authorization: Bearer <API_KEY> (if keys.json is configured; otherwise legacy mode without auth — and since v1.4.86 fail-closed is the production default)
  • Response envelope:

    {
      "ret_type": 0,
      "ret_msg": null,
      "err_code": null,
      "s2c": { ...business payload... }
    }
    
    ret_type == 0 means 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 field error).

  • Rate / limits: Controlled via startup flags (--allowed-markets, --max-order-value, etc.). See docs/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:

curl -H 'Authorization: Bearer $FUTU_API_KEY' \
  http://127.0.0.1:22499/api/delay-statistics

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}' \
  http://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:

curl -H 'Authorization: Bearer $FUTU_API_KEY' \
  http://127.0.0.1:22499/api/global-state

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:

curl -H 'Authorization: Bearer $FUTU_API_KEY' \
  http://127.0.0.1:22499/api/ping

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:

curl -H 'Authorization: Bearer $FUTU_API_KEY' \
  http://127.0.0.1:22499/api/push-subscriber-info

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:

curl -H 'Authorization: Bearer $FUTU_API_KEY' \
  http://127.0.0.1:22499/api/quote-rights

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:

curl -H 'Authorization: Bearer $FUTU_API_KEY' \
  http://127.0.0.1:22499/api/user-info

Quote Subscriptions

Subscribe/unsubscribe quote push, query subscription state. Receive push via WebSocket /ws. Since v1.4.106 /api/subscribe and /api/unsubscribe require qot:state (user-state write); transitional qot:read keys still accepted.

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}' \
  http://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:

curl -H 'Authorization: Bearer $FUTU_API_KEY' \
  http://127.0.0.1:22499/api/sub-info

POST /api/subscribe

proto_id: QOT_SUB (3001)

Scope: qot:state

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}' \
  http://127.0.0.1:22499/api/subscribe

POST /api/unsubscribe

proto_id: QOT_SUB (3001)

Scope: qot:state

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}' \
  http://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:

curl -H 'Authorization: Bearer $FUTU_API_KEY' \
  http://127.0.0.1:22499/ws

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"}' \
  http://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"}' \
  http://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}' \
  http://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.

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"}' \
  http://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"}' \
  http://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}' \
  http://127.0.0.1:22499/api/kline

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"]}' \
  http://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}' \
  http://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"}' \
  http://127.0.0.1:22499/api/quote

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:

curl -H 'Authorization: Bearer $FUTU_API_KEY' \
  http://127.0.0.1:22499/api/risk-free-rate

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 '{}' \
  http://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"}' \
  http://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"}' \
  http://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:

curl -H 'Authorization: Bearer $FUTU_API_KEY' \
  http://127.0.0.1:22499/api/spread-table

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 '{}' \
  http://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"]}' \
  http://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}' \
  http://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}' \
  http://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"}}' \
  http://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 '{}' \
  http://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"}]}}' \
  http://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}}' \
  http://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}' \
  http://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"}}' \
  http://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}' \
  http://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"}}' \
  http://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"}' \
  http://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"}' \
  http://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.4.106 /api/modify-user-security requires qot:state (watchlist mutation); transitional qot:read keys still accepted.

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"}' \
  http://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"}}' \
  http://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"}}' \
  http://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"}}' \
  http://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"}}' \
  http://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"}}' \
  http://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"}}' \
  http://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"}}' \
  http://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"}' \
  http://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"}' \
  http://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"}}' \
  http://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"}}' \
  http://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"}}' \
  http://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"}}' \
  http://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"}]}}' \
  http://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}' \
  http://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=-1 with "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"}' \
  http://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"}}' \
  http://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"}}' \
  http://127.0.0.1:22499/api/insider-trade-list

POST /api/modify-user-security

proto_id: QOT_MODIFY_USER_SECURITY (3214)

Scope: qot:state

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"}]}' \
  http://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"}' \
  http://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"}}' \
  http://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"}' \
  http://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}]}}' \
  http://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}' \
  http://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}}' \
  http://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}]}}' \
  http://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}}' \
  http://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}' \
  http://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"]}' \
  http://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}' \
  http://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"]}' \
  http://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"}}' \
  http://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"}}' \
  http://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"}}' \
  http://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"}}' \
  http://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"}}' \
  http://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"}}' \
  http://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"}}' \
  http://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"}}' \
  http://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}' \
  http://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"}' \
  http://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"}}' \
  http://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":"自选"}' \
  http://127.0.0.1:22499/api/user-security

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"}}' \
  http://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"}}' \
  http://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"}' \
  http://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}' \
  http://127.0.0.1:22499/api/warrant-screen

Price Reminders

Query/set/modify/delete price reminders. Since v1.4.106 /api/set-price-reminder requires qot:state; /api/price-reminder (read) stays 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"}' \
  http://127.0.0.1:22499/api/price-reminder

POST /api/set-price-reminder

proto_id: QOT_SET_PRICE_REMINDER (3220)

Scope: qot:state

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}' \
  http://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"}' \
  http://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}' \
  http://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:

curl -H 'Authorization: Bearer $FUTU_API_KEY' \
  http://127.0.0.1:22499/api/accounts

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}' \
  http://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}' \
  http://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}' \
  http://127.0.0.1:22499/api/bond-position-list

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}' \
  http://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}' \
  http://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}' \
  http://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>"}' \
  http://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"}' \
  http://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}}' \
  http://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"}' \
  http://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}' \
  http://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"}' \
  http://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"}' \
  http://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:

curl -H 'Authorization: Bearer $FUTU_API_KEY' \
  http://127.0.0.1:22499/api/list-accounts

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}' \
  http://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"]}' \
  http://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}' \
  http://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"]}' \
  http://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}' \
  http://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}' \
  http://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}' \
  http://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}' \
  http://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:

curl -H 'Authorization: Bearer $FUTU_API_KEY' \
  http://127.0.0.1:22499/api/token-state

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}' \
  http://127.0.0.1:22499/api/token-state

Trading Write

Place/modify/cancel 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}' \
  http://127.0.0.1:22499/api/cancel-all-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}}' \
  http://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.

Example:

curl -X POST -H 'Authorization: Bearer $FUTU_API_KEY' -H 'Content-Type: application/json' \
  -d '{"market":1,"acc_id":123456,"order_id":"987","op":1}' \
  http://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}' \
  http://127.0.0.1:22499/api/order

POST /api/sub-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]}' \
  http://127.0.0.1:22499/api/sub-acc-push

POST /api/unlock-trade

proto_id: TRD_UNLOCK_TRADE (2005)

Scope: trade:unlock

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>"}' \
  http://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]}' \
  http://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/statuslast_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 '{}' \
  http://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 '{}' \
  http://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.

Example:

curl -H 'Authorization: Bearer $FUTU_API_KEY' \
  http://127.0.0.1:22499/api/admin/status


Further reading