Skip to content

gRPC API Complete Reference

Added in v1.4.85. Auto-generated by the FutuOpenD-rs build pipeline and refreshed with every daemon release.

Architecture

futu-opend's gRPC interface uses a single Request RPC design: all business calls are dispatched via proto_id to internal handlers, avoiding repeating RPC definitions for each business.

Service Definition

service FutuOpenD {
  // Universal request-response (covers all quote / trade / system APIs)
  rpc Request(FutuRequest) returns (FutuResponse);

  // Streaming push (quote updates, order updates, price alerts, etc.)
  rpc SubscribePush(SubscribePushRequest) returns (stream PushEvent);
}

Message Structure

FutuRequest

message FutuRequest {
  uint32 proto_id = 1;   // Protocol ID (e.g. 3004 = GetBasicQot)
  bytes body = 2;        // protobuf-encoded business body (Request.c2s)
}

For TRD_PLACE_COMBO_ORDER (2227), packet_id may stay at its default 0/0; the daemon fills it from the current gRPC connection before forwarding.

FutuResponse

message FutuResponse {
  int32 ret_type = 1;     // 0=success, other=error code
  string ret_msg = 2;     // error message (when ret_type != 0)
  uint32 proto_id = 3;    // echoed proto_id
  bytes body = 4;         // protobuf-encoded business body (Response.s2c)
}

PushEvent (streaming)

message PushEvent {
  uint32 proto_id = 1;    // Push protocol ID (e.g. 3005 = UpdateBasicQot)
  string sec_key = 2;     // Security key (quote push, format "market_code" e.g. "1_00700")
  int32 sub_type = 3;     // Subscription type (Qot_Common.SubType)
  bytes body = 4;         // protobuf-encoded push data
  string event_type = 5;  // "quote" / "trade" / "notify"
  uint64 acc_id = 6;      // Trade account ID (for trade push)
}

Usage Patterns

1. Unary Request (Request RPC)

# Python grpc client example
import grpc
from futu_service_pb2 import FutuRequest
from futu_service_pb2_grpc import FutuOpenDStub
from qot_get_basic_qot_pb2 import Request as GetBasicQotRequest

channel = grpc.insecure_channel('localhost:22500')
stub = FutuOpenDStub(channel)

# Build GetBasicQot request
c2s = GetBasicQotRequest.C2S(
    security_list=[{'market': 1, 'code': '00700'}]
)
body = GetBasicQotRequest(c2s=c2s).SerializeToString()

# Dispatch via proto_id
rsp = stub.Request(FutuRequest(proto_id=3004, body=body))
if rsp.ret_type == 0:
    from qot_get_basic_qot_pb2 import Response as GetBasicQotResponse
    result = GetBasicQotResponse().FromString(rsp.body)
    print(result.s2c)

2. Streaming Push

from futu_service_pb2 import SubscribePushRequest

push_stream = stub.SubscribePush(SubscribePushRequest())
for event in push_stream:
    if event.event_type == "quote":
        print(f"proto_id={event.proto_id} sec_key={event.sec_key}")

First call Request RPC with 3001 (QOT_SUB) to subscribe specific securities, then receive push via SubscribePush.

Auth

Same as REST / MCP: gRPC metadata authorization: Bearer <API_KEY>. See docs/guide/grpc.en.md and docs/guide/auth.en.md.

Full proto_id Table (132 total)

Grouped by category. Client code looks up this table for proto_id values; the corresponding Request/Response proto comes from Futu's official proto definitions.


Connection Management

Connection init, keep-alive, global state.

proto_id Name Hint
1001 INIT_CONNECT
1002 GET_GLOBAL_STATE
1003 NOTIFY
1004 KEEP_ALIVE

Quota Query

History K-line quota query.

proto_id Name Hint
1010 GET_USED_QUOTA

Quote Protocol

Real-time subscriptions, K-line, order book, broker queue, time-sharing, ticker.

