An open, token-efficient JSON format for travel plans, designed for AI agents to output and apps to consume.
A data model for travel plans, validated by a JSON Schema, with no library, no SDK, and no lock-in. Validate it with any JSON Schema validator in any language.
Files use the extension .oitinerary.json and the MIME type application/vnd.open-itinerary+json.
It's to travel plans what iCalendar is to events: boring, useful, and open.
goalA goal captures not just where you're going, but why you're going there, and a goal like “Scenic viewpoint — stretch and take photos” forces AI agents to be explicit about intent.
AI agents hallucinate lat/lng, so the name (and addr) is authoritative; coordinates are added by a geocoder post-generation.
Abbreviated keys like tz, dur, and cat save 25–35% output tokens versus verbose JSON.
Stops and routes are top-level, referenced by id from each day, so there is no duplication when a stop appears in multiple days.
Stop-level alts suggest replacements (“instead of this restaurant, try that one”), and day-level flex blocks let you choose among options (“choose N of these”).
dur: {min: 1.5, max: 2.5} acknowledges that travel is uncertain, and fixed times are reserved for when they truly matter (flights, reservations).
Validate any itinerary against the schema:
Then geocode it (adds real coordinates from OpenStreetMap):
Paste an Open Itinerary JSON below and validate it: