DEVELOPER PLATFORM
BuildonOurInfrastructure.
Images, reviews, rooms, amenities, proximity to landmarks - every detail about every hotel, accessible to your AI agent through a single service. Go live in minutes.
"Hotels close to Santa Maria delle Grazie in Milan with big windows and under €300"
{ "name": "search_hotels", "input": { "location": "Santa Maria delle Grazie, Milan", "amenities": "large windows,natural light", "budget_max": 300, "currency": "EUR" } }
QUICK START
Get Started in Minutes.
Three steps to give your AI agent hotel intelligence.
01
Get Your API Key
Request a developer account and receive your API key. Keys use the format vl_test_* (test) or vl_live_* (production).
02
Connect via MCP or REST
Add the VistaLink MCP server to your agent's config, or call the REST API directly at /v1/*.
03
Your Agent is Ready
Your AI agent can now search hotels, access photos, reviews, room types, amenities, and pricing - all autonomously.
{ "mcpServers": { "vistalink": { "url": "https://api.vistalink.com/mcp", "headers": { "Authorization": "Bearer vl_test_..." } } } }
AUTHENTICATION
Authentication and Rate Limits
Authenticate using a Bearer token in the Authorization header. API keys use the format vl_test_* (test) or vl_live_* (production).
vl_test_*Test environment for prototyping. 50 requests per month.
vl_live_*Production environment. Rate limits and usage tracking are active.
// REST API - Bearer token in Authorization header curl -X POST https://api.vistalink.com/v1/search \ -H "Authorization: Bearer vl_test_..." \ -H "Content-Type: application/json" \ -d '{ "city": "Paris" }'
Response Headers
Every API response includes rate limit and quota headers so your integration can adapt proactively.
| Header |
|---|
| X-RateLimit-Limit |
| X-RateLimit-Remaining |
| X-RateLimit-Reset |
| X-Monthly-Quota-Limit |
| X-Monthly-Quota-Remaining |
| X-Monthly-Quota-Reset |
Latency & Timeouts
Set your client timeout based on the endpoint. Chat runs a multi-agent pipeline with LLM calls; search and hotel detail are direct database lookups.
| Endpoint | Typical Latency |
|---|---|
| POST /v1/chat | 10 - 30 s |
| POST /v1/search | < 2 s |
| GET /v1/hotels/{id} | < 1 s |
| POST /v1/call | immediate (202) |
Voice calls are asynchronous - /v1/call returns 202 immediately. Poll /v1/call/{id}/status for results.
Plans & Rate Limits
Start free, scale as you grow. Rate limits and pricing depend on your plan.
FREE
TEST$0
Monthly
50 req
Per minute
5 req
- ✓search_hotels
- ✓chat_about_hotels
- ✓get_hotel_details
- ✓MCP + REST access
PRO
PRODUCTIONPay-as-you-go
Per minute
120 req
Monthly
1,000 req
| search_hotels | $0.01 |
| get_hotel_details | $0.005 |
| chat_about_hotels | $0.03 |
| call_hotel | $0.50+ |
call_hotel: $0.50 flat up to 10 min + $0.05/min
- ✓All Free tools + call_hotel
- ✓Usage analytics
- ✓Priority support
ENTERPRISE
PRODUCTIONCustom
Per minute
500 req
Monthly
Unlimited
- ✓All Pro features
- ✓Volume discounts
- ✓Custom call pricing
- ✓Dedicated support + SLA
CAPABILITIES
Four Tools, Two Interfaces.
Search, chat, inspect, and call - all available via MCP or REST. Plus 2 MCP resources and 2 guided prompts.
search_hotels
Structured search by location, dates, budget, amenities, and vibe. No LLM required - results in milliseconds.
View Reference→chat_about_hotels
Natural language hotel discovery. Matches on vibe, guest sentiment, and aesthetics with follow-up sessions.
View Reference→get_hotel_details
Complete hotel data - photos, reviews, rooms, amenities, pricing, and proximity to points of interest.
View Reference→call_hotel
AI agent calls hotels to negotiate rates, confirm bookings, or handle cancellations. Returns transcript and audio.
View Reference→MCP PROTOCOL
How It Works.
The Model Context Protocol lets AI agents interact with VistaLink directly. Connect any MCP-compatible client - Claude, Cursor, custom agents - and tap into a proprietary engine that matches hotels by vibe, guest sentiment, and visual aesthetics.
Why MCP?
The Model Context Protocol is an open standard for agent-to-agent communication. Instead of building custom integrations for every AI platform, MCP provides a single interface that works everywhere. Your AI agent connects to the VistaLink MCP server and gets full access to hotel photos, guest reviews, room types, amenities, pricing, and location data - with tool discovery, structured inputs, and typed responses built in.
Discover
Your agent connects to the VistaLink MCP server and discovers available tools - search, chat, hotel details, and voice calls.
Invoke
When your agent needs hotel data, it calls the appropriate tool with structured input. The MCP protocol handles transport and serialization.
Receive
The MCP server processes the request and returns structured results directly to your agent. Type-safe, predictable, and ready to use.
Connection Config
Add the VistaLink MCP server to your client configuration. We use HTTP Streamable transport - no npm package required:
{ "mcpServers": { "vistalink": { "url": "https://api.vistalink.com/mcp", "headers": { "Authorization": "Bearer vl_test_..." } } } }
MCP Resources
Resources expose read-only data your agent can reference without making tool calls. They're ideal for context injection and grounding.
hotel://{hotel_id}Full hotel profile as a URI template. Returns name, description, star rating, amenities, images, rooms, pricing, reviews, and location data. All prices in EUR.
amenities://catalogComplete list of supported amenity codes with human-readable labels. Use this to validate amenity filters before searching.
MCP Prompts
Guided prompts that structure complex workflows. Your agent can invoke these to get step-by-step instructions for common tasks.
search_wizardGenerates a structured search plan from natural-language criteria. Accepts destination, dates, budget, guests, star rating, amenities, vibe, point of interest, and free-form preferences.
comparison_templateGiven a list of hotel IDs, produces step-by-step instructions for your agent to fetch details and build a side-by-side comparison table.
Agent Integration Guide
Copy these instructions and paste them into your AI coding assistant (Claude, ChatGPT, Cursor, etc.) to integrate VistaLink in minutes.
# VistaLink API - Integration Guide
VistaLink gives AI agents access to 350,000+ hotels with reviews, photos, pricing, amenities, and voice booking. Two ways to integrate: MCP (recommended for AI agents) or REST.
## Authentication
All requests require a Bearer token in the Authorization header:
```
Authorization: Bearer vl_live_YOUR_API_KEY
```
Key format: `vl_live_*` (production) or `vl_test_*` (test).
## MCP Configuration
Add to your MCP client config (Claude, Cursor, etc.):
```json
{
...TOOL REFERENCE
Tool Reference.
Four tools that give your agent access to hotel data and voice calling - available via MCP or REST.
search_hotelsSearch hotels by location, dates, budget, amenities, and vibe. Returns ranked results with images, guest reviews, room types, pricing, and proximity to landmarks.
Input Schema
| Parameter | Type | Required |
|---|---|---|
| city | string | optional |
| country | string | optional |
| latitude | float | optional |
| longitude | float | optional |
| radius_meters | integer | optional |
| check_in | string | optional |
| check_out | string | optional |
| guests | integer | optional |
| rooms | integer | optional |
| budget_min | float | optional |
| budget_max | float | optional |
| currency | string | optional |
| amenities | string[] | optional |
| vibe | string[] | optional |
| hotel_name | string | optional |
| limit | integer | optional |
| include_rates | boolean | optional |
Note: When using the MCP tool, pass amenities and vibe as comma-separated strings (e.g. "wifi,pool"). The REST API accepts JSON arrays.
Example
{ "name": "search_hotels", "input": { "city": "Tokyo", "country": "JP", "check_in": "2026-04-15", "check_out": "2026-04-18", "guests": 2, "vibe": ["modern", "design-forward"] } }
Response Fields (each hotel in the hotels array)
| Field | Type | Nullable |
|---|---|---|
| hotel_id | string | no |
| name | string | no |
| city | string | yes |
| country | string | yes |
| address | string | yes |
| star_rating | float | yes |
| review_score | float | yes |
| review_count | integer | yes |
| latitude | float | yes |
| longitude | float | yes |
| amenities | string[] | no |
| price | object | yes |
| images | object[] | no |
| review_highlight | string | yes |
| guest_insights | object | yes |
| description | string | yes |
| hotel_type | string | yes |
| website_url | string | yes |
| rates | object[] | yes |
Price Object
Prices reflect the most recently scraped rates from booking sources. When the hotel's native currency differs from your requested currency parameter, the converted amount is included automatically.
| Field | Type | Nullable |
|---|---|---|
| nightly_rate | float | no |
| currency | string | no |
| as_of_checkin | string | yes |
| as_of_checkout | string | yes |
| user_currency | string | yes |
| user_currency_rate | float | yes |
chat_about_hotelsDescribe what you want in natural language. The Engine matches on vibe, guest sentiment, and visual aesthetics - returning hotels that genuinely fit. Supports multi-turn sessions for follow-ups and comparisons.
Input Schema
| Parameter | Type | Required |
|---|---|---|
| message | string | required |
| session_id | string | optional |
| currency | string | optional |
| context | object | optional |
Example
{ "name": "chat_about_hotels", "input": { "message": "Find me a romantic boutique hotel in Paris with a rooftop bar", "currency": "EUR" } }
The response includes a session_id for multi-turn conversations, a natural language message, and a hotels array using the same schema as search_hotels - see the Response Fields table above. The usage object reports latency and cost per call.
get_hotel_detailsFull hotel profile - description, full photo gallery (up to 50 images), guest reviews, room types with sizes and amenities, live pricing, and aggregated guest sentiment analysis.
Input Schema
| Parameter | Type | Required |
|---|---|---|
| hotel_id | string | required |
| currency | string | optional |
Example
{ "name": "get_hotel_details", "input": { "hotel_id": "a1b2c3d4-5e6f-7a8b-9c0d-e1f2a3b4c5d6", "currency": "EUR" } }
Response Fields
| Field | Type | Nullable |
|---|---|---|
| hotel_id | string | no |
| name | string | no |
| description | string | yes |
| city | string | yes |
| country | string | yes |
| address | string | yes |
| star_rating | float | yes |
| review_score | float | yes |
| review_count | integer | yes |
| latitude | float | yes |
| longitude | float | yes |
| amenities | string[] | no |
| images | object[] | no |
| rooms | object[] | no |
| price | object | yes |
| reviews | object[] | no |
| guest_insights | object | yes |
| website_url | string | yes |
| phone_number | string | yes |
| hotel_type | string | yes |
The price object uses the same format as search results - see the Price Object table under search_hotels.
call_hotelVoice AI agent that calls hotels to negotiate rates, confirm or cancel bookings. Returns a call ID - use the REST endpoints GET /v1/call/{id}/status and GET /v1/call/{id}/results to retrieve transcript, audio recording, and structured outcomes.
Input Schema
| Parameter | Type | Required |
|---|---|---|
| hotel_id | string | required |
| phone_number | string | required |
| hotel_name | string | required |
| scenario | string | optional |
| guest_first_name | string | optional |
| guest_last_name | string | optional |
| guest_email | string | optional |
| check_in_date | string | optional |
| check_out_date | string | optional |
| number_of_rooms | integer | optional |
| number_of_people | integer | optional |
| booking_price | float | optional |
| room_type | string | optional |
| currency | string | optional |
| language | string | optional |
| confirmation_number | string | optional |
| special_requests | string | optional |
| caller_instructions | string | optional |
Scenarios
Set scenario to control the call type:
hotel_negotiationNegotiate rates below OTA priceshotel_confirm_bookingConfirm an existing bookinghotel_cancel_bookingCancel a bookingrestaurant_bookingBook a restaurant reservationrestaurant_cancel_bookingCancel a restaurant reservationExample
{ "name": "call_hotel", "input": { "hotel_id": "d9e8f7a6-5b4c-3d2e-1f0a-b9c8d7e6f5a4", "phone_number": "+39055123456", "hotel_name": "Hotel & Palazzo", "scenario": "hotel_negotiation", "check_in_date": "2026-04-15", "booking_price": 280, "currency": "EUR" } }
REST ENDPOINTS
REST Endpoints.
Prefer REST over MCP? All capabilities are also available as standard HTTP endpoints. Authenticate with a Bearer token in the Authorization header.
| Method | Endpoint |
|---|---|
| POST | /v1/chat |
| POST | /v1/search |
| GET | /v1/hotels/{id} |
| POST | /v1/call |
| GET | /v1/call/{id}/status |
| GET | /v1/call/{id}/results |
| POST | /v1/guests |
| GET | /v1/guests/{id} |
| PATCH | /v1/guests/{id} |
| DELETE | /v1/guests/{id} |
| POST | /v1/keys |
| GET | /v1/keys |
| DELETE | /v1/keys/{prefix} |
| GET | /v1/usage |
| GET | /v1/billing/invoices |
| GET | /v1/sessions/{session_id} |
Chat Endpoint
Send a natural language message and receive hotel recommendations with AI-generated responses. Sessions persist across requests.
// POST /v1/chat { "message": "Find a romantic hotel in Rome near the Colosseum", "session_id": null, "guest_id": null, "currency": "EUR", "locale": "en" }
Search Endpoint
Structured hotel search with filters. Fast path - no LLM involved, results in milliseconds.
// POST /v1/search { "city": "Milan", "country": "IT", "check_in": "2026-06-01", "check_out": "2026-06-05", "budget_max": 200, "currency": "EUR", "amenities": ["wifi", "pool"], "include_rates": true, "limit": 10 }
Booking Tools
Coming SoonAvailability checking, reservation creation, and cancellation management are coming in Phase 2. These will be available as both MCP tools and REST endpoints.
check_availabilitycreate_reservationget_reservationcancel_reservationGET STARTED
Ready to Build?
Search hotels, chat in natural language, pull full profiles, and negotiate rates by phone - all from a single integration. MCP or REST, go live in minutes.