Tham chiếu: Khách hàng
Khách hàng, địa chỉ và ghi chú. Mọi đường dẫn dưới https://danix.. Đặc tả máy đọc: openapi.json.
Liệt kê khách hàng
GET /customers
Phân trang theo con trỏ. Lọc theo số điện thoại bằng phone.
Quyền cần có: khoá có quyền pos..
Tham số query
| Tên | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
limit |
integer | không | Số dòng mỗi trang, từ 1 đến 100. Mặc định 50. |
cursor |
string | không | Con trỏ lấy từ nextCursor của trang trước, để lật trang trong CÙNG một lượt đọc (giữ nguyên các tham số khác). Không tự dựng, không lưu để nối lượt đồng bộ sau. |
updatedSince |
string (date-time) | không | Chỉ lấy bản ghi có updatedAt từ thời điểm này (ISO 8601 UTC), tính cả mốc. Đây là cách đồng bộ tăng dần: có tham số này thì danh sách chỉ trả bản ghi đã qua khoảng trễ an toàn (trần thời gian tua lại kho của shop cộng 15 giây, mặc định 2 phút 15 giây). |
includeDeleted |
"true" | "false" | không | true để lấy cả bản ghi đã xoá (có deletedAt). Mặc định false. |
phone |
string | không | Tìm đúng số điện thoại (chấp nhận 0xxxxxxxxx hoặc +84…). |
search |
string | không | Tìm theo tên. |
Ví dụ yêu cầu
curl -X GET "https://danix.vn/api/open/v1/customers" \
-H "Authorization: Bearer dnx_live_…"
Phản hồi mẫu (200)
{
"data": [
{
"id": "018f3b8e-1c2d-7a4b-9c3d-000000000201",
"name": "Nguyễn Văn An",
"gender": "male",
"dateOfBirth": null,
"source": "order",
"isBlocked": false,
"primaryPhone": "0901234567",
"primaryEmail": null,
"createdAt": "2026-10-02T03:15:00.000Z",
"updatedAt": "2026-10-02T03:15:00.000Z",
"deletedAt": null
}
],
"nextCursor": null
}
Trường của phản hồi
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
data |
array<object> | có | Các bản ghi của trang này. |
data[]. |
string (uuid) | có | Mã khách hàng. |
data[]. |
string | có | Tên khách. |
data[]. |
"male" | "female" | "other" hoặc null | có | Giới tính. |
data[]. |
string hoặc null | có | Ngày sinh, dạng YYYY-MM-DD. |
data[]. |
"manual" | "order" | "import" | có | Nguồn tạo hồ sơ: manual, order hoặc import. |
data[]. |
boolean | có | Khách đang bị chặn. |
data[]. |
string hoặc null | có | Số điện thoại chính. |
data[]. |
string hoặc null | có | Email chính. |
data[]. |
string (date-time) | có | Thời điểm tạo. ISO 8601, múi giờ UTC. |
data[]. |
string (date-time) | có | Thời điểm sửa gần nhất. ISO 8601, múi giờ UTC. |
data[]. |
string (date-time) hoặc null | có | Thời điểm xoá mềm; null nếu chưa xoá. ISO 8601 UTC hoặc null. |
nextCursor |
string hoặc null | có | Con trỏ của trang kế; null khi đã hết dữ liệu. |
Lỗi
| Trạng thái | Mã code |
Ý nghĩa |
|---|---|---|
| 401 | invalid-api-key |
Khoá API thiếu, sai hoặc đã bị thu hồi |
| 403 | insufficient-permission |
Khoá API không có quyền thực hiện thao tác này |
| 403 | shop-suspended |
Shop đang bị đình chỉ |
| 403 | automation-not-active |
Shop chưa bật tính năng Tự động hoá |
| 429 | rate-limited |
Vượt hạn mức gọi API, hãy chờ rồi thử lại |
| 500 | internal-error |
Lỗi hệ thống |
| 400 | validation-failed |
Dữ liệu gửi lên không hợp lệ |
| 400 | invalid-cursor |
Con trỏ phân trang không hợp lệ |
Định dạng lỗi và bảng mọi mã code: Lỗi.
Tạo khách hàng
POST /customers
Tạo hồ sơ khách. Gửi Idempotency-Key để thử lại an toàn.
Quyền cần có: khoá có quyền pos..
Header
| Tên | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
Idempotency-Key |
string | không | Khoá chống trùng do client đặt (khuyến nghị UUID). Gửi lại cùng khoá trong 24 giờ trả đúng kết quả lần đầu và header Idempotent-Replayed: true. |
Thân yêu cầu (JSON)
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
name |
string | có | Tên khách. |
gender |
"male" | "female" | "other" hoặc null | không | Giới tính. |
dateOfBirth |
string hoặc null | không | Ngày sinh, dạng YYYY-MM-DD. |
contacts |
array<một trong nhiều dạng> | không | Số điện thoại và email. |
contacts[]. |
"phone" | có | |
contacts[]. |
string | có | Số điện thoại. |
contacts[]. |
boolean | không | Đặt làm số chính. |
Ví dụ yêu cầu
curl -X POST "https://danix.vn/api/open/v1/customers" \
-H "Authorization: Bearer dnx_live_…" \
-H "Idempotency-Key: 865d6735-58e7-488f-9ba7-be2de4de5651" \
-H "Content-Type: application/json" \
-d '{
"name": "Nguyễn Văn An",
"contacts": [
{
"kind": "phone",
"value": "0901234567",
"isPrimary": true
}
]
}'
Phản hồi mẫu (201)
{
"id": "018f3b8e-1c2d-7a4b-9c3d-000000000201",
"name": "Nguyễn Văn An",
"gender": "male",
"dateOfBirth": null,
"source": "order",
"isBlocked": false,
"primaryPhone": "0901234567",
"primaryEmail": null,
"createdAt": "2026-10-02T03:15:00.000Z",
"updatedAt": "2026-10-02T03:15:00.000Z",
"deletedAt": null,
"contacts": [
{
"id": "018f3b8e-1c2d-7a4b-9c3d-000000000901",
"kind": "phone",
"value": "0901234567",
"isPrimary": true
}
],
"addresses": []
}
Trường của phản hồi
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
id |
string (uuid) | có | Mã khách hàng. |
name |
string | có | Tên khách. |
gender |
"male" | "female" | "other" hoặc null | có | Giới tính. |
dateOfBirth |
string hoặc null | có | Ngày sinh, dạng YYYY-MM-DD. |
source |
"manual" | "order" | "import" | có | Nguồn tạo hồ sơ: manual, order hoặc import. |
isBlocked |
boolean | có | Khách đang bị chặn. |
primaryPhone |
string hoặc null | có | Số điện thoại chính. |
primaryEmail |
string hoặc null | có | Email chính. |
createdAt |
string (date-time) | có | Thời điểm tạo. ISO 8601, múi giờ UTC. |
updatedAt |
string (date-time) | có | Thời điểm sửa gần nhất. ISO 8601, múi giờ UTC. |
deletedAt |
string (date-time) hoặc null | có | Thời điểm xoá mềm; null nếu chưa xoá. ISO 8601 UTC hoặc null. |
contacts |
array<object> | có | Số điện thoại và email. |
contacts[]. |
string (uuid) | có | Mã liên hệ. |
contacts[]. |
"phone" | "email" | có | Loại liên hệ. |
contacts[]. |
string | có | Giá trị đã chuẩn hoá (số điện thoại 0xxxxxxxxx hoặc email). |
contacts[]. |
boolean | có | Liên hệ chính của loại này. |
addresses |
array<object> | có | Địa chỉ giao hàng, địa chỉ dùng gần nhất đứng đầu. |
addresses[]. |
string (uuid) | có | Mã địa chỉ. |
addresses[]. |
string hoặc null | có | Tên người nhận. |
addresses[]. |
string hoặc null | có | Số điện thoại người nhận. |
addresses[]. |
string | có | Số nhà, đường. |
addresses[]. |
"old" | "new" hoặc null | có | Hệ địa giới của các mã bên dưới: old (tỉnh, huyện, xã) hoặc new (tỉnh, xã). null khi địa chỉ chỉ có chữ. |
addresses[]. |
string (uuid) hoặc null | có | Mã (UUID) tỉnh hoặc thành phố; null khi không có. |
addresses[]. |
string (uuid) hoặc null | có | Mã (UUID) quận hoặc huyện; hệ new luôn null. |
addresses[]. |
string (uuid) hoặc null | có | Mã (UUID) phường hoặc xã; null khi không có. |
addresses[]. |
string hoặc null | có | Tỉnh hoặc thành phố. |
addresses[]. |
string hoặc null | có | Quận hoặc huyện. |
addresses[]. |
string hoặc null | có | Phường hoặc xã. |
Lỗi
| Trạng thái | Mã code |
Ý nghĩa |
|---|---|---|
| 401 | invalid-api-key |
Khoá API thiếu, sai hoặc đã bị thu hồi |
| 403 | insufficient-permission |
Khoá API không có quyền thực hiện thao tác này |
| 403 | shop-suspended |
Shop đang bị đình chỉ |
| 403 | automation-not-active |
Shop chưa bật tính năng Tự động hoá |
| 429 | rate-limited |
Vượt hạn mức gọi API, hãy chờ rồi thử lại |
| 500 | internal-error |
Lỗi hệ thống |
| 402 | subscription-expired |
Gói cước của shop đã hết hạn, chỉ còn quyền đọc |
| 400 | validation-failed |
Dữ liệu gửi lên không hợp lệ |
| 413 | payload-too-large |
Thân yêu cầu vượt quá dung lượng cho phép |
| 415 | unsupported-media-type |
Thân yêu cầu phải là JSON (Content-Type: application/json) |
| 409 | conflict |
Thao tác xung đột với trạng thái hiện tại |
| 409 | idempotency-key-in-progress |
Yêu cầu với cùng Idempotency-Key đang được xử lý |
| 422 | idempotency-key-reused |
Idempotency-Key đã dùng cho một yêu cầu có nội dung khác |
Định dạng lỗi và bảng mọi mã code: Lỗi.
Chi tiết một khách hàng
GET /customers/{id}
Trả khách kèm số điện thoại, email và địa chỉ giao hàng.
Quyền cần có: khoá có quyền pos..
Tham số đường dẫn
| Tên | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
id |
string (uuid) | có | Mã định danh (UUID) của tài nguyên. |
Ví dụ yêu cầu
curl -X GET "https://danix.vn/api/open/v1/customers/{id}" \
-H "Authorization: Bearer dnx_live_…"
Thay {id} trong địa chỉ bằng mã thật của bản ghi, và dnx_live_… bằng khoá của bạn.
Phản hồi mẫu (200)
{
"id": "018f3b8e-1c2d-7a4b-9c3d-000000000201",
"name": "Nguyễn Văn An",
"gender": "male",
"dateOfBirth": null,
"source": "order",
"isBlocked": false,
"primaryPhone": "0901234567",
"primaryEmail": null,
"createdAt": "2026-10-02T03:15:00.000Z",
"updatedAt": "2026-10-02T03:15:00.000Z",
"deletedAt": null,
"contacts": [
{
"id": "018f3b8e-1c2d-7a4b-9c3d-000000000901",
"kind": "phone",
"value": "0901234567",
"isPrimary": true
}
],
"addresses": []
}
Trường của phản hồi
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
id |
string (uuid) | có | Mã khách hàng. |
name |
string | có | Tên khách. |
gender |
"male" | "female" | "other" hoặc null | có | Giới tính. |
dateOfBirth |
string hoặc null | có | Ngày sinh, dạng YYYY-MM-DD. |
source |
"manual" | "order" | "import" | có | Nguồn tạo hồ sơ: manual, order hoặc import. |
isBlocked |
boolean | có | Khách đang bị chặn. |
primaryPhone |
string hoặc null | có | Số điện thoại chính. |
primaryEmail |
string hoặc null | có | Email chính. |
createdAt |
string (date-time) | có | Thời điểm tạo. ISO 8601, múi giờ UTC. |
updatedAt |
string (date-time) | có | Thời điểm sửa gần nhất. ISO 8601, múi giờ UTC. |
deletedAt |
string (date-time) hoặc null | có | Thời điểm xoá mềm; null nếu chưa xoá. ISO 8601 UTC hoặc null. |
contacts |
array<object> | có | Số điện thoại và email. |
contacts[]. |
string (uuid) | có | Mã liên hệ. |
contacts[]. |
"phone" | "email" | có | Loại liên hệ. |
contacts[]. |
string | có | Giá trị đã chuẩn hoá (số điện thoại 0xxxxxxxxx hoặc email). |
contacts[]. |
boolean | có | Liên hệ chính của loại này. |
addresses |
array<object> | có | Địa chỉ giao hàng, địa chỉ dùng gần nhất đứng đầu. |
addresses[]. |
string (uuid) | có | Mã địa chỉ. |
addresses[]. |
string hoặc null | có | Tên người nhận. |
addresses[]. |
string hoặc null | có | Số điện thoại người nhận. |
addresses[]. |
string | có | Số nhà, đường. |
addresses[]. |
"old" | "new" hoặc null | có | Hệ địa giới của các mã bên dưới: old (tỉnh, huyện, xã) hoặc new (tỉnh, xã). null khi địa chỉ chỉ có chữ. |
addresses[]. |
string (uuid) hoặc null | có | Mã (UUID) tỉnh hoặc thành phố; null khi không có. |
addresses[]. |
string (uuid) hoặc null | có | Mã (UUID) quận hoặc huyện; hệ new luôn null. |
addresses[]. |
string (uuid) hoặc null | có | Mã (UUID) phường hoặc xã; null khi không có. |
addresses[]. |
string hoặc null | có | Tỉnh hoặc thành phố. |
addresses[]. |
string hoặc null | có | Quận hoặc huyện. |
addresses[]. |
string hoặc null | có | Phường hoặc xã. |
Lỗi
| Trạng thái | Mã code |
Ý nghĩa |
|---|---|---|
| 401 | invalid-api-key |
Khoá API thiếu, sai hoặc đã bị thu hồi |
| 403 | insufficient-permission |
Khoá API không có quyền thực hiện thao tác này |
| 403 | shop-suspended |
Shop đang bị đình chỉ |
| 403 | automation-not-active |
Shop chưa bật tính năng Tự động hoá |
| 429 | rate-limited |
Vượt hạn mức gọi API, hãy chờ rồi thử lại |
| 500 | internal-error |
Lỗi hệ thống |
| 404 | not-found |
Không tìm thấy tài nguyên |
Định dạng lỗi và bảng mọi mã code: Lỗi.
Sửa khách hàng
PATCH /customers/{id}
Chỉ gửi trường cần đổi. Số điện thoại và email không sửa được qua đường này.
Quyền cần có: khoá có quyền pos..
Tham số đường dẫn
| Tên | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
id |
string (uuid) | có | Mã định danh (UUID) của tài nguyên. |
Thân yêu cầu (JSON)
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
name |
string | không | Tên khách. |
gender |
"male" | "female" | "other" hoặc null | không | Giới tính. |
dateOfBirth |
string hoặc null | không | Ngày sinh, dạng YYYY-MM-DD. |
Ví dụ yêu cầu
curl -X PATCH "https://danix.vn/api/open/v1/customers/{id}" \
-H "Authorization: Bearer dnx_live_…" \
-H "Content-Type: application/json" \
-d '{
"name": "Nguyễn Văn An (VIP)"
}'
Thay {id} trong địa chỉ bằng mã thật của bản ghi, và dnx_live_… bằng khoá của bạn.
Phản hồi mẫu (200)
{
"id": "018f3b8e-1c2d-7a4b-9c3d-000000000201",
"name": "Nguyễn Văn An",
"gender": "male",
"dateOfBirth": null,
"source": "order",
"isBlocked": false,
"primaryPhone": "0901234567",
"primaryEmail": null,
"createdAt": "2026-10-02T03:15:00.000Z",
"updatedAt": "2026-10-02T03:15:00.000Z",
"deletedAt": null,
"contacts": [
{
"id": "018f3b8e-1c2d-7a4b-9c3d-000000000901",
"kind": "phone",
"value": "0901234567",
"isPrimary": true
}
],
"addresses": []
}
Trường của phản hồi
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
id |
string (uuid) | có | Mã khách hàng. |
name |
string | có | Tên khách. |
gender |
"male" | "female" | "other" hoặc null | có | Giới tính. |
dateOfBirth |
string hoặc null | có | Ngày sinh, dạng YYYY-MM-DD. |
source |
"manual" | "order" | "import" | có | Nguồn tạo hồ sơ: manual, order hoặc import. |
isBlocked |
boolean | có | Khách đang bị chặn. |
primaryPhone |
string hoặc null | có | Số điện thoại chính. |
primaryEmail |
string hoặc null | có | Email chính. |
createdAt |
string (date-time) | có | Thời điểm tạo. ISO 8601, múi giờ UTC. |
updatedAt |
string (date-time) | có | Thời điểm sửa gần nhất. ISO 8601, múi giờ UTC. |
deletedAt |
string (date-time) hoặc null | có | Thời điểm xoá mềm; null nếu chưa xoá. ISO 8601 UTC hoặc null. |
contacts |
array<object> | có | Số điện thoại và email. |
contacts[]. |
string (uuid) | có | Mã liên hệ. |
contacts[]. |
"phone" | "email" | có | Loại liên hệ. |
contacts[]. |
string | có | Giá trị đã chuẩn hoá (số điện thoại 0xxxxxxxxx hoặc email). |
contacts[]. |
boolean | có | Liên hệ chính của loại này. |
addresses |
array<object> | có | Địa chỉ giao hàng, địa chỉ dùng gần nhất đứng đầu. |
addresses[]. |
string (uuid) | có | Mã địa chỉ. |
addresses[]. |
string hoặc null | có | Tên người nhận. |
addresses[]. |
string hoặc null | có | Số điện thoại người nhận. |
addresses[]. |
string | có | Số nhà, đường. |
addresses[]. |
"old" | "new" hoặc null | có | Hệ địa giới của các mã bên dưới: old (tỉnh, huyện, xã) hoặc new (tỉnh, xã). null khi địa chỉ chỉ có chữ. |
addresses[]. |
string (uuid) hoặc null | có | Mã (UUID) tỉnh hoặc thành phố; null khi không có. |
addresses[]. |
string (uuid) hoặc null | có | Mã (UUID) quận hoặc huyện; hệ new luôn null. |
addresses[]. |
string (uuid) hoặc null | có | Mã (UUID) phường hoặc xã; null khi không có. |
addresses[]. |
string hoặc null | có | Tỉnh hoặc thành phố. |
addresses[]. |
string hoặc null | có | Quận hoặc huyện. |
addresses[]. |
string hoặc null | có | Phường hoặc xã. |
Lỗi
| Trạng thái | Mã code |
Ý nghĩa |
|---|---|---|
| 401 | invalid-api-key |
Khoá API thiếu, sai hoặc đã bị thu hồi |
| 403 | insufficient-permission |
Khoá API không có quyền thực hiện thao tác này |
| 403 | shop-suspended |
Shop đang bị đình chỉ |
| 403 | automation-not-active |
Shop chưa bật tính năng Tự động hoá |
| 429 | rate-limited |
Vượt hạn mức gọi API, hãy chờ rồi thử lại |
| 500 | internal-error |
Lỗi hệ thống |
| 402 | subscription-expired |
Gói cước của shop đã hết hạn, chỉ còn quyền đọc |
| 400 | validation-failed |
Dữ liệu gửi lên không hợp lệ |
| 413 | payload-too-large |
Thân yêu cầu vượt quá dung lượng cho phép |
| 415 | unsupported-media-type |
Thân yêu cầu phải là JSON (Content-Type: application/json) |
| 404 | not-found |
Không tìm thấy tài nguyên |
Định dạng lỗi và bảng mọi mã code: Lỗi.
Thêm địa chỉ cho khách
POST /customers/{id}/addresses
Thêm một địa chỉ giao hàng vào hồ sơ khách. Khách đã có một địa chỉ đúng như vậy thì trả conflict. Gửi mã đơn vị hành chính (tra bằng GET /geo/units) để đơn dùng địa chỉ này đẩy được sang hãng vận chuyển.
Quyền cần có: khoá có quyền pos..
Tham số đường dẫn
| Tên | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
id |
string (uuid) | có | Mã định danh (UUID) của tài nguyên. |
Thân yêu cầu (JSON)
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
recipientName |
string hoặc null | không | Tên người nhận. |
recipientPhone |
string hoặc null | không | Số điện thoại người nhận. |
addressLine |
string | có | Số nhà, đường. |
provinceName |
string hoặc null | không | Tỉnh hoặc thành phố. |
districtName |
string hoặc null | không | Quận hoặc huyện. |
wardName |
string hoặc null | không | Phường hoặc xã. |
geoSystem |
"old" | "new" hoặc null | không | Hệ địa giới của các mã bên dưới: old (tỉnh, huyện, xã) hoặc new (tỉnh, xã). Bỏ trống thì suy từ mã. |
provinceUnitId |
string (uuid) hoặc null | không | Mã (UUID) tỉnh hoặc thành phố trong danh mục hành chính của DANIX. |
districtUnitId |
string (uuid) hoặc null | không | Mã (UUID) quận hoặc huyện. Hệ new không có cấp này. |
wardUnitId |
string (uuid) hoặc null | không | Mã (UUID) phường hoặc xã. |
Ví dụ yêu cầu
curl -X POST "https://danix.vn/api/open/v1/customers/{id}/addresses" \
-H "Authorization: Bearer dnx_live_…" \
-H "Content-Type: application/json" \
-d '{
"addressLine": "12 Lê Lợi",
"provinceName": "Đà Nẵng"
}'
Thay {id} trong địa chỉ bằng mã thật của bản ghi, và dnx_live_… bằng khoá của bạn.
Phản hồi mẫu (201)
{
"id": "018f3b8e-1c2d-7a4b-9c3d-000000000999",
"recipientName": null,
"recipientPhone": null,
"addressLine": "12 Lê Lợi, Đà Nẵng",
"geoSystem": null,
"provinceUnitId": null,
"districtUnitId": null,
"wardUnitId": null,
"provinceName": null,
"districtName": null,
"wardName": null
}
Trường của phản hồi
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
id |
string (uuid) | có | Mã địa chỉ. |
recipientName |
string hoặc null | có | Tên người nhận. |
recipientPhone |
string hoặc null | có | Số điện thoại người nhận. |
addressLine |
string | có | Số nhà, đường. |
geoSystem |
"old" | "new" hoặc null | có | Hệ địa giới của các mã bên dưới: old (tỉnh, huyện, xã) hoặc new (tỉnh, xã). null khi địa chỉ chỉ có chữ. |
provinceUnitId |
string (uuid) hoặc null | có | Mã (UUID) tỉnh hoặc thành phố; null khi không có. |
districtUnitId |
string (uuid) hoặc null | có | Mã (UUID) quận hoặc huyện; hệ new luôn null. |
wardUnitId |
string (uuid) hoặc null | có | Mã (UUID) phường hoặc xã; null khi không có. |
provinceName |
string hoặc null | có | Tỉnh hoặc thành phố. |
districtName |
string hoặc null | có | Quận hoặc huyện. |
wardName |
string hoặc null | có | Phường hoặc xã. |
Lỗi
| Trạng thái | Mã code |
Ý nghĩa |
|---|---|---|
| 401 | invalid-api-key |
Khoá API thiếu, sai hoặc đã bị thu hồi |
| 403 | insufficient-permission |
Khoá API không có quyền thực hiện thao tác này |
| 403 | shop-suspended |
Shop đang bị đình chỉ |
| 403 | automation-not-active |
Shop chưa bật tính năng Tự động hoá |
| 429 | rate-limited |
Vượt hạn mức gọi API, hãy chờ rồi thử lại |
| 500 | internal-error |
Lỗi hệ thống |
| 402 | subscription-expired |
Gói cước của shop đã hết hạn, chỉ còn quyền đọc |
| 400 | validation-failed |
Dữ liệu gửi lên không hợp lệ |
| 413 | payload-too-large |
Thân yêu cầu vượt quá dung lượng cho phép |
| 415 | unsupported-media-type |
Thân yêu cầu phải là JSON (Content-Type: application/json) |
| 404 | not-found |
Không tìm thấy tài nguyên |
| 409 | conflict |
Thao tác xung đột với trạng thái hiện tại |
Định dạng lỗi và bảng mọi mã code: Lỗi.
Sửa địa chỉ của khách
PATCH /customers/{id}/addresses/{addressId}
Thay nội dung một địa chỉ giao hàng; trùng đúng một địa chỉ khác của khách thì trả conflict. Gửi tên địa danh (tỉnh, huyện, xã) mà không gửi mã thì mã đơn vị cũ bị XOÁ — địa chỉ không còn đẩy hãng được tới khi gửi lại mã; không gửi trường địa danh nào thì giữ nguyên.
Quyền cần có: khoá có quyền pos..
Tham số đường dẫn
| Tên | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
id |
string (uuid) | có | Mã định danh (UUID) của tài nguyên. |
addressId |
string (uuid) | có | Mã địa chỉ. |
Thân yêu cầu (JSON)
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
recipientName |
string hoặc null | không | Tên người nhận. |
recipientPhone |
string hoặc null | không | Số điện thoại người nhận. |
addressLine |
string | có | Số nhà, đường. |
provinceName |
string hoặc null | không | Tỉnh hoặc thành phố. |
districtName |
string hoặc null | không | Quận hoặc huyện. |
wardName |
string hoặc null | không | Phường hoặc xã. |
geoSystem |
"old" | "new" hoặc null | không | Hệ địa giới của các mã bên dưới: old (tỉnh, huyện, xã) hoặc new (tỉnh, xã). Bỏ trống thì suy từ mã. |
provinceUnitId |
string (uuid) hoặc null | không | Mã (UUID) tỉnh hoặc thành phố trong danh mục hành chính của DANIX. |
districtUnitId |
string (uuid) hoặc null | không | Mã (UUID) quận hoặc huyện. Hệ new không có cấp này. |
wardUnitId |
string (uuid) hoặc null | không | Mã (UUID) phường hoặc xã. |
Ví dụ yêu cầu
curl -X PATCH "https://danix.vn/api/open/v1/customers/{id}/addresses/{addressId}" \
-H "Authorization: Bearer dnx_live_…" \
-H "Content-Type: application/json" \
-d '{
"addressLine": "34 Trần Phú"
}'
Thay {id}, {addressId} trong địa chỉ bằng mã thật của bản ghi, và dnx_live_… bằng khoá của bạn.
Phản hồi mẫu (200)
{
"id": "018f3b8e-1c2d-7a4b-9c3d-000000000999",
"recipientName": null,
"recipientPhone": null,
"addressLine": "34 Trần Phú",
"geoSystem": "old",
"provinceUnitId": "018f3b8e-1c2d-7a4b-9c3d-000000001501",
"districtUnitId": "018f3b8e-1c2d-7a4b-9c3d-000000001502",
"wardUnitId": "018f3b8e-1c2d-7a4b-9c3d-000000001503",
"provinceName": "Đà Nẵng",
"districtName": "Hải Châu",
"wardName": "Thạch Thang"
}
Trường của phản hồi
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
id |
string (uuid) | có | Mã địa chỉ. |
recipientName |
string hoặc null | có | Tên người nhận. |
recipientPhone |
string hoặc null | có | Số điện thoại người nhận. |
addressLine |
string | có | Số nhà, đường. |
geoSystem |
"old" | "new" hoặc null | có | Hệ địa giới của các mã bên dưới: old (tỉnh, huyện, xã) hoặc new (tỉnh, xã). null khi địa chỉ chỉ có chữ. |
provinceUnitId |
string (uuid) hoặc null | có | Mã (UUID) tỉnh hoặc thành phố; null khi không có. |
districtUnitId |
string (uuid) hoặc null | có | Mã (UUID) quận hoặc huyện; hệ new luôn null. |
wardUnitId |
string (uuid) hoặc null | có | Mã (UUID) phường hoặc xã; null khi không có. |
provinceName |
string hoặc null | có | Tỉnh hoặc thành phố. |
districtName |
string hoặc null | có | Quận hoặc huyện. |
wardName |
string hoặc null | có | Phường hoặc xã. |
Lỗi
| Trạng thái | Mã code |
Ý nghĩa |
|---|---|---|
| 401 | invalid-api-key |
Khoá API thiếu, sai hoặc đã bị thu hồi |
| 403 | insufficient-permission |
Khoá API không có quyền thực hiện thao tác này |
| 403 | shop-suspended |
Shop đang bị đình chỉ |
| 403 | automation-not-active |
Shop chưa bật tính năng Tự động hoá |
| 429 | rate-limited |
Vượt hạn mức gọi API, hãy chờ rồi thử lại |
| 500 | internal-error |
Lỗi hệ thống |
| 402 | subscription-expired |
Gói cước của shop đã hết hạn, chỉ còn quyền đọc |
| 400 | validation-failed |
Dữ liệu gửi lên không hợp lệ |
| 413 | payload-too-large |
Thân yêu cầu vượt quá dung lượng cho phép |
| 415 | unsupported-media-type |
Thân yêu cầu phải là JSON (Content-Type: application/json) |
| 404 | not-found |
Không tìm thấy tài nguyên |
| 409 | conflict |
Thao tác xung đột với trạng thái hiện tại |
Định dạng lỗi và bảng mọi mã code: Lỗi.
Xoá địa chỉ của khách
DELETE /customers/{id}/addresses/{addressId}
Xoá một địa chỉ giao hàng khỏi hồ sơ khách. Đơn cũ vẫn giữ địa chỉ đã ghi.
Quyền cần có: khoá có quyền pos..
Tham số đường dẫn
| Tên | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
id |
string (uuid) | có | Mã định danh (UUID) của tài nguyên. |
addressId |
string (uuid) | có | Mã địa chỉ. |
Ví dụ yêu cầu
curl -X DELETE "https://danix.vn/api/open/v1/customers/{id}/addresses/{addressId}" \
-H "Authorization: Bearer dnx_live_…"
Thay {id}, {addressId} trong địa chỉ bằng mã thật của bản ghi, và dnx_live_… bằng khoá của bạn.
Phản hồi mẫu (200)
{
"ok": true
}
Trường của phản hồi
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
ok |
true | có | Luôn true khi thao tác thành công. |
Lỗi
| Trạng thái | Mã code |
Ý nghĩa |
|---|---|---|
| 401 | invalid-api-key |
Khoá API thiếu, sai hoặc đã bị thu hồi |
| 403 | insufficient-permission |
Khoá API không có quyền thực hiện thao tác này |
| 403 | shop-suspended |
Shop đang bị đình chỉ |
| 403 | automation-not-active |
Shop chưa bật tính năng Tự động hoá |
| 429 | rate-limited |
Vượt hạn mức gọi API, hãy chờ rồi thử lại |
| 500 | internal-error |
Lỗi hệ thống |
| 402 | subscription-expired |
Gói cước của shop đã hết hạn, chỉ còn quyền đọc |
| 404 | not-found |
Không tìm thấy tài nguyên |
Định dạng lỗi và bảng mọi mã code: Lỗi.
Ghi chú của khách
GET /customers/{id}/notes
Danh sách ghi chú, mới nhất trước.
Quyền cần có: khoá có quyền pos..
Tham số đường dẫn
| Tên | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
id |
string (uuid) | có | Mã định danh (UUID) của tài nguyên. |
Ví dụ yêu cầu
curl -X GET "https://danix.vn/api/open/v1/customers/{id}/notes" \
-H "Authorization: Bearer dnx_live_…"
Thay {id} trong địa chỉ bằng mã thật của bản ghi, và dnx_live_… bằng khoá của bạn.
Phản hồi mẫu (200)
{
"data": []
}
Trường của phản hồi
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
data |
array<object> | có | Các ghi chú, mới nhất trước. |
data[]. |
string (uuid) | có | Mã ghi chú. |
data[]. |
string | có | Nội dung ghi chú. |
data[]. |
string hoặc null | có | Tên người hay ứng dụng đã ghi. |
data[]. |
boolean | có | true khi ghi chú do một ứng dụng kết nối tạo. |
data[]. |
string (date-time) | có | Thời điểm tạo. ISO 8601, múi giờ UTC. |
data[]. |
string (date-time) | có | Thời điểm sửa gần nhất. ISO 8601, múi giờ UTC. |
Lỗi
| Trạng thái | Mã code |
Ý nghĩa |
|---|---|---|
| 401 | invalid-api-key |
Khoá API thiếu, sai hoặc đã bị thu hồi |
| 403 | insufficient-permission |
Khoá API không có quyền thực hiện thao tác này |
| 403 | shop-suspended |
Shop đang bị đình chỉ |
| 403 | automation-not-active |
Shop chưa bật tính năng Tự động hoá |
| 429 | rate-limited |
Vượt hạn mức gọi API, hãy chờ rồi thử lại |
| 500 | internal-error |
Lỗi hệ thống |
| 404 | not-found |
Không tìm thấy tài nguyên |
Định dạng lỗi và bảng mọi mã code: Lỗi.
Thêm ghi chú vào khách
POST /customers/{id}/notes
Ghi chú đứng tên ứng dụng kết nối.
Quyền cần có: khoá có quyền pos..
Tham số đường dẫn
| Tên | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
id |
string (uuid) | có | Mã định danh (UUID) của tài nguyên. |
Thân yêu cầu (JSON)
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
message |
string | có | Nội dung ghi chú. |
Ví dụ yêu cầu
curl -X POST "https://danix.vn/api/open/v1/customers/{id}/notes" \
-H "Authorization: Bearer dnx_live_…" \
-H "Content-Type: application/json" \
-d '{
"message": "Khách thích giao buổi tối"
}'
Thay {id} trong địa chỉ bằng mã thật của bản ghi, và dnx_live_… bằng khoá của bạn.
Phản hồi mẫu (201)
{
"id": "018f3b8e-1c2d-7a4b-9c3d-000000000778",
"message": "Khách thích giao buổi tối",
"createdByName": "Đồng bộ kế toán",
"createdByIsIntegration": true,
"createdAt": "2026-10-02T03:15:00.000Z",
"updatedAt": "2026-10-02T03:15:00.000Z"
}
Trường của phản hồi
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
id |
string (uuid) | có | Mã ghi chú. |
message |
string | có | Nội dung ghi chú. |
createdByName |
string hoặc null | có | Tên người hay ứng dụng đã ghi. |
createdByIsIntegration |
boolean | có | true khi ghi chú do một ứng dụng kết nối tạo. |
createdAt |
string (date-time) | có | Thời điểm tạo. ISO 8601, múi giờ UTC. |
updatedAt |
string (date-time) | có | Thời điểm sửa gần nhất. ISO 8601, múi giờ UTC. |
Lỗi
| Trạng thái | Mã code |
Ý nghĩa |
|---|---|---|
| 401 | invalid-api-key |
Khoá API thiếu, sai hoặc đã bị thu hồi |
| 403 | insufficient-permission |
Khoá API không có quyền thực hiện thao tác này |
| 403 | shop-suspended |
Shop đang bị đình chỉ |
| 403 | automation-not-active |
Shop chưa bật tính năng Tự động hoá |
| 429 | rate-limited |
Vượt hạn mức gọi API, hãy chờ rồi thử lại |
| 500 | internal-error |
Lỗi hệ thống |
| 402 | subscription-expired |
Gói cước của shop đã hết hạn, chỉ còn quyền đọc |
| 400 | validation-failed |
Dữ liệu gửi lên không hợp lệ |
| 413 | payload-too-large |
Thân yêu cầu vượt quá dung lượng cho phép |
| 415 | unsupported-media-type |
Thân yêu cầu phải là JSON (Content-Type: application/json) |
| 404 | not-found |
Không tìm thấy tài nguyên |
Định dạng lỗi và bảng mọi mã code: Lỗi.