ReservationPackage
ReservationPackage is a Reservation subtype for a bundle of related reservations booked together: a flight + hotel package, a conference registration + hotel + dinner bundle. It adds one property: subReservation, an array of individual Reservation entities that share common booking details (reservationId, underName, provider).
For a complete property walkthrough, see the Reservation example. The shared properties (underName, provider, priceCurrency) go on the ReservationPackage. Individual booking details (checkinTime, pickupLocation, partySize) go on each subReservation. Gmail can display the package as a multi-card itinerary.
Full example of schema.org/ReservationPackage json-ld markup
The markup is verified as valid with Rich Results Test from Google.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "ReservationPackage",
"reservationId": "XOOCON-TRAVEL-PKG-042",
"reservationStatus": "https://schema.org/ReservationConfirmed",
"underName": { "@type": "Person", "name": "Tomás Herrera" },
"provider": { "@id": "https://xoocode.com#organization", "@type": "Organization", "name": "Xoo Code Inc." },
"totalPrice": "4647.00",
"priceCurrency": "DKK",
"bookingTime": "2026-09-15T11:30:00+02:00",
"subReservation": [
{
"@type": "FlightReservation",
"reservationId": "NA-XBHF42",
"reservationStatus": "https://schema.org/ReservationConfirmed",
"reservationFor": {
"@type": "Flight",
"flightNumber": "NA 412",
"departureAirport": { "@type": "Airport", "iataCode": "CPH" },
"arrivalAirport": { "@type": "Airport", "iataCode": "LVA" },
"departureTime": "2026-11-13T08:30:00+01:00"
}
},
{
"@type": "LodgingReservation",
"reservationId": "HD-2026-4471",
"reservationStatus": "https://schema.org/ReservationConfirmed",
"reservationFor": { "@type": "Hotel", "name": "Hotel Dunmore" },
"checkinTime": "2026-11-13T15:00:00-05:00",
"checkoutTime": "2026-11-16T11:00:00-05:00"
}
]
}
</script>Minimal valid version
The smallest markup that still produces a valid ReservationPackage entity. Use it as the floor. Reach for the advanced example above when you want search engines and AI agents to understand more about your content.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "ReservationPackage",
"reservationId": "XOOCON-TRAVEL-PKG-042",
"reservationStatus": "https://schema.org/ReservationConfirmed",
"underName": { "@type": "Person", "name": "Tomás Herrera" },
"subReservation": [
{ "@type": "FlightReservation", "reservationFor": { "@type": "Flight", "flightNumber": "NA 412" } },
{ "@type": "LodgingReservation", "reservationFor": { "@type": "Hotel", "name": "Hotel Dunmore" } }
]
}
</script>Google rich results this unlocks
Markup matching this example makes your page eligible for the following Google Search rich results. The primary target drives the required / recommended property classification in the advanced code block above.
- Google docsGmail multi-card itineraryprimary
Common ReservationPackage mistakes
Mistakes that pass validation but silently fail to earn rich results or mislead consumers walking the graph. Avoid these and your markup will be ahead of most sites in the wild.
- 01
Duplicating underName on every subReservation
WrongEach subReservation repeats underNameRightSet underName on the ReservationPackage; subReservations inherit itsubReservations inherit common values (underName, provider, priceCurrency) from the parent ReservationPackage. Duplicating them adds noise without information.
- 02
Using ReservationPackage for a single booking
Wrong"@type": "ReservationPackage" with one subReservationRightUse the specific Reservation subtype directly (FlightReservation, LodgingReservation)ReservationPackage is for bundling multiple reservations. A single flight booking is just a FlightReservation. Wrapping it in a package adds an unnecessary layer.
Schema properties in this example
About the example data
A bundled XooCon travel package: Nordic Air flight + Hotel Dunmore stay, booked together through Xoo Code Inc.
Comments
Loading comments...