proto_id Name Hint
1005 GET_USER_INFO
1006 VERIFICATION 其他
1007 GET_DELAY_STATISTICS
1008 TEST_CMD
1009 REMOTE_CMD
1326 GET_TOKEN_STATE NN/MM token enablement and binding-state query, useful for unlock-trade diagnost...
3001 QOT_SUB
3002 QOT_REG_QOT_PUSH
3003 QOT_GET_SUB_INFO
3004 QOT_GET_BASIC_QOT
3005 QOT_UPDATE_BASIC_QOT
3006 QOT_GET_KL
3007 QOT_UPDATE_KL
3008 QOT_GET_RT
3009 QOT_UPDATE_RT
3010 QOT_GET_TICKER
3011 QOT_UPDATE_TICKER
3012 QOT_GET_ORDER_BOOK
3013 QOT_UPDATE_ORDER_BOOK
3014 QOT_GET_BROKER
3015 QOT_UPDATE_BROKER
3016 QOT_GET_ORDER_DETAIL
3017 QOT_UPDATE_ORDER_DETAIL
3019 QOT_UPDATE_PRICE_REMINDER
3100 QOT_GET_HISTORY_KL
3101 QOT_GET_HISTORY_KL_POINTS
3103 QOT_REQUEST_HISTORY_KL
3104 QOT_REQUEST_HISTORY_KL_QUOTA
3105 QOT_REQUEST_REHAB
3200 QOT_GET_TRADE_DATE
3201 QOT_GET_SUSPEND
3202 QOT_GET_STATIC_INFO
3203 QOT_GET_SECURITY_SNAPSHOT
3204 QOT_GET_PLATE_SET
3205 QOT_GET_PLATE_SECURITY
3206 QOT_GET_REFERENCE
3207 QOT_GET_OWNER_PLATE
3208 QOT_GET_HOLDING_CHANGE_LIST
3209 QOT_GET_OPTION_CHAIN
3210 QOT_GET_WARRANT 新版 API
3211 QOT_GET_CAPITAL_FLOW
3212 QOT_GET_CAPITAL_DISTRIBUTION
3213 QOT_GET_USER_SECURITY
3214 QOT_MODIFY_USER_SECURITY
3215 QOT_STOCK_FILTER
3216 QOT_GET_CODE_CHANGE
3217 QOT_GET_IPO_LIST
3218 QOT_GET_FUTURE_INFO
3219 QOT_REQUEST_TRADE_DATE
3220 QOT_SET_PRICE_REMINDER
3221 QOT_GET_PRICE_REMINDER
3222 QOT_GET_USER_SECURITY_GROUP
3223 QOT_GET_MARKET_STATE
3224 QOT_GET_OPTION_EXPIRATION_DATE
3225 QOT_GET_FINANCIALS_EARNINGS_PRICE_MOVE Futu OpenAPI 10.6 QOT fundamental data / screen APIs.
3226 QOT_GET_FINANCIALS_EARNINGS_PRICE_HISTORY
3227 QOT_GET_FINANCIALS_STATEMENTS
3228 QOT_GET_FINANCIALS_REVENUE_BREAKDOWN
3229 QOT_GET_RESEARCH_ANALYST_CONSENSUS
3230 QOT_GET_RESEARCH_RATING_SUMMARY
3231 QOT_GET_RESEARCH_MORNINGSTAR_REPORT
3232 QOT_GET_VALUATION_DETAIL
3233 QOT_GET_VALUATION_PLATE_STOCK_LIST
3234 QOT_GET_CORPORATE_ACTIONS_DIVIDENDS
3235 QOT_GET_CORPORATE_ACTIONS_BUYBACKS
3236 QOT_GET_CORPORATE_ACTIONS_STOCK_SPLITS
3237 QOT_GET_SHAREHOLDERS_OVERVIEW
3238 QOT_GET_SHAREHOLDERS_HOLDING_CHANGES
3239 QOT_GET_SHAREHOLDERS_HOLDER_DETAIL
3240 QOT_GET_SHAREHOLDERS_INSTITUTIONAL
3241 QOT_GET_INSIDER_HOLDER_LIST
3242 QOT_GET_INSIDER_TRADE_LIST
3243 QOT_GET_COMPANY_PROFILE
3244 QOT_GET_COMPANY_EXECUTIVES
3245 QOT_GET_COMPANY_EXECUTIVE_BACKGROUND
3246 QOT_GET_COMPANY_OPERATIONAL_EFFICIENCY
3247 QOT_GET_TOP_TEN_BUY_SELL_BROKERS
3248 QOT_GET_DAILY_SHORT_VOLUME
3249 QOT_GET_SHORT_INTEREST
3250 QOT_GET_OPTION_VOLATILITY
3251 QOT_GET_OPTION_EXERCISE_PROBABILITY
3252 QOT_STOCK_SCREEN
3253 QOT_OPTION_SCREEN
3254 QOT_WARRANT_SCREEN
3255 QOT_GET_OPTION_QUOTE
3256 QOT_GET_OPTION_STRATEGY
3257 QOT_GET_OPTION_STRATEGY_ANALYSIS
3258 QOT_GET_OPTION_STRATEGY_SPREAD
3702 QOT_GET_REHAB
3801 QOT_GET_TECHNICAL_UNUSUAL
3802 QOT_GET_FINANCIAL_UNUSUAL
3803 QOT_GET_DERIVATIVE_UNUSUAL
6365 QOT_GET_TICKER_STATISTIC Ticker-statistic summary query.
6366 QOT_GET_TICKER_STATISTIC_DETAIL Ticker-statistic detail query; returns statistic rows plus pagination metadata.
6503 QOT_GET_SPREAD_TABLE Spread-table query for quote price increments.
20231 QOT_GET_RISK_FREE_RATE Risk-free-rate query for option pricing; returns HK / US / JP rates.

