Tài liệu API
Lấy dữ liệu chứng khoán Việt Nam vào chương trình của bạn
Hỗ trợ JSON hoặc CSV mở được bằng Excel. Chỉ một khoá API cho 10 dataset, mỗi dataset một đường: danh mục mã và chỉ tiêu, chuỗi theo ngày, lát cắt một phiên, báo cáo tài chính, sự kiện, hồ sơ doanh nghiệp cùng chỉ số ngành tự tính.
- Dataset
- 10
- Định dạng
- JSON, CSV
- Khoá mỗi tài khoản
- Tối đa 5
- Phí
- Miễn phí
Đăng ký công khai sắp mở. Nếu có câu hỏi về API, vui lòng gửi về dulieuchungkhoan.official@gmail.com.
01Giới thiệu
API phù hợp cho các tác vụ định kỳ: cập nhật bảng tính, tạo báo cáo và nạp dữ liệu vào mô hình của bạn.
Dataset theo nhóm
- Danh mụcMã được phân theo loại. Mỗi chỉ tiêu đều kèm tên tiếng Việt, đơn vị và loại chủ thể áp dụng.metrics2 dataset
- Chuỗi theo ngàyLấy dữ liệu cho một chủ thể hoặc 1–50 mã cùng loại trong một lượt, mỗi chỉ tiêu tương ứng một cột.multi_
series2 dataset - Lát cắt một ngàyMỗi cổ phiếu hoặc ETF là một dòng, mỗi chỉ tiêu là một cột, hỗ trợ sắp xếp và lấy N dòng đầu.cross_
section1 dataset - Doanh nghiệpBáo cáo tài chính theo mẫu biểu, sự kiện và hồ sơ doanh nghiệp.financial_
statements3 dataset - Chỉ số tự tínhCác chỉ số tự tính: thị trường, ba nhóm vốn hoá, ba bậc ngành, ba nhóm dòng tiền, 24 ngành, cùng thành viên và tỷ trọng.computed_
indices2 dataset
Dành cho ai
- Nhà đầu tư tự xây dựng bảng theo dõi bằng Python hoặc Excel.
- Nhà phân tích cần dữ liệu chuỗi dài, nhiều mã và đúng đơn vị.
- Người phát triển công cụ nội bộ cần một nguồn dữ liệu cuối ngày ổn định.
API chỉ trả về dữ liệu có sẵn trong kho: không cung cấp tin tức, không tính toán khi gọi và không gọi AI. Nếu muốn hỏi bằng tiếng Việt, hãy dùng MCP. Nếu không viết mã, hãy dùng trang «Tải dữ liệu» trong tài khoản.
02Xác thực
Mỗi lượt gọi cần truyền kèm một khoá API trong header. Khoá thuộc tài khoản của bạn và dùng chung hạn mức của tài khoản.
- 01
Tạo khoásắp có
Đăng nhập vào trang tài khoản, vào mục «Khoá API», đặt tên rồi bấm «Tạo khoá».
- 02
Sao chép ngay
Khoá có dạng
dlck_kèm 52 ký tự và chỉ hiển thị một lần duy nhất lúc tạo. - 03
Gửi trong header
Đặt khoá vào
Authorization: Bearer <khoá>. Không đưa khoá vào địa chỉ URL, kể cả khi gọi bằng GET.
- Mỗi tài khoản có tối đa 5 khoá còn hiệu lực.
- Nếu khoá bị lộ, hãy thu hồi ở trang «Khoá API»; thu hồi có hiệu lực ngay.
03Địa chỉ và các đường
API dùng một địa chỉ gốc với mười đường dataset cùng hai đường danh mục và mức dùng. Ngoài các đường này, /v1 không có đường nào khác.
https://api.dulieuchungkhoan.vn/v1/| Đường | Làm gì | Khoá, lượt |
|---|---|---|
GET hoặc POST /v1/<dataset> | Để lấy dữ liệu của một dataset: dùng GET với tham số trên query, hoặc POST với tham số trong thân JSON. Cùng tham số sẽ cho cùng kết quả. Danh sách mười đường nằm ở mục «Dataset». | Cần khoá; tính một lượt. |
GET /v1/catalog | Danh mục dataset, tham số và chỉ tiêu: mỗi chỉ tiêu kèm giải nghĩa ngắn, nhịp và giờ cập nhật. Máy khách bỏ qua trường lạ. | Không cần khoá. |
GET /v1/usage | Phần trăm hạn mức đã dùng. | Cần khoá; không tính lượt. |
- Đường
GEThoặcPOST /v1/<dataset>- Làm gì
- Để lấy dữ liệu của một dataset: dùng
GETvới tham số trên query, hoặcPOSTvới tham số trong thân JSON. Cùng tham số sẽ cho cùng kết quả. Danh sách mười đường nằm ở mục «Dataset». - Khoá, lượt
- Cần khoá; tính một lượt.
- Đường
GET /v1/catalog- Làm gì
- Danh mục dataset, tham số và chỉ tiêu: mỗi chỉ tiêu kèm giải nghĩa ngắn, nhịp và giờ cập nhật. Máy khách bỏ qua trường lạ.
- Khoá, lượt
- Không cần khoá.
- Đường
GET /v1/usage- Làm gì
- Phần trăm hạn mức đã dùng.
- Khoá, lượt
- Cần khoá; không tính lượt.
04Gọi thử
Mặc định kết quả trả về là JSON. Thêm format=csv trên query để nhận CSV: chuẩn UTF-8 có BOM, phân tách bằng dấu phẩy, xuống dòng CRLF và mở được bằng Excel. Thêm lang=vi để thông báo lỗi cùng ghi chú hiển thị bằng tiếng Việt.
curl "https://api.dulieuchungkhoan.vn/v1/symbols?instrument_type=stock&format=csv" \
-H "Authorization: Bearer <khoá của bạn>" -o ma.csvcurl -X POST "https://api.dulieuchungkhoan.vn/v1/series?format=csv" \
-H "Authorization: Bearer <khoá của bạn>" -H "Content-Type: application/json" \
-d '{"symbol": "FPT", "metrics": ["adjusted_close", "volume"], "start_date": "2026-10-01"}' -o fpt.csvimport requests
r = requests.get("https://api.dulieuchungkhoan.vn/v1/metrics", timeout=60,
headers={"Authorization": "Bearer <khoá của bạn>"},
params={"group": "price", "format": "csv"})
r.raise_for_status()
open("chi_tieu.csv", "wb").write(r.content)Invoke-RestMethod -Method Post -Uri "https://api.dulieuchungkhoan.vn/v1/symbols?format=csv" `
-Headers @{ Authorization = "Bearer <khoá của bạn>" } -ContentType "application/json" `
-Body '{"instrument_type": "industry"}' -OutFile nganh.csvNhiều mã trong một lượt
multi_series lấy chuỗi theo ngày của 1–50 mã cùng loại theo dạng dài: mỗi dòng gồm một cặp ngày và mã, mỗi chỉ tiêu một cột. Danh sách mã viết cách nhau bằng dấu phẩy, hoặc lặp lại khoá trên query.
GET https://api.dulieuchungkhoan.vn/v1/multi-series?symbols=FPT,HPG,VNM&metrics=adjusted_close,volume&start_date=2026-01-01Phong bì JSON
Mọi phản hồi JSON thành công đều gồm data (mảng object, mỗi dòng là một object) và meta (dataset, columns, truncated, notes, timezone). Ô thiếu dữ liệu nhận giá trị null. Mỗi phần tử của meta.columns có dạng {id, name_vi, unit, unit_vi, type}.
{
"data": [
{
"date": "2026-10-01",
"adjusted_close": 118300,
"volume": 4512300
},
{
"date": "2026-10-02",
"adjusted_close": 119100,
"volume": null
}
],
"meta": {
"dataset": "series",
"columns": [
{
"id": "date",
"name_vi": "Ngày",
"unit": null,
"unit_vi": null,
"type": "date"
},
{
"id": "adjusted_close",
"name_vi": "Giá đóng cửa điều chỉnh",
"unit": "vnd_per_share",
"unit_vi": "đồng/cp",
"type": "number"
},
{
"id": "volume",
"name_vi": "Khối lượng",
"unit": "shares",
"unit_vi": "cổ phiếu",
"type": "number"
}
],
"truncated": false,
"notes": [],
"timezone": "Asia/Ho_Chi_Minh"
}
}Excel «Từ Web» và Google Sheets IMPORTDATA không hỗ trợ đặt header khoá nên không gọi trực tiếp API được. Bạn có thể dùng một đoạn mã như trên, hoặc dùng trang «Tải dữ liệu»: chọn dữ liệu, xem trước miễn phí rồi bấm tải CSV.
05Dataset
Mỗi dataset có một đường riêng /v1/<dataset> (tên dùng dấu gạch nối). Có 10 dataset, và dataset nào cũng trừ một lượt cho mỗi lần gọi.
| Nhóm | Dataset | Đường | Trả về |
|---|---|---|---|
| Danh mục | symbols | /v1/symbols | Danh sách mã theo loại: cổ phiếu, ETF, chỉ số sàn, hợp đồng phái sinh nối, ngành. |
metrics | /v1/metrics | Danh sách chỉ tiêu công khai: mã, tên tiếng Việt, đơn vị, nhóm, áp dụng cho loại chủ thể nào. | |
| Chuỗi theo ngày | series | /v1/series | Chuỗi theo ngày của một chủ thể: mỗi chỉ tiêu một cột, ghép theo ngày. |
multi_series | /v1/multi-series | Chuỗi theo ngày của 1–50 mã cùng loại trong một lượt, dạng dài. | |
| Lát cắt một ngày | cross_section | /v1/cross-section | Lát cắt một ngày: mỗi cổ phiếu hoặc ETF một dòng, mỗi chỉ tiêu một cột; sắp và lấy N dòng đầu. |
| Doanh nghiệp | financial_statements | /v1/financial-statements | Báo cáo tài chính một cổ phiếu theo mẫu biểu của loại doanh nghiệp, mỗi kỳ một cột, tối đa 40 kỳ mỗi lượt. |
events | /v1/events | Dòng thời gian sự kiện doanh nghiệp và thị trường: mỗi ngày của một sự kiện là một dòng. | |
company_profile | /v1/company-profile | Hồ sơ doanh nghiệp: thẻ công ty, cổ đông lớn, ban lãnh đạo, công ty con và liên kết, kế hoạch năm so thực hiện. | |
| Chỉ số tự tính | computed_indices | /v1/computed-indices | Lát cắt một ngày cho các chỉ số tự tính: thị trường, ba nhóm vốn hoá, ba bậc ngành, ba nhóm dòng tiền, 24 ngành. |
computed_index_members | /v1/computed-index-members | Thành viên và tỷ trọng của một chỉ số tự tính ở kỳ phân nhóm hiện hành. |
- Nhóm
- Danh mục
- Dataset
symbols- Đường
/v1/symbols- Trả về
- Danh sách mã theo loại: cổ phiếu, ETF, chỉ số sàn, hợp đồng phái sinh nối, ngành.
- Nhóm
- Danh mục
- Dataset
metrics- Đường
/v1/metrics- Trả về
- Danh sách chỉ tiêu công khai: mã, tên tiếng Việt, đơn vị, nhóm, áp dụng cho loại chủ thể nào.
- Nhóm
- Chuỗi theo ngày
- Dataset
series- Đường
/v1/series- Trả về
- Chuỗi theo ngày của một chủ thể: mỗi chỉ tiêu một cột, ghép theo ngày.
- Nhóm
- Chuỗi theo ngày
- Dataset
multi_series- Đường
/v1/multi-series- Trả về
- Chuỗi theo ngày của 1–50 mã cùng loại trong một lượt, dạng dài.
- Nhóm
- Lát cắt một ngày
- Dataset
cross_section- Đường
/v1/cross-section- Trả về
- Lát cắt một ngày: mỗi cổ phiếu hoặc ETF một dòng, mỗi chỉ tiêu một cột; sắp và lấy N dòng đầu.
- Nhóm
- Doanh nghiệp
- Dataset
financial_statements- Đường
/v1/financial-statements- Trả về
- Báo cáo tài chính một cổ phiếu theo mẫu biểu của loại doanh nghiệp, mỗi kỳ một cột, tối đa 40 kỳ mỗi lượt.
- Nhóm
- Doanh nghiệp
- Dataset
events- Đường
/v1/events- Trả về
- Dòng thời gian sự kiện doanh nghiệp và thị trường: mỗi ngày của một sự kiện là một dòng.
- Nhóm
- Doanh nghiệp
- Dataset
company_profile- Đường
/v1/company-profile- Trả về
- Hồ sơ doanh nghiệp: thẻ công ty, cổ đông lớn, ban lãnh đạo, công ty con và liên kết, kế hoạch năm so thực hiện.
- Nhóm
- Chỉ số tự tính
- Dataset
computed_indices- Đường
/v1/computed-indices- Trả về
- Lát cắt một ngày cho các chỉ số tự tính: thị trường, ba nhóm vốn hoá, ba bậc ngành, ba nhóm dòng tiền, 24 ngành.
- Nhóm
- Chỉ số tự tính
- Dataset
computed_index_members- Đường
/v1/computed-index-members- Trả về
- Thành viên và tỷ trọng của một chỉ số tự tính ở kỳ phân nhóm hiện hành.
- Mã chỉ tiêu là mã công khai, ví dụ
adjusted_close. Danh sách kèm tên tiếng Việt và đơn vị có tạiGET /v1/metricshoặcGET /v1/catalog(ở đó mỗi chỉ tiêu còn có giải nghĩa ngắn, nhịp và giờ cập nhật). - Mỗi chỉ tiêu chỉ áp dụng cho đúng loại chủ thể tương ứng. Nếu gọi sai loại, API sẽ báo lỗi kèm danh sách mã hợp lệ.
- Mỗi lượt đều có trần dòng, ô, dung lượng và thời gian. Khi vượt trần dòng hoặc ô, kết quả sẽ bị cắt:
meta.truncatedlàtrue(headerX-Dlck-Truncated: 1) kèm câu chỉ cách thu hẹp trongmeta.notes. Hệ thống không bao giờ cắt câm. Kết quả vượt quá 4 MiB sẽ trả lỗi 422result_too_large, truy vấn quá 20 giây sẽ trả lỗi 504query_timeout.
06Số trong kết quả
Kết quả trả về đầy đủ chữ số mà kho có. Tên tiếng Việt và đơn vị của mỗi cột nằm ở meta.columns (JSON) hoặc ở GET /v1/metrics (CSV).
- Với JSON:
meta.columns[].name_vilà tên tiếng Việt,unit_vilà đơn vị. Với CSV: hàng đầu là mã cột, ví dụdate,adjusted_close,volume. Tệp tải từ trang «Tải dữ liệu» có tiêu đề tiếng Việt kèm đơn vị. - Số tổng (giá trị giao dịch, vốn hoá) tính bằng tỷ đồng, số trên mỗi cổ phần tính bằng đồng/cp, chỉ số tính bằng điểm, còn tỷ lệ tính bằng % (đã nhân 100).
- Dữ liệu không làm tròn, dấu thập phân là dấu chấm. Ngày có dạng
YYYY-MM-DDtheo ngày giao dịch Việt Nam. - Ô trống được để trống trong CSV và là
nulltrong JSON. Giá trị boolean làtruehoặcfalse. - Giá điều chỉnh và giá thô là hai mã khác nhau. Giá giao ngay và giá tương lai của tài sản không bao giờ chung một cột.
- JSON dùng số dấu phẩy động, nên các số có hơn 15 chữ số có nghĩa có thể bị mất chữ số cuối. Nếu cần chính xác tuyệt đối, bạn hãy dùng CSV.
07Hạn mức và nhịp gọi
Hạn mức tính theo ngày lịch giờ Việt Nam, đặt lại lúc 00:00. API thông báo phần trăm đã dùng, không công bố số lượt.
- Mỗi lượt gọi dữ liệu (
GEThayPOSTtới một đường dataset) sẽ trừ một lượt. Mọi khoá của bạn và trang «Tải dữ liệu» đều dùng chung một hạn mức. Thao tác xem trước trên trang tải không tính. - Mỗi tài khoản đều có trần theo phút, và mỗi khoá chỉ chạy một lượt tại một thời điểm. Việc chia lượt qua nhiều khoá cũng không tránh được trần phút.
- Khi bị chặn (HTTP 429), hãy đọc header
Retry-After(số giây) rồi mới gọi lại. - Lượt bị trừ ngay khi yêu cầu qua bước kiểm khoá và hạn mức, trước khi đọc dữ liệu. Do đó, các kết quả lỗi 400, 404, 413, 422 (tham số sai), 500, 503
server_busy, 504 cũng tốn lượt. Các trường hợp không tốn lượt gồm: sai phương thức (405), khoá sai (401), gọi quá nhanh, khoá đang có lượt chạy, hết lượt, hệ thống xác thực bận hoặc API tạm ngưng,langsai.
{
"data": {
"windows": [
{
"window": "day",
"used_pct": 37,
"resets_at": "2026-10-18T00:00:00+07:00",
"seconds_remaining": null
},
{
"window": "minute",
"used_pct": 3,
"resets_at": null,
"seconds_remaining": 41
}
]
}
}used_pct là số nguyên 0–100, resets_at là giờ đặt lại của cửa sổ ngày, còn seconds_remaining là số giây tới lúc trần phút đặt lại. Khoá không áp dụng sẽ là null.
08Mã lỗi
Mọi phản hồi lỗi đều có định dạng application/problem+json (RFC 9457), gồm type, title, status, detail, code, kèm theo errors và valid_values khi có. Phản hồi thành công luôn là HTTP 200.
{
"type": "https://dulieuchungkhoan.vn/docs/api/errors#invalid_parameter",
"title": "Invalid parameter",
"status": 422,
"detail": "Unknown metric: adjusted_clos.",
"code": "invalid_parameter",
"errors": [
{
"parameter": "metrics",
"detail": "Unknown metric: adjusted_clos."
}
],
"valid_values": [
"adjusted_close",
"close",
"volume"
]
}| HTTP | code | Khi nào |
|---|---|---|
| 400 | invalid_body | Thân POST không phải là một object JSON. |
| 401 | invalid_api_key | Thiếu khoá, sai định dạng, đã bị thu hồi hoặc tài khoản bị khoá. |
| 404 | not_found, no_data | Đường không có dưới /v1, hoặc yêu cầu CSV mà không có dòng nào khớp. |
| 405 | method_not_allowed | Sai phương thức, ví dụ DELETE /v1/series hay HEAD. |
| 413 | too_large | Thân yêu cầu quá 16 KiB. |
| 422 | invalid_parameter, dataset_not_found, symbol_not_found, metric_not_applicable, unsupported_format, result_too_large | Đầu vào sai, kèm danh sách giá trị hợp lệ, hoặc kết quả vượt quá 4 MiB. |
| 429 | rate_limited, request_in_progress, quota_exceeded | Gọi quá nhanh, khoá đang có một lượt chạy, hoặc hết lượt trong ngày (kèm resets_at). |
| 500 | internal_error | Lỗi ngoài dự kiến, vui lòng thử lại sau. |
| 503 | server_busy, service_paused | Kho hoặc hệ thống xác thực đang bận, hoặc API đang tạm ngưng. |
| 504 | query_timeout | Truy vấn vượt quá 20 giây: hãy thu hẹp start_date, end_date hoặc giảm bớt chỉ tiêu. |
- HTTP
- 400
codeinvalid_body- Khi nào
- Thân
POSTkhông phải là một object JSON.
- HTTP
- 401
codeinvalid_api_key- Khi nào
- Thiếu khoá, sai định dạng, đã bị thu hồi hoặc tài khoản bị khoá.
- HTTP
- 404
codenot_found,no_data- Khi nào
- Đường không có dưới
/v1, hoặc yêu cầu CSV mà không có dòng nào khớp.
- HTTP
- 405
codemethod_not_allowed- Khi nào
- Sai phương thức, ví dụ
DELETE /v1/serieshayHEAD.
- HTTP
- 413
codetoo_large- Khi nào
- Thân yêu cầu quá 16 KiB.
- HTTP
- 422
codeinvalid_parameter,dataset_not_found,symbol_not_found,metric_not_applicable,unsupported_format,result_too_large- Khi nào
- Đầu vào sai, kèm danh sách giá trị hợp lệ, hoặc kết quả vượt quá 4 MiB.
- HTTP
- 429
coderate_limited,request_in_progress,quota_exceeded- Khi nào
- Gọi quá nhanh, khoá đang có một lượt chạy, hoặc hết lượt trong ngày (kèm
resets_at).
- HTTP
- 500
codeinternal_error- Khi nào
- Lỗi ngoài dự kiến, vui lòng thử lại sau.
- HTTP
- 503
codeserver_busy,service_paused- Khi nào
- Kho hoặc hệ thống xác thực đang bận, hoặc API đang tạm ngưng.
- HTTP
- 504
codequery_timeout- Khi nào
- Truy vấn vượt quá 20 giây: hãy thu hẹp
start_date,end_datehoặc giảm bớt chỉ tiêu.
09Giờ cập nhật
Đây là dữ liệu cuối ngày. Dữ liệu của một phiên sẽ có trong API khi lượt xử lý cuối ngày của nhóm đó hoàn tất.
| Nhóm chỉ tiêu hoặc dataset | Thường xong lúc | Muộn nhất |
|---|---|---|
money_flow, index, futures | 15:58 | 16:00 |
price | 16:06 | 16:10 |
ratio | 17:25 | 17:35 |
market | 17:41 | 17:52 |
technical | 17:49 | 18:02 |
events | 18:13 | 18:14 |
financial_statements | 18:17 | 18:42 |
company_profile | 20:30, cả tuần | 20:33 |
- Nhóm chỉ tiêu hoặc dataset
money_flow,index,futures- Thường xong lúc
- 15:58
- Muộn nhất
- 16:00
- Nhóm chỉ tiêu hoặc dataset
price- Thường xong lúc
- 16:06
- Muộn nhất
- 16:10
- Nhóm chỉ tiêu hoặc dataset
ratio- Thường xong lúc
- 17:25
- Muộn nhất
- 17:35
- Nhóm chỉ tiêu hoặc dataset
market- Thường xong lúc
- 17:41
- Muộn nhất
- 17:52
- Nhóm chỉ tiêu hoặc dataset
technical- Thường xong lúc
- 17:49
- Muộn nhất
- 18:02
- Nhóm chỉ tiêu hoặc dataset
events- Thường xong lúc
- 18:13
- Muộn nhất
- 18:14
- Nhóm chỉ tiêu hoặc dataset
financial_statements- Thường xong lúc
- 18:17
- Muộn nhất
- 18:42
- Nhóm chỉ tiêu hoặc dataset
company_profile- Thường xong lúc
- 20:30, cả tuần
- Muộn nhất
- 20:33
Số đo trên sáu phiên 08–15/10/2026; ngày nào nguồn chậm thì có thể muộn hơn. Trong giờ giao dịch, phiên mới nhất trong API là phiên hôm trước. Vĩ mô và tài sản được cập nhật theo nhịp của nguồn, cả tuần.
10Câu hỏi thường gặp
Những vấn đề thường gặp khi bắt đầu gọi API.
- API có dữ liệu trong phiên không?
- Không. API trả dữ liệu cuối ngày. Trong giờ giao dịch, phiên mới nhất là phiên hôm trước.
- Hết lượt thì sao?
- API trả 429
quota_exceededkèmresets_at. Hạn mức được đặt lại lúc 00:00 giờ Việt Nam. - Kết quả lỗi có tốn lượt không?
- Có, nếu yêu cầu đã qua bước kiểm khoá và hạn mức. Bạn nên kiểm tra tham số trước khi gọi, hoặc thử trên trang «Tải dữ liệu» với bản xem trước miễn phí.
- Mã chỉ tiêu có bị thay đổi không?
- Với
/v1thì không: việc thêm dataset, tham số, cột hay chỉ tiêu mới không làm đổi/v1, và mã đã công bố không bị gỡ. Việc đổi nghĩa hay gỡ chỉ xảy ra ở/v2. - Vì sao P/E kỳ quý 4 lại khác số tính theo năm?
- Chỉ tiêu bốn quý gần nhất (
eps_ttm,pe,ps…) luôn cộng bốn báo cáo quý, kể cả khi kỳ gần nhất là quý 4. Do đó, kết quả có thể khác số cả năm, nhất là các năm trước 2024. - Nếu mã cổ phiếu cũ bị công ty khác dùng lại thì sao?
- API chỉ trả mã đang niêm yết. Lịch sử của công ty cũ cùng mã không tra được qua API.
- Có mất phí không?
- Không.
Một khoá, 10 dataset
Tạo khoá trong tài khoản, chạy đoạn mã mẫu và nhận JSON hoặc CSV.
Cần hỗ trợ? Viết email cho chúng tôi