Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

🍽️ GetYourGuide (GYG) Integration Types – HH Restaurants & Packages

📌 Overview

This document describes the integration types available when connecting Hungry Hub (HH) inventory to GetYourGuide (GYG).
It explains how HH restaurants or restaurant packages can be uploaded as GYG Products and how reservation & booking validation works for each case.


🔗 Integration Types

1️⃣ Uploading HH Restaurant as GYG Product

  • Mapping:
    • restaurant_id (HH) = gyg_product_id (GYG)
  • Requirements:
    • gyg_option_id must be set (mandatory)
    • If gyg_option_id is missing or inactive → Booking is rejected
  • Price Matching:
    • Removed – we no longer check price match between HH and GYG
  • Availability Check:
    • Uses restaurant-level inventory (not package-level)
    • ⚠️ Implication: If package-level inventory is different, booking might get rejected during confirmation due to capacity mismatch

2️⃣ Uploading HH Restaurant Package as GYG Product

  • Mapping:
    • restaurant_package_id (HH) is prefixed with RPgyg_product_id
    • Example: RP10801080 is HH Restaurant Package ID
  • Requirements:
    • No need to set or validate gyg_option_id
  • Availability Check:
    • Uses package-level inventory → the get-availabilities API will return the actual package availability
    • ✅ Better accuracy for booking acceptance because it matches package stock directly

🔧 Booking Flow

Integration TypeReserve BehaviorBooking Behavior
Restaurant (non-RP)Requires valid gyg_option_idRejected if gyg_option_id missing/inactive
Restaurant Package (RP)No option check neededBooking always validated directly against package availability

🛠️ Example: API Calls

Availability Check (Package)

curl --location '{{base_url}}/1/get-availabilities/?productId=RP35987&fromDateTime=2025-09-18T11:00:00+07:00&toDateTime=2025-09-19T17:00:59+07:00' --header 'Accept: application/json' --header 'Authorization: Basic <base64-user-pass>'

Sample Success Response:

{
    "data": {
        "availabilities": [
            {
                "dateTime": "2025-09-26T00:00:00+07:00",
                "productId": "RP35997",
                "cutoffSeconds": 900,
                "vacancies": 794
            },
            {
                "dateTime": "2025-09-26T00:15:00+07:00",
                "productId": "RP35997",
                "cutoffSeconds": 900,
                "vacancies": 793
            },
        ]
    }

Reserve (Package)

curl --location '{{base_url}}/1/reserve/' --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'Authorization: Basic <base64-user-pass>' --data '{
  "data": {
    "productId": "RP35987",
    "dateTime": "2025-09-19T19:30:00+07:00",
    "bookingItems": [{ "category": "ADULT", "count": 2 }],
    "gygBookingReference": "GYG6655832035ed41.200001",
    "gygActivityReference": "35987"
  }
}'

Sample Success Response:

{
    "data": {
        "reservationReference": 4934444,
        "reservationExpiration": "2025-09-22T02:48:44Z"
    }
}

Book (Package)

curl --location '{{base_url}}/1/book/' --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'Authorization: Basic <base64-user-pass>' --data '{
  "data": {
    "productId": "RP35987",
    "reservationReference": "4930862",
    "gygBookingReference": "GYG6655832035ed41.200001",
    "gygActivityReference": "35987",
    "currency": "THB",
    "dateTime": "2025-09-19T19:30:00+07:00",
    "bookingItems": [{ "category": "ADULT", "count": 2 }],
    "travelers": [{
      "firstName": "QA1",
      "lastName": "Hungryhub",
      "email": "qahungryhub@example.com",
      "phoneNumber": "+49004917695838281"
    }]
  }
}'

Sample Success Response:

{
    "data": {
        "bookingReference": 4934444,
        "tickets": [
            {
                "category": "ADULT",
                "ticketCode": 4934444,
                "ticketCodeType": "QR_CODE"
            },
            {
                "category": "ADULT",
                "ticketCode": 4934444,
                "ticketCodeType": "QR_CODE"
            }
        ]
    }
}
  • Booking succeeds if the reservation is valid and the slot is still available.
  • Idempotency: repeating the same request with the same gygBookingReference should return the same booking data (no duplicates).

✅ Key Takeaways

  • Restaurant Uploads → Must have gyg_option_id set and active, else bookings fail.
  • Package Uploads → No gyg_option_id needed, more accurate inventory validation.
  • Mismatch Risk: Restaurant-level availability may differ from package-level availability — expect potential booking rejections for restaurant uploads.