# Get Company Executives
- Python
- Proto
- C#
- Java
- C++
- JavaScript
get_company_executives(code)
Description
Get the list of directors and executives for the specified stock, including display name, name, position, start date, publish date, gender, age, education, and annual salary
Parameters
Parameter Type Description code str Stock code e.g. HK.00700; supports equities and fundsReturn
Parameter Type Description ret RET_CODE API call result data pd.DataFrame When ret == RET_OK, returns executives DataFrame str When ret != RET_OK, returns error description DataFrame field description:
Field Type Description display_leader_name str Display name For display only; do not use as input to get_company_executive_backgroundleader_name str Executive name Can be passed to get_company_executive_background to query backgroundposition_name str Position name begin_date int Start date timestamp (seconds) begin_date_str str Start date Format YYYY-MM-DD, in the market's timezoneleader_gender str Gender e.g. "Male" / "Female"leader_age str Age highest_education str Highest education level annual_salary int Annual salary issue_date int Publish date timestamp (seconds) issue_date_str str Publish date Format YYYY-MM-DD, in the market's timezone
Example
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
ret, data = quote_ctx.get_company_executives("US.AAPL")
if ret == RET_OK:
print(data[['display_leader_name', 'position_name', 'begin_date_str', 'annual_salary']].to_string(index=False))
print('count:', len(data))
else:
print('error:', data)
quote_ctx.close()
2
3
4
5
6
7
8
9
10
- Output
display_leader_name position_name begin_date_str annual_salary
Timothy D. Cook Director and Chief Executive Officer NaN 74294811.0
Sabih Khan Chief Operating Officer NaN 27031671.0
Kevan Parekh Chief Financial Officer and Senior Vice President NaN 22467309.0
Ben Borders Principal Accounting Officer and Senior Director, Corporate Accounting NaN NaN
Katherine L. Adams Senior Vice President NaN 27032248.0
Deirdre O'Brien Senior Vice President, Retail and People NaN 27047633.0
Jennifer G. Newstead Senior Vice President, General Counsel and Secretary NaN NaN
John Ternus Senior Vice President, Hardware Engineering NaN NaN
Dr. Arthur D. Levinson, PhD Chairman of the Board NaN 557231.0
Susan L. Wagner Independent Director NaN 445373.0
Monica C. Lozano Independent Director NaN 412956.0
Andrea Jung Independent Director NaN 458020.0
Alex Gorsky Independent Director NaN 416492.0
Dr. Wanda M. Austin, PhD Independent Director NaN 412850.0
Dr. Ronald D. Sugar Independent Director NaN 471283.0
count: 15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Qot_GetCompanyExecutives.proto
Description
Get company executives
Parameters
message C2S
{
required Qot_Common.Security security = 1; // Stock
}
message Request
{
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
- Security structure, refer to Security
- Return
// Company executive info item
message DirectorInfo
{
optional string displayLeaderName = 1; // Display name (for display only; not for querying background)
optional string leaderName = 2; // Executive name (can be passed to GetCompanyExecutiveBackground)
optional string positionName = 3; // Position name
optional uint64 beginDate = 4; // Start date timestamp (seconds)
optional string beginDateStr = 5; // Start date string, format YYYY-MM-DD, in market timezone
optional string leaderGender = 6; // Gender, e.g. "Male" / "Female"
optional string leaderAge = 7; // Age as string, e.g. "62"
optional string highestEducation = 8; // Highest education level
optional uint64 annualSalary = 9; // Annual salary
optional uint64 issueDate = 10; // Publish date timestamp (seconds)
optional string issueDateStr = 11; // Publish date string, format YYYY-MM-DD, in market timezone
}
message S2C
{
repeated DirectorInfo directorList = 1; // Director and executive list
}
message Response
{
required int32 retType = 1 [default = -400]; // Return result, refer to Common.RetType
optional string retMsg = 2; // Return result description
optional int32 errCode = 3; // Error code
optional S2C s2c = 4;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
- API call result structure, refer to RetType
Protocol ID
3244
uint GetCompanyExecutives(QotGetCompanyExecutives.Request req);
virtual void OnReply_GetCompanyExecutives(MMAPI_Conn client, uint nSerialNo, QotGetCompanyExecutives.Response rsp);
Description
Get company executives
Parameters
message C2S
{
required Qot_Common.Security security = 1; // Stock
}
message Request
{
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
- Security structure, refer to Security
- Return
// Company executive info item
message DirectorInfo
{
optional string displayLeaderName = 1; // Display name (for display only; not for querying background)
optional string leaderName = 2; // Executive name (can be passed to GetCompanyExecutiveBackground)
optional string positionName = 3; // Position name
optional uint64 beginDate = 4; // Start date timestamp (seconds)
optional string beginDateStr = 5; // Start date string, format YYYY-MM-DD, in market timezone
optional string leaderGender = 6; // Gender, e.g. "Male" / "Female"
optional string leaderAge = 7; // Age as string, e.g. "62"
optional string highestEducation = 8; // Highest education level
optional uint64 annualSalary = 9; // Annual salary
optional uint64 issueDate = 10; // Publish date timestamp (seconds)
optional string issueDateStr = 11; // Publish date string, format YYYY-MM-DD, in market timezone
}
message S2C
{
repeated DirectorInfo directorList = 1; // Director and executive list
}
message Response
{
required int32 retType = 1 [default = -400]; // Return result, refer to Common.RetType
optional string retMsg = 2; // Return result description
optional int32 errCode = 3; // Error code
optional S2C s2c = 4;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
- API call result structure, refer to RetType
- Example
public class Program : FTSPI_Qot, FTSPI_Conn
{
FTAPI_Qot qot = new FTAPI_Qot();
public Program()
{
qot.SetClientInfo("csharp", 1);
qot.SetConnCallback(this);
qot.SetQotCallback(this);
}
public void Start()
{
qot.InitConnect("127.0.0.1", (ushort)11111, false);
}
public void OnInitConnect(FTAPI_Conn client, long errCode, String desc)
{
Console.Write("Qot onInitConnect: ret={0} desc={1} connID={2}\n", errCode, desc, client.GetConnectID());
if (errCode != 0)
return;
QotCommon.Security sec = QotCommon.Security.CreateBuilder()
.SetMarket((int)QotCommon.QotMarket.QotMarket_US_Security)
.SetCode("AAPL")
.Build();
QotGetCompanyExecutives.C2S c2s = QotGetCompanyExecutives.C2S.CreateBuilder()
.SetSecurity(sec)
.Build();
QotGetCompanyExecutives.Request req = QotGetCompanyExecutives.Request.CreateBuilder().SetC2S(c2s).Build();
uint seqNo = qot.GetCompanyExecutives(req);
Console.Write("Send QotGetCompanyExecutives: {0}\n", seqNo);
}
public void OnDisconnect(FTAPI_Conn client, long errCode)
{
Console.Write("Qot onDisConnect: {0}\n", errCode);
}
public void OnReply_GetCompanyExecutives(FTAPI_Conn client, uint nSerialNo, QotGetCompanyExecutives.Response rsp)
{
Console.Write("Reply: QotGetCompanyExecutives: {0} {1}\n", nSerialNo, rsp.ToString());
}
public static void Main(String[] args)
{
FTAPI.Init();
Program qot = new Program();
qot.Start();
while (true)
Thread.Sleep(1000 * 600);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
- Output
sent seqNo=3
retType: 0
retMsg: ""
errCode: 0
s2c {
directorList {
displayLeaderName: "Timothy D. Cook"
leaderName: "Mr. Timothy D. Cook"
positionName: "Director and Chief Executive Officer"
leaderGender: "male"
leaderAge: "65"
annualSalary: 74294811
issueDate: 1776614400
issueDateStr: "2026-04-19"
}
directorList {
//...
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int getCompanyExecutives(QotGetCompanyExecutives.Request req);
void onReply_GetCompanyExecutives(MMAPI_Conn client, int nSerialNo, QotGetCompanyExecutives.Response rsp);
Description
Get company executives
Parameters
message C2S
{
required Qot_Common.Security security = 1; // Stock
}
message Request
{
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
- Security structure, refer to Security
- Return
// Company executive info item
message DirectorInfo
{
optional string displayLeaderName = 1; // Display name (for display only; not for querying background)
optional string leaderName = 2; // Executive name (can be passed to GetCompanyExecutiveBackground)
optional string positionName = 3; // Position name
optional uint64 beginDate = 4; // Start date timestamp (seconds)
optional string beginDateStr = 5; // Start date string, format YYYY-MM-DD, in market timezone
optional string leaderGender = 6; // Gender, e.g. "Male" / "Female"
optional string leaderAge = 7; // Age as string, e.g. "62"
optional string highestEducation = 8; // Highest education level
optional uint64 annualSalary = 9; // Annual salary
optional uint64 issueDate = 10; // Publish date timestamp (seconds)
optional string issueDateStr = 11; // Publish date string, format YYYY-MM-DD, in market timezone
}
message S2C
{
repeated DirectorInfo directorList = 1; // Director and executive list
}
message Response
{
required int32 retType = 1 [default = -400]; // Return result, refer to Common.RetType
optional string retMsg = 2; // Return result description
optional int32 errCode = 3; // Error code
optional S2C s2c = 4;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
- API call result structure, refer to RetType
- Example
public class QotDemo implements FTSPI_Qot, FTSPI_Conn {
FTAPI_Conn_Qot qot = new FTAPI_Conn_Qot();
public QotDemo() {
qot.setClientInfo("javaclient", 1);
qot.setConnSpi(this);
qot.setQotSpi(this);
}
public void start() {
qot.initConnect("127.0.0.1", (short)11111, false);
}
@Override
public void onInitConnect(FTAPI_Conn client, long errCode, String desc)
{
System.out.printf("Qot onInitConnect: ret=%b desc=%s connID=%d\n", errCode, desc, client.getConnectID());
if (errCode != 0)
return;
QotCommon.Security sec = QotCommon.Security.newBuilder()
.setMarket(QotCommon.QotMarket.QotMarket_US_Security_VALUE)
.setCode("AAPL")
.build();
QotGetCompanyExecutives.C2S c2s = QotGetCompanyExecutives.C2S.newBuilder()
.setSecurity(sec)
.build();
QotGetCompanyExecutives.Request req = QotGetCompanyExecutives.Request.newBuilder().setC2S(c2s).build();
int seqNo = qot.getCompanyExecutives(req);
System.out.printf("Send QotGetCompanyExecutives: %d\n", seqNo);
}
@Override
public void onDisconnect(FTAPI_Conn client, long errCode) {
System.out.printf("Qot onDisConnect: %d\n", errCode);
}
@Override
public void onReply_GetCompanyExecutives(FTAPI_Conn client, int nSerialNo, QotGetCompanyExecutives.Response rsp) {
if (rsp.getRetType() != 0) {
System.out.printf("QotGetCompanyExecutives failed: %s\n", rsp.getRetMsg());
}
else {
try {
String json = JsonFormat.printer().print(rsp);
System.out.printf("Receive QotGetCompanyExecutives: %s\n", json);
} catch (InvalidProtocolBufferException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
FTAPI.init();
QotDemo qot = new QotDemo();
qot.start();
while (true) {
try {
Thread.sleep(1000 * 600);
} catch (InterruptedException exc) {
}
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
- Output
Qot onInitConnect: ret=0 desc= connID=7459212684023350975
Send Qot_GetCompanyExecutives: 2
Receive Qot_GetCompanyExecutives: retType: 0
retMsg: ""
errCode: 0
s2c {
directorList {
displayLeaderName: "Timothy D. Cook"
leaderName: "Mr. Timothy D. Cook"
positionName: "Director and Chief Executive Officer"
leaderGender: "male"
leaderAge: "65"
annualSalary: 74294811
issueDate: 1776614400
issueDateStr: "2026-04-19"
}
directorList {
//...
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
moomoo::u32_t GetCompanyExecutives(const Qot_GetCompanyExecutives::Request &stReq);
virtual void OnReply_GetCompanyExecutives(moomoo::u32_t nSerialNo, const Qot_GetCompanyExecutives::Response &stRsp) = 0;
Description
Get company executives
Parameters
message C2S
{
required Qot_Common.Security security = 1; // Stock
}
message Request
{
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
- Security structure, refer to Security
- Return
// Company executive info item
message DirectorInfo
{
optional string displayLeaderName = 1; // Display name (for display only; not for querying background)
optional string leaderName = 2; // Executive name (can be passed to GetCompanyExecutiveBackground)
optional string positionName = 3; // Position name
optional uint64 beginDate = 4; // Start date timestamp (seconds)
optional string beginDateStr = 5; // Start date string, format YYYY-MM-DD, in market timezone
optional string leaderGender = 6; // Gender, e.g. "Male" / "Female"
optional string leaderAge = 7; // Age as string, e.g. "62"
optional string highestEducation = 8; // Highest education level
optional uint64 annualSalary = 9; // Annual salary
optional uint64 issueDate = 10; // Publish date timestamp (seconds)
optional string issueDateStr = 11; // Publish date string, format YYYY-MM-DD, in market timezone
}
message S2C
{
repeated DirectorInfo directorList = 1; // Director and executive list
}
message Response
{
required int32 retType = 1 [default = -400]; // Return result, refer to Common.RetType
optional string retMsg = 2; // Return result description
optional int32 errCode = 3; // Error code
optional S2C s2c = 4;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
- API call result structure, refer to RetType
- Example
class Program : public FTSPI_Qot, public FTSPI_Trd, public FTSPI_Conn
{
public:
Program() {
m_pQotApi = FTAPI::CreateQotApi();
m_pQotApi->RegisterQotSpi(this);
m_pQotApi->RegisterConnSpi(this);
}
~Program() {
if (m_pQotApi != nullptr)
{
m_pQotApi->UnregisterQotSpi();
m_pQotApi->UnregisterConnSpi();
FTAPI::ReleaseQotApi(m_pQotApi);
m_pQotApi = nullptr;
}
}
void Start() {
m_pQotApi->InitConnect("127.0.0.1", 11111, false);
}
virtual void OnInitConnect(FTAPI_Conn* pConn, Futu::i64_t nErrCode, const char* strDesc) {
cout << "connect" << endl;
// construct request message
Qot_GetCompanyExecutives::Request req;
Qot_GetCompanyExecutives::C2S *c2s = req.mutable_c2s();
Qot_Common::Security *sec = c2s->mutable_security();
sec->set_code("AAPL");
sec->set_market(Qot_Common::QotMarket::QotMarket_US_Security);
m_pQotApi->GetCompanyExecutives(req);
cout << "GetCompanyExecutives" << endl;
}
virtual void OnReply_GetCompanyExecutives(Futu::u32_t nSerialNo, const Qot_GetCompanyExecutives::Response &stRsp){
cout << "OnReply_GetCompanyExecutives:" << endl;
// print response
// ProtoBufToBodyData and UTF8ToLocal refer to tool.h in Samples
string resp_str;
ProtoBufToBodyData(stRsp, resp_str);
cout << UTF8ToLocal(resp_str) << endl;
}
protected:
FTAPI_Qot *m_pQotApi;
};
int32_t main(int32_t argc, char** argv)
{
FTAPI::Init();
{
Program program;
program.Start();
getchar();
}
protobuf::ShutdownProtobufLibrary();
FTAPI::UnInit();
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
- Output
onInitConnect: ret=0 desc=Succeed!
Send Qot_GetCompanyExecutives seqNo=3
retType: 0
retMsg: ""
errCode: 0
s2c {
directorList {
displayLeaderName: "Timothy D. Cook"
leaderName: "Mr. Timothy D. Cook"
positionName: "Director and Chief Executive Officer"
leaderGender: "male"
leaderAge: "65"
annualSalary: 74294811
issueDate: 1776614400
issueDateStr: "2026-04-19"
}
directorList {
//...
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
GetCompanyExecutives(req);
Description
Get company executives
Parameters
message C2S
{
required Qot_Common.Security security = 1; // Stock
}
message Request
{
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
- Security structure, refer to Security
- Return
// Company executive info item
message DirectorInfo
{
optional string displayLeaderName = 1; // Display name (for display only; not for querying background)
optional string leaderName = 2; // Executive name (can be passed to GetCompanyExecutiveBackground)
optional string positionName = 3; // Position name
optional uint64 beginDate = 4; // Start date timestamp (seconds)
optional string beginDateStr = 5; // Start date string, format YYYY-MM-DD, in market timezone
optional string leaderGender = 6; // Gender, e.g. "Male" / "Female"
optional string leaderAge = 7; // Age as string, e.g. "62"
optional string highestEducation = 8; // Highest education level
optional uint64 annualSalary = 9; // Annual salary
optional uint64 issueDate = 10; // Publish date timestamp (seconds)
optional string issueDateStr = 11; // Publish date string, format YYYY-MM-DD, in market timezone
}
message S2C
{
repeated DirectorInfo directorList = 1; // Director and executive list
}
message Response
{
required int32 retType = 1 [default = -400]; // Return result, refer to Common.RetType
optional string retMsg = 2; // Return result description
optional int32 errCode = 3; // Error code
optional S2C s2c = 4;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
- API call result structure, refer to RetType
- Example
import ftWebsocket from "futu-api";
import { Common, Qot_Common } from "futu-api/proto";
import beautify from "js-beautify";
function QotGetCompanyExecutives(){
const { RetType } = Common
const { QotMarket } = Qot_Common
let [addr, port, enable_ssl, key] = ["127.0.0.1", 33333, false, '7522027ccf5a06b1'];
let websocket = new ftWebsocket();
websocket.onlogin = (ret, msg)=>{
if (ret) {
const req = {
c2s: {
security: {
market: QotMarket.QotMarket_US_Security,
code: "AAPL",
},
},
};
websocket.GetCompanyExecutives(req)
.then((res) => {
let { errCode, retMsg, retType,s2c } = res
console.log("GetCompanyExecutives: errCode %d, retMsg %s, retType %d", errCode, retMsg, retType);
if(retType == RetType.RetType_Succeed){
let data = beautify(JSON.stringify(s2c), {
indent_size: 2,
space_in_empty_paren: true,
});
console.log(data);
}
})
.catch((error) => {
console.log("error:", error);
});
} else {
console.log("error", msg);
}
};
websocket.start(addr, port, enable_ssl, key);
setTimeout(()=>{
websocket.stop();
console.log("stop");
}, 5000);
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
- Output
GetCompanyExecutives: errCode 0, retMsg , retType 0
{
"directorList": [{
"displayLeaderName": "Timothy D. Cook",
"leaderName": "Mr. Timothy D. Cook",
"positionName": "Director and Chief Executive Officer",
"leaderGender": "male",
"leaderAge": "65",
"annualSalary": 74294811,
"issueDate": 1776614400,
"issueDateStr": "2026-04-19"
//...
}]
}
stop
2
3
4
5
6
7
8
9
10
11
12
13
14
15
API Limits
- Max 30 requests per 30 seconds.
- Supports equities and funds.
- Python
- Proto
- C#
- Java
- C++
- JavaScript
get_company_executives(code)
Description
Get the list of directors and executives for the specified stock, including display name, name, position, start date, publish date, gender, age, education, and annual salary
Parameters
Parameter Type Description code str Stock code e.g. HK.00700; supports equities and fundsReturn
Parameter Type Description ret RET_CODE API call result data pd.DataFrame When ret == RET_OK, returns executives DataFrame str When ret != RET_OK, returns error description DataFrame field description:
Field Type Description display_leader_name str Display name For display only; do not use as input to get_company_executive_backgroundleader_name str Executive name Can be passed to get_company_executive_background to query backgroundposition_name str Position name begin_date int Start date timestamp (seconds) begin_date_str str Start date Format YYYY-MM-DD, in the market's timezoneleader_gender str Gender e.g. "Male" / "Female"leader_age str Age highest_education str Highest education level annual_salary int Annual salary issue_date int Publish date timestamp (seconds) issue_date_str str Publish date Format YYYY-MM-DD, in the market's timezone
Example
from moomoo import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
ret, data = quote_ctx.get_company_executives("US.AAPL")
if ret == RET_OK:
print(data[['display_leader_name', 'position_name', 'begin_date_str', 'annual_salary']].to_string(index=False))
print('count:', len(data))
else:
print('error:', data)
quote_ctx.close()
2
3
4
5
6
7
8
9
10
- Output
display_leader_name position_name begin_date_str annual_salary
Timothy D. Cook Director and Chief Executive Officer NaN 74294811.0
Sabih Khan Chief Operating Officer NaN 27031671.0
Kevan Parekh Chief Financial Officer and Senior Vice President NaN 22467309.0
Ben Borders Principal Accounting Officer and Senior Director, Corporate Accounting NaN NaN
Katherine L. Adams Senior Vice President NaN 27032248.0
Deirdre O'Brien Senior Vice President, Retail and People NaN 27047633.0
Jennifer G. Newstead Senior Vice President, General Counsel and Secretary NaN NaN
John Ternus Senior Vice President, Hardware Engineering NaN NaN
Dr. Arthur D. Levinson, PhD Chairman of the Board NaN 557231.0
Susan L. Wagner Independent Director NaN 445373.0
Monica C. Lozano Independent Director NaN 412956.0
Andrea Jung Independent Director NaN 458020.0
Alex Gorsky Independent Director NaN 416492.0
Dr. Wanda M. Austin, PhD Independent Director NaN 412850.0
Dr. Ronald D. Sugar Independent Director NaN 471283.0
count: 15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Qot_GetCompanyExecutives.proto
Description
Get company executives
Parameters
message C2S
{
required Qot_Common.Security security = 1; // Stock
}
message Request
{
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
- Security structure, refer to Security
- Return
// Company executive info item
message DirectorInfo
{
optional string displayLeaderName = 1; // Display name (for display only; not for querying background)
optional string leaderName = 2; // Executive name (can be passed to GetCompanyExecutiveBackground)
optional string positionName = 3; // Position name
optional uint64 beginDate = 4; // Start date timestamp (seconds)
optional string beginDateStr = 5; // Start date string, format YYYY-MM-DD, in market timezone
optional string leaderGender = 6; // Gender, e.g. "Male" / "Female"
optional string leaderAge = 7; // Age as string, e.g. "62"
optional string highestEducation = 8; // Highest education level
optional uint64 annualSalary = 9; // Annual salary
optional uint64 issueDate = 10; // Publish date timestamp (seconds)
optional string issueDateStr = 11; // Publish date string, format YYYY-MM-DD, in market timezone
}
message S2C
{
repeated DirectorInfo directorList = 1; // Director and executive list
}
message Response
{
required int32 retType = 1 [default = -400]; // Return result, refer to Common.RetType
optional string retMsg = 2; // Return result description
optional int32 errCode = 3; // Error code
optional S2C s2c = 4;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
- API call result structure, refer to RetType
Protocol ID
3244
uint GetCompanyExecutives(QotGetCompanyExecutives.Request req);
virtual void OnReply_GetCompanyExecutives(MMAPI_Conn client, uint nSerialNo, QotGetCompanyExecutives.Response rsp);
Description
Get company executives
Parameters
message C2S
{
required Qot_Common.Security security = 1; // Stock
}
message Request
{
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
- Security structure, refer to Security
- Return
// Company executive info item
message DirectorInfo
{
optional string displayLeaderName = 1; // Display name (for display only; not for querying background)
optional string leaderName = 2; // Executive name (can be passed to GetCompanyExecutiveBackground)
optional string positionName = 3; // Position name
optional uint64 beginDate = 4; // Start date timestamp (seconds)
optional string beginDateStr = 5; // Start date string, format YYYY-MM-DD, in market timezone
optional string leaderGender = 6; // Gender, e.g. "Male" / "Female"
optional string leaderAge = 7; // Age as string, e.g. "62"
optional string highestEducation = 8; // Highest education level
optional uint64 annualSalary = 9; // Annual salary
optional uint64 issueDate = 10; // Publish date timestamp (seconds)
optional string issueDateStr = 11; // Publish date string, format YYYY-MM-DD, in market timezone
}
message S2C
{
repeated DirectorInfo directorList = 1; // Director and executive list
}
message Response
{
required int32 retType = 1 [default = -400]; // Return result, refer to Common.RetType
optional string retMsg = 2; // Return result description
optional int32 errCode = 3; // Error code
optional S2C s2c = 4;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
- API call result structure, refer to RetType
- Example
public class Program : MMSPI_Qot, MMSPI_Conn
{
MMAPI_Qot qot = new MMAPI_Qot();
public Program()
{
qot.SetClientInfo("csharp", 1);
qot.SetConnCallback(this);
qot.SetQotCallback(this);
}
public void Start()
{
qot.InitConnect("127.0.0.1", (ushort)11111, false);
}
public void OnInitConnect(MMAPI_Conn client, long errCode, String desc)
{
Console.Write("Qot onInitConnect: ret={0} desc={1} connID={2}\n", errCode, desc, client.GetConnectID());
if (errCode != 0)
return;
QotCommon.Security sec = QotCommon.Security.CreateBuilder()
.SetMarket((int)QotCommon.QotMarket.QotMarket_US_Security)
.SetCode("AAPL")
.Build();
QotGetCompanyExecutives.C2S c2s = QotGetCompanyExecutives.C2S.CreateBuilder()
.SetSecurity(sec)
.Build();
QotGetCompanyExecutives.Request req = QotGetCompanyExecutives.Request.CreateBuilder().SetC2S(c2s).Build();
uint seqNo = qot.GetCompanyExecutives(req);
Console.Write("Send QotGetCompanyExecutives: {0}\n", seqNo);
}
public void OnDisconnect(MMAPI_Conn client, long errCode)
{
Console.Write("Qot onDisConnect: {0}\n", errCode);
}
public void OnReply_GetCompanyExecutives(MMAPI_Conn client, uint nSerialNo, QotGetCompanyExecutives.Response rsp)
{
Console.Write("Reply: QotGetCompanyExecutives: {0} {1}\n", nSerialNo, rsp.ToString());
}
public static void Main(String[] args)
{
MMAPI.Init();
Program qot = new Program();
qot.Start();
while (true)
Thread.Sleep(1000 * 600);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
- Output
sent seqNo=3
retType: 0
retMsg: ""
errCode: 0
s2c {
directorList {
displayLeaderName: "Timothy D. Cook"
leaderName: "Mr. Timothy D. Cook"
positionName: "Director and Chief Executive Officer"
leaderGender: "male"
leaderAge: "65"
annualSalary: 74294811
issueDate: 1776614400
issueDateStr: "2026-04-19"
}
directorList {
//...
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int getCompanyExecutives(QotGetCompanyExecutives.Request req);
void onReply_GetCompanyExecutives(MMAPI_Conn client, int nSerialNo, QotGetCompanyExecutives.Response rsp);
Description
Get company executives
Parameters
message C2S
{
required Qot_Common.Security security = 1; // Stock
}
message Request
{
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
- Security structure, refer to Security
- Return
// Company executive info item
message DirectorInfo
{
optional string displayLeaderName = 1; // Display name (for display only; not for querying background)
optional string leaderName = 2; // Executive name (can be passed to GetCompanyExecutiveBackground)
optional string positionName = 3; // Position name
optional uint64 beginDate = 4; // Start date timestamp (seconds)
optional string beginDateStr = 5; // Start date string, format YYYY-MM-DD, in market timezone
optional string leaderGender = 6; // Gender, e.g. "Male" / "Female"
optional string leaderAge = 7; // Age as string, e.g. "62"
optional string highestEducation = 8; // Highest education level
optional uint64 annualSalary = 9; // Annual salary
optional uint64 issueDate = 10; // Publish date timestamp (seconds)
optional string issueDateStr = 11; // Publish date string, format YYYY-MM-DD, in market timezone
}
message S2C
{
repeated DirectorInfo directorList = 1; // Director and executive list
}
message Response
{
required int32 retType = 1 [default = -400]; // Return result, refer to Common.RetType
optional string retMsg = 2; // Return result description
optional int32 errCode = 3; // Error code
optional S2C s2c = 4;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
- API call result structure, refer to RetType
- Example
public class QotDemo implements MMSPI_Qot, MMSPI_Conn {
MMAPI_Conn_Qot qot = new MMAPI_Conn_Qot();
public QotDemo() {
qot.setClientInfo("javaclient", 1);
qot.setConnSpi(this);
qot.setQotSpi(this);
}
public void start() {
qot.initConnect("127.0.0.1", (short)11111, false);
}
@Override
public void onInitConnect(MMAPI_Conn client, long errCode, String desc)
{
System.out.printf("Qot onInitConnect: ret=%b desc=%s connID=%d\n", errCode, desc, client.getConnectID());
if (errCode != 0)
return;
QotCommon.Security sec = QotCommon.Security.newBuilder()
.setMarket(QotCommon.QotMarket.QotMarket_US_Security_VALUE)
.setCode("AAPL")
.build();
QotGetCompanyExecutives.C2S c2s = QotGetCompanyExecutives.C2S.newBuilder()
.setSecurity(sec)
.build();
QotGetCompanyExecutives.Request req = QotGetCompanyExecutives.Request.newBuilder().setC2S(c2s).build();
int seqNo = qot.getCompanyExecutives(req);
System.out.printf("Send QotGetCompanyExecutives: %d\n", seqNo);
}
@Override
public void onDisconnect(MMAPI_Conn client, long errCode) {
System.out.printf("Qot onDisConnect: %d\n", errCode);
}
@Override
public void onReply_GetCompanyExecutives(MMAPI_Conn client, int nSerialNo, QotGetCompanyExecutives.Response rsp) {
if (rsp.getRetType() != 0) {
System.out.printf("QotGetCompanyExecutives failed: %s\n", rsp.getRetMsg());
}
else {
try {
String json = JsonFormat.printer().print(rsp);
System.out.printf("Receive QotGetCompanyExecutives: %s\n", json);
} catch (InvalidProtocolBufferException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
MMAPI.init();
QotDemo qot = new QotDemo();
qot.start();
while (true) {
try {
Thread.sleep(1000 * 600);
} catch (InterruptedException exc) {
}
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
- Output
Qot onInitConnect: ret=0 desc= connID=7459212684023350975
Send Qot_GetCompanyExecutives: 2
Receive Qot_GetCompanyExecutives: retType: 0
retMsg: ""
errCode: 0
s2c {
directorList {
displayLeaderName: "Timothy D. Cook"
leaderName: "Mr. Timothy D. Cook"
positionName: "Director and Chief Executive Officer"
leaderGender: "male"
leaderAge: "65"
annualSalary: 74294811
issueDate: 1776614400
issueDateStr: "2026-04-19"
}
directorList {
//...
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
moomoo::u32_t GetCompanyExecutives(const Qot_GetCompanyExecutives::Request &stReq);
virtual void OnReply_GetCompanyExecutives(moomoo::u32_t nSerialNo, const Qot_GetCompanyExecutives::Response &stRsp) = 0;
Description
Get company executives
Parameters
message C2S
{
required Qot_Common.Security security = 1; // Stock
}
message Request
{
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
- Security structure, refer to Security
- Return
// Company executive info item
message DirectorInfo
{
optional string displayLeaderName = 1; // Display name (for display only; not for querying background)
optional string leaderName = 2; // Executive name (can be passed to GetCompanyExecutiveBackground)
optional string positionName = 3; // Position name
optional uint64 beginDate = 4; // Start date timestamp (seconds)
optional string beginDateStr = 5; // Start date string, format YYYY-MM-DD, in market timezone
optional string leaderGender = 6; // Gender, e.g. "Male" / "Female"
optional string leaderAge = 7; // Age as string, e.g. "62"
optional string highestEducation = 8; // Highest education level
optional uint64 annualSalary = 9; // Annual salary
optional uint64 issueDate = 10; // Publish date timestamp (seconds)
optional string issueDateStr = 11; // Publish date string, format YYYY-MM-DD, in market timezone
}
message S2C
{
repeated DirectorInfo directorList = 1; // Director and executive list
}
message Response
{
required int32 retType = 1 [default = -400]; // Return result, refer to Common.RetType
optional string retMsg = 2; // Return result description
optional int32 errCode = 3; // Error code
optional S2C s2c = 4;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
- API call result structure, refer to RetType
- Example
class Program : public MMSPI_Qot, public MMSPI_Trd, public MMSPI_Conn
{
public:
Program() {
m_pQotApi = MMAPI::CreateQotApi();
m_pQotApi->RegisterQotSpi(this);
m_pQotApi->RegisterConnSpi(this);
}
~Program() {
if (m_pQotApi != nullptr)
{
m_pQotApi->UnregisterQotSpi();
m_pQotApi->UnregisterConnSpi();
MMAPI::ReleaseQotApi(m_pQotApi);
m_pQotApi = nullptr;
}
}
void Start() {
m_pQotApi->InitConnect("127.0.0.1", 11111, false);
}
virtual void OnInitConnect(MMAPI_Conn* pConn, moomoo::i64_t nErrCode, const char* strDesc) {
cout << "connect" << endl;
// construct request message
Qot_GetCompanyExecutives::Request req;
Qot_GetCompanyExecutives::C2S *c2s = req.mutable_c2s();
Qot_Common::Security *sec = c2s->mutable_security();
sec->set_code("AAPL");
sec->set_market(Qot_Common::QotMarket::QotMarket_US_Security);
m_pQotApi->GetCompanyExecutives(req);
cout << "GetCompanyExecutives" << endl;
}
virtual void OnReply_GetCompanyExecutives(moomoo::u32_t nSerialNo, const Qot_GetCompanyExecutives::Response &stRsp){
cout << "OnReply_GetCompanyExecutives:" << endl;
// print response
// ProtoBufToBodyData and UTF8ToLocal refer to tool.h in Samples
string resp_str;
ProtoBufToBodyData(stRsp, resp_str);
cout << UTF8ToLocal(resp_str) << endl;
}
protected:
MMAPI_Qot *m_pQotApi;
};
int32_t main(int32_t argc, char** argv)
{
MMAPI::Init();
{
Program program;
program.Start();
getchar();
}
protobuf::ShutdownProtobufLibrary();
MMAPI::UnInit();
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
- Output
onInitConnect: ret=0 desc=Succeed!
Send Qot_GetCompanyExecutives seqNo=3
retType: 0
retMsg: ""
errCode: 0
s2c {
directorList {
displayLeaderName: "Timothy D. Cook"
leaderName: "Mr. Timothy D. Cook"
positionName: "Director and Chief Executive Officer"
leaderGender: "male"
leaderAge: "65"
annualSalary: 74294811
issueDate: 1776614400
issueDateStr: "2026-04-19"
}
directorList {
//...
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
GetCompanyExecutives(req);
Description
Get company executives
Parameters
message C2S
{
required Qot_Common.Security security = 1; // Stock
}
message Request
{
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
- Security structure, refer to Security
- Return
// Company executive info item
message DirectorInfo
{
optional string displayLeaderName = 1; // Display name (for display only; not for querying background)
optional string leaderName = 2; // Executive name (can be passed to GetCompanyExecutiveBackground)
optional string positionName = 3; // Position name
optional uint64 beginDate = 4; // Start date timestamp (seconds)
optional string beginDateStr = 5; // Start date string, format YYYY-MM-DD, in market timezone
optional string leaderGender = 6; // Gender, e.g. "Male" / "Female"
optional string leaderAge = 7; // Age as string, e.g. "62"
optional string highestEducation = 8; // Highest education level
optional uint64 annualSalary = 9; // Annual salary
optional uint64 issueDate = 10; // Publish date timestamp (seconds)
optional string issueDateStr = 11; // Publish date string, format YYYY-MM-DD, in market timezone
}
message S2C
{
repeated DirectorInfo directorList = 1; // Director and executive list
}
message Response
{
required int32 retType = 1 [default = -400]; // Return result, refer to Common.RetType
optional string retMsg = 2; // Return result description
optional int32 errCode = 3; // Error code
optional S2C s2c = 4;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
- API call result structure, refer to RetType
- Example
import mmWebsocket from "moomoo-api";
import { Common, Qot_Common } from "moomoo-api/proto";
import beautify from "js-beautify";
function QotGetCompanyExecutives(){
const { RetType } = Common
const { QotMarket } = Qot_Common
let [addr, port, enable_ssl, key] = ["127.0.0.1", 33333, false, '7522027ccf5a06b1'];
let websocket = new mmWebsocket();
websocket.onlogin = (ret, msg)=>{
if (ret) {
const req = {
c2s: {
security: {
market: QotMarket.QotMarket_US_Security,
code: "AAPL",
},
},
};
websocket.GetCompanyExecutives(req)
.then((res) => {
let { errCode, retMsg, retType,s2c } = res
console.log("GetCompanyExecutives: errCode %d, retMsg %s, retType %d", errCode, retMsg, retType);
if(retType == RetType.RetType_Succeed){
let data = beautify(JSON.stringify(s2c), {
indent_size: 2,
space_in_empty_paren: true,
});
console.log(data);
}
})
.catch((error) => {
console.log("error:", error);
});
} else {
console.log("error", msg);
}
};
websocket.start(addr, port, enable_ssl, key);
setTimeout(()=>{
websocket.stop();
console.log("stop");
}, 5000);
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
- Output
GetCompanyExecutives: errCode 0, retMsg , retType 0
{
"directorList": [{
"displayLeaderName": "Timothy D. Cook",
"leaderName": "Mr. Timothy D. Cook",
"positionName": "Director and Chief Executive Officer",
"leaderGender": "male",
"leaderAge": "65",
"annualSalary": 74294811,
"issueDate": 1776614400,
"issueDateStr": "2026-04-19"
//...
}]
}
stop
2
3
4
5
6
7
8
9
10
11
12
13
14
15
API Limits
- Max 30 requests per 30 seconds.
- Supports equities and funds.