curl -H "X-FH-APIKEY: $FINHAY_API_KEY" \
"https://open-api.fhsc.com.vn/market/stocks/VNM/trading/insider?from=2026-01-01&to=2026-03-31"import requests
url = "https://open-api.fhsc.com.vn/market/stocks/{symbol}/trading/insider"
headers = {"X-FH-APIKEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-FH-APIKEY': '<api-key>'}};
fetch('https://open-api.fhsc.com.vn/market/stocks/{symbol}/trading/insider', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://open-api.fhsc.com.vn/market/stocks/{symbol}/trading/insider",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-FH-APIKEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://open-api.fhsc.com.vn/market/stocks/{symbol}/trading/insider"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-FH-APIKEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://open-api.fhsc.com.vn/market/stocks/{symbol}/trading/insider")
.header("X-FH-APIKEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://open-api.fhsc.com.vn/market/stocks/{symbol}/trading/insider")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-FH-APIKEY"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"symbol": "VNM",
"data": [
{
"person_name": "Nguyễn Văn A",
"position": "Thành viên HĐQT",
"side": "TRADE_BUY",
"registered_volume": 500000,
"executed_volume": 320000,
"ownership_after_percent": 2.15,
"shares_before": 1200000,
"shares_after": 1520000,
"registered_from": "2026-03-02",
"registered_to": "2026-03-28",
"executed_date": "2026-03-25",
"status": "COMPLETED"
}
],
"total": 37,
"page": 1,
"page_size": 20,
"updated_at": "2026-05-27T14:30:15+07:00"
},
"error_code": "0",
"message": "success"
}{
"error_code": "400",
"message": "Invalid parameter"
}{
"error_code": "401",
"message": "Invalid signature"
}{
"error_code": "404",
"message": "Not found"
}{
"error_code": "429",
"message": "Too many requests"
}{
"error_code": "500",
"message": "Internal server error"
}Giao dịch nội bộ / cổ đông lớn
Giao dịch công bố của người nội bộ, cổ đông lớn và người có liên quan của 1 mã: ai giao dịch, chức vụ, khối lượng đăng ký / đã thực hiện, tỷ lệ sở hữu sau giao dịch.
Đây là DANH SÁCH SỰ KIỆN công bố, không phải chuỗi số liệu theo phiên. from/to (dạng YYYY-MM-DD) lọc theo ngày công bố; bỏ trống → 1 năm gần nhất. Phân trang qua page/page_size (tối đa 50).
curl -H "X-FH-APIKEY: $FINHAY_API_KEY" \
"https://open-api.fhsc.com.vn/market/stocks/VNM/trading/insider?from=2026-01-01&to=2026-03-31"import requests
url = "https://open-api.fhsc.com.vn/market/stocks/{symbol}/trading/insider"
headers = {"X-FH-APIKEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-FH-APIKEY': '<api-key>'}};
fetch('https://open-api.fhsc.com.vn/market/stocks/{symbol}/trading/insider', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://open-api.fhsc.com.vn/market/stocks/{symbol}/trading/insider",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-FH-APIKEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://open-api.fhsc.com.vn/market/stocks/{symbol}/trading/insider"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-FH-APIKEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://open-api.fhsc.com.vn/market/stocks/{symbol}/trading/insider")
.header("X-FH-APIKEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://open-api.fhsc.com.vn/market/stocks/{symbol}/trading/insider")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-FH-APIKEY"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"symbol": "VNM",
"data": [
{
"person_name": "Nguyễn Văn A",
"position": "Thành viên HĐQT",
"side": "TRADE_BUY",
"registered_volume": 500000,
"executed_volume": 320000,
"ownership_after_percent": 2.15,
"shares_before": 1200000,
"shares_after": 1520000,
"registered_from": "2026-03-02",
"registered_to": "2026-03-28",
"executed_date": "2026-03-25",
"status": "COMPLETED"
}
],
"total": 37,
"page": 1,
"page_size": 20,
"updated_at": "2026-05-27T14:30:15+07:00"
},
"error_code": "0",
"message": "success"
}{
"error_code": "400",
"message": "Invalid parameter"
}{
"error_code": "401",
"message": "Invalid signature"
}{
"error_code": "404",
"message": "Not found"
}{
"error_code": "429",
"message": "Too many requests"
}{
"error_code": "500",
"message": "Internal server error"
}Authorizations
API key dài hạn của client. Cấu hình 1 lần lúc khởi tạo; có thể wire thẳng
vào static setter của SDK tự-gen. Đi kèm với FINHAY_API_SECRET — secret
này chỉ dùng ở phía client để tính X-FH-SIGNATURE, không bao giờ
gửi qua mạng.
Path Parameters
Mã cổ phiếu niêm yết (3–10 ký tự chữ/số, không phân biệt hoa thường). VD: VNM, FPT.
"VNM"
Query Parameters
Ngày bắt đầu (bao gồm), dạng YYYY-MM-DD. Bỏ trống → to trừ 1 năm.
"2026-01-01"
Ngày kết thúc (bao gồm), dạng YYYY-MM-DD. Bỏ trống → hôm nay.
"2026-03-31"
Lọc theo chiều giao dịch. Bỏ trống → mọi chiều.
Chiều giao dịch đã chuẩn hoá từ nhãn tiếng Việt của nguồn. Hậu tố cho biết hướng ghi nhận sở hữu: _BUY/_IN là ghi tăng, _SELL/_OUT là ghi giảm. TRADE_BUY mua, TRADE_SELL bán, TRANSFER_IN nhận chuyển quyền sở hữu, TRANSFER_OUT chuyển quyền sở hữu, GIFT_IN nhận cho/biếu/tặng, GIFT_OUT cho/biếu/tặng, INHERITANCE_IN nhận thừa kế.
TRADE_BUY, TRADE_SELL, TRANSFER_IN, TRANSFER_OUT, GIFT_IN, GIFT_OUT, INHERITANCE_IN "TRADE_BUY"
Lọc theo trạng thái. Bỏ trống → mọi trạng thái.
Trạng thái suy ra từ loại tin và khối lượng: REGISTERED mới đăng ký chưa có kết quả, COMPLETED khớp đủ khối lượng đăng ký, PARTIAL khớp một phần.
REGISTERED, COMPLETED, PARTIAL "COMPLETED"
Trang cần lấy, bắt đầu từ 1. Mặc định 1.
x >= 11
Số bản ghi mỗi trang, tối đa 50. Mặc định 20.
1 <= x <= 5020
Response
data.data là danh sách giao dịch nội bộ của trang hiện tại.
Các field chung của envelope trong mọi response của Finhay API.
error_codelà"0"(string) khi thành công, mã khác"0"khi lỗi.messagelà thông điệp ngắn từ server.