Trading Protocol

Account list, funds, positions, place / modify / cancel orders, unlock, history.

proto_id Name Hint
2001 TRD_GET_ACC_LIST
2005 TRD_UNLOCK_TRADE
2008 TRD_SUB_ACC_PUSH
2101 TRD_GET_FUNDS
2102 TRD_GET_POSITION_LIST
2111 TRD_GET_MAX_TRD_QTYS
2112 TRD_GET_COMBO_MAX_TRD_QTYS
2201 TRD_GET_ORDER_LIST
2202 TRD_PLACE_ORDER
2205 TRD_MODIFY_ORDER
2208 TRD_UPDATE_ORDER
2211 TRD_GET_ORDER_FILL_LIST
2218 TRD_UPDATE_ORDER_FILL
2221 TRD_GET_HISTORY_ORDER_LIST
2222 TRD_GET_HISTORY_ORDER_FILL_LIST
2223 TRD_GET_MARGIN_RATIO 交易新版 API
2225 TRD_GET_ORDER_FEE
2226 TRD_FLOW_SUMMARY
2227 TRD_PLACE_COMBO_ORDER
2237 TRD_RECONFIRM_ORDER
2240 TRD_NOTIFY
22701 TRD_GET_CASH_LOG Cash log, cash detail, and business-group query endpoints.
22702 TRD_GET_CASH_DETAIL
22703 TRD_GET_BIZ_GROUP
22704 TRD_GET_MARGIN_INFO Margin-account information per market.
22705 TRD_GET_ACCOUNT_FLAG Account compliance flags for product access, risk assessment, and opt-in status.
22706 TRD_GET_BOND_TOTAL_ASSET Bond holdings and bond trade-preparation endpoints. Only HK / US / SG bond accou...
22707 TRD_GET_BOND_SINGLE_ASSET
22708 TRD_GET_BOND_POSITION_LIST
22709 TRD_GET_BOND_ANSWER_STATE
22710 TRD_GET_BOND_TRADE_REMINDER

Further