ゴルフ場API は用途の異なる2系統で構成されます。パートナー予約連携API(会員向け)とは別物です。
| 系統 | パス | 認証 | 用途 |
|---|---|---|---|
| 連携 (Integration) | /api/integration/* | APIキー(integration スコープ) | 外部予約システム・在庫システムとの双方向連携(ティータイム/在庫/予約/Webhook)。1キー = 1ゴルフ場。 |
| 管理 (Management) | /api/manage/* | ゴルフ場ログイン(セッション)または JWT | ゴルフ場管理画面の操作(予約・予約枠・通知・設定・レポート)。golf_club_id は認証情報から特定。 |
YYYY-MM-DD / HH:MM 形式。金額は VND(整数)です。
APIキー認証。すべてのリクエストに X-API-Key ヘッダーを付与します。キーは管理者が発行し、integration タイプのキーは 1キーにつき1ゴルフ場(owner_id)に紐づきます。リクエストの golf_club_id が紐づきと一致しない場合は 403(IDOR対策)。
POST /api/integration/tee-times/sync.php HTTP/1.1 Host: govigolf.comX-API-Key: YOUR_API_KEY Content-Type: application/json
スコープ: 参照系は integration:read、更新系は integration:write。
ゴルフ場管理画面のログインセッション、または JWT Bearer トークンで認証します(GolfClubAuthService)。対象ゴルフ場は認証情報から特定されるため、golf_club_id をパラメータで渡す必要はありません。
GET /api/manage/reservations/list.php HTTP/1.1 Host: govigolf.comAuthorization: Bearer <JWT>
スコープ(リソース別): reservations:read/write / tee_times:read/write / notifications:read/write / settings:read/write / reports:read。
CSVエクスポートを除き、すべて以下の JSON エンベロープで返ります。
{
"status": "success",
"message": "...",
"data": { ... }
}
{
"status": "error",
"message": "エラー内容",
"data": null
}
| HTTP | 意味 |
|---|---|
400 | リクエスト不正(必須パラメータ不足・JSON不正など) |
401 | 認証失敗(APIキー無効 / 未ログイン / トークン期限切れ) |
403 | 権限不足(スコープ不足 / 対象ゴルフ場へのアクセス不可) |
404 | 対象リソースが存在しない |
405 | 許可されていない HTTP メソッド |
429 | レート制限超過 |
500 | サーバ内部エラー |
外部システムのティータイム枠を GOVIGO に同期(外部→GOVIGO)。
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
golf_club_id | integer | 必須 | ゴルフ場ID(APIキーの紐づきと一致) |
slots | array | 必須 | {course_id, tee_time (YYYY-MM-DD HH:MM), total_slots, available_slots, status?, plan_id?} の配列 |
POST /api/integration/tee-times/sync.php HTTP/1.1
Host: govigolf.comX-API-Key: YOUR_API_KEY
Content-Type: application/json
{
"golf_club_id": 1,
"slots": [
{ "course_id": 10, "tee_time": "2026-07-01 07:30", "total_slots": 4, "available_slots": 4 }
]
}
GOVIGO 側のティータイムを取得(GOVIGO→外部)。
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
golf_club_id | integer | 必須 | ゴルフ場ID |
date_from | string | 必須 | 取得開始日(YYYY-MM-DD) |
date_to | string | 必須 | 取得終了日(YYYY-MM-DD) |
course_id | integer | 任意 | コースで絞り込み |
GET /api/integration/tee-times/pull.php?golf_club_id=1&date_from=2026-07-01&date_to=2026-07-07 HTTP/1.1 Host: govigolf.comX-API-Key: YOUR_API_KEY
在庫(枠数)を期間・コース単位で同期します。
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
golf_club_id | integer | 必須 | ゴルフ場ID |
date_from / date_to | string | 必須 | 対象期間(YYYY-MM-DD) |
inventory | array | 必須 | {course_id, date, slots: [{time (HH:MM), total, available}]} の配列 |
POST /api/integration/inventory/sync.php HTTP/1.1
Host: govigolf.comX-API-Key: YOUR_API_KEY
Content-Type: application/json
{
"golf_club_id": 1,
"date_from": "2026-07-01",
"date_to": "2026-07-01",
"inventory": [
{ "course_id": 10, "date": "2026-07-01", "slots": [ { "time": "07:30", "total": 4, "available": 2 } ] }
]
}
在庫状況のサマリーを取得します。
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
golf_club_id | integer | 必須 | ゴルフ場ID |
date_from / date_to | string | 任意 | 集計期間(YYYY-MM-DD) |
GET /api/integration/inventory/status.php?golf_club_id=1&date_from=2026-07-01&date_to=2026-07-31 HTTP/1.1 Host: govigolf.comX-API-Key: YOUR_API_KEY
外部システムで発生した予約を GOVIGO に取り込みます(外部→GOVIGO)。ボディは予約作成と同形式で、external_ref が必須(冪等キー)。
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
external_ref | string | 必須 | 外部システム側の予約参照キー(重複取込防止) |
| 予約データ | object | 必須 | golf_club_id / golf_plan_id / tee_date / tee_time / 顧客情報 / 人数 など(予約作成 API と同形式) |
GOVIGO 側の予約を外部システムへ連携するための取得(プッシュ確認)。
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
golf_club_id | integer | 必須 | ゴルフ場ID |
date_from / date_to | string | 任意 | 対象期間(YYYY-MM-DD) |
status | integer | 任意 | 予約ステータスで絞り込み |
include_attendees | boolean | 任意 | 同伴者情報を含める |
予約・在庫などのイベント通知先 URL を登録します。
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
golf_club_id | integer | 必須 | ゴルフ場ID |
url | string | 必須 | Webhook受信URL(HTTPS必須) |
events | array | 必須 | 購読するイベント種別 |
POST /api/integration/webhooks/subscribe.php HTTP/1.1
Host: govigolf.comX-API-Key: YOUR_API_KEY
Content-Type: application/json
{ "golf_club_id": 1, "url": "https://example.com/hook", "events": ["reservation.created"] }
登録済み Webhook の一覧を取得します。
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
golf_club_id | integer | 必須 | ゴルフ場ID |
登録済み Webhook を解除します。
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
subscription_id | integer | 必須 | 解除対象のサブスクリプションID |
指定サブスクリプションにテストイベントを送信します。
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
subscription_id | integer | 必須 | テスト対象のサブスクリプションID |
自ゴルフ場の予約一覧を取得します。
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
status | integer | 任意 | 予約ステータスで絞り込み |
date_from / date_to | string | 任意 | プレー日で絞り込み(YYYY-MM-DD) |
search | string | 任意 | 予約者名などのキーワード検索 |
page / per_page | integer | 任意 | ページング |
GET /api/manage/reservations/list.php?date_from=2026-07-01&date_to=2026-07-31&page=1 HTTP/1.1 Host: govigolf.comAuthorization: Bearer <JWT>
予約の詳細を取得します。
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
id | integer | 必須 | 予約ID |
予約ステータスを変更します(キャンセル処理を含む)。
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
reservation_id | integer | 必須 | 予約ID |
status | integer | 必須 | 変更後ステータス(0〜5, 9) |
memo | string | 任意 | 変更メモ |
POST /api/manage/reservations/update-status.php HTTP/1.1
Host: govigolf.comAuthorization: Bearer <JWT>
Content-Type: application/json
{ "reservation_id": 123, "status": 2, "memo": "確認済み" }
指定日の予約枠一覧を取得します。
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
date | string | 必須 | 対象日(YYYY-MM-DD) |
course_id | integer | 任意 | コースで絞り込み |
予約枠を1件更新します。
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
slot_id | integer | 必須 | 予約枠ID |
total_slots / available_slots | integer | 任意 | 総数 / 空き数 |
status | integer | 任意 | 枠ステータス |
allow_join | boolean | 任意 | 相乗り許可 |
golf_club_plan_id | integer | 任意 | 紐づくプラン |
複数の予約枠をまとめて更新します(最大 200 件)。
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
slots | array | 必須 | {slot_id, total_slots?, available_slots?, status?, allow_join?} の配列(最大200) |
POST /api/manage/tee-times/bulk-update.php HTTP/1.1
Host: govigolf.comAuthorization: Bearer <JWT>
Content-Type: application/json
{ "slots": [ { "slot_id": 501, "available_slots": 0, "status": 1 }, { "slot_id": 502, "available_slots": 2 } ] }
通知一覧を取得します。
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
page / per_page | integer | 任意 | ページング(per_page 最大100) |
unread_only | integer | 任意 | 1 で未読のみ |
通知を既読にします。
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
notification_ids | array | いずれか必須 | 既読にする通知IDの配列 |
all | boolean | いずれか必須 | true で全件既読 |
未読通知数を取得します。パラメータなし。
ゴルフ場設定を取得します。
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
key | string | 任意 | 指定すると当該キーのみ取得(省略時は全件) |
ゴルフ場設定を更新します。
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
settings | object | 必須 | { key: value, ... } 形式の設定オブジェクト |
POST /api/manage/settings/update.php HTTP/1.1
Host: govigolf.comAuthorization: Bearer <JWT>
Content-Type: application/json
{ "settings": { "auto_confirm": "1", "cancel_deadline_days": "3" } }
予約実績の集計を取得します。
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
date_from / date_to | string | 任意 | 集計期間(既定: 当月。YYYY-MM-DD) |
group_by | string | 任意 | date / course / status(既定: date) |
予約データを CSV でエクスポートします。レスポンスは text/csv(JSONエンベロープではありません)。
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
date_from / date_to | string | 任意 | 対象期間(既定: 当月。YYYY-MM-DD) |
status | integer | 任意 | 予約ステータスで絞り込み |
GET /api/manage/reports/export.php?date_from=2026-07-01&date_to=2026-07-31 HTTP/1.1 Host: govigolf.comAuthorization: Bearer <JWT>