curl --request GET \
--url https://openapi.dnse.com.vn/price/{indexName}/market-index \
--header 'X-Api-Key: <x-api-key>' \
--header 'X-Aux-Date: <x-aux-date>' \
--header 'X-Signature: <x-signature>'import requests
url = "https://openapi.dnse.com.vn/price/{indexName}/market-index"
headers = {
"X-Api-Key": "<x-api-key>",
"X-Aux-Date": "<x-aux-date>",
"X-Signature": "<x-signature>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
'X-Api-Key': '<x-api-key>',
'X-Aux-Date': '<x-aux-date>',
'X-Signature': '<x-signature>'
}
};
fetch('https://openapi.dnse.com.vn/price/{indexName}/market-index', 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://openapi.dnse.com.vn/price/{indexName}/market-index",
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-Api-Key: <x-api-key>",
"X-Aux-Date: <x-aux-date>",
"X-Signature: <x-signature>"
],
]);
$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://openapi.dnse.com.vn/price/{indexName}/market-index"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Api-Key", "<x-api-key>")
req.Header.Add("X-Aux-Date", "<x-aux-date>")
req.Header.Add("X-Signature", "<x-signature>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://openapi.dnse.com.vn/price/{indexName}/market-index")
.header("X-Api-Key", "<x-api-key>")
.header("X-Aux-Date", "<x-aux-date>")
.header("X-Signature", "<x-signature>")
.asString();require 'uri'
require 'net/http'
url = URI("https://openapi.dnse.com.vn/price/{indexName}/market-index")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Api-Key"] = '<x-api-key>'
request["X-Aux-Date"] = '<x-aux-date>'
request["X-Signature"] = '<x-signature>'
response = http.request(request)
puts response.read_body{
"data": [
{
"indexName": "VN30",
"valueIndexes": 1867.57,
"changedValue": -8.57,
"changedRatio": -0.46,
"fluctuationUpIssueCount": 4,
"fluctuationDownIssueCount": 24,
"fluctuationSteadinessIssueCount": 2,
"fluctuationLowerLimitIssueCount": 1,
"fluctuationUpperLimitIssueCount": 0,
"fluctuationDownIssueVolume": 151005844,
"fluctuationUpIssueVolume": 12011382,
"fluctuationSteadinessIssueVolume": 19131891,
"currencyCode": "VND",
"indexTypeCode": "101",
"lowestValueIndexes": 1864.16,
"highestValueIndexes": 1879.66,
"priorValueIndexes": 1876.14,
"contauctAccTrdVal": 4001.6785832,
"contauctAccTrdVol": 119469304,
"blkTrdAccTrdVal": 1633.46998985,
"blkTrdAccTrdVol": 62679813,
"grossTradeAmount": 5635.14857305,
"totalVolumeTraded": 182149117,
"marketIndexClass": "HSX",
"marketId": "STO",
"tradingSessionId": "40",
"time": "2026-09-10 09:15:00.000"
}
],
"nextPageToken": "NDYwMTQ1XzIwMjYtMDMtMTJUMDQ6MjU6MDUuNTZa"
}{
"status": 400,
"code": "OA-003",
"message": "Thông tin nhập không hợp lệ"
}{
"status": 500,
"code": "OA-009",
"message": "Lỗi hệ thống"
}Lịch sử chỉ số
Truy vấn thông tin lịch sử các chỉ số thị trường theo khoảng thời gian.
curl --request GET \
--url https://openapi.dnse.com.vn/price/{indexName}/market-index \
--header 'X-Api-Key: <x-api-key>' \
--header 'X-Aux-Date: <x-aux-date>' \
--header 'X-Signature: <x-signature>'import requests
url = "https://openapi.dnse.com.vn/price/{indexName}/market-index"
headers = {
"X-Api-Key": "<x-api-key>",
"X-Aux-Date": "<x-aux-date>",
"X-Signature": "<x-signature>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {
'X-Api-Key': '<x-api-key>',
'X-Aux-Date': '<x-aux-date>',
'X-Signature': '<x-signature>'
}
};
fetch('https://openapi.dnse.com.vn/price/{indexName}/market-index', 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://openapi.dnse.com.vn/price/{indexName}/market-index",
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-Api-Key: <x-api-key>",
"X-Aux-Date: <x-aux-date>",
"X-Signature: <x-signature>"
],
]);
$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://openapi.dnse.com.vn/price/{indexName}/market-index"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Api-Key", "<x-api-key>")
req.Header.Add("X-Aux-Date", "<x-aux-date>")
req.Header.Add("X-Signature", "<x-signature>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://openapi.dnse.com.vn/price/{indexName}/market-index")
.header("X-Api-Key", "<x-api-key>")
.header("X-Aux-Date", "<x-aux-date>")
.header("X-Signature", "<x-signature>")
.asString();require 'uri'
require 'net/http'
url = URI("https://openapi.dnse.com.vn/price/{indexName}/market-index")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Api-Key"] = '<x-api-key>'
request["X-Aux-Date"] = '<x-aux-date>'
request["X-Signature"] = '<x-signature>'
response = http.request(request)
puts response.read_body{
"data": [
{
"indexName": "VN30",
"valueIndexes": 1867.57,
"changedValue": -8.57,
"changedRatio": -0.46,
"fluctuationUpIssueCount": 4,
"fluctuationDownIssueCount": 24,
"fluctuationSteadinessIssueCount": 2,
"fluctuationLowerLimitIssueCount": 1,
"fluctuationUpperLimitIssueCount": 0,
"fluctuationDownIssueVolume": 151005844,
"fluctuationUpIssueVolume": 12011382,
"fluctuationSteadinessIssueVolume": 19131891,
"currencyCode": "VND",
"indexTypeCode": "101",
"lowestValueIndexes": 1864.16,
"highestValueIndexes": 1879.66,
"priorValueIndexes": 1876.14,
"contauctAccTrdVal": 4001.6785832,
"contauctAccTrdVol": 119469304,
"blkTrdAccTrdVal": 1633.46998985,
"blkTrdAccTrdVol": 62679813,
"grossTradeAmount": 5635.14857305,
"totalVolumeTraded": 182149117,
"marketIndexClass": "HSX",
"marketId": "STO",
"tradingSessionId": "40",
"time": "2026-09-10 09:15:00.000"
}
],
"nextPageToken": "NDYwMTQ1XzIwMjYtMDMtMTJUMDQ6MjU6MDUuNTZa"
}{
"status": 400,
"code": "OA-003",
"message": "Thông tin nhập không hợp lệ"
}{
"status": 500,
"code": "OA-009",
"message": "Lỗi hệ thống"
}Tiêu đề
API key được cấp khi đăng ký dịch vụ DNSE OpenAPI.
Ví dụ: b3JnOmRuc2UgaWQ6MjdlZTc1MzcxZGFkNTY0NmYzYTM2NDk1ZGE3OGNiOGQgaDptdXJtdXIxMjg=
Thời gian thực hiện request, dùng trong cơ chế ký request của DNSE.
Ví dụ: Sat, 01 May 2026 14:24:23 +0000
Chữ ký xác thực request được tạo từ API key secret và X-Aux-Date.
Ví dụ: Signature keyId="b3JnOmRuc2UgaWQ6MjdlZTc1MzcxZGFkNTY0NmYzYTM2NDk1ZGE3OGNiOGQgaDptdXJtdXIxMjg=",algorithm="hmac-sha256",headers="(request-target) x-aux-date",signature="rfbVXHDUi%2B%2FsOkLXle7O17Qm%2F05cbISSR%2BDcFrBHfqQ%3D",nonce="4add8c3264e4492b9f8ecde0cf26b523"
Tham số đường dẫn
Tên chỉ số thị trường. Tên chỉ số thị trường.
VNINDEX: Chỉ số sàn HOSEHNX: Chỉ số sàn HNXHNX30: Chỉ số Top 30 cổ phiếu sàn HNXVN30: Chỉ số Top 30 cổ phiếu sàn HOSEVN100: Chỉ số Top 100 cổ phiếu sàn HOSEVNXALLSHARE: Chỉ số các cổ phiếu chọn lọc sàn HOSEUPCOM: Chỉ số sàn UPCOMVNMITECH: Chỉ số nhóm cổ phiếu công nghệVN50GROWTH: Chỉ số nhóm 50 cổ phiếu tăng trưởng sàn HOSEVNDIVIDEND: Chỉ số nhóm cổ phiếu có tỷ suất cổ tức tăng trưởng
VNINDEX, HNX, HNX30, VN30, VN100, VNXALLSHARE, UPCOM, VNMITECH, VN50GROWTH, VNDIVIDEND "VN30"
Tham số truy vấn
Thời gian bắt đầu (timestamp).
Thời gian kết thúc (timestamp).
Số lượng bản ghi tối đa trả về.
x >= 1Thứ tự dữ liệu theo thời gian.
ASC, DESC Token dùng để lấy trang tiếp theo.