Tài liệu API
API REFERENCE
Toàn bộ endpoint, cấu trúc dữ liệu và hướng dẫn tích hợp VietFuelAPI.
01 Base URL
http://localhost:3000
Default Endpoint — Khuyến nghị
Endpoint mặc định duy nhất để lấy giá xăng dầu. Một request, đầy đủ dữ liệu và có nhãn nguồn.
/api/fuel-prices
Default Endpoint: dữ liệu đầy đủ từ 11 nguồn, trả về theo dạng data[] -> sources[].
const res = await fetch('http://localhost:3000/api/fuel-prices');
const json = await res.json();
console.log(json.meta.dataSources.length); // 11
console.log(json.data[0].name); // "Xăng RON 95-V"
console.log(json.data[0].sources); // [{ source, region1, region2, price }, ...]
import requests
json = requests.get('http://localhost:3000/api/fuel-prices').json()
print(json['meta']['dataSources'])
print(json['data'][0]['name'])
print(json['data'][0]['sources'])
DANH SÁCH NGUỒN TÍCH HỢP
| KEY | NGUỒN | URL |
|---|---|---|
petrolimex | Petrolimex | https://www.petrolimex.com.vn |
kv2_petrolimex | Petrolimex KV2 | https://kv2.petrolimex.com.vn |
saigon_petrolimex | Petrolimex SAI GON | https://saigon.petrolimex.com.vn |
vungtau_petrolimex | Petrolimex VUNG TAU | https://vungtau.petrolimex.com.vn |
pvoil | PVOil | https://www.pvoil.com.vn |
mipec | Mipec | https://www.mipec.com.vn/pages/gia-xang-dau-ban-le |
comeco | COMECO | https://comeco.vn |
saigonpetro | Saigon Petro | https://saigonpetro.com.vn/ban-le-xang-dau |
petrotimes | Petro Times | https://petrotimesgroup.com |
webgia | WebGia (Mirror) | https://webgia.com/gia-xang-dau/petrolimex/ |
giaxanghomnay | GiaXangHomNay | https://giaxanghomnay.com |
Nguồn lõi của hệ thống gồm Petrolimex và các mirror KV2/SAIGON/VUNGTAU để tăng độ ổn định.
PVOil thường công bố theo một mức giá toàn quốc (không tách Vùng 1/2), kèm ngày giờ công bố.
Nhóm nguồn bổ sung dùng để đối chiếu mức giá theo từng mặt hàng và tăng độ phủ dữ liệu.
Nguồn linked/mirror giúp tăng khả năng phục hồi của hệ thống và đóng góp vào mảng dataSources.
Nguồn tổng hợp mạnh cho quốc gia và tra cứu theo tỉnh thành, đặc biệt hữu ích cho endpoint theo tỉnh.
Dữ liệu từ 11 nguồn được làm mới tự động theo quy định (NĐ 80/2023). Endpoint mặc định /api/fuel-prices luôn là lựa chọn khuyến nghị.
Lưu ý pháp lý: Việc sử dụng dữ liệu phải tuân thủ Tuyên bố miễn trừ trách nhiệm.
meta.primarySource luôn cho biết nguồn thực sự đang cung cấp data. Nếu có warning trong response → Petrolimex đang down, hệ thống đã tự động chuyển sang nguồn dự phòng.
02 Rate Limiting
API áp dụng giới hạn truy cập tự động theo IP để bảo vệ hệ thống.
| NHÓM ENDPOINT | GIỚI HẠN | GHI CHÚ |
|---|---|---|
/api/fuel-prices Default |
60 req / phút | Default, cache RAM |
/api/fuel-prices, /api/fuel-prices/:source, /api/provinces, /api/health |
60 req / phút | Cache RAM, độ trễ thấp |
/api/fuel-prices/province/:slug |
20 req / phút | On-demand scraping, cache thích ứng |
Khi vượt giới hạn, API trả về HTTP 429 với thông báo lỗi.
03 Các Endpoint
Click vào thanh tiêu đề để mở rộng thẻ. Khuyến khích sử dụng /api/fuel-prices để có dữ liệu tổng hợp.
Default Endpoint: Gom nhóm giá từ tất cả 11 nguồn, bao gồm 3 mirror Petrolimex, Comeco, SaigonPetro, Petrotimes, GiaXangHomNay và các nguồn quốc gia khác.
const res = await fetch('http://localhost:3000/api/fuel-prices');
const json = await res.json();
console.log(json.data[0].name); // "Xăng RON 95-V"
console.log(json.data[0].sources); // Array chứa giá của các hãng
Lấy giá từ một nguồn cấp cụ thể (ví dụ: petrolimex, pvoil, comeco...).
fetch('http://localhost:3000/api/fuel-prices/comeco')
.then(res => res.json())
.then(data => console.log(data));
Lấy danh sách 63 tỉnh thành & mã slug tương ứng để tra cứu từng tỉnh.
import requests
data = requests.get('http://localhost:3000/api/provinces?region=2').json()
print(data)
Giá xăng dầu chi tiết theo tỉnh thành (ví dụ: ha-noi, ho-chi-minh). Tự động xác định vùng!
// Lấy giá khu vực Hà Nội
const res = await fetch('http://localhost:3000/api/fuel-prices/province/ha-noi');
const data = await res.json();
Theo dõi sức khỏe các Scraper và Metadata hệ thống (Uptime).
curl http://localhost:3000/api/health
04 Cấu trúc dữ liệu
ĐỐI TƯỢNG META
| TRƯỜNG | KIỂU | MÔ TẢ |
|---|---|---|
primarySource /api/fuel-prices/:source | String | Nguồn dữ liệu chính |
primarySourceUrl /api/fuel-prices/:source | String | URL nguồn chính |
dataSources /api/fuel-prices | String[] | Các nguồn tổng hợp |
source | String | Tên nguồn |
sourceUrl | String | URL nguồn |
scrapedAt | ISO 8601 | Thời điểm thu thập |
priceDate | YYYY-MM-DD | Ngày niêm yết (ISO) |
priceDateDisplay | DD/MM/YYYY | Ngày niêm yết (hiển thị) |
cacheHit | Boolean | Trạng thái cache |
cacheTtlRemainingSeconds | Number | Thời gian cache còn lại |
totalItems | Number | Số mặt hàng |
ĐỐI TƯỢNG NHIÊN LIỆU (MẢNG DATA)
| TRƯỜNG | KIỂU | MÔ TẢ |
|---|---|---|
name | String | Tên nhiên liệu |
unit | String | Đơn vị tính |
sources | Array | Mảng giá các hãng |
ĐỐI TƯỢNG GIÁ TỪNG HÃNG
| TRƯỜNG | KIỂU | MÔ TẢ |
|---|---|---|
source | String | Tên hãng |
region1 | Number | null | Giá Vùng 1 (VND) |
region2 | Number | null | Giá Vùng 2 (VND) |
price | Number | null | Giá thống nhất |
ĐỐI TƯỢNG TỈNH THÀNH
| TRƯỜNG | KIỂU | MÔ TẢ |
|---|---|---|
id | String | Mã tỉnh (2 chữ số) |
name | String | Tên tỉnh thành |
slug | String | Slug URL |
region | '1' | '2' | Vùng giá |
partialRegion | Boolean? | Tỉnh bán phần |
vung2Districts | String[]? | Huyện Vùng 2 |
note | String? | Ghi chú |
VÍ DỤ RESPONSE
/api/fuel-prices
{
"success": true,
"status": "ok",
"meta": {
"primarySource": "Petrolimex",
"primarySourceUrl": "https://www.petrolimex.com.vn",
"dataSources": [
"petrolimex", "kv2_petrolimex", "saigon_petrolimex",
"vungtau_petrolimex", "pvoil", "mipec", "comeco",
"saigonpetro", "petrotimes", "webgia", "giaxanghomnay"
],
"scrapedAt": "2026-04-02T06:30:00.000Z",
"priceDate": "2026-03-27",
"priceDateDisplay": "27/03/2026",
"cacheHit": true,
"cacheTtlRemainingSeconds": 3240,
"totalItems": 7
},
"data": [
{
"name": "Xăng RON 95-V",
"unit": "VND/lít",
"sources": [
{ "source": "petrolimex", "region1": 24730, "region2": 25220, "price": null },
{ "source": "kv2_petrolimex", "region1": 24730, "region2": 25220, "price": null },
{ "source": "comeco", "region1": 24730, "region2": 25220, "price": null }
]
}
]
}
{
"success": true,
"status": "ok",
"meta": {
"source": "Petrolimex",
"sourceUrl": "https://www.petrolimex.com.vn",
"scrapedAt": "2026-03-31T16:04:30.000Z",
"priceDate": "2026-03-27",
"priceDateDisplay": "27/03/2026",
"cacheHit": true,
"cacheTtlRemainingSeconds": 3240,
"totalItems": 7
},
"data": [
{ "name": "Xăng RON 95-V", "region1": 24730, "region2": 25220, "price": null, "unit": "VND/lít" },
{ "name": "Xăng E5 RON 92-II", "region1": 23320, "region2": 23780, "price": null, "unit": "VND/lít" }
]
}
{
"meta": { "source": "PVOil", "totalItems": 5, "..." : "..." },
"data": [
{ "name": "Xăng RON 95-III", "region1": null, "region2": null, "price": 24330, "unit": "VND/lít" }
]
}
/api/provinces
{
"success": true,
"meta": { "total": 63, "region1Count": 48, "region2Count": 15, "filterApplied": null },
"data": [
{ "id": "01", "name": "Hà Nội", "slug": "ha-noi", "region": "1" },
{ "id": "91", "name": "Kiên Giang", "slug": "kien-giang", "region": "1",
"partialRegion": true,
"vung2Districts": ["Phú Quốc", "Kiên Hải"],
"note": "TP. Phú Quốc và huyện Kiên Hải thuộc Vùng 2"
}
]
}
05 Phân vùng giá xăng dầu
Theo quy định, giá xăng dầu được chia thành 2 vùng tại Việt Nam:
| VÙNG | MÔ TẢ | PHẠM VI |
|---|---|---|
| Vùng 1 | Gần kho đầu mối. Giá tiêu chuẩn. | 48 tỉnh thành |
| Vùng 2 | Vùng sâu, hải đảo. Tối đa +2%. | 15 tỉnh + 4 bán phần |
4 tỉnh bán phần: Quảng Ninh, Bình Thuận, Bà Rịa-Vũng Tàu, Kiên Giang. Xem /api/provinces để biết chi tiết huyện Vùng 2.
06 Mã lỗi
| MÃ HTTP | STATUS KEY | Ý NGHĨA |
|---|---|---|
| 200 | ok |
Thành công |
| 400 | invalid_source |
Nguồn không hợp lệ |
| 404 | not_found |
Tỉnh thành không tồn tại |
| 429 | rate_limited |
Vượt giới hạn truy cập |
| 502 | scrape_error |
Lỗi scraping tỉnh thành |
| 503 | unavailable |
Dữ liệu chưa sẵn sàng |
{
"success": false,
"status": "invalid_source",
"message": {
"vi": "Nguồn không hợp lệ. Xem danh sách đầy đủ trong availableSources.",
"en": "Invalid source. See full list in availableSources."
},
"availableSources": [
{ "id": "petrolimex", "label": "Petrolimex", "url": "https://www.petrolimex.com.vn" }
]
}
Terminal Demo
Xem thao tác gọi API thực tế — từ health check đến lấy giá tỉnh thành.