Tài liệu API

API JSON miễn phí, không cần đăng ký hay API key, mở CORS cho mọi origin. Dùng để tra cứu dữ liệu sáp nhập tỉnh/huyện/xã Việt Nam sau đợt sáp nhập hành chính 01/07/2025.

Base URL

https://sapnhap.d4t0.com/api/v1

Endpoint

GET /api/v1/provinces

Trả về danh sách 63 tỉnh/thành cũ, kèm số huyện và số xã cũ trong mỗi tỉnh.

Ví dụ request

curl https://sapnhap.d4t0.com/api/v1/provinces

Ví dụ response

[
  { "name": "Thành phố Hà Nội", "slug": "ha-noi", "districtCount": 30, "wardCount": 794 },
  { "name": "Tỉnh Hà Giang", "slug": "ha-giang", "districtCount": 11, "wardCount": 196 },
  ...
]
GET /api/v1/provinces/{slug}

Trả về danh sách huyện/xã cũ của một tỉnh, kèm tỉnh và xã mới tương ứng sau sáp nhập. Lấy slug từ endpoint /api/v1/provinces ở trên.

Ví dụ request

curl https://sapnhap.d4t0.com/api/v1/provinces/da-nang

Ví dụ response

[
  {
    "district": "Quận Hải Châu",
    "wards": [
      { "ward": "Phường Thanh Bình", "newProvince": "Thành phố Đà Nẵng", "newWard": "Phường Hải Châu" },
      ...
    ]
  },
  ...
]
GET /api/v1/lookup

Tra cứu trực tiếp một địa chỉ cũ (Tỉnh, Huyện, Xã) và trả về địa chỉ mới tương ứng.

Tham sốBắt buộcMô tả
provinceTên tỉnh cũ (vd. "Thành phố Đà Nẵng") hoặc slug (vd. "da-nang")
districtTên huyện/quận cũ, vd. "Quận Hải Châu"
wardTên xã/phường cũ, vd. "Phường Thanh Bình"

Ví dụ request

curl "https://sapnhap.d4t0.com/api/v1/lookup?province=da-nang&district=Qu%E1%BA%ADn%20H%E1%BA%A3i%20Ch%C3%A2u&ward=Ph%C6%B0%E1%BB%9Dng%20Thanh%20B%C3%ACnh"

Ví dụ response

{
  "old": {
    "province": "Thành phố Đà Nẵng",
    "district": "Quận Hải Châu",
    "ward": "Phường Thanh Bình"
  },
  "new": {
    "province": "Thành phố Đà Nẵng",
    "ward": "Phường Hải Châu"
  }
}

Nếu không khớp (404)

{ "error": "Ward not found: ..." }

Một số xã/phường cũ bị chia tách thành nhiều đơn vị mới khi sáp nhập. Trường hợp này, new.ward là đơn vị mới được khuyến nghị (khu vực/dân số chính), và response có thêm new.alternativeWards liệt kê các đơn vị mới khác mà một phần xã cũ cũng thuộc về.

Ví dụ response khi xã cũ bị chia tách

{
  "old": {
    "province": "Thành phố Hà Nội",
    "district": "Huyện Thanh Trì",
    "ward": "Thị trấn Văn Điển"
  },
  "new": {
    "province": "Thành phố Hà Nội",
    "ward": "Xã Thanh Trì",
    "alternativeWards": ["Phường Hoàng Liệt", "Xã Đại Thanh"]
  }
}

Giới hạn tần suất (Rate limiting)

Để chống lạm dụng và tấn công DDoS, mỗi địa chỉ IP bị giới hạn theo 2 ngưỡng song song (áp dụng chung cho /api/v1/*). Vượt ngưỡng nào cũng sẽ nhận 429 Too Many Requests kèm header Retry-After.

LoạiNgưỡngMục đích
Burst30 request / 10 giâyChặn các đợt gửi dồn dập (dấu hiệu DDoS/bot)
Sustained300 request / 60 giâyChặn lạm dụng kéo dài, vẫn thoải mái cho tích hợp bình thường

Ví dụ response khi vượt giới hạn (429)

{ "error": "Too many requests, slow down." }

Giới hạn & lưu ý

API miễn phí, không cần đăng ký. Response được cache ở edge Cloudflare nên phản hồi rất nhanh. Dữ liệu tổng hợp dựa trên nguồn dữ liệu hành chính quốc gia; với mục đích pháp lý quan trọng, hãy đối chiếu thêm với quyết định chính thức của địa phương.