Webhook / Callback Hotel


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.

Kapan Callback Dikirim

Callback hotel dikirim ketika:

  1. Status booking berubah setelah Booking (misalnya dari pending menjadi sukses atau gagal)

{info} Response awal Booking tetap dikembalikan secara sinkron. Callback digunakan untuk update status berikutnya. Anda juga dapat melakukan Detail Booking untuk cek status.

Header

Header Deskripsi
User-Agent Bernilai hotel. Gunakan header ini untuk membedakan callback hotel dari prepaid (prepaid) dan pascabayar (postpaid)
Content-Type application/json

Payload

Struktur payload sama dengan response Detail Booking.

{danger} Field rc tidak menunjukkan status booking. Gunakan data.status untuk menentukan status transaksi. Lihat Status Transaksi.

Contoh

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

Contoh Handle

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]);
});