{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "schema:Reservation",
  "title": "Reservation",
  "description": "Describes a reservation for travel, dining or an event. Some reservations require tickets. \\n\\nNote: This type is for information about actual reservations, e.g. in confirmation emails or HTML pages with individual confirmations of reservations. For offers of tickets, restaurant reservations, flights, or rental cars, use [[Offer]].",
  "type": "object",
  "allOf": [
    {
      "description": "A utility class that serves as the umbrella for a number of 'intangible' things such as quantities, structured values, etc.",
      "$ref": "schema:Intangible"
    }
  ],
  "properties": {
    "bookingAgent": {
      "description": "'bookingAgent' is an out-dated term indicating a 'broker' that serves as a booking agent.",
      "oneOf": [
        {
          "anyOf": [
            { "$ref": "schema:Organization" },
            { "$ref": "schema:Person" }
          ]
        },
        {
          "type": "array",
          "items": {
            "anyOf": [
              { "$ref": "schema:Organization" },
              { "$ref": "schema:Person" }
            ]
          }
        }
      ]
    },
    "bookingTime": {
      "description": "The date and time the reservation was booked.",
      "type": "string",
      "format": "date-time"
    },
    "broker": {
      "description": "An entity that arranges for an exchange between a buyer and a seller.  In most cases a broker never acquires or releases ownership of a product or service involved in an exchange.  If it is not clear whether an entity is a broker, seller, or buyer, the latter two terms are preferred.",
      "oneOf": [
        {
          "anyOf": [
            { "$ref": "schema:Organization" },
            { "$ref": "schema:Person" }
          ]
        },
        {
          "type": "array",
          "items": {
            "anyOf": [
              { "$ref": "schema:Organization" },
              { "$ref": "schema:Person" }
            ]
          }
        }
      ]
    },
    "modifiedTime": {
      "description": "The date and time the reservation was modified.",
      "type": "string",
      "format": "date-time"
    },
    "priceCurrency": {
      "description": "The currency of the price, or a price component when attached to [[PriceSpecification]] and its subtypes.\\n\\nUse standard formats: [ISO 4217 currency format](http://en.wikipedia.org/wiki/ISO_4217), e.g. \"USD\"; [Ticker symbol](https://en.wikipedia.org/wiki/List_of_cryptocurrencies) for cryptocurrencies, e.g. \"BTC\"; well known names for [Local Exchange Trading Systems](https://en.wikipedia.org/wiki/Local_exchange_trading_system) (LETS) and other currency types, e.g. \"Ithaca HOUR\".",
      "type": "string"
    },
    "programMembershipUsed": {
      "description": "Any membership in a frequent flyer, hotel loyalty program, etc. being applied to the reservation.",
      "oneOf": [
        { "$ref": "schema:ProgramMembership" },
        { "type": "array", "items": { "$ref": "schema:ProgramMembership" } }
      ]
    },
    "provider": {
      "description": "The service provider, service operator, or service performer; the goods producer. Another party (a seller) may offer those services or goods on behalf of the provider. A provider may also serve as the seller.",
      "anyOf": [{ "$ref": "schema:Organization" }, { "$ref": "schema:Person" }]
    },
    "reservationFor": {
      "description": "The thing -- flight, event, restaurant, etc. being reserved.",
      "$ref": "schema:Thing"
    },
    "reservationId": {
      "description": "A unique identifier for the reservation.",
      "oneOf": [
        { "type": "string" },
        { "type": "array", "items": { "type": "string" } }
      ]
    },
    "reservationStatus": {
      "description": "The current status of the reservation.",
      "$ref": "schema:ReservationStatusType"
    },
    "reservedTicket": {
      "description": "A ticket associated with the reservation.",
      "oneOf": [
        { "$ref": "schema:Ticket" },
        { "type": "array", "items": { "$ref": "schema:Ticket" } }
      ]
    },
    "totalPrice": {
      "description": "The total price for the reservation or ticket, including applicable taxes, shipping, etc.\\n\\nUsage guidelines:\\n\\n* Use values from 0123456789 (Unicode 'DIGIT ZERO' (U+0030) to 'DIGIT NINE' (U+0039)) rather than superficially similar Unicode symbols.\\n* Use '.' (Unicode 'FULL STOP' (U+002E)) rather than ',' to indicate a decimal point. Avoid using these symbols as a readability separator.",
      "anyOf": [
        { "type": "number" },
        { "type": "string" },
        { "$ref": "schema:PriceSpecification" }
      ]
    },
    "underName": {
      "description": "The person or organization the reservation or ticket is for.",
      "anyOf": [{ "$ref": "schema:Organization" }, { "$ref": "schema:Person" }]
    }
  }
}
