Reservation
Reservation is an Intangible type (not an Event or Product) for any booking or reservation: hotel stays, restaurant tables, flights, rental cars, event tickets. It has 12 properties of its own covering booking details (reservationId, bookingTime, reservationStatus), pricing (totalPrice, priceCurrency), and the parties involved (underName for the guest, provider for the business, broker for the booking platform).
The type hierarchy is Thing → Intangible → Reservation. The key property is reservationFor, which points to the thing being reserved: a LodgingBusiness, a FoodEstablishment, a Event, a Flight. Google reads Reservation markup primarily in email (Gmail structured data) and Google Travel, not on web pages.
Full example of schema.org/Reservation 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": "Reservation",
"@id": "https://thunderdomedunmore.com/bookings/TOUR-2026-1142#reservation",
"reservationId": "TOUR-2026-1142",
"reservationStatus": "https://schema.org/ReservationConfirmed",
"bookingTime": "2026-10-01T14:22:00-04:00",
"modifiedTime": "2026-10-01T14:22:00-04:00",
"reservationFor": {
"@type": "TouristAttraction",
"@id": "https://thunderdomedunmore.com#attraction",
"name": "The Thunderdome",
"address": {
"@type": "PostalAddress",
"streetAddress": "500 Main Street",
"addressLocality": "Dunmore",
"addressRegion": "PA",
"addressCountry": "US"
}
},
"underName": {
"@type": "Person",
"name": "Erik Dahl",
"email": "erik@example.com"
},
"provider": {
"@id": "https://thunderdomedunmore.com#attraction",
"@type": "TouristAttraction",
"name": "The Thunderdome"
},
"totalPrice": "25.00",
"priceCurrency": "USD",
"reservedTicket": {
"@type": "Ticket",
"ticketNumber": "TOUR-2026-1142-A",
"dateIssued": "2026-10-01",
"ticketedSeat": {
"@type": "Seat",
"seatSection": "Group A"
}
}
}
</script>reservationStatus
reservationStatus takes a ReservationStatusType enum: ReservationConfirmed, ReservationPending, ReservationHold, or ReservationCancelled. Use the full schema.org URL. Gmail uses this to show booking cards in the inbox: confirmed bookings get a green checkmark, pending ones get an orange clock.
reservationFor
reservationFor links the reservation to the thing being reserved. Its expected type is Thing, so it can be anything: a LodgingBusiness for hotel bookings, a FoodEstablishment for restaurant reservations, an Event for ticket bookings, a Flight for air travel. The subtype-specific Reservation types (LodgingReservation, FlightReservation, etc.) constrain what reservationFor should point to.
underName and provider
underName is the person or organization the reservation is for (the guest). provider is the business providing the service (the hotel, the airline). broker is the intermediary that facilitated the booking (Booking.com, Expedia, a travel agent). Not every reservation has a broker, but if you are the booking platform, set yourself as the broker and the service provider as the provider.
reservedTicket
reservedTicket takes a Ticket object for reservations that produce a ticket: event tickets, boarding passes, train tickets. The Ticket has its own properties: ticketNumber, ticketedSeat, dateIssued. For restaurant or hotel reservations, there is no ticket, so omit this property.
When to use Reservation subtypes
Use the most specific subtype available: LodgingReservation for hotels, FoodEstablishmentReservation for restaurants, FlightReservation for flights. Each subtype adds properties specific to that domain (checkinTime, partySize, boardingGroup). Only use the generic Reservation type when no subtype fits.
Minimal valid version
The smallest markup that still produces a valid Reservation 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": "Reservation",
"reservationId": "TOUR-2026-1142",
"reservationStatus": "https://schema.org/ReservationConfirmed",
"reservationFor": { "@type": "TouristAttraction", "name": "The Thunderdome" },
"underName": { "@type": "Person", "name": "Erik Dahl" }
}
</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 reservation cardprimary
Common Reservation 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
reservationStatus as a plain string
Wrong"reservationStatus": "Confirmed"Right"reservationStatus": "https://schema.org/ReservationConfirmed"reservationStatus takes a ReservationStatusType enum value as a full schema.org URL. The four values are ReservationConfirmed, ReservationPending, ReservationHold, and ReservationCancelled.
- 02
Missing reservationFor
WrongReservation with reservationId and status but no reservationForRight"reservationFor": { "@type": "LodgingBusiness", "name": "Hotel Dunmore" }reservationFor connects the reservation to the thing being reserved. Without it, the reservation is a booking for nothing. Gmail and Google Travel need this to display the booking card correctly.
- 03
Using generic Reservation when a subtype exists
Wrong"@type": "Reservation" for a hotel bookingRight"@type": "LodgingReservation"Subtypes like LodgingReservation, FlightReservation, and FoodEstablishmentReservation add domain-specific properties (checkinTime, boardingGroup, partySize). Using generic Reservation loses these properties and gives Google less structured data to work with.
- 04
Confusing underName with provider
Wrong"underName": { "@type": "Organization", "name": "Hotel Dunmore" }Right"underName" is the guest; "provider" is the businessunderName is who the reservation is for (the person traveling or dining). provider is the business providing the service. Getting these backwards means the hotel appears as the guest and the guest appears as the provider.
Schema properties in this example
About the example data
A generic reservation for a private tour of The Thunderdome in Dunmore, booked through Xoo Code Inc. as the provider.
Comments
Loading comments...