May 15, 2026 · 8 min read · Use cases

Itinerary planners: from vibe-based prompts to sequenced routes.

The hardest part of building an AI itinerary planner isn't the UI. It's stopping the model from inventing stops, mis-sequencing them, and confidently dropping a Buddhist temple into Goa. Here's the shape of the fix.

What goes wrong without grounding

A user types: "plan me a 6-day Buddhist Circuit." The model has seen the words "Buddhist Circuit" and the names of a few sites, but it has not memorized the canonical sequence. So it produces something fluent and nearly right: Bodh Gaya, Sarnath, Lumbini, and then an extra stop in a state that has no historical link to the Buddha's life.

For one-shot trip inspiration this is fine. For a product where a user is going to book trains and hotels off your output, it isn't. The fix is to never let the model name a stop the API didn't first return.

The two-step pattern

Use two endpoints. List the available circuits, then fetch the sequenced stops for the one the user picks (or the model picks).

GET https://api.travelminds.ai/v1/circuits
Authorization: Bearer YOUR_KEY

{
  "circuits": [
    {"slug": "buddhist-circuit", "name": "Buddhist Circuit",
     "stop_count": 7, "states": ["BR","UP"]},
    {"slug": "golden-triangle", "name": "Golden Triangle",
     "stop_count": 3, "states": ["DL","UP","RJ"]},
    {"slug": "krishna-circuit", "name": "Krishna Circuit", ...}
  ]
}

Then pull the canonical sequence:

GET https://api.travelminds.ai/v1/circuits/buddhist-circuit

{
  "slug": "buddhist-circuit",
  "name": "Buddhist Circuit",
  "stops": [
    {"sequence_no": 1, "name": "Bodh Gaya",   "lat": 24.6961, "lon": 84.9912},
    {"sequence_no": 2, "name": "Rajgir",      "lat": 25.0258, "lon": 85.4203},
    {"sequence_no": 3, "name": "Nalanda",     "lat": 25.1357, "lon": 85.4435},
    {"sequence_no": 4, "name": "Vaishali",    "lat": 25.9871, "lon": 85.1308},
    {"sequence_no": 5, "name": "Kushinagar",  "lat": 26.7406, "lon": 83.8884},
    {"sequence_no": 6, "name": "Sarnath",     "lat": 25.3811, "lon": 83.0247},
    {"sequence_no": 7, "name": "Lumbini",     "lat": 27.4690, "lon": 83.2750}
  ]
}

Why a sequence is the right primitive

"List of stops" is a weaker contract than "ordered list of stops." A circuit is a route — historical, religious, geographic — and the order matters. The Krishna Circuit isn't a set; it's a pilgrimage progression. The Golden Triangle is an order. Returning a sequence means a planner UI can render arrows, day-by-day plans, and travel time estimates without re-deriving the order from scratch.

UI suggestions

Render the stops on a map with sequence_no labels next to each pin. Connect them with a polyline in order. Below the map, show a vertical day-by-day list. Pass each stop's lat/lon back to the model and let it write copy about each stop, but never let it invent the stops themselves.

For multi-circuit trips ("Buddhist Circuit + Krishna Circuit"), fetch both sequences server-side, deduplicate any shared stops, then let the model write the connective narrative. The model is good at narrative; it is bad at facts about which town is in which state. Use it for what it's good at.

Constrained-generation prompt

Pass the circuit JSON into the system prompt, then instruct the model: "You may only mention stops listed below. If the user asks about a stop not listed, respond that this circuit doesn't include it. Do not invent additional stops, durations, or geographic relationships."

This is plain RAG. The reason it isn't already standard practice in travel AI is that most teams don't have a clean source of canonical sequences to retrieve from.

Coverage

TravelMindsAI ships 15 documented Indian tourism circuits, each with sequenced stops and lat/lon. Free tier covers 1,000 calls a month — enough to prototype an itinerary planner end-to-end before you commit. Production usage on the $49 Starter tier.

Sign up — free See India coverage →