curl -H "X-FH-APIKEY: $FINHAY_API_KEY" \
"https://open-api.fhsc.com.vn/market/sectors?window=YTD&sort=-foreign_net_value"import requests
url = "https://open-api.fhsc.com.vn/market/sectors"
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/sectors', 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/sectors",
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/sectors"
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/sectors")
.header("X-FH-APIKEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://open-api.fhsc.com.vn/market/sectors")
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": {
"items": [
{
"sector": "financials",
"name": "Tài chính",
"level": 1,
"index_value": 1284.32,
"change_percent": 0.87,
"market_cap": 1430000000000000,
"constituent_count": 87,
"advancers": 42,
"decliners": 31,
"unchanged": 14,
"volume": 128450000,
"trading_value": 3870000000000,
"foreign_net_value": -184000000000
}
],
"window": "1D",
"updated_at": "2026-08-17T14:30:15+07:00",
"page": 1,
"page_size": 20,
"total": 11
},
"error_code": "0",
"message": "success"
}{
"error_code": "400",
"message": "Invalid parameter"
}{
"error_code": "401",
"message": "Invalid signature"
}{
"error_code": "429",
"message": "Too many requests"
}{
"error_code": "500",
"message": "Internal server error"
}Bảng so sánh các ngành
Danh mục ngành kèm bảng so sánh liên ngành: điểm chỉ số, thay đổi %, vốn hoá, độ rộng, khối lượng / giá trị khớp và mua ròng khối ngoại.
window quyết định cửa sổ luỹ kế của các field dòng tiền (volume, trading_value, foreign_net_value, change_percent). Độ rộng (advancers, decliners, unchanged) chỉ tính được cho phiên hiện tại, nên ngoài window=1D các field này trả null, và sort/filter theo chúng bị từ chối.
Cũng là nơi tra slug hợp lệ cho các endpoint /market/sectors/{slug}/*.
curl -H "X-FH-APIKEY: $FINHAY_API_KEY" \
"https://open-api.fhsc.com.vn/market/sectors?window=YTD&sort=-foreign_net_value"import requests
url = "https://open-api.fhsc.com.vn/market/sectors"
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/sectors', 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/sectors",
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/sectors"
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/sectors")
.header("X-FH-APIKEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://open-api.fhsc.com.vn/market/sectors")
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": {
"items": [
{
"sector": "financials",
"name": "Tài chính",
"level": 1,
"index_value": 1284.32,
"change_percent": 0.87,
"market_cap": 1430000000000000,
"constituent_count": 87,
"advancers": 42,
"decliners": 31,
"unchanged": 14,
"volume": 128450000,
"trading_value": 3870000000000,
"foreign_net_value": -184000000000
}
],
"window": "1D",
"updated_at": "2026-08-17T14:30:15+07:00",
"page": 1,
"page_size": 20,
"total": 11
},
"error_code": "0",
"message": "success"
}{
"error_code": "400",
"message": "Invalid parameter"
}{
"error_code": "401",
"message": "Invalid signature"
}{
"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.
Query Parameters
Cấp trong cây ICB: 1 = ngành, 3 = nhóm ngành. Bỏ trống → mọi cấp.
1, 3 1
Chỉ lấy nhóm ngành thuộc ngành cấp 1 này.
technology, telecommunications, healthcare, financials, real-estate, consumer-discretionary, consumer-staples, industrials, basic-materials, energy, utilities "financials"
Cửa sổ luỹ kế cho các field dòng tiền.
1D, 1W, 1M, 3M, 6M, 1Y, YTD "YTD"
Field sắp xếp, thêm - ở đầu để giảm dần. Mặc định -market_cap. Field hợp lệ: index_value, change_percent, market_cap, constituent_count, advancers, decliners, unchanged, volume, trading_value, foreign_net_value.
"-foreign_net_value"
Danh sách field cần trả, phân tách bằng dấu phẩy. Mặc định sector,name,index_value,change_percent; field dùng trong sort/filter luôn được thêm vào. Field hợp lệ: sector, name, level, index_value, change_percent, market_cap, constituent_count, advancers, decliners, unchanged, volume, trading_value, foreign_net_value.
"sector,name,market_cap,foreign_net_value"
Chỉ giữ dòng có index_value lớn hơn giá trị này.
Chỉ giữ dòng có index_value nhỏ hơn giá trị này.
Chỉ giữ dòng có change_percent lớn hơn giá trị này.
Chỉ giữ dòng có change_percent nhỏ hơn giá trị này.
Chỉ giữ dòng có market_cap lớn hơn giá trị này.
Chỉ giữ dòng có market_cap nhỏ hơn giá trị này.
Chỉ giữ dòng có constituent_count lớn hơn giá trị này.
Chỉ giữ dòng có constituent_count nhỏ hơn giá trị này.
Chỉ giữ dòng có advancers lớn hơn giá trị này.
Chỉ giữ dòng có advancers nhỏ hơn giá trị này.
Chỉ giữ dòng có decliners lớn hơn giá trị này.
Chỉ giữ dòng có decliners nhỏ hơn giá trị này.
Chỉ giữ dòng có unchanged lớn hơn giá trị này.
Chỉ giữ dòng có unchanged nhỏ hơn giá trị này.
Chỉ giữ dòng có volume lớn hơn giá trị này.
Chỉ giữ dòng có volume nhỏ hơn giá trị này.
Chỉ giữ dòng có trading_value lớn hơn giá trị này.
Chỉ giữ dòng có trading_value nhỏ hơn giá trị này.
Chỉ giữ dòng có foreign_net_value lớn hơn giá trị này.
Chỉ giữ dòng có foreign_net_value nhỏ hơn giá trị này.
Trang cần lấy, bắt đầu từ 1.
x >= 11
Số ngành mỗi trang, tối đa 50.
1 <= x <= 5020
Response
data.items là danh sách ngành, mỗi item chỉ chứa các field được chọn qua fields.
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.