API Reference

Hướng dẫn API Sân golf (Tích hợp & Quản lý)

Tổng quan

API Sân golf gồm hai hệ thống với mục đích khác nhau. Tách biệt hoàn toàn với API Đặt chỗ Đối tác (dành cho hội viên).

Hệ thốngĐường dẫnXác thựcMục đích
Tích hợp/api/integration/*API key (phạm vi integration)Đồng bộ hai chiều với hệ thống đặt chỗ/quản lý kho bên ngoài (khung giờ tee / đặt chỗ / Webhook). Kho khung giờ tập trung tại tee-times/* (sync/pull/reconcile). 1 key = 1 sân golf.
Quản lý/api/manage/*API key (phạm vi theo từng tài nguyên)Vận hành sân golf (đặt chỗ, khung giờ tee, thông báo, cài đặt, báo cáo). golf_club_id được xác định từ key (owner_id).
Tất cả phản hồi đều là JSON (ngoại trừ xuất CSV). Ngày theo định dạng YYYY-MM-DD / HH:MM trừ khi có ghi chú khác. Số tiền tính bằng VND (số nguyên).

Xác thực

Tích hợp/api/integration/*

Xác thực bằng API key. Thêm header X-API-Key vào mỗi request. Key do quản trị viên cấp; key loại integration được gắn với một sân golf theo từng key (owner_id). Sân golf đích được xác định từ key — không cần truyền golf_club_id trong request (không thể truy cập dữ liệu sân golf khác).

Ví dụ header request
POST /api/integration/tee-times/sync.php HTTP/1.1
Host: vn.govigolf.com
X-API-Key: YOUR_API_KEY
Content-Type: application/json

Phạm vi: integration:read cho thao tác đọc, integration:write cho thao tác ghi.

Quản lý/api/manage/*

Xác thực bằng API key (header X-API-Key, key loại owner_type='golf_club'). Xử lý bởi GolfClubAuthService. Sân golf đích xác định từ key (owner_id) — không cần truyền golf_club_id làm tham số.

Ví dụ header request
GET /api/manage/reservations/list.php HTTP/1.1
Host: vn.govigolf.com
X-API-Key: YOUR_API_KEY

Phạm vi (theo từng tài nguyên): reservations:read/write / tee_times:read/write / notifications:read/write / settings:read/write / reports:read.

Định dạng phản hồi chung

Tất cả phản hồi (ngoại trừ xuất CSV) đều được trả về theo cấu trúc JSON sau.

Thành công
{
  "status": "success",
  "message": "...",
  "data": { ... }
}
Lỗi
{
  "status": "error",
  "message": "Mô tả lỗi",
  "data": null
}

Mã lỗi

HTTPÝ nghĩa
400Request không hợp lệ (thiếu tham số bắt buộc, JSON không hợp lệ, v.v.)
401Xác thực thất bại (API key không hợp lệ / chưa đăng nhập / token hết hạn)
403Không đủ quyền (thiếu phạm vi / không có quyền truy cập sân golf đích)
404Tài nguyên đích không tồn tại
405HTTP method không được phép
429Vượt quá giới hạn tần suất
500Lỗi máy chủ nội bộ
API Tích hợp

Tích hợp: Khung giờ tee

POST/api/integration/tee-times/sync.phpintegration:write

Đồng bộ khung giờ tee từ hệ thống bên ngoài vào GOVIGO (ngoài → GOVIGO). Tối đa 500 khung giờ mỗi request.

Tham sốKiểuBắt buộcMô tả
slotsarrayBắt buộcMảng các đối tượng khung giờ (tối đa 500)
Các trường của phần tử slots
TrườngKiểuBắt buộcMô tả
course_idintegerBắt buộcID sân (phải thuộc sân golf của bạn)
tee_timestringBắt buộcGiờ tee (YYYY-MM-DD HH:MM)
total_slotsintegerTùy chọnTổng số chỗ (mặc định: 4)
available_slotsintegerTùy chọnSố chỗ còn trống (mặc định: bằng total_slots)
statusstringTùy chọnopen / closed / maintenance (mặc định: open)
plan_idintegerTùy chọnID gói liên kết (phải thuộc sân golf của bạn)
Ví dụ request
POST /api/integration/tee-times/sync.php HTTP/1.1
Host: vn.govigolf.com
X-API-Key: YOUR_API_KEY
Content-Type: application/json

{
  "slots": [
    { "course_id": 10, "tee_time": "2026-07-01 07:30", "total_slots": 4, "available_slots": 4 }
  ]
}
Các trường trong data phản hồi
TrườngKiểuMô tả
inserted_countintegerSố khung giờ được tạo mới
updated_countintegerSố khung giờ được cập nhật
error_countintegerSố mục bị lỗi
errorsarrayMảng thông tin lỗi chi tiết
GET/api/integration/tee-times/pull.phpintegration:read

Lấy khung giờ tee từ GOVIGO (GOVIGO → ngoài).

Tham sốKiểuBắt buộcMô tả
date_fromstringBắt buộcNgày bắt đầu (YYYY-MM-DD)
date_tostringBắt buộcNgày kết thúc (YYYY-MM-DD)
course_idintegerTùy chọnLọc theo sân
Ví dụ request
GET /api/integration/tee-times/pull.php?date_from=2026-07-01&date_to=2026-07-07 HTTP/1.1
Host: vn.govigolf.com
X-API-Key: YOUR_API_KEY
Các trường trong data phản hồi
TrườngKiểuMô tả
golf_club_idintegerID sân golf
date_from / date_tostringKhoảng ngày đã yêu cầu
countintegerSố khung giờ trả về
slotsarrayMảng đối tượng khung giờ (xem bên dưới)
Các trường của phần tử slots
TrườngKiểuMô tả
slot_idintegerID khung giờ (ID nội bộ GOVIGO)
course_idintegerID sân
course_namestringTên sân
tee_timestringGiờ tee (YYYY-MM-DD HH:MM)
total_slotsintegerTổng số chỗ
available_slotsintegerSố chỗ còn trống
statusstringopen / closed / maintenance
allow_joinbooleanCho phép đặt chung (join)
plan_idinteger|nullID gói liên kết
POST/api/integration/tee-times/reconcile.phpintegration:write

Đối chiếu bản sao GOVIGO với toàn bộ snapshot khung giờ trong khoảng thời gian từ phía sân golf (để khắc phục lệch lạc do bỏ sót webhook, v.v.). Tất cả khung giờ được upsert; các khung giờ vắng mặt trong snapshot sẽ được xử lý. Khung giờ chưa có đặt chỗ sẽ bị đóng logic (status=closed — không xóa vật lý); khung giờ đã có đặt chỗ nhưng vắng mặt trong snapshot sẽ được trả về dưới dạng conflicts (cần giải quyết thủ công) thay vì bị đóng. Khung giờ đã đóng sẽ ẩn khỏi chế độ xem tình trạng chỗ trống của khách hàng và tự động chuyển lại open khi sân golf gửi lại. Nên chạy định kỳ (ví dụ: hằng đêm).

Tham sốKiểuBắt buộcMô tả
date_from / date_tostringBắt buộcKhoảng đối chiếu (YYYY-MM-DD)
course_idintegerTùy chọnNếu chỉ định, chỉ đối chiếu sân đó
slotsarrayBắt buộcTất cả khung giờ trong khoảng (tối đa 2000; chia thành khoảng hẹp hơn nếu cần). Cùng trường với sync (xem ở trên)
Ví dụ request
POST /api/integration/tee-times/reconcile.php HTTP/1.1
Host: vn.govigolf.com
X-API-Key: YOUR_API_KEY
Content-Type: application/json

{
  "date_from": "2026-07-01",
  "date_to": "2026-07-01",
  "slots": [
    { "course_id": 10, "tee_time": "2026-07-01 07:30", "total_slots": 4, "available_slots": 4 }
  ]
}
Các trường trong data phản hồi
TrườngKiểuMô tả
inserted_countintegerSố khung giờ được tạo mới
updated_countintegerSố khung giờ được cập nhật
closed_countintegerSố khung giờ bị đóng logic (chưa đặt và vắng trong snapshot)
conflict_countintegerSố xung đột (đã đặt và vắng trong snapshot)
conflictsarrayMảng đối tượng khung giờ xung đột (xem bên dưới). Cần giải quyết thủ công.
error_countintegerSố lỗi xử lý
errorsarrayMảng thông tin lỗi chi tiết
Các trường của phần tử conflicts
TrườngKiểuMô tả
tee_time_slot_idintegerID khung giờ (ID nội bộ GOVIGO)
course_idintegerID sân
tee_timestringGiờ tee (YYYY-MM-DD HH:MM)
total_slotsintegerTổng số chỗ
available_slotsintegerSố chỗ còn trống
bookedintegerSố chỗ đã đặt (= tổng - còn trống)

Tích hợp: Đặt chỗ

POST/api/integration/reservations/receive.phpintegration:write

Nhập đặt chỗ từ hệ thống bên ngoài vào GOVIGO (ngoài → GOVIGO). external_ref là khóa idempotency; gửi trùng với cùng giá trị sẽ trả về đặt chỗ đã tồn tại và kết thúc.

Tham sốKiểuBắt buộcMô tả
external_refstringBắt buộcKhóa tham chiếu đặt chỗ từ hệ thống ngoài (khóa idempotency để ngăn nhập trùng)
course_idintegerBắt buộcID sân (phải thuộc sân golf của bạn)
tee_datestringBắt buộcNgày chơi (YYYY-MM-DD)
customer_namestringBắt buộcTên người đặt
player_countintegerBắt buộcSố người chơi (từ 1 trở lên)
tee_timestringTùy chọnGiờ tee (HH:MM). Nếu có tee_time_slot_id, sẽ dùng giờ của khung giờ đó.
tee_time_slot_idintegerTùy chọnID khung giờ GOVIGO. Nếu chỉ định, sẽ trừ kho theo số người chơi (409 nếu không đủ chỗ).
golf_plan_idintegerTùy chọnID gói (phải thuộc sân golf của bạn)
customer_emailstringTùy chọnEmail người đặt
customer_phonestringTùy chọnSố điện thoại người đặt
total_amountintegerTùy chọnTổng tiền (VND; mặc định: 0)
remarkstringTùy chọnGhi chú
optionsobjectTùy chọnThông tin tùy chọn (key-value tùy ý)
attendeesarrayTùy chọnDanh sách đồng hành. Mỗi phần tử: {name (bắt buộc), email?, phone?}
Ví dụ request
POST /api/integration/reservations/receive.php HTTP/1.1
Host: vn.govigolf.com
X-API-Key: YOUR_API_KEY
Content-Type: application/json

{
  "external_ref": "EXT-12345",
  "course_id": 10,
  "tee_date": "2026-07-01",
  "tee_time": "07:30",
  "customer_name": "Nguyen Van A",
  "customer_email": "nguyenvana@example.com",
  "customer_phone": "+84-90-0000-0000",
  "player_count": 2,
  "total_amount": 3600000
}
Các trường trong data phản hồi
TrườngKiểuMô tả
reservation_idintegerID đặt chỗ do GOVIGO cấp
external_refstringKhóa tham chiếu ngoài (giống request)
statusstringpending (trạng thái ban đầu khi tạo)
duplicatebooleanChỉ là true khi external_ref đã tồn tại (HTTP 200)
POST/api/integration/reservations/update.phpintegration:write

Phản ánh thay đổi từ hệ thống ngoài vào bản sao GOVIGO (ngoài → GOVIGO). Chỉ cập nhật các trường được chỉ định. Thay đổi số người chơi sẽ điều chỉnh kho theo chênh lệch (409 nếu tăng mà không đủ chỗ). Dùng cancel.php để hủy. Thay đổi ngày/giờ không được phép với đặt chỗ liên kết khung giờ (hãy hủy và tạo lại).

Tham sốKiểuBắt buộcMô tả
external_refstringMột trong haiXác định đích bằng khóa tham chiếu ngoài
reservation_idintegerMột trong haiXác định đích bằng ID đặt chỗ GOVIGO
customer_namestringTùy chọnTên người đặt
customer_emailstringTùy chọnEmail người đặt
customer_phonestringTùy chọnSố điện thoại người đặt
tee_datestringTùy chọnNgày chơi (YYYY-MM-DD). Không thể thay đổi với đặt chỗ liên kết khung giờ.
tee_timestringTùy chọnGiờ tee (HH:MM). Không thể thay đổi với đặt chỗ liên kết khung giờ.
player_countintegerTùy chọnSố người chơi. Điều chỉnh kho theo chênh lệch nếu liên kết khung giờ.
total_amountintegerTùy chọnTổng tiền (VND)
remarkstringTùy chọnGhi chú
optionsobjectTùy chọnThông tin tùy chọn
statusintegerTùy chọnChỉ được chỉ định 1=đã đặt / 3=hoàn thành. Dùng cancel.php để hủy.
Ví dụ request
POST /api/integration/reservations/update.php HTTP/1.1
Host: vn.govigolf.com
X-API-Key: YOUR_API_KEY
Content-Type: application/json

{ "external_ref": "EXT-12345", "player_count": 3, "tee_time": "08:00" }
Các trường trong data phản hồi
TrườngKiểuMô tả
reservation_idintegerID đặt chỗ đã cập nhật
external_refstring|nullKhóa tham chiếu ngoài
POST/api/integration/reservations/cancel.phpintegration:write

Phản ánh hủy từ hệ thống ngoài vào bản sao GOVIGO (ngoài → GOVIGO). Đặt trạng thái thành đã hủy và hoàn trả kho khung giờ theo số người chơi nếu có liên kết. Idempotent (trả về thành công ngay cả khi đã hủy rồi).

Tham sốKiểuBắt buộcMô tả
external_refstringMột trong haiXác định đích bằng khóa tham chiếu ngoài
reservation_idintegerMột trong haiXác định đích bằng ID đặt chỗ GOVIGO
Ví dụ request
POST /api/integration/reservations/cancel.php HTTP/1.1
Host: vn.govigolf.com
X-API-Key: YOUR_API_KEY
Content-Type: application/json

{ "external_ref": "EXT-12345" }
Các trường trong data phản hồi
TrườngKiểuMô tả
reservation_idintegerID đặt chỗ đã hủy
external_refstring|nullKhóa tham chiếu ngoài
statusstringcancelled
alreadybooleanChỉ là true khi đã hủy trước đó
POST/api/integration/reservations/push.phpintegration:read

Lấy dữ liệu đặt chỗ từ GOVIGO (GOVIGO → ngoài). Khoảng mặc định: hôm nay đến 30 ngày tới.

Tham sốKiểuBắt buộcMô tả
date_fromstringTùy chọnNgày bắt đầu (YYYY-MM-DD; mặc định: hôm nay)
date_tostringTùy chọnNgày kết thúc (YYYY-MM-DD; mặc định: hôm nay + 30 ngày)
statusintegerTùy chọnLọc theo mã trạng thái (xem bảng bên dưới)
include_attendeesbooleanTùy chọntrue để bao gồm thông tin đồng hành
Các trường trong data phản hồi
TrườngKiểuMô tả
golf_club_idintegerID sân golf
date_from / date_tostringKhoảng ngày đã yêu cầu
countintegerSố đặt chỗ trả về
reservationsarrayMảng đối tượng đặt chỗ (xem bên dưới)
Các trường của phần tử reservations
TrườngKiểuMô tả
reservation_idintegerID đặt chỗ GOVIGO
course_idintegerID sân
course_namestringTên sân
customer_namestringTên người đặt
customer_emailstringEmail người đặt
customer_phonestringSĐT người đặt
tee_datestringNgày chơi (YYYY-MM-DD)
tee_timestringGiờ tee (HH:MM)
player_countintegerSố người chơi
total_amountintegerTổng tiền (VND)
statusstringpending_payment / reserved / cancelled / completed
status_codeintegerMã trạng thái (0=chờ thanh toán / 1=đã đặt / 2=đã hủy / 3=hoàn thành)
sourcestringNguồn đặt (api_integration v.v.)
external_refstring|nullKhóa tham chiếu ngoài
created_atstringNgày tạo
updated_atstringNgày cập nhật
attendeesarrayChỉ khi include_attendees=true. Mảng {name, email, phone}

Tích hợp: Webhook

POST/api/integration/webhooks/subscribe.phpintegration:write

Đăng ký URL nhận thông báo sự kiện về đặt chỗ, kho, v.v.

Tham sốKiểuBắt buộcMô tả
urlstringBắt buộcURL nhận Webhook (bắt buộc HTTPS)
eventsarrayBắt buộcLoại sự kiện đăng ký (reservation.created/updated/cancelled/status_changed, tee_time.updated, *)
Ví dụ request
POST /api/integration/webhooks/subscribe.php HTTP/1.1
Host: vn.govigolf.com
X-API-Key: YOUR_API_KEY
Content-Type: application/json

{ "url": "https://example.com/hook", "events": ["reservation.created", "reservation.cancelled"] }
GET/api/integration/webhooks/list.phpintegration:read

Trả về danh sách Webhook đã đăng ký (không tham số; sân golf đích xác định từ key).

POST/api/integration/webhooks/unsubscribe.phpintegration:write

Hủy đăng ký Webhook đã đăng ký.

Tham sốKiểuBắt buộcMô tả
subscription_idintegerBắt buộcID đăng ký cần hủy
POST/api/integration/webhooks/test.phpintegration:write

Gửi sự kiện kiểm thử đến đăng ký chỉ định.

Tham sốKiểuBắt buộcMô tả
subscription_idintegerBắt buộcID đăng ký cần kiểm thử
API Quản lý

Quản lý: Đặt chỗ

GET/api/manage/reservations/list.phpreservations:read

Trả về danh sách đặt chỗ của sân golf. Mặc định 20 mục/trang (tối đa 100).

Tham sốKiểuBắt buộcMô tả
statusintegerTùy chọnLọc theo mã trạng thái (xem bảng bên dưới)
date_from / date_tostringTùy chọnLọc theo ngày chơi (YYYY-MM-DD)
searchstringTùy chọnTìm kiếm từ khóa theo tên, email hoặc SĐT người đặt
pageintegerTùy chọnSố trang (mặc định: 1)
per_pageintegerTùy chọnMục/trang (mặc định: 20, tối đa: 100)
Ví dụ request
GET /api/manage/reservations/list.php?date_from=2026-07-01&date_to=2026-07-31&page=1 HTTP/1.1
Host: vn.govigolf.com
X-API-Key: YOUR_API_KEY
Các trường trong data phản hồi
TrườngKiểuMô tả
reservationsarrayMảng đối tượng đặt chỗ (xem bên dưới)
pagination.pageintegerTrang hiện tại
pagination.per_pageintegerMục mỗi trang
pagination.total_countintegerTổng số mục
pagination.total_pagesintegerTổng số trang
pagination.has_nextbooleanCó trang tiếp theo
pagination.has_prevbooleanCó trang trước
Các trường của phần tử reservations
TrườngKiểuMô tả
idintegerID đặt chỗ
course_namestringTên sân
customer_namestringTên người đặt
customer_emailstringEmail người đặt
customer_phonestringSĐT người đặt
tee_datestringNgày chơi (YYYY-MM-DD)
tee_timestringGiờ tee (HH:MM)
player_countintegerSố người chơi
total_amountintegerTổng tiền (VND)
statusstringChuỗi trạng thái (xem bảng bên dưới)
status_codeintegerMã trạng thái (0–3, 9)
sourcestringNguồn đặt
remarkstringGhi chú
created_atstringNgày tạo
Mã trạng thái
0 = pending_payment / 1 = reserved / 2 = cancelled / 3 = completed / 9 = cancelled (cũ)
GET/api/manage/reservations/detail.phpreservations:read

Trả về chi tiết đặt chỗ bao gồm thông tin đồng hành.

Tham sốKiểuBắt buộcMô tả
reservation_idintegerBắt buộcID đặt chỗ (cũng chấp nhận id cũ)
Các trường trong data.reservation phản hồi
TrườngKiểuMô tả
idintegerID đặt chỗ
course_namestringTên sân
plan_namestring|nullTên gói
customer_namestringTên người đặt
customer_emailstringEmail người đặt
customer_phonestringSĐT người đặt
tee_datestringNgày chơi (YYYY-MM-DD)
tee_timestringGiờ tee (HH:MM)
player_countintegerSố người chơi
total_amountintegerTổng tiền (VND)
remarkstringGhi chú
optionsobject|nullThông tin tùy chọn
statusstringChuỗi trạng thái (cùng mã như danh sách)
status_codeintegerMã trạng thái (0–3, 9)
sourcestringNguồn đặt
external_refstring|nullKhóa tham chiếu ngoài
created_atstringNgày tạo
updated_atstringNgày cập nhật
attendeesarrayDanh sách đồng hành. Mỗi phần tử: {id, name, email, phone}
POST/api/manage/reservations/update-status.phpreservations:write

Cập nhật trạng thái đặt chỗ. status=9 được xử lý như hủy và hoàn trả kho khung giờ. Đặt chỗ đã hủy không thể chuyển sang trạng thái khác (409).

Tham sốKiểuBắt buộcMô tả
reservation_idintegerBắt buộcID đặt chỗ
statusintegerBắt buộcMã trạng thái mới (0–3, 9)
memostringTùy chọnGhi chú thay đổi (thêm vào remark)
Ví dụ request
POST /api/manage/reservations/update-status.php HTTP/1.1
Host: vn.govigolf.com
X-API-Key: YOUR_API_KEY
Content-Type: application/json

{ "reservation_id": 123, "status": 1, "memo": "Đã xác nhận" }
Các trường trong data phản hồi
TrườngKiểuMô tả
reservation_idintegerID đặt chỗ đã cập nhật
old_statusstringChuỗi trạng thái cũ
new_statusstringChuỗi trạng thái mới

Quản lý: Khung giờ tee

GET/api/manage/tee-times/list.phptee_times:read

Trả về danh sách khung giờ tee cho ngày chỉ định.

Tham sốKiểuBắt buộcMô tả
datestringBắt buộcNgày cần xem (YYYY-MM-DD)
course_idintegerTùy chọnLọc theo sân
Các trường trong data phản hồi
TrườngKiểuMô tả
datestringNgày cần xem
countintegerSố khung giờ trả về
slotsarrayMảng đối tượng khung giờ (xem bên dưới)
Các trường của phần tử slots
TrườngKiểuMô tả
idintegerID khung giờ (= slot_id)
course_idintegerID sân
course_namestringTên sân
tee_timestringGiờ tee (HH:MM)
total_slotsintegerTổng số chỗ
available_slotsintegerSố chỗ còn trống
booked_slotsintegerSố chỗ đã đặt (= tổng - còn trống)
statusstringopen / closed / maintenance
allow_joinbooleanCho phép đặt chung (join)
plan_idinteger|nullID gói liên kết
plan_namestring|nullTên gói
POST/api/manage/tee-times/update.phptee_times:write

Cập nhật một khung giờ tee. Trả về 400 nếu available_slots sau cập nhật nằm ngoài khoảng 0–total_slots.

Tham sốKiểuBắt buộcMô tả
slot_idintegerBắt buộcID khung giờ tee
total_slotsintegerTùy chọnTổng số chỗ (từ 1 trở lên)
available_slotsintegerTùy chọnSố chỗ còn trống (từ 0, ≤ total_slots)
statusstringTùy chọnopen / closed / maintenance
allow_joinbooleanTùy chọnCho phép đặt chung
golf_club_plan_idinteger|nullTùy chọnID gói liên kết (null để bỏ liên kết; phải thuộc sân golf của bạn)
Các trường trong data phản hồi
TrườngKiểuMô tả
slot_idintegerID khung giờ đã cập nhật
updatedbooleantrue
POST/api/manage/tee-times/bulk-update.phptee_times:write

Cập nhật nhiều khung giờ tee trong một request (tối đa 200). Nếu khung giờ nào không qua được xác thực thì bỏ qua và trả về chi tiết trong errors; các khung giờ khác vẫn được cập nhật.

Tham sốKiểuBắt buộcMô tả
slotsarrayBắt buộcMảng khung giờ cần cập nhật (tối đa 200)
Các trường của phần tử slots
TrườngKiểuBắt buộcMô tả
slot_idintegerBắt buộcID khung giờ tee
total_slotsintegerTùy chọnTổng số chỗ
available_slotsintegerTùy chọnSố chỗ còn trống
statusstringTùy chọnopen / closed / maintenance
allow_joinbooleanTùy chọnCho phép đặt chung
Ví dụ request
POST /api/manage/tee-times/bulk-update.php HTTP/1.1
Host: vn.govigolf.com
X-API-Key: YOUR_API_KEY
Content-Type: application/json

{ "slots": [ { "slot_id": 501, "available_slots": 0, "status": "closed" }, { "slot_id": 502, "available_slots": 2 } ] }
Các trường trong data phản hồi
TrườngKiểuMô tả
updated_countintegerSố khung giờ đã cập nhật thành công
error_countintegerSố mục bị bỏ qua
errorsarrayMảng thông tin lỗi chi tiết

Quản lý: Thông báo

GET/api/manage/notifications/list.phpnotifications:read

Trả về danh sách thông báo theo thứ tự ngày tạo giảm dần.

Tham sốKiểuBắt buộcMô tả
pageintegerTùy chọnSố trang (mặc định: 1)
per_pageintegerTùy chọnMục/trang (mặc định: 20, tối đa: 100)
unread_onlyintegerTùy chọn1 để chỉ trả về chưa đọc
Các trường trong data phản hồi
TrườngKiểuMô tả
notificationsarrayMảng đối tượng thông báo (xem bên dưới)
paginationobjectThông tin phân trang (cùng định dạng với danh sách đặt chỗ)
Các trường của phần tử notifications
TrườngKiểuMô tả
idintegerID thông báo
typestringLoại thông báo (ví dụ: reservation.created)
reserve_idinteger|nullID đặt chỗ liên quan
titlestringTiêu đề thông báo
bodystringNội dung thông báo
is_readbooleanCờ đã đọc
created_atstringNgày tạo
POST/api/manage/notifications/mark-read.phpnotifications:write

Đánh dấu thông báo là đã đọc. Cần cung cấp notification_ids hoặc all.

Tham sốKiểuBắt buộcMô tả
notification_idsarrayMột trong haiMảng ID thông báo cần đánh dấu đọc (integer[])
allbooleanMột trong haitrue để đánh dấu tất cả là đã đọc
Các trường trong data phản hồi
TrườngKiểuMô tả
updated_countintegerSố thông báo đã được đánh dấu là đã đọc
GET/api/manage/notifications/unread-count.phpnotifications:read

Trả về số lượng thông báo chưa đọc (không tham số).

Các trường trong data phản hồi
TrườngKiểuMô tả
unread_countintegerSố lượng thông báo chưa đọc

Quản lý: Cài đặt

GET/api/manage/settings/get.phpsettings:read

Lấy cài đặt sân golf. Nếu bỏ qua key, trả về tất cả cài đặt dưới dạng { key: value }.

Tham sốKiểuBắt buộcMô tả
keystringTùy chọnTrả về chỉ key này nếu chỉ định; tất cả key nếu bỏ qua
Các trường trong data phản hồi (một key)
TrườngKiểuMô tả
keystringTên cài đặt
valuestring|nullGiá trị cài đặt (null nếu chưa đặt)
Các trường trong data phản hồi (tất cả key)
TrườngKiểuMô tả
countintegerTổng số key cài đặt
settingsobjectObject dạng { "key": "value", ... }
POST/api/manage/settings/update.phpsettings:write

Cập nhật cài đặt sân golf (UPSERT). Có thể cập nhật nhiều key cùng lúc.

Tham sốKiểuBắt buộcMô tả
settingsobjectBắt buộcObject cài đặt dạng { "key": "value", ... }
Ví dụ request
POST /api/manage/settings/update.php HTTP/1.1
Host: vn.govigolf.com
X-API-Key: YOUR_API_KEY
Content-Type: application/json

{ "settings": { "auto_confirm": "1", "cancel_deadline_days": "3" } }
Các trường trong data phản hồi
TrườngKiểuMô tả
updated_countintegerSố key cài đặt đã cập nhật
settingsobjectCài đặt đã cập nhật dạng { "key": "value", ... }

Quản lý: Báo cáo

GET/api/manage/reports/summary.phpreports:read

Trả về tổng hợp thống kê đặt chỗ. Khoảng mặc định: tháng hiện tại.

Tham sốKiểuBắt buộcMô tả
date_from / date_tostringTùy chọnKhoảng thời gian (YYYY-MM-DD; mặc định: ngày đầu đến cuối tháng hiện tại)
group_bystringTùy chọndate (theo ngày) / course (theo sân) / status (theo trạng thái). Mặc định: date
Các trường trong data phản hồi
TrườngKiểuMô tả
period.from / period.tostringKhoảng tổng hợp
summary.total_reservationsintegerTổng số đặt chỗ
summary.pending_countintegerSố đang chờ (chưa xác nhận hoặc hủy)
summary.confirmed_countintegerSố đã xác nhận
summary.cancelled_countintegerSố đã hủy
summary.completed_countintegerSố hoàn thành
summary.total_playersintegerTổng số người chơi
summary.total_revenueintegerTổng doanh thu (VND; không tính hủy)
summary.avg_amountintegerDoanh thu trung bình mỗi đặt chỗ (VND; không tính hủy)
breakdownarrayMảng phân tích theo nhóm (xem bên dưới)
Các trường của phần tử breakdown
TrườngKiểuMô tả
date / course_name / statusstringTên key thay đổi tùy theo group_by
reservation_countintegerSố đặt chỗ
player_countintegerTổng số người chơi
revenueintegerTổng doanh thu (VND; không tính hủy)
GET/api/manage/reports/export.phpreports:read

Xuất dữ liệu đặt chỗ dưới dạng CSV. Phản hồi là text/csv (không phải JSON; file CSV UTF-8 BOM).

Tham sốKiểuBắt buộcMô tả
date_from / date_tostringTùy chọnKhoảng thời gian (YYYY-MM-DD; mặc định: tháng hiện tại)
statusintegerTùy chọnLọc theo mã trạng thái
Ví dụ request
GET /api/manage/reports/export.php?date_from=2026-07-01&date_to=2026-07-31 HTTP/1.1
Host: vn.govigolf.com
X-API-Key: YOUR_API_KEY
Cột CSV
CộtMô tả
Mã đặt chỗID đặt chỗ GOVIGO
SânTên sân
Tên người đặtTên khách hàng
EmailEmail khách hàng
Điện thoạiSĐT khách hàng
Ngày chơiYYYY-MM-DD
GiờHH:MM
Số ngườiSố người chơi
Số tiềnTổng tiền (VND)
Trạng tháiNhãn trạng thái
NguồnNguồn đặt
Ghi chúNội dung ghi chú
Ngày tạoNgày và giờ tạo