curl -H "X-FH-APIKEY: $FINHAY_API_KEY" \
"https://open-api.fhsc.com.vn/market/stocks/HPG/trading/proprietary/history?from=2026-01-01&to=2026-03-31"
import requests
url = "https://open-api.fhsc.com.vn/market/stocks/{symbol}/trading/proprietary/history"
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/proprietary/history', 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/proprietary/history",
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/proprietary/history"
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/proprietary/history")
.header("X-FH-APIKEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://open-api.fhsc.com.vn/market/stocks/{symbol}/trading/proprietary/history")
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": "HPG",
"data": [
{
"date": "2026-05-27",
"buy": {
"total": {
"volume": 12543200,
"value": 341175200000
},
"matched": {
"volume": 12543200,
"value": 341175200000
},
"put_through": {
"volume": 12543200,
"value": 341175200000
}
},
"sell": {
"total": {
"volume": 12543200,
"value": 341175200000
},
"matched": {
"volume": 12543200,
"value": 341175200000
},
"put_through": {
"volume": 12543200,
"value": 341175200000
}
},
"net": {
"total": {
"volume": 12543200,
"value": 341175200000
},
"matched": {
"volume": 12543200,
"value": 341175200000
},
"put_through": {
"volume": 12543200,
"value": 341175200000
}
}
}
],
"resolution": "1D"
},
"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"
}Lịch sử giao dịch tự doanh
Chuỗi mua / bán / ròng của khối tự doanh theo phiên. from/to phải truyền cùng nhau (dạng YYYY-MM-DD, khoảng tối đa 5 năm); bỏ trống cả hai → 3 tháng gần nhất. Chưa phân trang.
curl -H "X-FH-APIKEY: $FINHAY_API_KEY" \
"https://open-api.fhsc.com.vn/market/stocks/HPG/trading/proprietary/history?from=2026-01-01&to=2026-03-31"
import requests
url = "https://open-api.fhsc.com.vn/market/stocks/{symbol}/trading/proprietary/history"
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/proprietary/history', 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/proprietary/history",
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/proprietary/history"
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/proprietary/history")
.header("X-FH-APIKEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://open-api.fhsc.com.vn/market/stocks/{symbol}/trading/proprietary/history")
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": "HPG",
"data": [
{
"date": "2026-05-27",
"buy": {
"total": {
"volume": 12543200,
"value": 341175200000
},
"matched": {
"volume": 12543200,
"value": 341175200000
},
"put_through": {
"volume": 12543200,
"value": 341175200000
}
},
"sell": {
"total": {
"volume": 12543200,
"value": 341175200000
},
"matched": {
"volume": 12543200,
"value": 341175200000
},
"put_through": {
"volume": 12543200,
"value": 341175200000
}
},
"net": {
"total": {
"volume": 12543200,
"value": 341175200000
},
"matched": {
"volume": 12543200,
"value": 341175200000
},
"put_through": {
"volume": 12543200,
"value": 341175200000
}
}
}
],
"resolution": "1D"
},
"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.
"HPG"
Query Parameters
Ngày bắt đầu (bao gồm), dạng YYYY-MM-DD. Phải đi kèm to.
"2026-01-01"
Ngày kết thúc (bao gồm), dạng YYYY-MM-DD. Phải đi kèm from, không sớm hơn from, và khoảng cách tối đa 5 năm.
"2026-03-31"
Độ phân giải của bar. Hiện chỉ hỗ trợ 1D (mặc định 1D).
1D "1D"
Response
data.data là chuỗi dòng tiền tự doanh theo phiên.
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.