🍽️ 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_idmust be set (mandatory)- If
gyg_option_idis 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 withRP→gyg_product_id- Example:
RP1080→1080is HH Restaurant Package ID
- Requirements:
- No need to set or validate
gyg_option_id
- No need to set or validate
- Availability Check:
- Uses package-level inventory → the
get-availabilitiesAPI will return the actual package availability - ✅ Better accuracy for booking acceptance because it matches package stock directly
- Uses package-level inventory → the
🔧 Booking Flow
| Integration Type | Reserve Behavior | Booking Behavior |
|---|---|---|
| Restaurant (non-RP) | Requires valid gyg_option_id | Rejected if gyg_option_id missing/inactive |
| Restaurant Package (RP) | No option check needed | Booking 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
gygBookingReferenceshould return the same booking data (no duplicates).
✅ Key Takeaways
- Restaurant Uploads → Must have
gyg_option_idset and active, else bookings fail. - Package Uploads → No
gyg_option_idneeded, more accurate inventory validation. - Mismatch Risk: Restaurant-level availability may differ from package-level availability — expect potential booking rejections for restaurant uploads.