Webhook hotel memungkinkan sistem Anda menerima update status booking secara realtime. Ketika status booking berubah, kami akan mengirimkan HTTP POST payload ke URL webhook yang sudah dikonfigurasi pada koneksi API.
Webhook dapat Anda atur pada menu Atur Koneksi API.
{info} Whitelist / izinkan IP Statis 13.213.88.2 di sistem Anda agar kami dapat mengirimkan callback.
Callback hotel dikirim ketika:
{info} Response awal Booking tetap dikembalikan secara sinkron. Callback digunakan untuk update status berikutnya. Anda juga dapat melakukan Detail Booking untuk cek status.
| Header | Deskripsi |
|---|---|
| User-Agent | Bernilai hotel. Gunakan header ini untuk membedakan callback hotel dari prepaid (prepaid) dan pascabayar (postpaid) |
| Content-Type | application/json |
Struktur payload sama dengan response Detail Booking.
{danger} Field
rctidak menunjukkan status booking. Gunakandata.statusuntuk menentukan status transaksi. Lihat Status Transaksi.
POST /webhook HTTP/1.1
Host: localhost:4567
User-Agent: hotel
Content-Type: application/json
{
"message": "Sukses",
"rc": "00",
"user": {
"code": "skuhotel"
},
"data": {
"booking_number": "eWmvyIXzmUBChONn",
"booking_ref": "refid123",
"status": 1,
"check_in": "2026-02-12",
"check_out": "2026-02-14",
"total_price": 2978927,
"request_notes": "notes123",
"pax_count": {
"total_room": 1,
"total_adult": 2
},
"property": {
"id": "jkt1",
"name": "Hotel Indonesia Kempinski Jakarta",
"star": 5,
"latitude": "6.82235700",
"longitude": "-6.19561300",
"main_photo": "https://ik.imagekit.io/vcrk/dev/hotel",
"address": {
"line_1": "Jalan MH Thamrin 1, Central Jakarta",
"area": "City Center"
},
"check_in_time": "14:00:00",
"check_out_time": "12:00:00",
"website": "www.kempinski-jakarta.com",
"facilities": [
"Wi-Fi",
"Parking Area",
"Gym",
"Restaurant",
"Bar",
"Pool"
]
},
"rooms": [
{
"name": "Deluxe King Bundaran HI View",
"plan": "RO",
"plan_label": "Hanya Kamar",
"total_price": 2978927
}
],
"pax": {
"salutation": "Ms",
"first_name": "Jane",
"last_name": "Doe"
}
},
"meta": {
"session": "9c597acf-23b2-47c3-86b6-b078214257c4"
}
}
| Parameter | Deskripsi | Tipe Data | Catatan |
|---|---|---|---|
| message | Pesan dari response code | String | |
| rc | Response Code API | String | Bukan status booking |
| user.code | Kode produk hotel Anda | String | |
| data.booking_number | Nomor booking dari pemilik properti | String | Dapat null jika booking gagal |
| data.booking_ref | ref_id yang Anda kirim saat booking |
String | |
| data.status | Status booking | Int | 1 Sukses, 2 Gagal, 3 Pending, 5 On Hold |
| data.check_in | Tanggal check in YYYY-MM-DD |
String | |
| data.check_out | Tanggal check out YYYY-MM-DD |
String | |
| data.total_price | Total harga | Int | |
| data.property | Data Properti | Object | |
| data.rooms | Data kamar yang dibooking | Array | |
| data.pax | Tamu Utama | Object | |
| meta.session | Sesi yang digunakan saat booking | String |
Berikut contoh menerima callback hotel di Laravel:
<?php
use Illuminate\Http\Request;
Route::post('/webhook', function (Request $request) {
if ($request->header('User-Agent') !== 'hotel') {
return response()->json(['ok' => true]);
}
$payload = $request->json()->all();
$status = data_get($payload, 'data.status');
$refId = data_get($payload, 'data.booking_ref');
// 1 = Sukses, 2 = Gagal, 3 = Pending, 5 = On Hold
\Log::info('hotel callback', [
'ref_id' => $refId,
'status' => $status,
]);
return response()->json(['ok' => true]);
});