Welcome to Traveate Documentation
An open, agent-native data core for hospitality plus a stateless Model Context Protocol (MCP) bridge that lets AI agents read and act on property operations safely.
π Connect an AI Agent
Connect Claude, Cursor, Antigravity, or custom agents over MCP stdio or HTTP with scoped API keys.
π¨ Homestay vs. Hotel Models
See how one canonical schema models both an Entire-Place Homestay ($32β$60 USD) and a 26-room Full-Service Hotel.
π‘οΈ Preview β Confirm Safety
Every write generates a state-hashed ActionPreview and requires confirmation before mutating inventory or rates.
β‘ Live API Playground
Test live availability & occupancy pricing against Hope Homestay and Rock Hyrax Hotel right in your browser.
System Architecture
Traveate is strictly separated into two layers so that external AI agents never touch the database directly:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β AI AGENTS ("Digital Team Members") β
β β’ Hotel Front-Desk Concierge β’ Autonomous Property Onboarding Agent β
β β’ Revenue / Pricing Agent β’ 3rd-Party OTA / Partner Agent β
βββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββ¬ββββββββββββββββββ
β MCP over stdio β HTTP JSON + x-agent-api-key
βΌ βΌ
βββββββββββββββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββββββ
β Stateless MCP Bridge Server ββββΆβ POST /api/v1/agent-actions/* β
β (src/mcp/server.ts) β β (Auth, Scopes, Budgets) β
βββββββββββββββββββββββββββββββββββββββββ βββββββββββββββββ¬ββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β TRAVEATE CANONICAL HOSPITALITY DATA CORE β
β β’ 13 Canonical Entities (Organizations, Properties, UnitTypes, Units, β
β RatePlans, RateCalendar, CalendarBlocks, Bookings, Guests, Reviews, β
β Messages, ChannelFeeds, Agents) β
β β’ Unified Availability & Pricing Engine (src/core/availability.ts) β
β β’ Two-Step ActionPreview (SHA-256 state_hash) + Immutable AuditLog β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Core Design Principles
- Money in Minor Units: All monetary amounts (
base_price_cents,subtotal_cents,total_amount_cents) are stored and returned as integer minor units (e.g.$50.00 USD = 5000,KES 7,000.00 = 700000) to eliminate floating-point rounding bugs. - Half-Open Date Intervals
[start, end): A stay from2026-11-15to2026-11-17occupies the nights of2026-11-15and2026-11-16(2 nights), allowing same-day turnover on2026-11-17. - Zero Vendor Lock-In: Any property can export its entire operational history as a self-contained JSON bundle (
GET /api/v1/properties/:id/export) and re-import into any Traveate instance.
Quickstart & API Key Authentication
Authenticate requests with persistent Agent API Keys, understand HTTP status codes, and make your first API call in 30 seconds.
1. Authentication Header
Similar to Channex's user-api-key header, Traveate authenticates every agent request using the x-agent-api-key HTTP header:
POST https://traveate.com/api/v1/agent-actions/get_property HTTP/1.1
Host: traveate.com
Content-Type: application/json
x-agent-api-key: traveate_ak_concierge_dev_key
{
"property_id": "hope-homestay"
}
2. Development API Keys (Seeded)
| Digital Team Member | API Key (x-agent-api-key) |
Allowed Scopes | Hourly Budget |
|---|---|---|---|
| Hope Front Desk Concierge | traveate_ak_concierge_dev_key |
All 30 Read + Preview/Confirm Write tools across all properties in the organization | 500 calls/hr60 writes/hr |
| Read-Only Analytics Agent | traveate_ak_readonly_dev_key |
13 Read-only tools (blocked from any *_preview or *_confirm tool) |
200 calls/hr0 writes/hr |
3. Standard Error Format & Status Codes
All error responses return a structured JSON object with an error.code and human-readable error.message:
{
"error": {
"code": "STALE_PREVIEW",
"message": "Underlying availability or rates changed since preview was generated. Please create a fresh preview."
}
}
| HTTP Status | Error Code | Meaning |
|---|---|---|
200 OK / 201 Created |
β | Request succeeded. |
400 Bad Request |
INVALID_DATES / VALIDATION_ERROR |
Missing or invalid parameters (e.g., check_out_date <= check_in_date). |
401 Unauthorized |
AGENT_UNAUTHORIZED |
Missing, invalid, or revoked x-agent-api-key. |
403 Forbidden |
TOOL_SCOPE_FORBIDDEN / PROPERTY_SCOPE_FORBIDDEN |
The agent's allowed_tools or property_id scope does not permit this call. |
409 Conflict |
STALE_PREVIEW / NO_AVAILABILITY |
Inventory or rate state changed between preview and confirm, or 0 units remain. |
429 Too Many Requests |
AGENT_RATE_LIMIT_EXCEEDED |
Agent exceeded max_calls_per_hour or max_writes_per_hour. |
Connect Your Own AI Agent (MCP & HTTP)
Connect Claude Desktop, Cursor, Google Antigravity, or your own custom Python/TypeScript agent to Traveate in minutes.
Option 1: Connect via Model Context Protocol (MCP `stdio`)
Add the traveate-hospitality server to your MCP client configuration (e.g. mcp_config.json or claude_desktop_config.json):
{
"mcpServers": {
"traveate-hospitality": {
"command": "node",
"args": ["src/mcp/server.ts"],
"env": {
"TRAVEATE_API_URL": "https://traveate.com",
"TRAVEATE_AGENT_API_KEY": "traveate_ak_concierge_dev_key"
}
}
}
}
src/mcp/server.ts is 100% stateless. It translates JSON-RPC 2.0 tools/list and tools/call requests into HTTP calls to POST /api/v1/agent-actions/:tool_name. You can run multiple MCP bridges across different machines pointing to the same Traveate Core.
Option 2: Connect a Custom Agent over HTTP (TypeScript / Python)
If you are building a custom WhatsApp bot, voice concierge, or automated revenue agent, call POST /api/v1/agent-actions/:tool_name directly:
// TypeScript / Node.js Agent Example
const response = await fetch('https://traveate.com/api/v1/agent-actions/get_availability', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-agent-api-key': 'traveate_ak_concierge_dev_key',
},
body: JSON.stringify({
property_id: 'hope-homestay',
check_in_date: '2026-11-22',
check_out_date: '2026-11-24',
adults: 5,
}),
});
const availability = await response.json();
console.log(availability.unit_types[0].rate_plans);
Homestay vs. Independent Hotel Data Models
How onboarding our second property (Rock Hyrax Hotel) alongside Hope Homestay unlocked a unified data model that handles both "Entire Place" vacation rentals and multi-room full-service hotels.
Side-by-Side Comparison
| Dimension | HOMESTAY Hope Homestay (Syokimau) | HOTEL Rock Hyrax Hotel (Nakuru) |
|---|---|---|
| Selling Model | Entire Place (Whole House) β 1 to 8 guests book the entire 4-bedroom home exclusively. Unrelated guests never share the house on the same date. | Individual Room Categories β 5 room types (Standard Double, Superior Double, Standard Twin, Superior Twin, Executive Suite) across 26 rooms. |
inventory_model |
'unique' (inventory_count: 1) β Auto-assigns unit_id on booking confirmation. |
'pooled' (inventory_count: 3..8 per category) β Leaves unit_id: null until check-in. |
| Pricing Model |
Channel-Specific USD Pricing: β’ Airbnb: Flat $50/night (1β8 pax) + $10/night Airbnb fee = $60/night total.β’ Booking.com: Occupancy-tiered by guest count ( 2 pax = $32, 3 pax = $35, 4 pax = $40, 5 pax = $45, 6 pax = $50, 7 pax = $55, 8 pax = $60).
|
Room Category + Meal Board Offset (KES): β’ BB (Bed & Breakfast): Base rate ( KES 7,000 β 14,000)β’ HB (Half Board): +KES 2,500/nightβ’ FB (Full Board): +KES 4,500/nightβ’ Plus 16% VAT + 2% Tourism Levy. |
| Dining & F&B | Self-catering full kitchen & dining room inside the house. | Commercial Rock Hyrax Restaurant & Garden Terrace (06:30β22:30). |
| Conferencing | None (quiet residential court). | Hyrax Executive Conference Hall (up to 35 delegates, projector/PA, half/full-day packages). |
Archetype 1: Entire-Place Homestay (Hope Homestay)
Modeling a whole-home vacation rental where 1 to 8 guests book the entire property exclusively, with Airbnb flat-rate + fee pricing and Booking.com occupancy-tiered pricing.
Why Whole-Place Inventory Matters for Homestays
At Hope Homestay (4 en-suite bedrooms in Syokimau), selling individual bedrooms to separate, unrelated guests on the same date is impractical because guests share the living room, dining room, and kitchen.
By setting inventory_model: 'unique' on the property and creating a single UnitType (Entire Four-Bedroom Homestay (Whole House)) with inventory_count: 1 and max_occupancy: 8:
- Any confirmed bookingβwhether for 1 guest or 8 guestsβimmediately drops
available_unitsfrom1to0for those dates. - The physical house unit (
SEED_IDS.units.room1) is automatically assigned tobooking.unit_idupon confirmation.
Channel-Specific Pricing Configuration
1. Airbnb Flat Rate ($50/night + $10 Airbnb Fee = $60 Total)
On Airbnb (Listing #797494517027686373), the nightly rate is a flat $50/night regardless of the number of guests (1β8), plus a $10/night (20%) Airbnb service fee for a total of $60/night:
{
"name": "Airbnb β Entire Place Flat Rate ($50/night + $10 Airbnb Fee = $60 Total)",
"currency": "USD",
"base_price_cents": 5000,
"meal_plan": "room_only",
"metadata": {
"channel": "airbnb",
"pricing_model": "flat_entire_place",
"channel_fee": {
"code": "AIRBNB_SERVICE_FEE",
"name": "Airbnb Service Fee ($10/night)",
"rate_pct": 20,
"per_night_cents": 1000
}
}
}
2. Booking.com Occupancy-Tiered Pricing (2 Pax = $32 β 8 Pax = $60)
On Booking.com (hotel/ke/hope-homestay-syokimau), the entire 4-bedroom house is still sold exclusively, but the rate scales with the number of guests (pax = adults + children):
| Number of Guests (Pax) | Booking.com Nightly Rate (USD) | Minor Units (price_cents) |
Airbnb Nightly Rate (Base / Total) |
|---|---|---|---|
| 1 β 2 pax | $32.00 / night | 3200 | $50.00 ($60.00 incl. fee) |
| 3 pax | $35.00 / night | 3500 | $50.00 ($60.00 incl. fee) |
| 4 pax | $40.00 / night | 4000 | $50.00 ($60.00 incl. fee) |
| 5 pax | $45.00 / night | 4500 | $50.00 ($60.00 incl. fee) |
| 6 pax | $50.00 / night | 5000 | $50.00 ($60.00 incl. fee) |
| 7 pax | $55.00 / night | 5500 | $50.00 ($60.00 incl. fee) |
| 8 pax | $60.00 / night | 6000 | $50.00 ($60.00 incl. fee) |
{
"name": "Booking.com β Entire Place (Occupancy-Based 1β8 Pax)",
"currency": "USD",
"base_price_cents": 3200,
"meal_plan": "room_only",
"metadata": {
"channel": "booking_com",
"pricing_model": "occupancy_tiered",
"occupancy_pricing": {
"1": 3200,
"2": 3200,
"3": 3500,
"4": 4000,
"5": 4500,
"6": 5000,
"7": 5500,
"8": 6000
}
}
}
Archetype 2: Full-Service Independent Hotel (Rock Hyrax Hotel)
Modeling an independent hotel with 5 pooled room categories (26 units), multi-board meal plans (BB / HB / FB), an on-site restaurant, and a 35-delegate conference hall.
1. Pooled Room Categories & Multi-Board Rate Plans
Validated against https://rockhyraxhotel.com, Rock Hyrax Hotel in Nakuru has inventory_model: 'pooled' across 5 room categories (26 rooms total). Each room category offers three meal-plan rate plans using metadata.price_offset_cents:
Room Category (UnitType) |
Pool Size | Bed & Breakfast (BB) |
Half Board (HB) |
Full Board (FB) |
|---|---|---|---|---|
| Standard Double Room | 8 rooms | KES 7,000 | KES 9,500 | KES 11,500 |
| Standard Twin Room | 5 rooms | KES 8,500 | KES 11,000 | KES 13,000 |
| Superior Double Room | 6 rooms | KES 9,000 | KES 11,500 | KES 13,500 |
| Superior Twin Room | 4 rooms | KES 10,500 | KES 13,000 | KES 15,000 |
| Executive Suite | 3 suites | KES 14,000 | KES 16,500 | KES 18,500 |
2. Restaurant & Conference Facilities in Property.policies.facilities
Unlike a homestay, an independent hotel generates significant revenue from dining and corporate conferencing. Traveate models these in Property.policies.facilities so AI concierge agents can answer corporate retreat and dining inquiries accurately:
{
"entity_classification": "independent_full_service_hotel",
"facilities": {
"dining": [
{
"name": "Rock Hyrax Restaurant & Garden Terrace",
"url": "https://rockhyraxhotel.com/restaurant/",
"hours": "06:30 - 22:30",
"cuisines": ["Kenyan Nyama Choma & Local Delicacies", "Continental", "Buffet & A La Carte"]
}
],
"conferencing": [
{
"name": "Hyrax Executive Conference & Banquet Hall",
"url": "https://rockhyraxhotel.com/conferencing/",
"capacity_persons": 35,
"layouts": { "boardroom": 20, "u_shape": 25, "classroom": 30, "theatre": 35 },
"equipment": ["HD LCD Projector & Screen", "PA System & Wireless Microphones", "High-Speed Fiber Wi-Fi"],
"packages": [
{ "code": "FULL_DAY_CONFERENCE", "name": "Full-Day Conference Package", "rate_per_person_kes": 2800 },
{ "code": "HALF_DAY_CONFERENCE", "name": "Half-Day Conference Package", "rate_per_person_kes": 2200 }
]
}
]
}
}
Autonomous Agent Onboarding & Owner Verification
Owners shouldn't have to fill out 50 form fields. Give an agent a hotel name, website URL, or Google Maps link β let the agent research and onboard the property, and let the owner verify or correct it in the Dashboard.
The 3-Step Agent Onboarding Workflow
-
Owner Provides a Minimal Prompt: The owner gives the agent a property name and a public URL (e.g.,
https://rockhyraxhotel.com, a Booking.com link, or a Google Maps link). -
Agent Researches & Calls
onboard_property_preview/confirm: The agent extracts room categories, amenities, coordinates, restaurant details, and conference capacity, and stampspolicies.onboarding_provenancewithverification_status: 'pending_owner_review'. -
Owner Verifies or Corrects in
/dashboard: The owner opens/dashboard?property_id=rock-hyrax-hotel, adjusts any room rate, unit count, check-in time, or conference capacity, and clicks Save & Verify Property Details (callingPOST /api/v1/properties/:id/verify-updateorPOST /api/v1/unit-types/:id/verify-update).
// POST /api/v1/properties/00000000-0000-4000-8000-000000000210/verify-update
{
"check_in_time": "13:00",
"conference_capacity": 40,
"mark_verified": true,
"confirmed_by": "rock-hyrax-general-manager"
}
Two-Step Preview β Confirm Write Protocol
How Traveate prevents AI hallucinations, race conditions, and double-bookings using state-hashed ActionPreviews and immutable AuditLogs.
How State-Hashed Previews Work
Every write action in Traveate is split into a *_preview tool and a *_confirm tool:
Agent calls create_booking_preview(...)
β
βββΊ 1. Validates dates, occupancy, restrictions, and calculates exact PriceBreakdown
βββΊ 2. Computes SHA-256 state_hash of (UnitType + RatePlan + RateCalendar + CalendarBlocks + Overlapping Bookings)
βββΊ 3. Stores ActionPreview (status='pending', expires in 15 mins)
βββΊ 4. Returns preview_id + human-readable resolved_proposal
Human Operator or Authorized Agent calls create_booking_confirm({ preview_id })
β
βββΊ 1. Re-computes SHA-256 state_hash inside a SQLite transaction
βββΊ 2. If state_hash !== preview.state_hash βββΊ Throws 409 STALE_PREVIEW (prevents double-booking!)
βββΊ 3. Inserts Booking (auto-assigns unit_id if inventory_model === 'unique')
βββΊ 4. Writes immutable AuditLog row (actor_type, actor_id, before, after)
inventory_count = 1), if two guests request a booking preview for the same dates (2026-11-15 to 2026-11-17), both previews succeed while the house is still open. As soon as the first preview is confirmed, available_units drops from 1 to 0, and any attempt to confirm the second preview is automatically rejected with 409 STALE_PREVIEW.
Unified Availability & Pricing Engine (ARI)
How calculateAvailability in src/core/availability.ts resolves inventory and nightly prices across date overrides, guest occupancy tiers, channel fees, and meal boards.
Nightly Rate Precedence Order
For each night d in [check_in_date, check_out_date), Traveate resolves the nightly rate in strict priority order:
-
RatePlan-Specific Date Override (
rate_calendar_plan): A row inrate_calendarmatching both(unit_type_id, rate_plan_id, date). -
UnitType Default Date Override (
rate_calendar_default): A row inrate_calendarmatching(unit_type_id, rate_plan_id IS NULL, date)(plus anyprice_offset_centson the RatePlan). -
Guest Occupancy Tier (
RatePlan.metadata.occupancy_pricing): Maps total guest countString(adults + children)to minor units (used by Hope Homestay's Booking.com rate plan:2 pax = 3200..8 pax = 6000). -
RatePlan Base Price (
rate_plan_base):rate_plan.base_price_cents(used by Hope Homestay's Airbnb flat $50 rate plan) orunit_type.base_price_cents + price_offset_cents(used by Rock Hyrax Hotel's BB / HB / FB rate plans). -
UnitType Base Price (
unit_type_base): Fallback tounit_type.base_price_cents.
Taxes & Channel Fees
- Statutory Taxes (
Property.tax_config.taxes): Percentage taxes applied tosubtotal_cents(e.g. Rock Hyrax Hotel's 16% Kenya VAT + 2% Tourism Levy). - Channel Service Fees (
RatePlan.metadata.channel_fee): Per-night or percentage channel fees appended toprice_breakdown.taxes(e.g. Hope Homestay's Airbnb+$10/nightfee so$50/nightbase becomes$60/nighttotal).
Properties & Unit Types Collection
Read, onboard, update, and owner-verify properties and sellable unit types.
| MCP Tool / Endpoint | Mode | Parameters & Description |
|---|---|---|
list_propertiesGET /api/v1/properties |
READ | Returns all active properties in the organization (hope-homestay, rock-hyrax-hotel). |
get_propertyGET /api/v1/properties/:id |
READ | property_id (UUID or slug like "hope-homestay" or "rock-hyrax-hotel"). Returns full property profile, policies, facilities, and external channel IDs. |
list_unit_typesGET /api/v1/properties/:id/unit-types |
READ | property_id. Lists all sellable unit categories with inventory_count, max_occupancy, bed_configuration, and base_price_cents. |
onboard_property_previewonboard_property_confirm |
2-STEP WRITE | Onboards a new property, its unit_types, physical units, and multi-board rate_plans in a single atomic transaction. |
update_property_previewupdate_property_confirm |
2-STEP WRITE | Updates property check-in/out times, descriptions, contact details, or policies. |
update_unit_type_previewupdate_unit_type_confirm |
2-STEP WRITE | Updates a room category's base_price_cents, inventory_count, max_occupancy, or description. |
Availability, Rates & Calendar Blocks (ARI)
Query real-time availability and nightly quotes across all channels, set date-specific rate overrides, and manage maintenance or owner blocks.
| MCP Tool / Endpoint | Mode | Parameters & Description |
|---|---|---|
get_availabilityGET /api/v1/properties/:id/availability |
READ | property_id, check_in_date (YYYY-MM-DD), check_out_date (YYYY-MM-DD), adults, children, infants. Returns available_units and full price_breakdown for every RatePlan. |
get_rate_planGET /api/v1/rate-plans/:id |
READ | rate_plan_id. Returns cancellation policy tiers, meal plan, and occupancy/channel fee metadata. |
set_rate_calendar_previewset_rate_calendar_confirm |
2-STEP WRITE | unit_type_id, rate_plan_id?, start_date, end_date, price_cents, min_stay?, closed?. Sets date-specific overrides in rate_calendar. |
create_calendar_block_previewcreate_calendar_block_confirm |
2-STEP WRITE | unit_id or unit_type_id, start_date, end_date, reason (maintenance | owner_stay | manual). Deducts blocked units from availability. |
Bookings & Guests Collection
Retrieve reservations and guest profiles, and execute two-step booking creation, modification, and cancellation flows.
| MCP Tool / Endpoint | Mode | Parameters & Description |
|---|---|---|
list_bookingsGET /api/v1/properties/:id/bookings |
READ | property_id, optional status, from_date, to_date. Lists reservations ordered by check-in date. |
get_bookingGET /api/v1/bookings/:id |
READ | booking_id. Returns full booking record including price_breakdown and cancellation_policy_snapshot. |
get_guestGET /api/v1/guests/:id |
READ | guest_id. Returns guest contact details, ID info, and stay preferences. |
create_booking_previewcreate_booking_confirm |
2-STEP WRITE | property_id, unit_type_id, rate_plan_id, check_in_date, check_out_date, adults, guest. Creates a confirmed reservation and auto-assigns unit_id for unique inventory properties. |
modify_booking_previewmodify_booking_confirm |
2-STEP WRITE | booking_id, updated check_in_date, check_out_date, adults, or rate_plan_id. Re-verifies availability and recalculates pricing. |
cancel_booking_previewcancel_booking_confirm |
2-STEP WRITE | booking_id, reason. Evaluates cancellation_policy_snapshot tiers to compute penalty and refund amounts before cancelling. |
Reviews, Messaging & Regional Landmarks
Tools for guest communication across WhatsApp / OTAs, Google Business Profile review responses, and regional landmark directions.
| MCP Tool / Endpoint | Mode | Parameters & Description |
|---|---|---|
get_distance_and_nearbyGET /api/v1/properties/:id/nearby |
READ | property_id, optional destination (e.g. "JKIA", "SGR", "Lake Nakuru", "Hyrax Hill"). Computes driving distance, estimated minutes, and route summary. |
get_reviewsGET /api/v1/properties/:id/reviews |
READ | property_id, optional reply_status (unreplied | replied). |
reply_to_review_previewreply_to_review_confirm |
2-STEP WRITE | review_id, reply_text. Drafts and publishes a verified reply to a guest review. |
list_messagesGET /api/v1/properties/:id/messages |
READ | property_id, optional booking_id, channel (whatsapp | booking_com | airbnb | email). |
send_message_previewsend_message_confirm |
2-STEP WRITE | property_id, booking_id?, channel, body. Drafts and sends an outbound guest message. |
Open Channel Manager (Two-Way iCal + Gmail IMAP OTA Email Poller)
How Traveate syncs availability two-way with Airbnb and Booking.com without paid middleware, and upgrades iCal date blocks into full guest reservations by polling hopehomestayke@gmail.com.
How Stage 1 (Two-Way iCal) & Stage 2 (Gmail IMAP OTA Upgrade) Work Together
1. Scheduled Inbound iCal Poller (poll_channel_feeds)
βββΊ Fetches https://www.airbnb.com/calendar/ical/797494517027686373.ics?t=...
βββΊ Upserts idempotent CalendarBlock (reason='channel_sync', external_uid)
βββΊ Immediately blocks dates so no double-booking can occur!
2. Built-In Gmail IMAP-TLS OTA Email Poller (POST /api/v1/ota-emails/poll-gmail)
βββΊ Connects to imap.gmail.com:993 (hopehomestayke@gmail.com) via node:tls
βββΊ Decodes HTML / quoted-printable Airbnb & Booking.com confirmation emails
βββΊ Extracts guest name, email, phone, pax count, payout, and confirmation code
βββΊ Atomically upgrades the matching channel_sync CalendarBlock into a full
Booking + Guest record WITHOUT double-deducting availability!
Channel-Specific Outbound iCal Export URLs (Loop-Safe)
Each channel-specific .ics endpoint automatically excludes blocks imported from that same channel so Airbnb and Booking.com never echo their own blocks back:
- Hope Homestay (For Airbnb Step 1):
GET /api/v1/properties/hope-homestay/airbnb.ics - Hope Homestay (For Booking.com):
GET /api/v1/properties/hope-homestay/booking_com.ics - Rock Hyrax Hotel (Master iCal):
GET /api/v1/properties/rock-hyrax-hotel/ical.ics
Living Property Memory & Dual-Persona AI Architecture
How Traveate remembers every property's unique edge cases in property_knowledge, learns continuously from host rejection feedback, and enforces a strict security boundary between the Guest Website/WhatsApp Concierge and the Host Operations Copilot.
1. Living Property Playbook (property_knowledge)
Instead of hardcoding property quirks in prompts, Traveate stores structured operational rules per property (pricing_quirk, checkin_checkout, house_rule, guest_faq, operations_sop, feedback_learned) and grows smarter through three loops:
- Reject & Teach Loop (
POST /api/v1/previews/:id/reject): When a host rejects anActionPreviewand provides arejection_reason(e.g., "Peak December bookings between Dec 15 and Jan 5 require a 3-night minimum stay"), Traveate automatically saves afeedback_learnedrule linked tosource_preview_id. - Host Copilot Chat Training: Saying "Remember for Hope Homestay: Airport pickup from JKIA Terminal 1A is $20 flat..." invokes
remember_property_knowledge(source: "copilot_chat"). - Automatic Playbook Retrieval: Both the Guest Concierge and Host Copilot call
list_property_knowledgeto cite verified rules when answering inquiries.
2. Dual-Persona Split: Guest Concierge vs. Host Operations Copilot
| Persona | Endpoint & Widget | API Key & MCP Tool Scope | Capabilities & Guardrails |
|---|---|---|---|
ποΈ Guest Website & WhatsApp Conciergemode: "guest_concierge" |
POST /api/v1/public/properties/:slug/chatGET /widget/:slug |
traveate_ak_guest_widget_dev_key(7 Guest-Safe Tools only) |
Locked to target property slug. Quotes live availability/rates, answers edge-case FAQs from property_knowledge, and creates conversational booking previews. Strictly blocks property_onboarding, teach_property_rule, and all *_confirm tools (403 TOOL_SCOPE_FORBIDDEN). |
π· Host Operations Copilotmode: "host_copilot" |
POST /api/v1/host/copilotDashboard AI Assistant Tab |
traveate_ak_concierge_dev_key(All 32 Organization Tools) |
Full multi-property operations, natural-language playbook training (remember_property_knowledge), and autonomous property onboarding (onboard_property_preview). |
Interactive API & MCP Playground
Test live get_availability quotes across Hope Homestay (try changing Guests from 2 to 8 to see Booking.com occupancy tiers $32β$60 vs Airbnb flat $50 + $10 = $60) and Rock Hyrax Hotel (BB / HB / FB meal plans).
// Click "Run MCP Tool: get_availability" above to query http://localhost:3456/api/v1/agent-actions/get_availability
Live AI Concierge & Onboarding Webhook Playground
Send a natural-language guest or onboarding prompt to POST /api/v1/concierge/chat and inspect the exact MCP tool trace and ActionPreview generated:
// Click "Send to Concierge Agent" above to call POST /api/v1/concierge/chat