Multi-Channel Hotel Search System
Budget: $30 – $250 USD
The system must include a full Admin Panel to manage markups, currencies, exchange rates, providers, and manual hotel contract rates without requiring any code changes.
The goal is to build a centralized Hotel Search & Pricing Engine server that acts as the core system for multiple channels:
WhatsApp via Respond.io (AI Agent)
OTA website (web platform)
Future mobile application
This server does not handle bookings or payments.
Its only responsibility is real-time hotel search, multi-provider price comparison, markup calculation, currency conversion, and structured responses per channel.
---
Single API Entry Point
POST /searchHotels
All channels use this single endpoint.
---
Unified Request Format
{ "source": "respond", "city": "Dubai", "hotel_name": "", "check_in": "2026-05-10", "check_out": "2026-05-12", "adults": 2, "children": 0, "room_type": "suite", "meal": "breakfast", "view": "sea" }
---
Internal Server Logic
1. Multi-Provider Search
The server sends requests to multiple hotel suppliers such as:
Hotelbeds
Additional providers (expandable later)
---
2. Response Aggregation
The system collects results including:
Same hotel from different providers
Different room types
Different prices per provider
---
3. Room Matching Engine
Rooms are matched based on:
Hotel name
Room type
Meal plan
View (sea, city, etc.)
Room size
Amenities
---
4. Cheapest Option Selection
For identical room criteria, the system selects the lowest net price.
---
Markup System
Markup depends on both source and provider.
By Source
Source Markup
respond 15%
ota 25%
By Provider
Provider Markup
Hotelbeds 10%
---
Currency System
Each channel has its own display currency:
Source Currency
respond SAR
ota USD
Exchange rates are stored in an admin panel.
Example:
From To Rate
USD SAR 3.75
---
Processing Order
Final price calculation must follow this order:
Net Price
→ Provider Markup
→ Source Markup
→ Currency Conversion
→ Final Price
---
Room Notes Field
All room attributes from suppliers are normalized into a single field:
notes
Examples:
Sea View
Balcony
45m²
High floor
---
Response Format
1. Respond (WhatsApp / AI)
{ "hotel": "Hilton Dubai", "room": "Sea View Suite", "meal": "Breakfast", "view": "Sea View", "price": 431.25, "currency": "SAR", "notes": "45m, balcony, free wifi" }
---
2. OTA Website
{ "hotel_name": "Hilton Dubai", "images": [], "description": "", "distance": "500m from city center", "amenities": [], "rooms": [ { "room": "Sea View Suite", "meal": "Breakfast", "view": "Sea", "price": 115, "currency": "USD" } ] }
---
Respond.io Integration Logic
1. AI Agent collects user input:
City
Check-in / Check-out
Guests
Room type
Meal plan
View preference
2. Sends HTTP request to backend server
3. Receives JSON response
4. Converts response into natural language
No pricing logic exists inside Respond.io.
---
OTA Website Integration
Uses same API
Uses same backend logic
Different UI rendering:
Images
Hotel page
Amenities
Multiple room options
---
Room Package Generation Logic
The backend must generate multiple pricing packages per room, not a single price.
Required packages:
Room Only
Bed & Breakfast
Half Board (if available)
Sea View room
Sea View + Breakfast
Premium upgrades (if available)
---
Processing Logic
1. Receive base room from supplier API
2. Extract attributes (meal, view, features)
3. Generate combinations of available upgrades
4. Calculate price per option:
Base price
Upgrade cost
Markup
5. Return multiple pricing options
---
Expected Response Format
{ "options": [ { "type": "Room Only", "price": 100, "currency": "USD" }, { "type": "Bed & Breakfast", "price": 120, "currency": "USD" }, { "type": "Sea View + Breakfast", "price": 150, "currency": "USD" } ] }
Respond.io only displays these options and does not calculate pricing.
OTA website uses the same structure for display.
---
Manual Hotel Contract Rates
The system must support manual hotel rates through the admin panel.
Table: manual_hotel_rates
hotel_name
room_type
meal
view
check_in
check_out
net_price
currency
---
Logic
When /searchHotels is executed:
1. Fetch provider prices
2. Fetch manual_hotel_rates
3. Treat manual rates as a provider named "manual"
4. Compare all results together
5. Select cheapest option
Manual rates must follow the same pipeline: Net Price → Provider Markup → Source Markup → Currency Conversion
---
Developer Requirements
1. Build /searchHotels API
2. Integrate Hotelbeds
3. Build Room Matching Engine
4. Build Price Comparison Engine
5. Build Markup Engine (flexible per source and provider)
6. Build Currency Conversion Engine
7. Implement response formatting per source
8. Generate unified notes field
9. Support adding new providers easily
10. Build Admin Panel for:
Markups
Currencies
Exchange rates
11. Implement room package generation logic
12. Implement manual hotel pricing system
---
System Rules
No price storage (real-time API only)
Stateless backend
Centralized logic
Single API usable by all channels without modification
---
Architecture Summary
A centralized Hotel Search and Pricing Engine that acts as the core pricing and availability system for multiple distribution channels, with unified comparison logic, dynamic markup system, currency conversion, and manual contract rate integration.
The goal is to build a centralized Hotel Search & Pricing Engine server that acts as the core system for multiple channels:
WhatsApp via Respond.io (AI Agent)
OTA website (web platform)
Future mobile application
This server does not handle bookings or payments.
Its only responsibility is real-time hotel search, multi-provider price comparison, markup calculation, currency conversion, and structured responses per channel.
---
Single API Entry Point
POST /searchHotels
All channels use this single endpoint.
---
Unified Request Format
{ "source": "respond", "city": "Dubai", "hotel_name": "", "check_in": "2026-05-10", "check_out": "2026-05-12", "adults": 2, "children": 0, "room_type": "suite", "meal": "breakfast", "view": "sea" }
---
Internal Server Logic
1. Multi-Provider Search
The server sends requests to multiple hotel suppliers such as:
Hotelbeds
Additional providers (expandable later)
---
2. Response Aggregation
The system collects results including:
Same hotel from different providers
Different room types
Different prices per provider
---
3. Room Matching Engine
Rooms are matched based on:
Hotel name
Room type
Meal plan
View (sea, city, etc.)
Room size
Amenities
---
4. Cheapest Option Selection
For identical room criteria, the system selects the lowest net price.
---
Markup System
Markup depends on both source and provider.
By Source
Source Markup
respond 15%
ota 25%
By Provider
Provider Markup
Hotelbeds 10%
---
Currency System
Each channel has its own display currency:
Source Currency
respond SAR
ota USD
Exchange rates are stored in an admin panel.
Example:
From To Rate
USD SAR 3.75
---
Processing Order
Final price calculation must follow this order:
Net Price
→ Provider Markup
→ Source Markup
→ Currency Conversion
→ Final Price
---
Room Notes Field
All room attributes from suppliers are normalized into a single field:
notes
Examples:
Sea View
Balcony
45m²
High floor
---
Response Format
1. Respond (WhatsApp / AI)
{ "hotel": "Hilton Dubai", "room": "Sea View Suite", "meal": "Breakfast", "view": "Sea View", "price": 431.25, "currency": "SAR", "notes": "45m, balcony, free wifi" }
---
2. OTA Website
{ "hotel_name": "Hilton Dubai", "images": [], "description": "", "distance": "500m from city center", "amenities": [], "rooms": [ { "room": "Sea View Suite", "meal": "Breakfast", "view": "Sea", "price": 115, "currency": "USD" } ] }
---
Respond.io Integration Logic
1. AI Agent collects user input:
City
Check-in / Check-out
Guests
Room type
Meal plan
View preference
2. Sends HTTP request to backend server
3. Receives JSON response
4. Converts response into natural language
No pricing logic exists inside Respond.io.
---
OTA Website Integration
Uses same API
Uses same backend logic
Different UI rendering:
Images
Hotel page
Amenities
Multiple room options
---
Room Package Generation Logic
The backend must generate multiple pricing packages per room, not a single price.
Required packages:
Room Only
Bed & Breakfast
Half Board (if available)
Sea View room
Sea View + Breakfast
Premium upgrades (if available)
---
Processing Logic
1. Receive base room from supplier API
2. Extract attributes (meal, view, features)
3. Generate combinations of available upgrades
4. Calculate price per option:
Base price
Upgrade cost
Markup
5. Return multiple pricing options
---
Expected Response Format
{ "options": [ { "type": "Room Only", "price": 100, "currency": "USD" }, { "type": "Bed & Breakfast", "price": 120, "currency": "USD" }, { "type": "Sea View + Breakfast", "price": 150, "currency": "USD" } ] }
Respond.io only displays these options and does not calculate pricing.
OTA website uses the same structure for display.
---
Manual Hotel Contract Rates
The system must support manual hotel rates through the admin panel.
Table: manual_hotel_rates
hotel_name
room_type
meal
view
check_in
check_out
net_price
currency
---
Logic
When /searchHotels is executed:
1. Fetch provider prices
2. Fetch manual_hotel_rates
3. Treat manual rates as a provider named "manual"
4. Compare all results together
5. Select cheapest option
Manual rates must follow the same pipeline: Net Price → Provider Markup → Source Markup → Currency Conversion
---
Developer Requirements
1. Build /searchHotels API
2. Integrate Hotelbeds
3. Build Room Matching Engine
4. Build Price Comparison Engine
5. Build Markup Engine (flexible per source and provider)
6. Build Currency Conversion Engine
7. Implement response formatting per source
8. Generate unified notes field
9. Support adding new providers easily
10. Build Admin Panel for:
Markups
Currencies
Exchange rates
11. Implement room package generation logic
12. Implement manual hotel pricing system
---
System Rules
No price storage (real-time API only)
Stateless backend
Centralized logic
Single API usable by all channels without modification
---
Architecture Summary
A centralized Hotel Search and Pricing Engine that acts as the core pricing and availability system for multiple distribution channels, with unified comparison logic, dynamic markup system, currency conversion, and manual contract rate integration.