# Tạo Shop

> Tạo một shop (địa điểm lấy hàng) mới dưới tài khoản của bạn.

## Endpoint

| Môi trường | URL |
| --- | --- |
| Production | `https://online-gateway.ghn.vn/shiip/public-api/v2/shop/register` |
| Staging | `https://dev-online-gateway.ghn.vn/shiip/public-api/v2/shop/register` |

**Method**: `POST`

## Headers

| Header | Bắt buộc | Mô tả |
| --- | --- | --- |
| `Content-Type` | Có | `application/json` |
| `Token` | Có | Token của shop (do GHN cấp) — [lấy token](https://developer.ghn.vn/vi/docs/token/get-token.md) |
| `ShopId` | Có | Một shop **đang hoạt động** hiện có của tài khoản bạn. Dù bạn đang tạo shop mới, request sẽ bị từ chối nếu shop này không hoạt động hoặc không thuộc về bạn |

## Tham số

- **name** (String): Tên shop
- **phone** (String): SĐT liên hệ shop. Được GHN chuẩn hóa; số rỗng/không hợp lệ sẽ bị từ chối với `PHONE_INVALID`
- **address** (String): Địa chỉ lấy hàng
- **ward_code** (String): Mã phường/xã lấy hàng (từ [Lấy Phường/Xã](https://developer.ghn.vn/vi/docs/master-data/get-ward.md))
- **district_id** (Int): Mã quận/huyện lấy hàng (từ [Lấy Quận/Huyện](https://developer.ghn.vn/vi/docs/master-data/get-district.md))
- **bank_account_id** (Int): Tài khoản ngân hàng liên kết với shop

## Ví dụ Request

```bash
curl -X POST https://dev-online-gateway.ghn.vn/shiip/public-api/v2/shop/register \
  -H "Token: 5c1d8a9e-2f4b-11ed-..." \
  -H "ShopId: 92837" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Shop Áo GHN - Chi nhánh 2",
    "phone": "0987654321",
    "address": "72 Lê Thánh Tôn, P. Bến Nghé, Quận 1, TP. Hồ Chí Minh",
    "ward_code": "20308",
    "district_id": 1444
  }'
```

## Response

### Thành công (HTTP 200)

```json
{
  "code": 200,
  "message": "Success",
  "data": {
    "shop_id": 200996
  }
}
```

### Các trường Response

| Trường | Kiểu | Mô tả |
| --- | --- | --- |
| `code` | Int | Mã HTTP (`200` nếu thành công) |
| `message` | String | Thông báo kết quả (`Success`) |
| `data.shop_id` | Int | Mã shop vừa tạo. Chủ sở hữu luôn là tài khoản của token |

### Lỗi — thiếu name (HTTP 400)

_Lấy từ một lần gọi thật trên môi trường Staging._

```json
{
  "code": 400,
  "message": "Key: 'myRequest.Name' Error:Field validation for 'Name' failed on the 'required' tag",
  "data": null,
  "code_message": "USER_ERR_COMMON",
  "code_message_value": "Sai thông tin đầu vào. Vui lòng thử lại."
}
```

## Bảng mã lỗi

| code_message | HTTP | Khi nào |
| --- | --- | --- |
| `USER_ERR_COMMON` | 400 | Thiếu `name` hoặc dữ liệu không hợp lệ |
| `PHONE_INVALID` | 400 | `phone` rỗng hoặc sai định dạng |
| `WARD_IS_INVALID` | 400 | `ward_code` / `district_id` không hợp lệ |
| `SHOP_NO_ACTIVE` / `CLIENT_NOT_BELONG_OF_SHOP` | 400 | Shop trong `ShopId` không hoạt động hoặc không thuộc về bạn |
| `SERVER_ERROR_COMMON` | 500 | Lỗi hệ thống |
