API công khai, chỉ đọc, không cần đăng nhập hay API key. Hỗ trợ Mega 6/45 (mega645) và Power 6/55 (power655). Các tool có thể tải lịch sử để thực hiện phân tích riêng.
Tải OpenAPI 3.1 · Xem trạng thái đồng bộ
| GET | Nội dung |
|---|---|
| /api/v1/games | Danh sách game và lần sync thành công |
| /api/v1/sync-status | Độ đầy đủ và thời điểm kiểm tra nguồn; không truyền game trả cả hai |
| /api/v1/overview?game=power655 | Kỳ mới nhất và trạng thái đồng bộ |
| /api/v1/draws?game=power655&limit=500 | Lịch sử: from/to (YYYY-MM-DD), limit 1–500, cursor |
| /api/v1/number-stats?game=mega645 | Tần suất, độ lệch, số kỳ chưa xuất hiện |
| /api/v1/patterns?game=power655 | Phân phối tổng và chẵn/lẻ |
| /api/v1/pairs?game=power655 | Tần suất các cặp số |
| /api/v1/deltas?game=power655 | Khoảng cách giữa các số đã sắp xếp |
| /api/v1/positions?game=power655 | Phân phối số theo vị trí đã sắp xếp |
| /api/v1/weekdays?game=power655 | Tần suất theo thứ: Chủ nhật=0 … Thứ bảy=6 |
Tham số game mặc định là mega645. API trả {success:true,data:...,meta:...}. Lỗi trả {success:false,error:"..."} và mã HTTP 400/404/405/429/503. CORS cho phép đọc từ mọi origin.
Ưu tiên danh mục dữ liệu JSON tĩnh khi tải hàng loạt. Mỗi game có toàn bộ lịch sử trong một file và sáu file thống kê. Dữ liệu được xuất bản lại sau sync khi có kỳ mới hoặc sửa kết quả lịch sử. Không cần phân trang; tải file rồi lọc ngày hoặc tính toán trong tool.
https://lott-data.pages.dev/v1/mega645/draws.json https://lott-data.pages.dev/v1/power655/draws.json https://lott-data.pages.dev/v1/power655/number-stats.json
Bản tĩnh có CORS, ETag và cache 6 giờ tại CDN / 1 giờ trong client. Không hỗ trợ query filter; tham số query không thay đổi dữ liệu. draws.json trả toàn bộ data.items; các file thống kê dùng cấu trúc như API v1. meta.computed_at là thời điểm tính bản xuất bản, không phải thời điểm kiểm tra nguồn mới nhất; dùng API sync-status để kiểm tra runner.
import json
from urllib.request import Request, urlopen
request = Request("https://lott-data.pages.dev/v1/power655/draws.json",
headers={"User-Agent": "VietlottStatsClient/1.0"})
with urlopen(request, timeout=30) as response:
draws = json.load(response)["data"]["items"]
import json
from urllib.request import Request, urlopen
from urllib.parse import urlencode
params = {"game": "power655", "limit": 500}
draws = []
while True:
url = "https://lott.zindo.info/api/v1/draws?" + urlencode(params)
request = Request(url, headers={"User-Agent": "VietlottStatsClient/1.0"})
with urlopen(request, timeout=30) as response:
result = json.load(response)["data"]
draws.extend(result["items"])
if result["next_cursor"] is None:
break
params["cursor"] = result["next_cursor"]
print(len(draws))
curl 'https://lott.zindo.info/api/v1/number-stats?game=power655'
Cloudflare có thể chặn User-Agent mặc định của một số thư viện Python (HTTP 403 / lỗi 1010). Với Python, gửi User-Agent mô tả tool, như VietlottStatsClient/1.0 trong ví dụ trên; không cần token hay cookie.
Mã kỳ là chuỗi giữ số 0 ở đầu. n1..n6 là sáu số chính đã sắp xếp. special_number là bóng thứ bảy của Power 6/55, không nằm trong thống kê sáu số chính; Mega trả null. percentage dùng thang 0–100.
Thống kê tính ngoài Cloudflare và trả kèm computed_at, total_draws, latest_draw_code, latest_draw_date của chính bộ thống kê đó. Sync kiểm tra Vietlott mỗi giờ bằng runner ở Việt Nam, đối chiếu toàn lịch sử khi đã quá 7 ngày, tự bù khi phát hiện thiếu mã kỳ. Runner hiện tại là Mac và cần bật, có mạng; API vẫn phục vụ dữ liệu đã lưu khi runner tắt. last_success_at cho biết lần kiểm tra thành công thực tế. is_stale bật khi quá 3 giờ chưa sync thành công.
API v1 cache lịch sử/thống kê 6 giờ, overview 1 giờ, games/sync-status 5 phút; client cache tối đa 1 giờ. Vì vậy dữ liệu mới có thể xuất hiện trên API chậm tối đa 6 giờ sau sync. URL tương đương dùng chung cache; tham số lạ/lặp bị từ chối. Giữ nguyên game/from/to khi đi qua các trang. Sau một lần bù lịch sử, tải lại từ đầu để bao gồm các kỳ được thêm vào trước cursor.
API v1 có chặn nhẹ trong từng Function isolate: 120 request/phút/IP và tối đa 60 cache miss cần D1/phút/isolate. Đây là giới hạn cục bộ, không đồng bộ toàn mạng Cloudflare. Khi nhận HTTP 429, chờ theo Retry-After: 60 và dùng lại URL, hoặc dùng JSON tĩnh. Cache HIT không truy vấn D1. Cache API và chặn trong Function vẫn tính request Function; JSON tĩnh phục vụ trực tiếp trên Pages không chạy Function và không đọc D1.
Dữ liệu thống kê không phải dự đoán kết quả kỳ quay tương lai.