Example · all examples
Multi-city
This Roadbook represents a five-day, three-city trip by train — Madrid, Lisbon, Porto — with a night train that departs on one day and arrives the next (endDate) and crosses a timezone (timezone / endTimezone), Aztec tickets with berth numbers, a high-speed train with platform, one stay per city and a flight home.
⤓ Download multi-city.roadbook.json View raw JSON Validate Preview
What this example shows#
It is the reference for time handling: every time is the local wall-clock time where the item happens, and the logistics note spells the rule out for travelers. Each day carries its own timezone; the critical text on the night train warns about the arrival being in Lisbon time.
Features demonstrated#
- Day timezone
- DayItem endDate, timezone, endTimezone
- TransportDetails (platform, timezone per point)
- Ticket aztec, seat
- Booking type stay / transport
- Conventions: times and timezones
Manifest tags: train night train endDate timezone endTimezone aztec seat platform multiple stays — see examples/index.json.
Excerpt#
Abridged — the full file is the reference.
{
"days": [
{
"id": "d2",
"index": 2,
"date": "2026-09-22",
"title": "Madrid → Lisbon (night train)",
"timezone": "Europe/Madrid",
"items": [
{
"id": "i7",
"time": "21:43",
"endTime": "07:20",
"endDate": "2026-09-23",
"title": "Night train Madrid Chamartín → Lisboa Santa Apolónia",
"type": "train",
"status": "planned",
"stars": 1,
"timezone": "Europe/Madrid",
"endTimezone": "Europe/Lisbon",
"bookingId": "b-train-1",
"transport": {
"carrier": "Example Rail",
"number": "NT 335",
"ref": "TRN-EXAMPLE-1",
"from": {
"name": "Madrid Chamartín",
"platform": "14",
"timezone": "Europe/Madrid"
},
"to": {
"name": "Lisboa Santa Apolónia",
"timezone": "Europe/Lisbon"
}
},
"critical": "Arrival is 07:20 LISBON time (one hour behind Madrid)."
}
]
}
],
"bookings": [
{
"id": "b-train-1",
"type": "transport",
"status": "confirmed",
"title": "Night train Madrid → Lisbon — 2 berths",
"price": 180,
"payment": {
"status": "prepaid"
},
"transport": {
"carrier": "Example Rail",
"number": "NT 335",
"ref": "TRN-EXAMPLE-1"
},
"tickets": [
{
"id": "t1",
"label": "Berth",
"code": "TRN-EXAMPLE-1-A",
"memberId": "m1",
"seat": "Car 21, berth 13",
"payload": "TRNEXAMPLE1A",
"format": "aztec",
"date": "2026-09-22",
"time": "21:43"
},
{
"id": "t2",
"label": "Berth",
"code": "TRN-EXAMPLE-1-B",
"memberId": "m2",
"seat": "Car 21, berth 14",
"payload": "TRNEXAMPLE1B",
"format": "aztec",
"date": "2026-09-22",
"time": "21:43"
}
]
}
]
}
Use it#
- As a reader test: load the file in your player or importer; it must open without error and unknown fields (if you add some) must survive a round-trip.
- As a writer reference: copy the shapes you need — the specification documents every field and the JSON Schema validates the structure.
- With an AI assistant: hand it the file URL as a shape reference ("produce a Roadbook like multi-city.roadbook.json for …"); then validate the output.