curl -H "X-FH-APIKEY: $FINHAY_API_KEY" \
"https://open-api.fhsc.com.vn/market/company-financial/analysis?symbol=VNM&period=quarterly"import requests
url = "https://open-api.fhsc.com.vn/market/company-financial/analysis"
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/company-financial/analysis', 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/company-financial/analysis",
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/company-financial/analysis"
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/company-financial/analysis")
.header("X-FH-APIKEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://open-api.fhsc.com.vn/market/company-financial/analysis")
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{
"error_code": "0",
"message": "success",
"data": [
{
"year": 2025,
"quarter": 4,
"pe": null,
"pb": 4.31317,
"roa": null,
"roe": null,
"eps": null,
"ebit": 3566980066852,
"ebitda": 4108719059869,
"bienlaigop": 0.404497,
"bienlaiebitda": 0.241213,
"bienlaisauthue": 0.165978,
"lnst_yoy": 0.316942,
"lnst_qoq": 0.126135,
"dtt_qoq": 0.004738,
"tt_dtt_yoy": 0.100567,
"nophaitra_vcsh": 0.546047,
"novay_vonchu": 0.274241,
"thanhtoan_hienhanh": 1.957917,
"thanhtoan_nhanh": 1.575433,
"thanhtoan_tienmat": 0.096914,
"bvps": 14189.099355,
"lnwpershare": 4529.851333,
"bookvalue": 29654585456641,
"ev": 113837320151135,
"vonhoa": 127905273234000
}
]
}{
"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"
}Phân tích tài chính doanh nghiệp theo kỳ
Các chỉ số tài chính theo kỳ. Mỗi row luôn có year; quarter chỉ có
khi period=quarterly.
Kích thước payload: API trả về ~200 metric code mỗi row
(tên romanized tiếng Việt như pe, pb, roa, bienlaigop, ebitda,
thanhtoan_hienhanh, novay_vonchu, lnst_yoy, vonhoa, …). Bộ key
phụ thuộc vào loại doanh nghiệp (ngân hàng có nim; công ty chứng khoán
có margin_loan_to_equity_ratio, …). Nhiều code có thể null khi dữ
liệu nguồn thiếu. Example bên dưới chỉ là subset đại diện — tham
chiếu additionalProperties trong schema là nguồn chuẩn.
curl -H "X-FH-APIKEY: $FINHAY_API_KEY" \
"https://open-api.fhsc.com.vn/market/company-financial/analysis?symbol=VNM&period=quarterly"import requests
url = "https://open-api.fhsc.com.vn/market/company-financial/analysis"
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/company-financial/analysis', 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/company-financial/analysis",
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/company-financial/analysis"
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/company-financial/analysis")
.header("X-FH-APIKEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://open-api.fhsc.com.vn/market/company-financial/analysis")
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{
"error_code": "0",
"message": "success",
"data": [
{
"year": 2025,
"quarter": 4,
"pe": null,
"pb": 4.31317,
"roa": null,
"roe": null,
"eps": null,
"ebit": 3566980066852,
"ebitda": 4108719059869,
"bienlaigop": 0.404497,
"bienlaiebitda": 0.241213,
"bienlaisauthue": 0.165978,
"lnst_yoy": 0.316942,
"lnst_qoq": 0.126135,
"dtt_qoq": 0.004738,
"tt_dtt_yoy": 0.100567,
"nophaitra_vcsh": 0.546047,
"novay_vonchu": 0.274241,
"thanhtoan_hienhanh": 1.957917,
"thanhtoan_nhanh": 1.575433,
"thanhtoan_tienmat": 0.096914,
"bvps": 14189.099355,
"lnwpershare": 4529.851333,
"bookvalue": 29654585456641,
"ev": 113837320151135,
"vonhoa": 127905273234000
}
]
}{
"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
Mã stock (chữ hoa, chữ số).
"VNM"
Kỳ báo cáo. Mặc định annual.
Kỳ báo cáo cho truy vấn tài chính doanh nghiệp.
| Giá trị | Ý nghĩa |
|---|---|
annual | Theo năm |
quarterly | Theo quý |
annual, quarterly Trang cần lấy, tính theo kỳ báo cáo (mỗi trang 10 kỳ với annual, 12 kỳ với quarterly). Mặc định 1; trang 1 là các kỳ gần nhất, trang sau lùi về quá khứ. Hết dữ liệu khi trả về ít kỳ hơn kích thước trang.
x >= 12
Chỉ lấy kỳ của năm này: period=annual trả 1 row, period=quarterly trả các quý của năm (quý mới nhất trước).
x >= 12023
Response
Trả về data mảng các kỳ báo cáo, mỗi item là 1 record year (+ quarter khi period=quarterly) cộng ~200 metric code.
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.