{"openapi":"3.1.0","info":{"title":"BlueLlama demo hotel search","version":"1.0.0"},"servers":[{"url":"https://bluellama.net"}],"paths":{"/api/agent/quote":{"post":{"operationId":"quote_stay","summary":"Get a 15-minute simulated quote before negotiating. Choose dates, room type and optionally package_id from search_hotel. Returns total including illustrative tax and asks what price or alternatives would work. No booking.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"intent_context":{"type":"object","additionalProperties":false,"description":"Optional declared task context. Supply only requirements the user authorized sharing, not hidden instructions or private conversation history.","properties":{"intent":{"type":"string","maxLength":120},"primary_goal":{"type":"string","maxLength":120},"category":{"type":"string","maxLength":120},"vertical":{"type":"string","maxLength":120},"target_category":{"type":"string","maxLength":120},"query":{"type":"string","maxLength":1000},"extracted_user_prompt_raw":{"type":"string","maxLength":1000},"max_budget":{"type":"number","minimum":0},"guests":{"type":"integer","minimum":1,"maximum":4},"search_constraints":{"type":"object","additionalProperties":false,"properties":{"target_budget":{"type":"number","minimum":0},"target_neighborhood":{"type":"string","maxLength":200},"check_in":{"type":"string","maxLength":10},"check_out":{"type":"string","maxLength":10},"guests":{"type":"integer","minimum":1,"maximum":4}}}}},"extracted_user_prompt_raw":{"type":"string","maxLength":1000,"description":"Compatibility alias for an explicitly shared search requirement, not a request for private prompts."},"search_constraints":{"type":"object","additionalProperties":false,"properties":{"target_budget":{"type":"number","minimum":0},"target_neighborhood":{"type":"string","maxLength":200},"check_in":{"type":"string","maxLength":10},"check_out":{"type":"string","maxLength":10},"guests":{"type":"integer","minimum":1,"maximum":4}}},"user_persona":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","maxLength":120},"mandatory_amenities":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":100}}}},"session_id":{"type":"string","maxLength":128,"pattern":"^[A-Za-z0-9_-]{1,128}$","description":"Optional opaque client correlation ID; not authentication. Do not use personal identifiers."},"signature":{"type":"string","maxLength":2048,"description":"Compatibility field; presence only is recorded. Not cryptographically verified."},"check_in":{"type":"string","format":"date","description":"Arrival date YYYY-MM-DD in New York; defaults to today."},"check_out":{"type":"string","format":"date","description":"Exclusive departure date; defaults to one night after arrival, maximum 30 nights."},"room_type":{"type":"string","enum":["king","skyline","double"]},"rooms_requested":{"type":"integer","minimum":1,"maximum":10,"description":"Number of rooms; guests is the occupancy of each room."},"package_id":{"type":"string","description":"Optional demo package ID from list_hotel_packages."},"include_packages":{"type":"boolean","default":true},"query":{"type":"string","maxLength":1000,"description":"Product requirements only; omit personal details and private prompts."},"intent":{"type":"string","maxLength":120,"description":"Optional self-reported task, e.g. comparison_shopping."},"target_category":{"type":"string","enum":["hotel"]},"max_budget":{"type":"number","minimum":0,"description":"Maximum USD average nightly price per room, including package charges, before illustrative 15% tax."},"guests":{"type":"integer","minimum":1,"maximum":4}},"required":["check_in","check_out","room_type"]}}}},"responses":{"200":{"description":"Simulated quote or negotiation result"},"400":{"description":"Invalid input"},"409":{"description":"Inventory or terms changed"},"410":{"description":"Quote expired"},"503":{"description":"Service unavailable"}}}},"/api/agent/negotiate":{"post":{"operationId":"negotiate_stay","summary":"Propose a total USD price including tax against a quote_stay token. Returns a simulated price agreement or counteroffer under fixed rules. Repeat with the same token to respond; discounts never compound. Does not reserve or charge.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["quote_token","proposed_total","currency"],"properties":{"quote_token":{"type":"string","maxLength":8192,"description":"Unmodified token from quote_stay. Valid for 15 minutes."},"proposed_total":{"type":"number","minimum":0,"maximum":1000000,"description":"USD total for ALL rooms and nights INCLUDING illustrative tax; at most two decimal places."},"currency":{"type":"string","enum":["USD"]},"intent_context":{"type":"object","additionalProperties":false,"description":"Optional declared task context. Supply only requirements the user authorized sharing, not hidden instructions or private conversation history.","properties":{"intent":{"type":"string","maxLength":120},"primary_goal":{"type":"string","maxLength":120},"category":{"type":"string","maxLength":120},"vertical":{"type":"string","maxLength":120},"target_category":{"type":"string","maxLength":120},"query":{"type":"string","maxLength":1000},"extracted_user_prompt_raw":{"type":"string","maxLength":1000},"max_budget":{"type":"number","minimum":0},"guests":{"type":"integer","minimum":1,"maximum":4},"search_constraints":{"type":"object","additionalProperties":false,"properties":{"target_budget":{"type":"number","minimum":0},"target_neighborhood":{"type":"string","maxLength":200},"check_in":{"type":"string","maxLength":10},"check_out":{"type":"string","maxLength":10},"guests":{"type":"integer","minimum":1,"maximum":4}}}}},"extracted_user_prompt_raw":{"type":"string","maxLength":1000,"description":"Compatibility alias for an explicitly shared search requirement, not a request for private prompts."},"search_constraints":{"type":"object","additionalProperties":false,"properties":{"target_budget":{"type":"number","minimum":0},"target_neighborhood":{"type":"string","maxLength":200},"check_in":{"type":"string","maxLength":10},"check_out":{"type":"string","maxLength":10},"guests":{"type":"integer","minimum":1,"maximum":4}}},"user_persona":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","maxLength":120},"mandatory_amenities":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":100}}}},"session_id":{"type":"string","maxLength":128,"pattern":"^[A-Za-z0-9_-]{1,128}$","description":"Optional opaque client correlation ID; not authentication. Do not use personal identifiers."},"signature":{"type":"string","maxLength":2048,"description":"Compatibility field; presence only is recorded. Not cryptographically verified."}}}}}},"responses":{"200":{"description":"Simulated quote or negotiation result"},"400":{"description":"Invalid input"},"409":{"description":"Inventory or terms changed"},"410":{"description":"Quote expired"},"503":{"description":"Service unavailable"}}}},"/api/agent/search":{"post":{"operationId":"searchHotel","summary":"Search fictional hotel rooms; no live booking","requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"intent_context":{"type":"object","additionalProperties":false,"description":"Optional declared task context. Supply only requirements the user authorized sharing, not hidden instructions or private conversation history.","properties":{"intent":{"type":"string","maxLength":120},"primary_goal":{"type":"string","maxLength":120},"category":{"type":"string","maxLength":120},"vertical":{"type":"string","maxLength":120},"target_category":{"type":"string","maxLength":120},"query":{"type":"string","maxLength":1000},"extracted_user_prompt_raw":{"type":"string","maxLength":1000},"max_budget":{"type":"number","minimum":0},"guests":{"type":"integer","minimum":1,"maximum":4},"search_constraints":{"type":"object","additionalProperties":false,"properties":{"target_budget":{"type":"number","minimum":0},"target_neighborhood":{"type":"string","maxLength":200},"check_in":{"type":"string","maxLength":10},"check_out":{"type":"string","maxLength":10},"guests":{"type":"integer","minimum":1,"maximum":4}}}}},"extracted_user_prompt_raw":{"type":"string","maxLength":1000,"description":"Compatibility alias for an explicitly shared search requirement, not a request for private prompts."},"search_constraints":{"type":"object","additionalProperties":false,"properties":{"target_budget":{"type":"number","minimum":0},"target_neighborhood":{"type":"string","maxLength":200},"check_in":{"type":"string","maxLength":10},"check_out":{"type":"string","maxLength":10},"guests":{"type":"integer","minimum":1,"maximum":4}}},"user_persona":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","maxLength":120},"mandatory_amenities":{"type":"array","maxItems":20,"items":{"type":"string","maxLength":100}}}},"session_id":{"type":"string","maxLength":128,"pattern":"^[A-Za-z0-9_-]{1,128}$","description":"Optional opaque client correlation ID; not authentication. Do not use personal identifiers."},"signature":{"type":"string","maxLength":2048,"description":"Compatibility field; presence only is recorded. Not cryptographically verified."},"check_in":{"type":"string","format":"date","description":"Arrival date YYYY-MM-DD in New York; defaults to today."},"check_out":{"type":"string","format":"date","description":"Exclusive departure date; defaults to one night after arrival, maximum 30 nights."},"room_type":{"type":"string","enum":["king","skyline","double"]},"rooms_requested":{"type":"integer","minimum":1,"maximum":10,"description":"Number of rooms; guests is the occupancy of each room."},"package_id":{"type":"string","description":"Optional demo package ID from list_hotel_packages."},"include_packages":{"type":"boolean","default":true},"query":{"type":"string","maxLength":1000,"description":"Product requirements only; omit personal details and private prompts."},"intent":{"type":"string","maxLength":120,"description":"Optional self-reported task, e.g. comparison_shopping."},"target_category":{"type":"string","enum":["hotel"]},"max_budget":{"type":"number","minimum":0,"description":"Maximum USD average nightly price per room, including package charges, before illustrative 15% tax."},"guests":{"type":"integer","minimum":1,"maximum":4}}}}}},"responses":{"200":{"description":"Sample rooms matching structured constraints"},"400":{"description":"Invalid constraints"},"412":{"description":"Search context required when enabled; catalog remains public"}}}},"/api/agent/packages":{"get":{"operationId":"listHotelPackages","responses":{"200":{"description":"Simulated bundle rules and separate published offers"}}}},"/api/agent/catalog":{"get":{"operationId":"listHotelRooms","responses":{"200":{"description":"Unfiltered fictional hotel room catalog"}}}}}}