The AI Agent

Quote a complete trip from one brief — your team just reviews and books

Your agents stop juggling tools and start closing trips faster. One real tool-use agent reads a brief, chains the tools it needs, maintains state across the conversation, streams its work live — and is fenced in by hard safety and compliance guards, so what it hands back is ready to sell.

The agentic loop

A genuine tool-use loop, not a single prompt

Voyage runs on OpenAI function-calling. The agent parses the natural-language brief, asks any clarifying questions it needs, then enters an autonomous loop: it decides which tool to call next, calls it, reads the result, updates its plan, and repeats — chaining route → pass → hotels → flights → ground until the trip is complete.

Each call is a deliberate decision by the model, grounded in live data from your suppliers. The agent isn't faking it with a fixed script — it adapts the chain to the brief in front of it.

1 Parse the brief & clarify
2 Design & validate the route
3 Recommend a compliant rail pass
4 Search & pick hotels per stop
5 Search & pick flights per leg
6 Add cars, activities & transfers
Finalise the plan
~17 tools

The agent's toolbox

Every tool is a real, server-side capability that touches live supplier data or the plan state. The model orchestrates them; your servers do the work.

Plan & route

  • list_destinations
  • propose_route · + compliance + live timetable validation
  • update_plan_state
  • finalise_plan

Rail

  • recommend_pass
  • Eligibility checked server-side before it can be added

Hotels

  • search_hotels · per stop & per destination
  • pick_hotel

Flights

  • search_flights · per leg
  • pick_flight

Cars & transfers

  • search_cars · pick_car
  • search_transfers · pick_transfer

Activities

  • search_activities
  • pick_activity
Persistent state · live streaming

It remembers, and it shows its work

One plan_state for the whole conversation. The agent holds the route, every pick, the party size and dates in a single persistent object — so when you say "make the Rome hotel a 5-star instead," it knows exactly what you mean and re-prices only what changed.

Streamed over SSE. Every tool_start and tool_done event is pushed to the UI in real time, so your agent watches checkmarks land as the work happens — "✓ Designed route", "✓ Found 5 hotels in Paris", "✓ Recommended Interrail Global pass" — instead of staring at a spinner.

Your Personal Travel Consultant
Voyage Consultant
Working
JL
10 days, London → Paris → Lyon → Nice, 2 adults. Boutique hotels, rail between cities, 1st class, flight home from Nice.
  • Designed your route · 4 cities, 3 stops
  • Recommended Interrail Global · 1st class
  • Searching hotels in Lyon… picked Cour des Loges
  • Pricing your return flight · Nice → London…
SSE · /agent/stream streaming
tool_start propose_route
tool_done ✓ London → Paris → Lyon → Nice · 3 stops
tool_start recommend_pass
tool_done ✓ Interrail Global · 1st class · compliant
tool_start search_hotels · Lyon
tool_done ✓ Picked Cour des Loges, Vieux Lyon
tool_start search_flights · NCE→LHR
tool_done ✓ Found return flight · BA
done ✓ Plan finalised · 8 tools called
Safety guards

An autonomous agent on a tight leash

Agentic autonomy without guardrails is a liability. Voyage fences the agent in with hard, server-enforced limits — so it can't run away, overspend, or make claims it shouldn't.

Cost ceiling per session

A hard token/cost budget per conversation. Hit it and the agent winds down gracefully — no runaway spend.

Tool-call & turn limits

Maximum tool calls and turns per session stop loops dead and keep latency predictable.

Repeated-error wind-down

When a tool keeps failing, the agent stops retrying, summarises what it has, and hands back cleanly.

False-"unavailable" correction

If the agent claims something is unavailable, the server re-checks the catalog and corrects it — no false dead-ends.

False-"booked" stripping

The agent only ever quotes. Any premature "it's booked" language is stripped — nothing is booked before payment.

Incident telemetry

Every guard trip, correction and error is logged as telemetry so your ops team sees exactly what happened.

Compliance, enforced

The agent cannot sell a non-compliant pass

Rail pass eligibility is not left to the model's discretion. The server enforces the Conditions of Use: Interrail is for EU residents, Eurail for non-EU, BritRail for travel in Britain — and one-country passes are scoped to their country.

When the agent recommends a pass, the server validates residency and scope before it can be added to the plan. If it doesn't comply, it doesn't go in the basket — full stop.

EU resident → Interrail Global · allowed
EU resident → Eurail · blocked server-side
US resident → Eurail Global · allowed
Italy-only pass → travel into France · out of scope
UK travel → BritRail · allowed
The difference

Agent vs chatbot vs booking forms

Three very different things often called "AI." Only one actually books the whole trip.

Booking formsAI chatbotVoyage agent
Understands a plain-language brief
Chains multiple components autonomously
Holds state across the whole tripPartial
Books real inventory (PNR, rooms, passes)
One checkout for every component
Server-enforced compliance & safetyPartial

See the agent run, live

Book a demo and watch the Voyage agent design, price and assemble a multi-modal trip from a single brief.