Traveate Docs
v1.3 β€’ Agent-Native Core + Property Memory
llms.txt Open Live Dashboard β†’
Getting Started

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.

πŸ’‘ Why Traveate Exists
Legacy hospitality software forces owners into a monolithic "suite" where data is locked inside proprietary screens. Traveate replaces the monolith with a central hospitality data core that exposes everything through a standardized, permissioned interface β€” so AI agents (built by the platform, a partner, or the hotel itself) operate on top of the core like Digital Team Members.

πŸ”Œ 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 from 2026-11-15 to 2026-11-17 occupies the nights of 2026-11-15 and 2026-11-16 (2 nights), allowing same-day turnover on 2026-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.
Getting Started

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/hr
60 writes/hr
Read-Only Analytics Agent traveate_ak_readonly_dev_key 13 Read-only tools (blocked from any *_preview or *_confirm tool) 200 calls/hr
0 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.
Getting Started

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"
      }
    }
  }
}
βœ“ Stateless MCP Bridge Guarantee
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);
Property Archetypes & Models

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.

πŸ”‘ Key Product Insight from Multi-Property Onboarding
With only a single property, it is easy to hardcode assumptions about how rooms, rates, and taxes work. Onboarding both Hope Homestay (an Entire-Place 4-bedroom home in Syokimau) and Rock Hyrax Hotel (a 26-room full-service hotel in Nakuru with a restaurant and conference hall) proved how our canonical entities flex across completely different hospitality businesses without changing a single database table.

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).
Property Archetypes & Models

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_units from 1 to 0 for those dates.
  • The physical house unit (SEED_IDS.units.room1) is automatically assigned to booking.unit_id upon 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 / night3200$50.00 ($60.00 incl. fee)
3 pax$35.00 / night3500$50.00 ($60.00 incl. fee)
4 pax$40.00 / night4000$50.00 ($60.00 incl. fee)
5 pax$45.00 / night4500$50.00 ($60.00 incl. fee)
6 pax$50.00 / night5000$50.00 ($60.00 incl. fee)
7 pax$55.00 / night5500$50.00 ($60.00 incl. fee)
8 pax$60.00 / night6000$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
    }
  }
}
Property Archetypes & Models

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 }
        ]
      }
    ]
  }
}
Property Archetypes & Models

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

  1. 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).
  2. Agent Researches & Calls onboard_property_preview / confirm: The agent extracts room categories, amenities, coordinates, restaurant details, and conference capacity, and stamps policies.onboarding_provenance with verification_status: 'pending_owner_review'.
  3. 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 (calling POST /api/v1/properties/:id/verify-update or POST /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"
}
Core Engine & Safety

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)
⚠️ Stale Preview Protection on Entire-Place Homestays
At Hope Homestay (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.
Core Engine & Safety

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:

  1. RatePlan-Specific Date Override (rate_calendar_plan): A row in rate_calendar matching both (unit_type_id, rate_plan_id, date).
  2. UnitType Default Date Override (rate_calendar_default): A row in rate_calendar matching (unit_type_id, rate_plan_id IS NULL, date) (plus any price_offset_cents on the RatePlan).
  3. Guest Occupancy Tier (RatePlan.metadata.occupancy_pricing): Maps total guest count String(adults + children) to minor units (used by Hope Homestay's Booking.com rate plan: 2 pax = 3200 .. 8 pax = 6000).
  4. RatePlan Base Price (rate_plan_base): rate_plan.base_price_cents (used by Hope Homestay's Airbnb flat $50 rate plan) or unit_type.base_price_cents + price_offset_cents (used by Rock Hyrax Hotel's BB / HB / FB rate plans).
  5. UnitType Base Price (unit_type_base): Fallback to unit_type.base_price_cents.

Taxes & Channel Fees

  • Statutory Taxes (Property.tax_config.taxes): Percentage taxes applied to subtotal_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 to price_breakdown.taxes (e.g. Hope Homestay's Airbnb +$10/night fee so $50/night base becomes $60/night total).
API & MCP Reference

Properties & Unit Types Collection

Read, onboard, update, and owner-verify properties and sellable unit types.

MCP Tool / Endpoint Mode Parameters & Description
list_properties
GET /api/v1/properties
READ Returns all active properties in the organization (hope-homestay, rock-hyrax-hotel).
get_property
GET /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_types
GET /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_preview
onboard_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_preview
update_property_confirm
2-STEP WRITE Updates property check-in/out times, descriptions, contact details, or policies.
update_unit_type_preview
update_unit_type_confirm
2-STEP WRITE Updates a room category's base_price_cents, inventory_count, max_occupancy, or description.
API & MCP Reference

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_availability
GET /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_plan
GET /api/v1/rate-plans/:id
READ rate_plan_id. Returns cancellation policy tiers, meal plan, and occupancy/channel fee metadata.
set_rate_calendar_preview
set_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_preview
create_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.
API & MCP Reference

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_bookings
GET /api/v1/properties/:id/bookings
READ property_id, optional status, from_date, to_date. Lists reservations ordered by check-in date.
get_booking
GET /api/v1/bookings/:id
READ booking_id. Returns full booking record including price_breakdown and cancellation_policy_snapshot.
get_guest
GET /api/v1/guests/:id
READ guest_id. Returns guest contact details, ID info, and stay preferences.
create_booking_preview
create_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_preview
modify_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_preview
cancel_booking_confirm
2-STEP WRITE booking_id, reason. Evaluates cancellation_policy_snapshot tiers to compute penalty and refund amounts before cancelling.
API & MCP Reference

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_nearby
GET /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_reviews
GET /api/v1/properties/:id/reviews
READ property_id, optional reply_status (unreplied | replied).
reply_to_review_preview
reply_to_review_confirm
2-STEP WRITE review_id, reply_text. Drafts and publishes a verified reply to a guest review.
list_messages
GET /api/v1/properties/:id/messages
READ property_id, optional booking_id, channel (whatsapp | booking_com | airbnb | email).
send_message_preview
send_message_confirm
2-STEP WRITE property_id, booking_id?, channel, body. Drafts and sends an outbound guest message.
Channels & Playground

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:

Core Engine & Safety

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 an ActionPreview and provides a rejection_reason (e.g., "Peak December bookings between Dec 15 and Jan 5 require a 3-night minimum stay"), Traveate automatically saves a feedback_learned rule linked to source_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_knowledge to 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 Concierge
mode: "guest_concierge"
POST /api/v1/public/properties/:slug/chat
GET /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 Copilot
mode: "host_copilot"
POST /api/v1/host/copilot
Dashboard 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).
Channels & Playground

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