# Address Migration API — Vietmap API Playground

> Chuyển địa chỉ giữa định dạng cũ và mới sau khi sáp nhập tỉnh, phường.

API chuyển đổi địa chỉ (Address Migration API) chuyển một địa chỉ giữa định dạng cũ và mới sau đợt sắp xếp lại đơn vị hành chính (sáp nhập tỉnh, bỏ cấp quận, gộp phường). Chiều cũ → mới chỉ cần địa chỉ; chiều mới → cũ cần thêm tọa độ gần đúng (focus) vì nhiều phường cũ đã gộp làm một. Kết quả kèm mã (id) và tên các đơn vị hành chính tương ứng.

Dùng để làm gì:
- Cập nhật địa chỉ khách hàng trong CSDL sang đơn vị mới.
- Đối chiếu hồ sơ, hợp đồng còn ghi địa chỉ cũ.
- Hiển thị song song địa chỉ cũ và mới cho người dùng.
- Chuẩn hóa dữ liệu trước khi geocode hàng loạt.

- Trang tương tác: https://tools.vietmap.vn/playground/migrate-address
- Endpoint: `GET /api/migrate-address/v3` trên `https://maps.vietmap.vn`
- Tài liệu chính thức: https://maps.vietmap.vn/docs/migrate-address/migrate-address-docs/
- API key: mọi request cần tham số `apikey`. Code mẫu dùng `YOUR_API_KEY` làm chỗ giữ key — khi tích hợp, đọc key từ biến môi trường (ví dụ `VIETMAP_API_KEY`). Lấy key tại https://maps.vietmap.vn/console-v2/consumers
- Mã lỗi: `401` sai API key · `403` key bị giới hạn domain/IP · `423` API chưa bật cho consumer của key, hoặc hết credit (phản hồi có "exceeded credit") · `429` vượt giới hạn tần suất.

## Code mẫu

_Đây là request ví dụ với tham số mẫu; mở trang tương tác để đổi tham số và chạy thật._

### cURL

```bash
curl 'https://maps.vietmap.vn/api/migrate-address/v3?apikey=YOUR_API_KEY&text=197+tran+phu+p4+q5&focus=10.75887508%2C106.67538868&migrate_type=1'
```

### JavaScript

```javascript
// Khi đưa vào sản phẩm, đọc key từ biến môi trường thay vì ghi cứng.
const API_KEY = "YOUR_API_KEY";

const params = new URLSearchParams([
  ["apikey", API_KEY],
  ["text", "197 tran phu p4 q5"],
  ["focus", "10.75887508,106.67538868"],
  ["migrate_type", "1"],
]);

const response = await fetch(`https://maps.vietmap.vn/api/migrate-address/v3?${params}`);
if (!response.ok) {
  throw new Error(`Vietmap ${response.status}: ${await response.text()}`);
}
const data = await response.json();
console.log(data);
```

### Python

```python
import requests

# Khi đưa vào sản phẩm, đọc key từ biến môi trường thay vì ghi cứng.
API_KEY = "YOUR_API_KEY"

params = [
    ("apikey", API_KEY),
    ("text", "197 tran phu p4 q5"),
    ("focus", "10.75887508,106.67538868"),
    ("migrate_type", "1"),
]

response = requests.get("https://maps.vietmap.vn/api/migrate-address/v3", params=params, timeout=30)
response.raise_for_status()
print(response.json())
```

### URL

```text
https://maps.vietmap.vn/api/migrate-address/v3?apikey=YOUR_API_KEY&text=197+tran+phu+p4+q5&focus=10.75887508%2C106.67538868&migrate_type=1
```

## AI prompt

Prompt soạn sẵn để giao cho trợ lý lập trình (ChatGPT, Claude, Copilot…) viết code tích hợp API này:

````text
Tôi cần tích hợp Address Migration API v3 của Vietmap vào ứng dụng của mình.

Tài liệu chính thức: https://maps.vietmap.vn/docs/migrate-address/migrate-address-docs/

Đây là một request mẫu đã chạy được trên Vietmap API Playground:

GET https://maps.vietmap.vn/api/migrate-address/v3?apikey=YOUR_API_KEY&text=197+tran+phu+p4+q5&focus=10.75887508%2C106.67538868&migrate_type=1

Tham số đang dùng:
- text = 197 tran phu p4 q5
- focus = 10.75887508,106.67538868
- migrate_type = 1

Hãy viết code bằng [ngôn ngữ / framework của tôi] để gọi API này, với các yêu cầu:
1. Đọc API key từ biến môi trường VIETMAP_API_KEY, không ghi cứng trong code.
2. Truyền tham số qua query string đúng như request mẫu; tham số lặp lại (như `point`) phải giữ nguyên thứ tự.
3. Xử lý lỗi theo mã HTTP của Vietmap:
   - 401: API key sai hoặc đã bị thu hồi.
   - 403: key bị giới hạn theo domain / IP không khớp.
   - 423: API chưa được bật cho consumer của key, HOẶC tài khoản hết credit — phân biệt bằng nội dung phản hồi (có cụm "exceeded credit" là hết credit).
   - 429: vượt giới hạn tần suất — thử lại với backoff tăng dần.
4. Đặt timeout cho request, và định nghĩa kiểu dữ liệu (type / interface / dataclass) cho phản hồi.

Nếu không chắc tên một trường, tra trong tài liệu ở link trên thay vì đoán.
````

## Mở lại đúng request này trong Playground

https://tools.vietmap.vn/playground/migrate-address?text=197+tran+phu+p4+q5&focus=10.75887508,106.67538868&migrate_type=1
