openapi: 3.1.0 info: title: Open Connectivity for Tours, Activities, and Attractions OCTO API Specification Availability Bookings API version: '1.0' contact: email: sayhello@octo.travel url: https://www.octo.travel/contact name: OCTO Standards NP Inc description: "OCTO (Open Connectivity for Tours, Activities, and Attractions) is an open standard API specification for the in-destination experiences sector of the travel industry. The standard defines agreed-upon schemas, endpoints, and capabilities commonly needed when connecting platforms, resellers, OTAs, and other technologies in tours, activities, and attractions. \n\nOCTO is open source. Available to anyone who wants to use it. You do not need to be a member to use this specification in your business." servers: - url: https://api.example.com/octo tags: - externalDocs: description: Docs url: https://docs.octo.travel/octo-core/bookings name: Bookings paths: /bookings: post: summary: Open Connectivity for Tours, Activities, and Attractions Booking Reservation tags: - Bookings operationId: post-bookings responses: '200': description: OK content: application/json: schema: type: object x-examples: example-1: id: 36d2d844-121d-453c-b514-de027caaf27f uuid: 3698539b-65c4-41e3-95b1-fa108fd024b2 testMode: false resellerReference: 102-256952-3 supplierReference: 300SK9 status: CONFIRMED utcCreatedAt: '2021-10-27T23:28:43Z' utcUpdatedAt: '2021-10-27T23:28:45Z' utcExpiresAt: null utcRedeemedAt: null utcConfirmedAt: '2021-10-27T23:28:45Z' productId: 5379ce46-0620-42ce-b65c-70d6fc1c9ac2 examples: [] description: '' title: '' properties: id: type: string example: bbbb6227-54fc-4c32-9ed7-dc3eb99966ea description: A unique ID / UUID generated by the supplier system to identify the booking. uuid: type: string format: uuid example: 559aed3d-6d5b-4fe0-bfca-99f5e7218a56 description: A UUID you can set when generating the booking to use as an idempotency key. testMode: type: boolean description: If `TRUE`, booking was created on test mode resellerReference: type: - string - 'null' description: The reference set by the Reseller. A mandatory field for resellers to be set in the booking confirmation request. supplierReference: type: - string - 'null' description: The Supplier's / booking platform reference. status: type: string title: BookingStatus x-stoplight: id: 8igglzvoke69w enum: - ON_HOLD - CONFIRMED - EXPIRED - CANCELLED - REDEEMED - PENDING - REJECTED example: CONFIRMED description: 'The status of the booking, possible values are: `ON_HOLD` The booking is pending confirmation, this is the default value when you first create the booking. `EXPIRED` If the booking is not confirmed before the expiration hold expires, it goes into an expired state. `CONFIRMED` Once the confirmation call is made the booking is ready to be used. `CANCELLED` If the booking is cancelled. `PENDING` If the booking is pending outside availability confirmation. `REDEEMED` If the booking is already redeemed.' examples: - CONFIRMED utcCreatedAt: type: string example: '2021-10-27T23:28:43Z' description: An ISO8601 date time in UTC when the booking was created. utcUpdatedAt: type: - string - 'null' example: '2021-10-27T23:28:43Z' description: An ISO8601 date time in UTC when the booking was updated. utcExpiresAt: type: - string - 'null' description: An ISO8601 date times in UTC for when this booking is due to expire if the status is `ON_HOLD`. example: '2021-10-27T23:58:43Z' utcRedeemedAt: type: - string - 'null' description: An ISO8601 date time in UTC at when the booking was redeemed. utcConfirmedAt: type: - string - 'null' example: '2021-10-27T23:28:43Z' description: An ISO8601 date time in UTC when the booking was confirmed. productId: type: string example: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854 description: The product ID that identifies the product in the booking system to make this reservation. product: type: object x-examples: example-1: id: 28ca088b-bc7b-4746-ab06-5971f1ed5a5e internalName: Edinburgh Hop-On Hop-Off Bus Tour reference: null locale: en timeZone: Europe/London allowFreesale: true instantConfirmation: true instantDelivery: true availabilityRequired: false examples: - id: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854 internalName: Amazon River Tour reference: AMZN locale: en-GB timeZone: Europe/London allowFreesale: true instantConfirmation: true instantDelivery: true availabilityRequired: true availabilityType: START_TIME deliveryFormats: - QRCODE deliveryMethods: - VOUCHER redemptionMethod: DIGITAL options: - id: DEFAULT default: true internalName: Private Morning Tour reference: VIP-MORN availabilityLocalStartTimes: - 09:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: - firstName restrictions: minUnits: 'null' maxUnits: 10 units: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 description: A bookable product listed by a supplier. properties: id: type: string example: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854 description: The id used for checking for availability and creating bookings for the product. This MUST be unique within the scope of the Supplier. internalName: type: string description: The name the supplier calls the product. example: Amazon River Tour reference: type: - 'null' - string description: An optional code this supplier might use to identify the product. example: AMZN locale: type: string example: en-GB description: A language code indicating what language this product content is in. This MUST be a valid BCP 47 RFC 5646 RFC 4647 language tag. timeZone: type: string example: Europe/London description: The IANA TimeZone name this product is located in. allowFreesale: type: boolean description: Whether a booking can be made for this product without having to query availability first. instantConfirmation: type: boolean description: Whether bookings will be immediately confirmed when a sale is made, otherwise the supplier will later either accept or reject the booking. When `instantConfirmation` is set to false one should expect created bookings to first get into a `PENDING` state. instantDelivery: type: boolean description: This indicates whether the Reseller can expect immediate delivery of the customer's tickets. If `false` then the Reseller MUST be able to delay delivery of the tickets to the customer. availabilityRequired: type: boolean description: Whether an `availabilityId` is required when creating a booking. Without this the booking will be open-dated and not have a specified travel date. availabilityType: type: string title: AvailabilityType x-stoplight: id: n70vwjh7kvmxk enum: - START_TIME - OPENING_HOURS description: 'What type of availability this product has, possible values are: `START_TIME` if there are fixed departure times which you must pick one. Typical for day tours or activities. `OPENING_HOURS` if you just select a date and can visit any time when the venue is open.' example: START_TIME examples: - START_TIME deliveryFormats: type: array description: 'An array of formats the API will deliver the tickets as. Possible values are: `QRCODE` A code to be presented as a QR CODE barcode `CODE128A` code to be presented as a CODE 128 barcode `PDF_URL` A URL to a PDF file which contains all the ticket details' items: type: string title: DeliveryFormat x-stoplight: id: xo5qi6jemvvhc enum: - PDF_URL - QRCODE description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF.' example: QRCODE examples: - QRCODE deliveryMethods: type: array description: 'How the formats described in `deliveryFormats` will be delivered in the booking response, possible values are: `TICKET`: Individually per unit in the order (i.e. single ticket for each person) `VOUCHER`: One ticket for the whole booking' items: type: string title: DeliveryMethod x-stoplight: id: tdh9akr9neqhb enum: - VOUCHER - TICKET description: 'An array of delivery methods available for this booking. Possible values are: `VOUCHER` The voucher object is populated which is a single ticket for the whole booking. `TICKET` The ticket object is populated on each unit item which is a ticket for each individual person. If `booking.deliveryMethods` contains both `TICKET` and `VOUCHER` then both those values will be set.' examples: - VOUCHER redemptionMethod: type: string title: RedemptionMethod x-stoplight: id: jrrh8rbyzfuzm enum: - DIGITAL - PRINT - MANIFEST description: 'How the voucher can be redeemed. Possible values are: `MANIFEST` The guest name will be written down and they just need to show up `DIGITAL` The tickets/voucher must be scanned but can be on mobile `PRINT` The tickets/voucher must be printed and presented on arrival' examples: - DIGITAL options: type: array description: An array of all options for this product. All products must have at least one option. items: type: object x-examples: example-1: id: DEFAULT default: true internalName: DEFAULT reference: null availabilityLocalStartTimes: - 00:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: [] examples: - id: DEFAULT default: true internalName: Private Morning Tour reference: VIP-MORN availabilityLocalStartTimes: - 09:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: - firstName restrictions: minUnits: 'null' maxUnits: 10 units: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 description: Product options are subdivisions of the original product that will affect price and / or duration. Within the OCTo spec, every product must contain an option. properties: id: type: string example: DEFAULT description: The id that identifies this option, it is only unique within the product. default: type: boolean description: '`TRUE` identifies the option as default, and should therefore rendered and selected first' internalName: type: string description: The name the supplier calls the option by. example: Private Morning Tour reference: type: - 'null' - string description: An optional code this supplier might use to identify the product. example: VIP-MORN availabilityLocalStartTimes: type: array description: This will be an array of all possible start times that can be returned during availability. For example an all day attraction may have a single value like `["00:00"]` whilst a tour with multiple departure times may have multiple:`["09:00", "14:00", "17:00"]`. items: type: string default: 00:00 example: 09:00 cancellationCutoff: type: string example: 1 hour description: This is how long before the tour the booking can be still be cancelled. cancellationCutoffAmount: type: integer example: 1 description: The numeric amount for the cutoff. cancellationCutoffUnit: type: string title: DurationUnit x-stoplight: id: etuhjhtharyrt enum: - hour - minute - day example: hour description: 'Time units used to determine duration. Three values are available: `hour`, `minute`, `day`.' examples: - hour requiredContactFields: type: array description: An array of the contact fields required to confirm a booking. These just apply to the lead traveller on the booking and not for every ticket. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minUnits: 0 maxUnits: 9 description: An object containing a fixed list of restrictions for booking the option. examples: - minUnits: null maxUnits: 10 properties: minUnits: type: - integer - 'null' example: 0 description: The minimum number of tickets that can be purchased in a single booking (null = 0). maxUnits: type: - integer - 'null' example: 10 description: The maximum number of tickets that can be purchased in a single booking (null = unlimited). required: - minUnits - maxUnits units: type: array description: The list of ticket types (units) available for sale. items: type: object x-examples: example-1: id: unit_c1709f42-297e-4f7e-bd6b-3e77d4622d8a internalName: Adult reference: null type: ADULT requiredContactFields: [] examples: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 properties: id: type: string description: This MUST be a unique identifier within the scope of the option. example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: type: string example: Adult(s) description: This should be a name to help with identifying the unit. It should NOT be shown to the customer. reference: type: - 'null' - string description: This is an internal reference identifier that the Supplier wishes to use. It MAY be non-unique. example: LR1-01-new type: type: string title: UnitType x-stoplight: id: 9womjjbg9rhr7 enum: - ADULT - YOUTH - CHILD - INFANT - FAMILY - SENIOR - STUDENT - MILITARY - OTHER examples: - ADULT description: This is the base unit type for this unit definition. A value of TRAVELLER MUST only be used in replacement of `ADULT`, `CHILD`, `INFANT`, `YOUTH`, `STUDENT`, or `SENIOR`. example: YOUTH requiredContactFields: type: array description: This is the array of the contact information PER ticket that the supplier expects. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minAge: 0 maxAge: 100 idRequired: false minQuantity: 1 maxQuantity: null paxCount: 4 accompaniedBy: [] description: unit restrictions examples: - minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 title: UnitRestrictions properties: minAge: type: integer example: 3 description: This is the minumum age this unit can be sold to maxAge: type: integer example: 17 description: This is the maximum age this unit can be sold to idRequired: type: boolean description: This is whether a form of identification will be required at redemption point (eg. student card) minQuantity: type: - integer - 'null' example: 2 description: This is if there is a minimum amount of units to be chosen for purchase (eg. 2) maxQuantity: type: - 'null' - integer example: 7 description: This is if there is a maximum amount of units to be chosen for purchase (eg. 7) paxCount: type: integer description: This is the amount of people each unit counts as (eg. family == 4pax) example: 1 accompaniedBy: type: array description: This is if the unit needs to be accompanied by another unit (eg. Infant with Adult) items: type: string example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 required: - minAge - maxAge - idRequired - minQuantity - maxQuantity - paxCount - accompaniedBy required: - id - internalName - type - requiredContactFields - restrictions description: '' required: - id - default - internalName - reference - availabilityLocalStartTimes - cancellationCutoff - cancellationCutoffAmount - cancellationCutoffUnit - requiredContactFields - restrictions - units required: - id - internalName - reference - locale - allowFreesale - instantConfirmation - instantDelivery - availabilityRequired - availabilityType - deliveryFormats - deliveryMethods - redemptionMethod - options optionId: type: string example: DEFAULT description: The product ID that identifies the product option in the booking system to make this reservation. option: type: object x-examples: example-1: id: DEFAULT default: true internalName: DEFAULT reference: null availabilityLocalStartTimes: - 00:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: [] examples: - id: DEFAULT default: true internalName: Private Morning Tour reference: VIP-MORN availabilityLocalStartTimes: - 09:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: - firstName restrictions: minUnits: 'null' maxUnits: 10 units: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 description: Product options are subdivisions of the original product that will affect price and / or duration. Within the OCTo spec, every product must contain an option. properties: id: type: string example: DEFAULT description: The id that identifies this option, it is only unique within the product. default: type: boolean description: '`TRUE` identifies the option as default, and should therefore rendered and selected first' internalName: type: string description: The name the supplier calls the option by. example: Private Morning Tour reference: type: - 'null' - string description: An optional code this supplier might use to identify the product. example: VIP-MORN availabilityLocalStartTimes: type: array description: This will be an array of all possible start times that can be returned during availability. For example an all day attraction may have a single value like `["00:00"]` whilst a tour with multiple departure times may have multiple:`["09:00", "14:00", "17:00"]`. items: type: string default: 00:00 example: 09:00 cancellationCutoff: type: string example: 1 hour description: This is how long before the tour the booking can be still be cancelled. cancellationCutoffAmount: type: integer example: 1 description: The numeric amount for the cutoff. cancellationCutoffUnit: type: string title: DurationUnit x-stoplight: id: etuhjhtharyrt enum: - hour - minute - day example: hour description: 'Time units used to determine duration. Three values are available: `hour`, `minute`, `day`.' examples: - hour requiredContactFields: type: array description: An array of the contact fields required to confirm a booking. These just apply to the lead traveller on the booking and not for every ticket. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minUnits: 0 maxUnits: 9 description: An object containing a fixed list of restrictions for booking the option. examples: - minUnits: null maxUnits: 10 properties: minUnits: type: - integer - 'null' example: 0 description: The minimum number of tickets that can be purchased in a single booking (null = 0). maxUnits: type: - integer - 'null' example: 10 description: The maximum number of tickets that can be purchased in a single booking (null = unlimited). required: - minUnits - maxUnits units: type: array description: The list of ticket types (units) available for sale. items: type: object x-examples: example-1: id: unit_c1709f42-297e-4f7e-bd6b-3e77d4622d8a internalName: Adult reference: null type: ADULT requiredContactFields: [] examples: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 properties: id: type: string description: This MUST be a unique identifier within the scope of the option. example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: type: string example: Adult(s) description: This should be a name to help with identifying the unit. It should NOT be shown to the customer. reference: type: - 'null' - string description: This is an internal reference identifier that the Supplier wishes to use. It MAY be non-unique. example: LR1-01-new type: type: string title: UnitType x-stoplight: id: 9womjjbg9rhr7 enum: - ADULT - YOUTH - CHILD - INFANT - FAMILY - SENIOR - STUDENT - MILITARY - OTHER examples: - ADULT description: This is the base unit type for this unit definition. A value of TRAVELLER MUST only be used in replacement of `ADULT`, `CHILD`, `INFANT`, `YOUTH`, `STUDENT`, or `SENIOR`. example: YOUTH requiredContactFields: type: array description: This is the array of the contact information PER ticket that the supplier expects. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minAge: 0 maxAge: 100 idRequired: false minQuantity: 1 maxQuantity: null paxCount: 4 accompaniedBy: [] description: unit restrictions examples: - minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 title: UnitRestrictions properties: minAge: type: integer example: 3 description: This is the minumum age this unit can be sold to maxAge: type: integer example: 17 description: This is the maximum age this unit can be sold to idRequired: type: boolean description: This is whether a form of identification will be required at redemption point (eg. student card) minQuantity: type: - integer - 'null' example: 2 description: This is if there is a minimum amount of units to be chosen for purchase (eg. 2) maxQuantity: type: - 'null' - integer example: 7 description: This is if there is a maximum amount of units to be chosen for purchase (eg. 7) paxCount: type: integer description: This is the amount of people each unit counts as (eg. family == 4pax) example: 1 accompaniedBy: type: array description: This is if the unit needs to be accompanied by another unit (eg. Infant with Adult) items: type: string example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 required: - minAge - maxAge - idRequired - minQuantity - maxQuantity - paxCount - accompaniedBy required: - id - internalName - type - requiredContactFields - restrictions description: '' required: - id - default - internalName - reference - availabilityLocalStartTimes - cancellationCutoff - cancellationCutoffAmount - cancellationCutoffUnit - requiredContactFields - restrictions - units cancellable: type: boolean description: A boolean field indicating whether this booking can be cancelled. cancellation: type: - 'null' - object description: An object with information about why and when the booking was cancelled. This is `NULL` if the booking is not cancelled. required: - refund - reason - utcCancelledAt properties: refund: type: string description: Whether the booking was refunded as part of the cancellation. Possible values are `FULL`, `PARTIAL` or `NONE` reason: type: - 'null' - string description: A text value describing why the cancellation happened. utcCancelledAt: type: string example: '2021-10-27T23:38:43Z' description: An ISO8601 date time in UTC indicating when the booking was cancelled. freesale: type: boolean description: Whether the booking was made as freesale (without checking availability first). availabilityId: type: string description: The availability id that was used in the request. availability: type: object description: 'The availability object that was booked. ' required: - id - localDateTimeStart - localDateTimeEnd - allDay - openingHours properties: id: type: string example: '2021-10-27T00:00:00-04:00' description: The availability id that was used in the request. localDateTimeStart: type: string example: '2021-10-27T00:00:00-04:00' description: The `localDateTimeStart` value from the original availability object. localDateTimeEnd: type: string example: '2021-10-28T00:00:00-04:00' description: The `localDateTimeEnd` value from the original availability object. allDay: type: boolean description: A boolean value indicating whether the availability is all day. openingHours: type: array description: The opening hours from the original availability object. items: type: object x-examples: example-1: from: 08:00 to: '18:30' description: A list of opening hours that the product is open on this day. properties: from: type: string example: 08:00 description: When this product opens (HH:MM) to: type: string example: '16:00' description: When this product closes (HH:MM) required: - from - to examples: - from: 08:00 to: '16:00' contact: type: object x-examples: example-1: fullName: null firstName: null lastName: null emailAddress: null phoneNumber: null locales: [] postalCode: null country: null notes: null examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: null locales: - en postalCode: null country: null notes: null description: Contact details for the guests that will attend the tour/attraction. Contact schema can be applied to both the booking object (the main reservation) or the unit object (individual ticket holders - if the supplier requires this information) properties: fullName: type: - 'null' - string example: John Doe description: The full name of the booking holder or the ticket holder. Can also be retrieved as an alias for the concatenation of `firstName` and `lastName` firstName: type: - 'null' - string example: John description: The first name of the booking holder or the ticket holder. lastName: type: - 'null' - string example: Doe description: The last name of the booking holder or the ticket holder. emailAddress: type: - 'null' - string format: email description: The email address of the booking holder or the ticket holder. example: johndoe@email.com phoneNumber: type: - 'null' - string description: The phone number of the booking holder or the ticket holder. locales: type: array description: An array of locale values, equivalent to navigator.languages in a browsers environment. items: type: string example: en postalCode: type: - 'null' - string description: The PO Box of the booking holder or the ticket holder. country: type: - 'null' - string description: The country of the booking holder or the ticket holder. notes: type: - 'null' - string description: Optional notes for the booking. notes: type: - string - 'null' example: Optional notes for the booking deliveryMethods: type: array description: An array of delivery methods available for this booking. items: type: string title: DeliveryMethod x-stoplight: id: tdh9akr9neqhb enum: - VOUCHER - TICKET description: 'An array of delivery methods available for this booking. Possible values are: `VOUCHER` The voucher object is populated which is a single ticket for the whole booking. `TICKET` The ticket object is populated on each unit item which is a ticket for each individual person. If `booking.deliveryMethods` contains both `TICKET` and `VOUCHER` then both those values will be set.' examples: - VOUCHER voucher: oneOf: - type: object x-examples: example-1: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: '!1|El3f0wUmcnrEmviMcR9qwqC9hvfrcWc6cZcRcrcR|yrirfZfqHPj40mvhpw2XzX|q7FF77QqFD7fDhr9' - deliveryFormat: PDF_URL deliveryValue: https://api.ventrata.com/octo/pdf?booking=36d2d844-121d-453c-b514-de027caaf27f&ticket=72419a19-c58c-46a0-b316-13509de43909 examples: - redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: string properties: redemptionMethod: type: string title: RedemptionMethod x-stoplight: id: jrrh8rbyzfuzm enum: - DIGITAL - PRINT - MANIFEST description: 'How the voucher can be redeemed. Possible values are: `MANIFEST` The guest name will be written down and they just need to show up `DIGITAL` The tickets/voucher must be scanned but can be on mobile `PRINT` The tickets/voucher must be printed and presented on arrival' examples: - DIGITAL utcRedeemedAt: type: - 'null' - string description: The ISO8601 date in UTC indicating when the ticket was used at the attraction. deliveryOptions: type: array items: type: object properties: deliveryFormat: type: string title: DeliveryFormat x-stoplight: id: xo5qi6jemvvhc enum: - PDF_URL - QRCODE description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF.' example: QRCODE examples: - QRCODE deliveryValue: type: string description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF. ' required: - deliveryFormat - deliveryValue required: - redemptionMethod - utcRedeemedAt - deliveryOptions description: '' - type: 'null' unitItems: type: array description: An array of unit items that will be included in the booking. items: type: object x-examples: example-1: uuid: 97525082-2498-4e61-b259-bc48e27a96ae resellerReference: 102-256952-3-Adult-2 supplierReference: J9T7R6 unitId: unit_8080415c-890c-4b38-a5af-0934d73e94d3 properties: uuid: type: string example: 3b1bc2ee-3155-4738-9471-f49842a07327 description: The id of the unit, this will be unique to the option. resellerReference: type: - string - 'null' example: 4ec08a62-892c-48c1-a608-dc946531a33b description: A reference the reseller uses to identify the unit within all bookings. supplierReference: type: - string - 'null' example: K9T7R5 description: A reference the supplier uses to identify the unit within all bookings. unitId: type: string example: youth_f6446706-885a-437c-8461-efd6d7080910 unit: type: object x-examples: example-1: id: unit_c1709f42-297e-4f7e-bd6b-3e77d4622d8a internalName: Adult reference: null type: ADULT requiredContactFields: [] examples: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 properties: id: type: string description: This MUST be a unique identifier within the scope of the option. example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: type: string example: Adult(s) description: This should be a name to help with identifying the unit. It should NOT be shown to the customer. reference: type: - 'null' - string description: This is an internal reference identifier that the Supplier wishes to use. It MAY be non-unique. example: LR1-01-new type: type: string title: UnitType x-stoplight: id: 9womjjbg9rhr7 enum: - ADULT - YOUTH - CHILD - INFANT - FAMILY - SENIOR - STUDENT - MILITARY - OTHER examples: - ADULT description: This is the base unit type for this unit definition. A value of TRAVELLER MUST only be used in replacement of `ADULT`, `CHILD`, `INFANT`, `YOUTH`, `STUDENT`, or `SENIOR`. example: YOUTH requiredContactFields: type: array description: This is the array of the contact information PER ticket that the supplier expects. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minAge: 0 maxAge: 100 idRequired: false minQuantity: 1 maxQuantity: null paxCount: 4 accompaniedBy: [] description: unit restrictions examples: - minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 title: UnitRestrictions properties: minAge: type: integer example: 3 description: This is the minumum age this unit can be sold to maxAge: type: integer example: 17 description: This is the maximum age this unit can be sold to idRequired: type: boolean description: This is whether a form of identification will be required at redemption point (eg. student card) minQuantity: type: - integer - 'null' example: 2 description: This is if there is a minimum amount of units to be chosen for purchase (eg. 2) maxQuantity: type: - 'null' - integer example: 7 description: This is if there is a maximum amount of units to be chosen for purchase (eg. 7) paxCount: type: integer description: This is the amount of people each unit counts as (eg. family == 4pax) example: 1 accompaniedBy: type: array description: This is if the unit needs to be accompanied by another unit (eg. Infant with Adult) items: type: string example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 required: - minAge - maxAge - idRequired - minQuantity - maxQuantity - paxCount - accompaniedBy required: - id - internalName - type - requiredContactFields - restrictions description: '' status: type: string title: BookingStatus x-stoplight: id: 8igglzvoke69w enum: - ON_HOLD - CONFIRMED - EXPIRED - CANCELLED - REDEEMED - PENDING - REJECTED example: CONFIRMED description: 'The status of the booking, possible values are: `ON_HOLD` The booking is pending confirmation, this is the default value when you first create the booking. `EXPIRED` If the booking is not confirmed before the expiration hold expires, it goes into an expired state. `CONFIRMED` Once the confirmation call is made the booking is ready to be used. `CANCELLED` If the booking is cancelled. `PENDING` If the booking is pending outside availability confirmation. `REDEEMED` If the booking is already redeemed.' examples: - CONFIRMED utcRedeemedAt: type: - 'null' - string description: The ISO8601 date in UTC indicating when the ticket was used at the attraction. contact: type: object x-examples: example-1: fullName: null firstName: null lastName: null emailAddress: null phoneNumber: null locales: [] postalCode: null country: null notes: null examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: null locales: - en postalCode: null country: null notes: null description: Contact details for the guests that will attend the tour/attraction. Contact schema can be applied to both the booking object (the main reservation) or the unit object (individual ticket holders - if the supplier requires this information) properties: fullName: type: - 'null' - string example: John Doe description: The full name of the booking holder or the ticket holder. Can also be retrieved as an alias for the concatenation of `firstName` and `lastName` firstName: type: - 'null' - string example: John description: The first name of the booking holder or the ticket holder. lastName: type: - 'null' - string example: Doe description: The last name of the booking holder or the ticket holder. emailAddress: type: - 'null' - string format: email description: The email address of the booking holder or the ticket holder. example: johndoe@email.com phoneNumber: type: - 'null' - string description: The phone number of the booking holder or the ticket holder. locales: type: array description: An array of locale values, equivalent to navigator.languages in a browsers environment. items: type: string example: en postalCode: type: - 'null' - string description: The PO Box of the booking holder or the ticket holder. country: type: - 'null' - string description: The country of the booking holder or the ticket holder. notes: type: - 'null' - string description: Optional notes for the booking. ticket: oneOf: - type: object x-examples: example-1: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: '!1|El3f0wUmcnrEmviMcR9qwqC9hvfrcWc6cZcRcrcR|yrirfZfqHPj40mvhpw2XzX|q7FF77QqFD7fDhr9' - deliveryFormat: PDF_URL deliveryValue: https://api.ventrata.com/octo/pdf?booking=36d2d844-121d-453c-b514-de027caaf27f&ticket=72419a19-c58c-46a0-b316-13509de43909 examples: - redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: string properties: redemptionMethod: type: string title: RedemptionMethod x-stoplight: id: jrrh8rbyzfuzm enum: - DIGITAL - PRINT - MANIFEST description: 'How the voucher can be redeemed. Possible values are: `MANIFEST` The guest name will be written down and they just need to show up `DIGITAL` The tickets/voucher must be scanned but can be on mobile `PRINT` The tickets/voucher must be printed and presented on arrival' examples: - DIGITAL utcRedeemedAt: type: - 'null' - string description: The ISO8601 date in UTC indicating when the ticket was used at the attraction. deliveryOptions: type: array items: type: object properties: deliveryFormat: type: string title: DeliveryFormat x-stoplight: id: xo5qi6jemvvhc enum: - PDF_URL - QRCODE description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF.' example: QRCODE examples: - QRCODE deliveryValue: type: string description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF. ' required: - deliveryFormat - deliveryValue required: - redemptionMethod - utcRedeemedAt - deliveryOptions description: '' - type: 'null' required: - uuid - resellerReference - supplierReference - unitId - unit - status - utcRedeemedAt - contact description: '' examples: - uuid: 3b1bc2ee-3155-4738-9471-f49842a07327 resellerReference: 4ec08a62-892c-48c1-a608-dc946531a33b supplierReference: K9T7R5 unitId: youth_f6446706-885a-437c-8461-efd6d7080910 unit: id: string internalName: string reference: null type: ADULT requiredContactFields: - firstName restrictions: minAge: 18 maxAge: 99 idRequired: false minQuantity: 0 maxQuantity: null paxCount: 0 accompaniedBy: [] status: CONFIRMED utcRedeemedAt: null contact: fullName: John Doe firstName: John lastName: Doe emailAddress: null phoneNumber: null locales: - en postalCode: null country: null notes: null ticket: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: string required: - id - uuid - testMode - resellerReference - supplierReference - status - utcCreatedAt - utcUpdatedAt - utcExpiresAt - utcRedeemedAt - utcConfirmedAt - productId - product - optionId - option - cancellable - cancellation - freesale - availabilityId - availability - contact - notes - deliveryMethods - unitItems examples: ON_HOLD: value: id: 602a9fdf-5c79-4984-9474-7e14da9b6027 uuid: a88b4b8d-9c3b-4a09-ba27-323b43af57e4 testMode: true resellerReference: null supplierReference: XOPSUT status: ON_HOLD utcCreatedAt: '2022-05-25T10:34:22Z' utcUpdatedAt: '2022-05-25T10:34:22Z' utcExpiresAt: '2022-05-25T11:04:22Z' utcRedeemedAt: null utcConfirmedAt: null productId: '1' product: id: '1' internalName: PPU | OH reference: null locale: en timeZone: Europe/London allowFreesale: false instantConfirmation: true instantDelivery: true availabilityRequired: true availabilityType: OPENING_HOURS deliveryFormats: - PDF_URL - QRCODE deliveryMethods: - TICKET - VOUCHER redemptionMethod: DIGITAL options: - id: DEFAULT default: true internalName: DEFAULT reference: null availabilityLocalStartTimes: - 00:00 cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: null units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: null maxQuantity: null paxCount: 1 accompaniedBy: [] optionId: DEFAULT option: id: DEFAULT default: true internalName: DEFAULT reference: null availabilityLocalStartTimes: - 00:00 cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: null units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: null maxQuantity: null paxCount: 1 accompaniedBy: [] cancellable: true cancellation: null freesale: false availabilityId: '2022-04-30T00:00:00+01:00' availability: id: '2022-04-30T00:00:00+01:00' localDateTimeStart: '2022-04-30T00:00:00+01:00' localDateTimeEnd: '2022-05-01T00:00:00+01:00' allDay: true openingHours: - from: 09:00 to: '17:00' contact: fullName: null firstName: null lastName: null emailAddress: null phoneNumber: null locales: [] country: null notes: null notes: null deliveryMethods: - TICKET - VOUCHER voucher: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: [] unitItems: - uuid: 6cbd2582-1345-4d8d-8223-ad004beebc1a resellerReference: null supplierReference: CBIYWQ unit: id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: null maxQuantity: null paxCount: 1 accompaniedBy: [] unitId: adult status: ON_HOLD utcRedeemedAt: null contact: fullName: null firstName: null lastName: null emailAddress: null phoneNumber: null locales: [] country: null notes: null ticket: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: [] '400': description: Example response content: application/json: schema: type: object x-examples: example-1: error: INVALID_PRODUCT_ID errorMessage: The productId was missing or invalid productId: 7c3eb026-3d36-4981-9c56-28d8a52a54dd additionalProperties: false properties: error: type: string errorMessage: type: string productId: type: string optionId: type: string availabilityId: type: string unitId: type: string required: - error - errorMessage examples: INVALID_PRODUCT_ID: value: error: INVALID_PRODUCT_ID errorMessage: The productId was missing or invalid productId: cc2a6d56-6efe-426f-99c9-6eb10e341565 INVALID_OPTION_ID: value: error: INVALID_OPTION_ID errorMessage: The optionId was missing or invalid optionId: 681fea0f-196e-45da-bec7-467bfacb1d87 INVALID_AVAILABILITY_ID: value: error: INVALID_AVAILABILITY_ID errorMessage: The availabilityId was missing or invalid availabilityId: '2022-03-12T00:00:00+00:00' UNPROCESSABLE_ENTITY: value: error: UNPROCESSABLE_ENTITY errorMessage: 'Validation failed: Minimum tickets is 2' INVALID_UNIT_ID: value: error: INVALID_UNIT_ID errorMessage: The unitId was missing or invalid unitId: senior parameters: - schema: type: string enum: - application/json in: header name: Content-Type description: Required field on all POST requests requestBody: content: application/json: schema: type: object x-examples: example-1: resellerReference: string productId: string optionId: string availabilityId: string expirationMinutes: string freesale: true redeemed: true notes: string emailReceipt: true unitItems: - uuid: string unitId: string resellerReference: string contact: fullName: string firstName: string lastName: string emailAddress: string phoneNumber: string country: string notes: string locales: - string properties: uuid: type: string description: A unique UUID to identify the booking. Setting this value acts like an idempotency key preventing you from double booking. format: uuid example: 559aed3d-6d5b-4fe0-bfca-99f5e7218a56 productId: type: string description: The product ID for this booking. example: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854 optionId: type: string description: The option ID for this booking. example: DEFAULT availabilityId: type: string description: The availability ID for the selected timeslot. example: '2021-10-27T00:00:00-04:00' expirationMinutes: type: integer description: How many minutes to reserve the availability, otherwise defaults to the supplier default amount. example: 30 notes: type: string description: Optional notes for the booking. example: Optional notes unitItems: type: array description: An list of unit items that will be included in the booking. items: type: object properties: uuid: type: string description: A unique UUID to identify the unit, same as the booking uuid except per unit. example: 3b1bc2ee-3155-4738-9471-f49842a07327 unitId: type: string description: The unit item unit ID. example: youth_f6446706-885a-437c-8461-efd6d7080910 required: - unitId required: - productId - optionId - availabilityId - unitItems examples: Reserve Booking: value: productId: 1a7213eb-3a33-4cbb-b114-64d771c201ac optionId: DEFAULT availabilityId: '2020-07-01T14:30:00-05:00' notes: Optional notes for the booking unitItems: - unitId: adult - unitId: adult - unitId: child description: '' description: 'Reserving availability when making a booking. The steps to make a reservation are: 1. **Check Availability**: Check the availability on the [/availability](docs/octo/branches/main/5b08f5f75e75d-availability-check) endpoint to retrieve an `availabilityId` 2. **Booking Reservation** (this step): Create a booking that reserves the availability while you collect payment and contact information from the customer. The booking will remain with status `ON_HOLD` until the booking is confirmed or the reservation hold expires. The availability for the booking is held for the amount of time equal to the`expirationMinutes` parameter (if provided), up to an internal limit set by either the supplier or the OCTo provider. The `utc_expires_at` parameter in the response object will indicate when a reservtion will expire. A reservation can be extended by calling the [/bookings/{uuid}/extend](docs/octo/branches/main/2c7924ab9128f-extend-reservation) endpoint. A reserved booking can be confirmed after the customer finalizes their choice on the [/bookings/{uuid}/confirm](docs/octo/branches/main/614d1613b2d70-booking-confirmation) endpoint provided the reservation had not expired. ' get: summary: Open Connectivity for Tours, Activities, and Attractions Get Bookings tags: - Bookings operationId: get-bookings responses: '200': description: OK content: application/json: schema: type: array items: type: object x-examples: example-1: id: 36d2d844-121d-453c-b514-de027caaf27f uuid: 3698539b-65c4-41e3-95b1-fa108fd024b2 testMode: false resellerReference: 102-256952-3 supplierReference: 300SK9 status: CONFIRMED utcCreatedAt: '2021-10-27T23:28:43Z' utcUpdatedAt: '2021-10-27T23:28:45Z' utcExpiresAt: null utcRedeemedAt: null utcConfirmedAt: '2021-10-27T23:28:45Z' productId: 5379ce46-0620-42ce-b65c-70d6fc1c9ac2 examples: [] description: '' title: '' properties: id: type: string example: bbbb6227-54fc-4c32-9ed7-dc3eb99966ea description: A unique ID / UUID generated by the supplier system to identify the booking. uuid: type: string format: uuid example: 559aed3d-6d5b-4fe0-bfca-99f5e7218a56 description: A UUID you can set when generating the booking to use as an idempotency key. testMode: type: boolean description: If `TRUE`, booking was created on test mode resellerReference: type: - string - 'null' description: The reference set by the Reseller. A mandatory field for resellers to be set in the booking confirmation request. supplierReference: type: - string - 'null' description: The Supplier's / booking platform reference. status: type: string title: BookingStatus x-stoplight: id: 8igglzvoke69w enum: - ON_HOLD - CONFIRMED - EXPIRED - CANCELLED - REDEEMED - PENDING - REJECTED example: CONFIRMED description: 'The status of the booking, possible values are: `ON_HOLD` The booking is pending confirmation, this is the default value when you first create the booking. `EXPIRED` If the booking is not confirmed before the expiration hold expires, it goes into an expired state. `CONFIRMED` Once the confirmation call is made the booking is ready to be used. `CANCELLED` If the booking is cancelled. `PENDING` If the booking is pending outside availability confirmation. `REDEEMED` If the booking is already redeemed.' examples: - CONFIRMED utcCreatedAt: type: string example: '2021-10-27T23:28:43Z' description: An ISO8601 date time in UTC when the booking was created. utcUpdatedAt: type: - string - 'null' example: '2021-10-27T23:28:43Z' description: An ISO8601 date time in UTC when the booking was updated. utcExpiresAt: type: - string - 'null' description: An ISO8601 date times in UTC for when this booking is due to expire if the status is `ON_HOLD`. example: '2021-10-27T23:58:43Z' utcRedeemedAt: type: - string - 'null' description: An ISO8601 date time in UTC at when the booking was redeemed. utcConfirmedAt: type: - string - 'null' example: '2021-10-27T23:28:43Z' description: An ISO8601 date time in UTC when the booking was confirmed. productId: type: string example: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854 description: The product ID that identifies the product in the booking system to make this reservation. product: type: object x-examples: example-1: id: 28ca088b-bc7b-4746-ab06-5971f1ed5a5e internalName: Edinburgh Hop-On Hop-Off Bus Tour reference: null locale: en timeZone: Europe/London allowFreesale: true instantConfirmation: true instantDelivery: true availabilityRequired: false examples: - id: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854 internalName: Amazon River Tour reference: AMZN locale: en-GB timeZone: Europe/London allowFreesale: true instantConfirmation: true instantDelivery: true availabilityRequired: true availabilityType: START_TIME deliveryFormats: - QRCODE deliveryMethods: - VOUCHER redemptionMethod: DIGITAL options: - id: DEFAULT default: true internalName: Private Morning Tour reference: VIP-MORN availabilityLocalStartTimes: - 09:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: - firstName restrictions: minUnits: 'null' maxUnits: 10 units: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 description: A bookable product listed by a supplier. properties: id: type: string example: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854 description: The id used for checking for availability and creating bookings for the product. This MUST be unique within the scope of the Supplier. internalName: type: string description: The name the supplier calls the product. example: Amazon River Tour reference: type: - 'null' - string description: An optional code this supplier might use to identify the product. example: AMZN locale: type: string example: en-GB description: A language code indicating what language this product content is in. This MUST be a valid BCP 47 RFC 5646 RFC 4647 language tag. timeZone: type: string example: Europe/London description: The IANA TimeZone name this product is located in. allowFreesale: type: boolean description: Whether a booking can be made for this product without having to query availability first. instantConfirmation: type: boolean description: Whether bookings will be immediately confirmed when a sale is made, otherwise the supplier will later either accept or reject the booking. When `instantConfirmation` is set to false one should expect created bookings to first get into a `PENDING` state. instantDelivery: type: boolean description: This indicates whether the Reseller can expect immediate delivery of the customer's tickets. If `false` then the Reseller MUST be able to delay delivery of the tickets to the customer. availabilityRequired: type: boolean description: Whether an `availabilityId` is required when creating a booking. Without this the booking will be open-dated and not have a specified travel date. availabilityType: type: string title: AvailabilityType x-stoplight: id: n70vwjh7kvmxk enum: - START_TIME - OPENING_HOURS description: 'What type of availability this product has, possible values are: `START_TIME` if there are fixed departure times which you must pick one. Typical for day tours or activities. `OPENING_HOURS` if you just select a date and can visit any time when the venue is open.' example: START_TIME examples: - START_TIME deliveryFormats: type: array description: 'An array of formats the API will deliver the tickets as. Possible values are: `QRCODE` A code to be presented as a QR CODE barcode `CODE128A` code to be presented as a CODE 128 barcode `PDF_URL` A URL to a PDF file which contains all the ticket details' items: type: string title: DeliveryFormat x-stoplight: id: xo5qi6jemvvhc enum: - PDF_URL - QRCODE description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF.' example: QRCODE examples: - QRCODE deliveryMethods: type: array description: 'How the formats described in `deliveryFormats` will be delivered in the booking response, possible values are: `TICKET`: Individually per unit in the order (i.e. single ticket for each person) `VOUCHER`: One ticket for the whole booking' items: type: string title: DeliveryMethod x-stoplight: id: tdh9akr9neqhb enum: - VOUCHER - TICKET description: 'An array of delivery methods available for this booking. Possible values are: `VOUCHER` The voucher object is populated which is a single ticket for the whole booking. `TICKET` The ticket object is populated on each unit item which is a ticket for each individual person. If `booking.deliveryMethods` contains both `TICKET` and `VOUCHER` then both those values will be set.' examples: - VOUCHER redemptionMethod: type: string title: RedemptionMethod x-stoplight: id: jrrh8rbyzfuzm enum: - DIGITAL - PRINT - MANIFEST description: 'How the voucher can be redeemed. Possible values are: `MANIFEST` The guest name will be written down and they just need to show up `DIGITAL` The tickets/voucher must be scanned but can be on mobile `PRINT` The tickets/voucher must be printed and presented on arrival' examples: - DIGITAL options: type: array description: An array of all options for this product. All products must have at least one option. items: type: object x-examples: example-1: id: DEFAULT default: true internalName: DEFAULT reference: null availabilityLocalStartTimes: - 00:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: [] examples: - id: DEFAULT default: true internalName: Private Morning Tour reference: VIP-MORN availabilityLocalStartTimes: - 09:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: - firstName restrictions: minUnits: 'null' maxUnits: 10 units: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 description: Product options are subdivisions of the original product that will affect price and / or duration. Within the OCTo spec, every product must contain an option. properties: id: type: string example: DEFAULT description: The id that identifies this option, it is only unique within the product. default: type: boolean description: '`TRUE` identifies the option as default, and should therefore rendered and selected first' internalName: type: string description: The name the supplier calls the option by. example: Private Morning Tour reference: type: - 'null' - string description: An optional code this supplier might use to identify the product. example: VIP-MORN availabilityLocalStartTimes: type: array description: This will be an array of all possible start times that can be returned during availability. For example an all day attraction may have a single value like `["00:00"]` whilst a tour with multiple departure times may have multiple:`["09:00", "14:00", "17:00"]`. items: type: string default: 00:00 example: 09:00 cancellationCutoff: type: string example: 1 hour description: This is how long before the tour the booking can be still be cancelled. cancellationCutoffAmount: type: integer example: 1 description: The numeric amount for the cutoff. cancellationCutoffUnit: type: string title: DurationUnit x-stoplight: id: etuhjhtharyrt enum: - hour - minute - day example: hour description: 'Time units used to determine duration. Three values are available: `hour`, `minute`, `day`.' examples: - hour requiredContactFields: type: array description: An array of the contact fields required to confirm a booking. These just apply to the lead traveller on the booking and not for every ticket. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minUnits: 0 maxUnits: 9 description: An object containing a fixed list of restrictions for booking the option. examples: - minUnits: null maxUnits: 10 properties: minUnits: type: - integer - 'null' example: 0 description: The minimum number of tickets that can be purchased in a single booking (null = 0). maxUnits: type: - integer - 'null' example: 10 description: The maximum number of tickets that can be purchased in a single booking (null = unlimited). required: - minUnits - maxUnits units: type: array description: The list of ticket types (units) available for sale. items: type: object x-examples: example-1: id: unit_c1709f42-297e-4f7e-bd6b-3e77d4622d8a internalName: Adult reference: null type: ADULT requiredContactFields: [] examples: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 properties: id: type: string description: This MUST be a unique identifier within the scope of the option. example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: type: string example: Adult(s) description: This should be a name to help with identifying the unit. It should NOT be shown to the customer. reference: type: - 'null' - string description: This is an internal reference identifier that the Supplier wishes to use. It MAY be non-unique. example: LR1-01-new type: type: string title: UnitType x-stoplight: id: 9womjjbg9rhr7 enum: - ADULT - YOUTH - CHILD - INFANT - FAMILY - SENIOR - STUDENT - MILITARY - OTHER examples: - ADULT description: This is the base unit type for this unit definition. A value of TRAVELLER MUST only be used in replacement of `ADULT`, `CHILD`, `INFANT`, `YOUTH`, `STUDENT`, or `SENIOR`. example: YOUTH requiredContactFields: type: array description: This is the array of the contact information PER ticket that the supplier expects. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minAge: 0 maxAge: 100 idRequired: false minQuantity: 1 maxQuantity: null paxCount: 4 accompaniedBy: [] description: unit restrictions examples: - minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 title: UnitRestrictions properties: minAge: type: integer example: 3 description: This is the minumum age this unit can be sold to maxAge: type: integer example: 17 description: This is the maximum age this unit can be sold to idRequired: type: boolean description: This is whether a form of identification will be required at redemption point (eg. student card) minQuantity: type: - integer - 'null' example: 2 description: This is if there is a minimum amount of units to be chosen for purchase (eg. 2) maxQuantity: type: - 'null' - integer example: 7 description: This is if there is a maximum amount of units to be chosen for purchase (eg. 7) paxCount: type: integer description: This is the amount of people each unit counts as (eg. family == 4pax) example: 1 accompaniedBy: type: array description: This is if the unit needs to be accompanied by another unit (eg. Infant with Adult) items: type: string example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 required: - minAge - maxAge - idRequired - minQuantity - maxQuantity - paxCount - accompaniedBy required: - id - internalName - type - requiredContactFields - restrictions description: '' required: - id - default - internalName - reference - availabilityLocalStartTimes - cancellationCutoff - cancellationCutoffAmount - cancellationCutoffUnit - requiredContactFields - restrictions - units required: - id - internalName - reference - locale - allowFreesale - instantConfirmation - instantDelivery - availabilityRequired - availabilityType - deliveryFormats - deliveryMethods - redemptionMethod - options optionId: type: string example: DEFAULT description: The product ID that identifies the product option in the booking system to make this reservation. option: type: object x-examples: example-1: id: DEFAULT default: true internalName: DEFAULT reference: null availabilityLocalStartTimes: - 00:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: [] examples: - id: DEFAULT default: true internalName: Private Morning Tour reference: VIP-MORN availabilityLocalStartTimes: - 09:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: - firstName restrictions: minUnits: 'null' maxUnits: 10 units: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 description: Product options are subdivisions of the original product that will affect price and / or duration. Within the OCTo spec, every product must contain an option. properties: id: type: string example: DEFAULT description: The id that identifies this option, it is only unique within the product. default: type: boolean description: '`TRUE` identifies the option as default, and should therefore rendered and selected first' internalName: type: string description: The name the supplier calls the option by. example: Private Morning Tour reference: type: - 'null' - string description: An optional code this supplier might use to identify the product. example: VIP-MORN availabilityLocalStartTimes: type: array description: This will be an array of all possible start times that can be returned during availability. For example an all day attraction may have a single value like `["00:00"]` whilst a tour with multiple departure times may have multiple:`["09:00", "14:00", "17:00"]`. items: type: string default: 00:00 example: 09:00 cancellationCutoff: type: string example: 1 hour description: This is how long before the tour the booking can be still be cancelled. cancellationCutoffAmount: type: integer example: 1 description: The numeric amount for the cutoff. cancellationCutoffUnit: type: string title: DurationUnit x-stoplight: id: etuhjhtharyrt enum: - hour - minute - day example: hour description: 'Time units used to determine duration. Three values are available: `hour`, `minute`, `day`.' examples: - hour requiredContactFields: type: array description: An array of the contact fields required to confirm a booking. These just apply to the lead traveller on the booking and not for every ticket. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minUnits: 0 maxUnits: 9 description: An object containing a fixed list of restrictions for booking the option. examples: - minUnits: null maxUnits: 10 properties: minUnits: type: - integer - 'null' example: 0 description: The minimum number of tickets that can be purchased in a single booking (null = 0). maxUnits: type: - integer - 'null' example: 10 description: The maximum number of tickets that can be purchased in a single booking (null = unlimited). required: - minUnits - maxUnits units: type: array description: The list of ticket types (units) available for sale. items: type: object x-examples: example-1: id: unit_c1709f42-297e-4f7e-bd6b-3e77d4622d8a internalName: Adult reference: null type: ADULT requiredContactFields: [] examples: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 properties: id: type: string description: This MUST be a unique identifier within the scope of the option. example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: type: string example: Adult(s) description: This should be a name to help with identifying the unit. It should NOT be shown to the customer. reference: type: - 'null' - string description: This is an internal reference identifier that the Supplier wishes to use. It MAY be non-unique. example: LR1-01-new type: type: string title: UnitType x-stoplight: id: 9womjjbg9rhr7 enum: - ADULT - YOUTH - CHILD - INFANT - FAMILY - SENIOR - STUDENT - MILITARY - OTHER examples: - ADULT description: This is the base unit type for this unit definition. A value of TRAVELLER MUST only be used in replacement of `ADULT`, `CHILD`, `INFANT`, `YOUTH`, `STUDENT`, or `SENIOR`. example: YOUTH requiredContactFields: type: array description: This is the array of the contact information PER ticket that the supplier expects. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minAge: 0 maxAge: 100 idRequired: false minQuantity: 1 maxQuantity: null paxCount: 4 accompaniedBy: [] description: unit restrictions examples: - minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 title: UnitRestrictions properties: minAge: type: integer example: 3 description: This is the minumum age this unit can be sold to maxAge: type: integer example: 17 description: This is the maximum age this unit can be sold to idRequired: type: boolean description: This is whether a form of identification will be required at redemption point (eg. student card) minQuantity: type: - integer - 'null' example: 2 description: This is if there is a minimum amount of units to be chosen for purchase (eg. 2) maxQuantity: type: - 'null' - integer example: 7 description: This is if there is a maximum amount of units to be chosen for purchase (eg. 7) paxCount: type: integer description: This is the amount of people each unit counts as (eg. family == 4pax) example: 1 accompaniedBy: type: array description: This is if the unit needs to be accompanied by another unit (eg. Infant with Adult) items: type: string example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 required: - minAge - maxAge - idRequired - minQuantity - maxQuantity - paxCount - accompaniedBy required: - id - internalName - type - requiredContactFields - restrictions description: '' required: - id - default - internalName - reference - availabilityLocalStartTimes - cancellationCutoff - cancellationCutoffAmount - cancellationCutoffUnit - requiredContactFields - restrictions - units cancellable: type: boolean description: A boolean field indicating whether this booking can be cancelled. cancellation: type: - 'null' - object description: An object with information about why and when the booking was cancelled. This is `NULL` if the booking is not cancelled. required: - refund - reason - utcCancelledAt properties: refund: type: string description: Whether the booking was refunded as part of the cancellation. Possible values are `FULL`, `PARTIAL` or `NONE` reason: type: - 'null' - string description: A text value describing why the cancellation happened. utcCancelledAt: type: string example: '2021-10-27T23:38:43Z' description: An ISO8601 date time in UTC indicating when the booking was cancelled. freesale: type: boolean description: Whether the booking was made as freesale (without checking availability first). availabilityId: type: string description: The availability id that was used in the request. availability: type: object description: 'The availability object that was booked. ' required: - id - localDateTimeStart - localDateTimeEnd - allDay - openingHours properties: id: type: string example: '2021-10-27T00:00:00-04:00' description: The availability id that was used in the request. localDateTimeStart: type: string example: '2021-10-27T00:00:00-04:00' description: The `localDateTimeStart` value from the original availability object. localDateTimeEnd: type: string example: '2021-10-28T00:00:00-04:00' description: The `localDateTimeEnd` value from the original availability object. allDay: type: boolean description: A boolean value indicating whether the availability is all day. openingHours: type: array description: The opening hours from the original availability object. items: type: object x-examples: example-1: from: 08:00 to: '18:30' description: A list of opening hours that the product is open on this day. properties: from: type: string example: 08:00 description: When this product opens (HH:MM) to: type: string example: '16:00' description: When this product closes (HH:MM) required: - from - to examples: - from: 08:00 to: '16:00' contact: type: object x-examples: example-1: fullName: null firstName: null lastName: null emailAddress: null phoneNumber: null locales: [] postalCode: null country: null notes: null examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: null locales: - en postalCode: null country: null notes: null description: Contact details for the guests that will attend the tour/attraction. Contact schema can be applied to both the booking object (the main reservation) or the unit object (individual ticket holders - if the supplier requires this information) properties: fullName: type: - 'null' - string example: John Doe description: The full name of the booking holder or the ticket holder. Can also be retrieved as an alias for the concatenation of `firstName` and `lastName` firstName: type: - 'null' - string example: John description: The first name of the booking holder or the ticket holder. lastName: type: - 'null' - string example: Doe description: The last name of the booking holder or the ticket holder. emailAddress: type: - 'null' - string format: email description: The email address of the booking holder or the ticket holder. example: johndoe@email.com phoneNumber: type: - 'null' - string description: The phone number of the booking holder or the ticket holder. locales: type: array description: An array of locale values, equivalent to navigator.languages in a browsers environment. items: type: string example: en postalCode: type: - 'null' - string description: The PO Box of the booking holder or the ticket holder. country: type: - 'null' - string description: The country of the booking holder or the ticket holder. notes: type: - 'null' - string description: Optional notes for the booking. notes: type: - string - 'null' example: Optional notes for the booking deliveryMethods: type: array description: An array of delivery methods available for this booking. items: type: string title: DeliveryMethod x-stoplight: id: tdh9akr9neqhb enum: - VOUCHER - TICKET description: 'An array of delivery methods available for this booking. Possible values are: `VOUCHER` The voucher object is populated which is a single ticket for the whole booking. `TICKET` The ticket object is populated on each unit item which is a ticket for each individual person. If `booking.deliveryMethods` contains both `TICKET` and `VOUCHER` then both those values will be set.' examples: - VOUCHER voucher: oneOf: - type: object x-examples: example-1: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: '!1|El3f0wUmcnrEmviMcR9qwqC9hvfrcWc6cZcRcrcR|yrirfZfqHPj40mvhpw2XzX|q7FF77QqFD7fDhr9' - deliveryFormat: PDF_URL deliveryValue: https://api.ventrata.com/octo/pdf?booking=36d2d844-121d-453c-b514-de027caaf27f&ticket=72419a19-c58c-46a0-b316-13509de43909 examples: - redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: string properties: redemptionMethod: type: string title: RedemptionMethod x-stoplight: id: jrrh8rbyzfuzm enum: - DIGITAL - PRINT - MANIFEST description: 'How the voucher can be redeemed. Possible values are: `MANIFEST` The guest name will be written down and they just need to show up `DIGITAL` The tickets/voucher must be scanned but can be on mobile `PRINT` The tickets/voucher must be printed and presented on arrival' examples: - DIGITAL utcRedeemedAt: type: - 'null' - string description: The ISO8601 date in UTC indicating when the ticket was used at the attraction. deliveryOptions: type: array items: type: object properties: deliveryFormat: type: string title: DeliveryFormat x-stoplight: id: xo5qi6jemvvhc enum: - PDF_URL - QRCODE description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF.' example: QRCODE examples: - QRCODE deliveryValue: type: string description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF. ' required: - deliveryFormat - deliveryValue required: - redemptionMethod - utcRedeemedAt - deliveryOptions description: '' - type: 'null' unitItems: type: array description: An array of unit items that will be included in the booking. items: type: object x-examples: example-1: uuid: 97525082-2498-4e61-b259-bc48e27a96ae resellerReference: 102-256952-3-Adult-2 supplierReference: J9T7R6 unitId: unit_8080415c-890c-4b38-a5af-0934d73e94d3 properties: uuid: type: string example: 3b1bc2ee-3155-4738-9471-f49842a07327 description: The id of the unit, this will be unique to the option. resellerReference: type: - string - 'null' example: 4ec08a62-892c-48c1-a608-dc946531a33b description: A reference the reseller uses to identify the unit within all bookings. supplierReference: type: - string - 'null' example: K9T7R5 description: A reference the supplier uses to identify the unit within all bookings. unitId: type: string example: youth_f6446706-885a-437c-8461-efd6d7080910 unit: type: object x-examples: example-1: id: unit_c1709f42-297e-4f7e-bd6b-3e77d4622d8a internalName: Adult reference: null type: ADULT requiredContactFields: [] examples: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 properties: id: type: string description: This MUST be a unique identifier within the scope of the option. example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: type: string example: Adult(s) description: This should be a name to help with identifying the unit. It should NOT be shown to the customer. reference: type: - 'null' - string description: This is an internal reference identifier that the Supplier wishes to use. It MAY be non-unique. example: LR1-01-new type: type: string title: UnitType x-stoplight: id: 9womjjbg9rhr7 enum: - ADULT - YOUTH - CHILD - INFANT - FAMILY - SENIOR - STUDENT - MILITARY - OTHER examples: - ADULT description: This is the base unit type for this unit definition. A value of TRAVELLER MUST only be used in replacement of `ADULT`, `CHILD`, `INFANT`, `YOUTH`, `STUDENT`, or `SENIOR`. example: YOUTH requiredContactFields: type: array description: This is the array of the contact information PER ticket that the supplier expects. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minAge: 0 maxAge: 100 idRequired: false minQuantity: 1 maxQuantity: null paxCount: 4 accompaniedBy: [] description: unit restrictions examples: - minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 title: UnitRestrictions properties: minAge: type: integer example: 3 description: This is the minumum age this unit can be sold to maxAge: type: integer example: 17 description: This is the maximum age this unit can be sold to idRequired: type: boolean description: This is whether a form of identification will be required at redemption point (eg. student card) minQuantity: type: - integer - 'null' example: 2 description: This is if there is a minimum amount of units to be chosen for purchase (eg. 2) maxQuantity: type: - 'null' - integer example: 7 description: This is if there is a maximum amount of units to be chosen for purchase (eg. 7) paxCount: type: integer description: This is the amount of people each unit counts as (eg. family == 4pax) example: 1 accompaniedBy: type: array description: This is if the unit needs to be accompanied by another unit (eg. Infant with Adult) items: type: string example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 required: - minAge - maxAge - idRequired - minQuantity - maxQuantity - paxCount - accompaniedBy required: - id - internalName - type - requiredContactFields - restrictions description: '' status: type: string title: BookingStatus x-stoplight: id: 8igglzvoke69w enum: - ON_HOLD - CONFIRMED - EXPIRED - CANCELLED - REDEEMED - PENDING - REJECTED example: CONFIRMED description: 'The status of the booking, possible values are: `ON_HOLD` The booking is pending confirmation, this is the default value when you first create the booking. `EXPIRED` If the booking is not confirmed before the expiration hold expires, it goes into an expired state. `CONFIRMED` Once the confirmation call is made the booking is ready to be used. `CANCELLED` If the booking is cancelled. `PENDING` If the booking is pending outside availability confirmation. `REDEEMED` If the booking is already redeemed.' examples: - CONFIRMED utcRedeemedAt: type: - 'null' - string description: The ISO8601 date in UTC indicating when the ticket was used at the attraction. contact: type: object x-examples: example-1: fullName: null firstName: null lastName: null emailAddress: null phoneNumber: null locales: [] postalCode: null country: null notes: null examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: null locales: - en postalCode: null country: null notes: null description: Contact details for the guests that will attend the tour/attraction. Contact schema can be applied to both the booking object (the main reservation) or the unit object (individual ticket holders - if the supplier requires this information) properties: fullName: type: - 'null' - string example: John Doe description: The full name of the booking holder or the ticket holder. Can also be retrieved as an alias for the concatenation of `firstName` and `lastName` firstName: type: - 'null' - string example: John description: The first name of the booking holder or the ticket holder. lastName: type: - 'null' - string example: Doe description: The last name of the booking holder or the ticket holder. emailAddress: type: - 'null' - string format: email description: The email address of the booking holder or the ticket holder. example: johndoe@email.com phoneNumber: type: - 'null' - string description: The phone number of the booking holder or the ticket holder. locales: type: array description: An array of locale values, equivalent to navigator.languages in a browsers environment. items: type: string example: en postalCode: type: - 'null' - string description: The PO Box of the booking holder or the ticket holder. country: type: - 'null' - string description: The country of the booking holder or the ticket holder. notes: type: - 'null' - string description: Optional notes for the booking. ticket: oneOf: - type: object x-examples: example-1: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: '!1|El3f0wUmcnrEmviMcR9qwqC9hvfrcWc6cZcRcrcR|yrirfZfqHPj40mvhpw2XzX|q7FF77QqFD7fDhr9' - deliveryFormat: PDF_URL deliveryValue: https://api.ventrata.com/octo/pdf?booking=36d2d844-121d-453c-b514-de027caaf27f&ticket=72419a19-c58c-46a0-b316-13509de43909 examples: - redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: string properties: redemptionMethod: type: string title: RedemptionMethod x-stoplight: id: jrrh8rbyzfuzm enum: - DIGITAL - PRINT - MANIFEST description: 'How the voucher can be redeemed. Possible values are: `MANIFEST` The guest name will be written down and they just need to show up `DIGITAL` The tickets/voucher must be scanned but can be on mobile `PRINT` The tickets/voucher must be printed and presented on arrival' examples: - DIGITAL utcRedeemedAt: type: - 'null' - string description: The ISO8601 date in UTC indicating when the ticket was used at the attraction. deliveryOptions: type: array items: type: object properties: deliveryFormat: type: string title: DeliveryFormat x-stoplight: id: xo5qi6jemvvhc enum: - PDF_URL - QRCODE description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF.' example: QRCODE examples: - QRCODE deliveryValue: type: string description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF. ' required: - deliveryFormat - deliveryValue required: - redemptionMethod - utcRedeemedAt - deliveryOptions description: '' - type: 'null' required: - uuid - resellerReference - supplierReference - unitId - unit - status - utcRedeemedAt - contact description: '' examples: - uuid: 3b1bc2ee-3155-4738-9471-f49842a07327 resellerReference: 4ec08a62-892c-48c1-a608-dc946531a33b supplierReference: K9T7R5 unitId: youth_f6446706-885a-437c-8461-efd6d7080910 unit: id: string internalName: string reference: null type: ADULT requiredContactFields: - firstName restrictions: minAge: 18 maxAge: 99 idRequired: false minQuantity: 0 maxQuantity: null paxCount: 0 accompaniedBy: [] status: CONFIRMED utcRedeemedAt: null contact: fullName: John Doe firstName: John lastName: Doe emailAddress: null phoneNumber: null locales: - en postalCode: null country: null notes: null ticket: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: string required: - id - uuid - testMode - resellerReference - supplierReference - status - utcCreatedAt - utcUpdatedAt - utcExpiresAt - utcRedeemedAt - utcConfirmedAt - productId - product - optionId - option - cancellable - cancellation - freesale - availabilityId - availability - contact - notes - deliveryMethods - unitItems examples: example-1: value: - id: 3ef65048-5ffe-474f-8a5c-fb35a9faa6ed uuid: 814d2566-2c71-4e6a-aaa9-59b9bf26cc0d testMode: true resellerReference: null supplierReference: RNSRSM status: CONFIRMED utcCreatedAt: '2022-05-25T11:07:05Z' utcUpdatedAt: '2022-05-25T11:09:32Z' utcExpiresAt: null utcRedeemedAt: null utcConfirmedAt: '2022-05-25T11:09:32Z' productId: '1' product: id: '1' internalName: PPU | OH reference: null locale: en timeZone: Europe/London allowFreesale: false instantConfirmation: true instantDelivery: true availabilityRequired: true availabilityType: OPENING_HOURS deliveryFormats: - PDF_URL - QRCODE deliveryMethods: - TICKET - VOUCHER redemptionMethod: DIGITAL options: - id: DEFAULT default: true internalName: DEFAULT reference: null availabilityLocalStartTimes: - 00:00 cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: null units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: null maxQuantity: null paxCount: 1 accompaniedBy: [] optionId: DEFAULT option: id: DEFAULT default: true internalName: DEFAULT reference: null availabilityLocalStartTimes: - 00:00 cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: null units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: null maxQuantity: null paxCount: 1 accompaniedBy: [] cancellable: true cancellation: null freesale: false availabilityId: '2022-04-30T00:00:00+01:00' availability: id: '2022-04-30T00:00:00+01:00' localDateTimeStart: '2022-04-30T00:00:00+01:00' localDateTimeEnd: '2022-05-01T00:00:00+01:00' allDay: true openingHours: - from: 09:00 to: '17:00' contact: fullName: John firstName: Doe lastName: null emailAddress: john.doe@email.com phoneNumber: null locales: [] country: null notes: null notes: null deliveryMethods: - TICKET - VOUCHER voucher: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: PDF_URL deliveryValue: https://api.octomock.com/octo/pdf?booking=814d2566-2c71-4e6a-aaa9-59b9bf26cc0d - deliveryFormat: QRCODE deliveryValue: RNSRSM unitItems: - uuid: a204e6de-7909-4bf2-b7a8-2884189534bc resellerReference: null supplierReference: 1LTYVC unit: id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: null maxQuantity: null paxCount: 1 accompaniedBy: [] unitId: adult status: ON_HOLD utcRedeemedAt: null contact: fullName: null firstName: null lastName: null emailAddress: null phoneNumber: null locales: [] country: null notes: null ticket: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: PDF_URL deliveryValue: https://api.octomock.com/octo/pdf?booking=814d2566-2c71-4e6a-aaa9-59b9bf26cc0d&ticket=a204e6de-7909-4bf2-b7a8-2884189534bc - deliveryFormat: QRCODE deliveryValue: 1LTYVC - uuid: 9116e598-6713-4cb5-8ba4-e5b839f7a5d5 resellerReference: null supplierReference: A89VR8 unit: id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: null maxQuantity: null paxCount: 1 accompaniedBy: [] unitId: adult status: ON_HOLD utcRedeemedAt: null contact: fullName: null firstName: null lastName: null emailAddress: null phoneNumber: null locales: [] country: null notes: null ticket: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: PDF_URL deliveryValue: https://api.octomock.com/octo/pdf?booking=814d2566-2c71-4e6a-aaa9-59b9bf26cc0d&ticket=9116e598-6713-4cb5-8ba4-e5b839f7a5d5 - deliveryFormat: QRCODE deliveryValue: A89VR8 '400': description: Example response content: application/json: schema: type: object x-examples: example-1: error: BAD_REQUEST errorMessage: either localDate, localDateStart/localDateEnd or availabilityIds is required additionalProperties: false properties: error: type: string errorMessage: type: string required: - error - errorMessage examples: example-1: value: error: BAD_REQUEST errorMessage: either resellerReference, supplierReference, localDate or localDateStart/localDateEnd is required security: - Auth: [] parameters: - schema: type: string in: query name: resellerReference description: The reseller reference on the booking - schema: type: string in: query name: supplierReference description: The reference provided by the supplier - schema: type: string in: query name: localDate description: All bookings made for a specific date - schema: type: string in: query name: localDateStart description: First date of a date range search - schema: type: string in: query name: localDateEnd description: Last date of a date range search - schema: type: string in: query name: productId description: The product id to filter by - schema: type: string in: query name: optionId description: The option id to filter by description: 'This endpoint will fetch the bookings you have made for the given filters. When using this endpoint you must include one of the following query parameters: - `resellerReference` - `supplierReference` - `localDate` - `localDateStart` and `localDateEnd`' /bookings/{uuid}/confirm: parameters: - schema: type: string name: uuid in: path required: true description: The UUID of the booking post: summary: Open Connectivity for Tours, Activities, and Attractions Booking Confirmation tags: - Bookings operationId: post-bookings-uuid-confirm responses: '200': description: OK content: application/json: schema: type: object x-examples: example-1: id: 36d2d844-121d-453c-b514-de027caaf27f uuid: 3698539b-65c4-41e3-95b1-fa108fd024b2 testMode: false resellerReference: 102-256952-3 supplierReference: 300SK9 status: CONFIRMED utcCreatedAt: '2021-10-27T23:28:43Z' utcUpdatedAt: '2021-10-27T23:28:45Z' utcExpiresAt: null utcRedeemedAt: null utcConfirmedAt: '2021-10-27T23:28:45Z' productId: 5379ce46-0620-42ce-b65c-70d6fc1c9ac2 examples: [] description: '' title: '' properties: id: type: string example: bbbb6227-54fc-4c32-9ed7-dc3eb99966ea description: A unique ID / UUID generated by the supplier system to identify the booking. uuid: type: string format: uuid example: 559aed3d-6d5b-4fe0-bfca-99f5e7218a56 description: A UUID you can set when generating the booking to use as an idempotency key. testMode: type: boolean description: If `TRUE`, booking was created on test mode resellerReference: type: - string - 'null' description: The reference set by the Reseller. A mandatory field for resellers to be set in the booking confirmation request. supplierReference: type: - string - 'null' description: The Supplier's / booking platform reference. status: type: string title: BookingStatus x-stoplight: id: 8igglzvoke69w enum: - ON_HOLD - CONFIRMED - EXPIRED - CANCELLED - REDEEMED - PENDING - REJECTED example: CONFIRMED description: 'The status of the booking, possible values are: `ON_HOLD` The booking is pending confirmation, this is the default value when you first create the booking. `EXPIRED` If the booking is not confirmed before the expiration hold expires, it goes into an expired state. `CONFIRMED` Once the confirmation call is made the booking is ready to be used. `CANCELLED` If the booking is cancelled. `PENDING` If the booking is pending outside availability confirmation. `REDEEMED` If the booking is already redeemed.' examples: - CONFIRMED utcCreatedAt: type: string example: '2021-10-27T23:28:43Z' description: An ISO8601 date time in UTC when the booking was created. utcUpdatedAt: type: - string - 'null' example: '2021-10-27T23:28:43Z' description: An ISO8601 date time in UTC when the booking was updated. utcExpiresAt: type: - string - 'null' description: An ISO8601 date times in UTC for when this booking is due to expire if the status is `ON_HOLD`. example: '2021-10-27T23:58:43Z' utcRedeemedAt: type: - string - 'null' description: An ISO8601 date time in UTC at when the booking was redeemed. utcConfirmedAt: type: - string - 'null' example: '2021-10-27T23:28:43Z' description: An ISO8601 date time in UTC when the booking was confirmed. productId: type: string example: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854 description: The product ID that identifies the product in the booking system to make this reservation. product: type: object x-examples: example-1: id: 28ca088b-bc7b-4746-ab06-5971f1ed5a5e internalName: Edinburgh Hop-On Hop-Off Bus Tour reference: null locale: en timeZone: Europe/London allowFreesale: true instantConfirmation: true instantDelivery: true availabilityRequired: false examples: - id: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854 internalName: Amazon River Tour reference: AMZN locale: en-GB timeZone: Europe/London allowFreesale: true instantConfirmation: true instantDelivery: true availabilityRequired: true availabilityType: START_TIME deliveryFormats: - QRCODE deliveryMethods: - VOUCHER redemptionMethod: DIGITAL options: - id: DEFAULT default: true internalName: Private Morning Tour reference: VIP-MORN availabilityLocalStartTimes: - 09:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: - firstName restrictions: minUnits: 'null' maxUnits: 10 units: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 description: A bookable product listed by a supplier. properties: id: type: string example: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854 description: The id used for checking for availability and creating bookings for the product. This MUST be unique within the scope of the Supplier. internalName: type: string description: The name the supplier calls the product. example: Amazon River Tour reference: type: - 'null' - string description: An optional code this supplier might use to identify the product. example: AMZN locale: type: string example: en-GB description: A language code indicating what language this product content is in. This MUST be a valid BCP 47 RFC 5646 RFC 4647 language tag. timeZone: type: string example: Europe/London description: The IANA TimeZone name this product is located in. allowFreesale: type: boolean description: Whether a booking can be made for this product without having to query availability first. instantConfirmation: type: boolean description: Whether bookings will be immediately confirmed when a sale is made, otherwise the supplier will later either accept or reject the booking. When `instantConfirmation` is set to false one should expect created bookings to first get into a `PENDING` state. instantDelivery: type: boolean description: This indicates whether the Reseller can expect immediate delivery of the customer's tickets. If `false` then the Reseller MUST be able to delay delivery of the tickets to the customer. availabilityRequired: type: boolean description: Whether an `availabilityId` is required when creating a booking. Without this the booking will be open-dated and not have a specified travel date. availabilityType: type: string title: AvailabilityType x-stoplight: id: n70vwjh7kvmxk enum: - START_TIME - OPENING_HOURS description: 'What type of availability this product has, possible values are: `START_TIME` if there are fixed departure times which you must pick one. Typical for day tours or activities. `OPENING_HOURS` if you just select a date and can visit any time when the venue is open.' example: START_TIME examples: - START_TIME deliveryFormats: type: array description: 'An array of formats the API will deliver the tickets as. Possible values are: `QRCODE` A code to be presented as a QR CODE barcode `CODE128A` code to be presented as a CODE 128 barcode `PDF_URL` A URL to a PDF file which contains all the ticket details' items: type: string title: DeliveryFormat x-stoplight: id: xo5qi6jemvvhc enum: - PDF_URL - QRCODE description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF.' example: QRCODE examples: - QRCODE deliveryMethods: type: array description: 'How the formats described in `deliveryFormats` will be delivered in the booking response, possible values are: `TICKET`: Individually per unit in the order (i.e. single ticket for each person) `VOUCHER`: One ticket for the whole booking' items: type: string title: DeliveryMethod x-stoplight: id: tdh9akr9neqhb enum: - VOUCHER - TICKET description: 'An array of delivery methods available for this booking. Possible values are: `VOUCHER` The voucher object is populated which is a single ticket for the whole booking. `TICKET` The ticket object is populated on each unit item which is a ticket for each individual person. If `booking.deliveryMethods` contains both `TICKET` and `VOUCHER` then both those values will be set.' examples: - VOUCHER redemptionMethod: type: string title: RedemptionMethod x-stoplight: id: jrrh8rbyzfuzm enum: - DIGITAL - PRINT - MANIFEST description: 'How the voucher can be redeemed. Possible values are: `MANIFEST` The guest name will be written down and they just need to show up `DIGITAL` The tickets/voucher must be scanned but can be on mobile `PRINT` The tickets/voucher must be printed and presented on arrival' examples: - DIGITAL options: type: array description: An array of all options for this product. All products must have at least one option. items: type: object x-examples: example-1: id: DEFAULT default: true internalName: DEFAULT reference: null availabilityLocalStartTimes: - 00:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: [] examples: - id: DEFAULT default: true internalName: Private Morning Tour reference: VIP-MORN availabilityLocalStartTimes: - 09:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: - firstName restrictions: minUnits: 'null' maxUnits: 10 units: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 description: Product options are subdivisions of the original product that will affect price and / or duration. Within the OCTo spec, every product must contain an option. properties: id: type: string example: DEFAULT description: The id that identifies this option, it is only unique within the product. default: type: boolean description: '`TRUE` identifies the option as default, and should therefore rendered and selected first' internalName: type: string description: The name the supplier calls the option by. example: Private Morning Tour reference: type: - 'null' - string description: An optional code this supplier might use to identify the product. example: VIP-MORN availabilityLocalStartTimes: type: array description: This will be an array of all possible start times that can be returned during availability. For example an all day attraction may have a single value like `["00:00"]` whilst a tour with multiple departure times may have multiple:`["09:00", "14:00", "17:00"]`. items: type: string default: 00:00 example: 09:00 cancellationCutoff: type: string example: 1 hour description: This is how long before the tour the booking can be still be cancelled. cancellationCutoffAmount: type: integer example: 1 description: The numeric amount for the cutoff. cancellationCutoffUnit: type: string title: DurationUnit x-stoplight: id: etuhjhtharyrt enum: - hour - minute - day example: hour description: 'Time units used to determine duration. Three values are available: `hour`, `minute`, `day`.' examples: - hour requiredContactFields: type: array description: An array of the contact fields required to confirm a booking. These just apply to the lead traveller on the booking and not for every ticket. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minUnits: 0 maxUnits: 9 description: An object containing a fixed list of restrictions for booking the option. examples: - minUnits: null maxUnits: 10 properties: minUnits: type: - integer - 'null' example: 0 description: The minimum number of tickets that can be purchased in a single booking (null = 0). maxUnits: type: - integer - 'null' example: 10 description: The maximum number of tickets that can be purchased in a single booking (null = unlimited). required: - minUnits - maxUnits units: type: array description: The list of ticket types (units) available for sale. items: type: object x-examples: example-1: id: unit_c1709f42-297e-4f7e-bd6b-3e77d4622d8a internalName: Adult reference: null type: ADULT requiredContactFields: [] examples: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 properties: id: type: string description: This MUST be a unique identifier within the scope of the option. example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: type: string example: Adult(s) description: This should be a name to help with identifying the unit. It should NOT be shown to the customer. reference: type: - 'null' - string description: This is an internal reference identifier that the Supplier wishes to use. It MAY be non-unique. example: LR1-01-new type: type: string title: UnitType x-stoplight: id: 9womjjbg9rhr7 enum: - ADULT - YOUTH - CHILD - INFANT - FAMILY - SENIOR - STUDENT - MILITARY - OTHER examples: - ADULT description: This is the base unit type for this unit definition. A value of TRAVELLER MUST only be used in replacement of `ADULT`, `CHILD`, `INFANT`, `YOUTH`, `STUDENT`, or `SENIOR`. example: YOUTH requiredContactFields: type: array description: This is the array of the contact information PER ticket that the supplier expects. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minAge: 0 maxAge: 100 idRequired: false minQuantity: 1 maxQuantity: null paxCount: 4 accompaniedBy: [] description: unit restrictions examples: - minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 title: UnitRestrictions properties: minAge: type: integer example: 3 description: This is the minumum age this unit can be sold to maxAge: type: integer example: 17 description: This is the maximum age this unit can be sold to idRequired: type: boolean description: This is whether a form of identification will be required at redemption point (eg. student card) minQuantity: type: - integer - 'null' example: 2 description: This is if there is a minimum amount of units to be chosen for purchase (eg. 2) maxQuantity: type: - 'null' - integer example: 7 description: This is if there is a maximum amount of units to be chosen for purchase (eg. 7) paxCount: type: integer description: This is the amount of people each unit counts as (eg. family == 4pax) example: 1 accompaniedBy: type: array description: This is if the unit needs to be accompanied by another unit (eg. Infant with Adult) items: type: string example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 required: - minAge - maxAge - idRequired - minQuantity - maxQuantity - paxCount - accompaniedBy required: - id - internalName - type - requiredContactFields - restrictions description: '' required: - id - default - internalName - reference - availabilityLocalStartTimes - cancellationCutoff - cancellationCutoffAmount - cancellationCutoffUnit - requiredContactFields - restrictions - units required: - id - internalName - reference - locale - allowFreesale - instantConfirmation - instantDelivery - availabilityRequired - availabilityType - deliveryFormats - deliveryMethods - redemptionMethod - options optionId: type: string example: DEFAULT description: The product ID that identifies the product option in the booking system to make this reservation. option: type: object x-examples: example-1: id: DEFAULT default: true internalName: DEFAULT reference: null availabilityLocalStartTimes: - 00:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: [] examples: - id: DEFAULT default: true internalName: Private Morning Tour reference: VIP-MORN availabilityLocalStartTimes: - 09:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: - firstName restrictions: minUnits: 'null' maxUnits: 10 units: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 description: Product options are subdivisions of the original product that will affect price and / or duration. Within the OCTo spec, every product must contain an option. properties: id: type: string example: DEFAULT description: The id that identifies this option, it is only unique within the product. default: type: boolean description: '`TRUE` identifies the option as default, and should therefore rendered and selected first' internalName: type: string description: The name the supplier calls the option by. example: Private Morning Tour reference: type: - 'null' - string description: An optional code this supplier might use to identify the product. example: VIP-MORN availabilityLocalStartTimes: type: array description: This will be an array of all possible start times that can be returned during availability. For example an all day attraction may have a single value like `["00:00"]` whilst a tour with multiple departure times may have multiple:`["09:00", "14:00", "17:00"]`. items: type: string default: 00:00 example: 09:00 cancellationCutoff: type: string example: 1 hour description: This is how long before the tour the booking can be still be cancelled. cancellationCutoffAmount: type: integer example: 1 description: The numeric amount for the cutoff. cancellationCutoffUnit: type: string title: DurationUnit x-stoplight: id: etuhjhtharyrt enum: - hour - minute - day example: hour description: 'Time units used to determine duration. Three values are available: `hour`, `minute`, `day`.' examples: - hour requiredContactFields: type: array description: An array of the contact fields required to confirm a booking. These just apply to the lead traveller on the booking and not for every ticket. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minUnits: 0 maxUnits: 9 description: An object containing a fixed list of restrictions for booking the option. examples: - minUnits: null maxUnits: 10 properties: minUnits: type: - integer - 'null' example: 0 description: The minimum number of tickets that can be purchased in a single booking (null = 0). maxUnits: type: - integer - 'null' example: 10 description: The maximum number of tickets that can be purchased in a single booking (null = unlimited). required: - minUnits - maxUnits units: type: array description: The list of ticket types (units) available for sale. items: type: object x-examples: example-1: id: unit_c1709f42-297e-4f7e-bd6b-3e77d4622d8a internalName: Adult reference: null type: ADULT requiredContactFields: [] examples: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 properties: id: type: string description: This MUST be a unique identifier within the scope of the option. example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: type: string example: Adult(s) description: This should be a name to help with identifying the unit. It should NOT be shown to the customer. reference: type: - 'null' - string description: This is an internal reference identifier that the Supplier wishes to use. It MAY be non-unique. example: LR1-01-new type: type: string title: UnitType x-stoplight: id: 9womjjbg9rhr7 enum: - ADULT - YOUTH - CHILD - INFANT - FAMILY - SENIOR - STUDENT - MILITARY - OTHER examples: - ADULT description: This is the base unit type for this unit definition. A value of TRAVELLER MUST only be used in replacement of `ADULT`, `CHILD`, `INFANT`, `YOUTH`, `STUDENT`, or `SENIOR`. example: YOUTH requiredContactFields: type: array description: This is the array of the contact information PER ticket that the supplier expects. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minAge: 0 maxAge: 100 idRequired: false minQuantity: 1 maxQuantity: null paxCount: 4 accompaniedBy: [] description: unit restrictions examples: - minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 title: UnitRestrictions properties: minAge: type: integer example: 3 description: This is the minumum age this unit can be sold to maxAge: type: integer example: 17 description: This is the maximum age this unit can be sold to idRequired: type: boolean description: This is whether a form of identification will be required at redemption point (eg. student card) minQuantity: type: - integer - 'null' example: 2 description: This is if there is a minimum amount of units to be chosen for purchase (eg. 2) maxQuantity: type: - 'null' - integer example: 7 description: This is if there is a maximum amount of units to be chosen for purchase (eg. 7) paxCount: type: integer description: This is the amount of people each unit counts as (eg. family == 4pax) example: 1 accompaniedBy: type: array description: This is if the unit needs to be accompanied by another unit (eg. Infant with Adult) items: type: string example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 required: - minAge - maxAge - idRequired - minQuantity - maxQuantity - paxCount - accompaniedBy required: - id - internalName - type - requiredContactFields - restrictions description: '' required: - id - default - internalName - reference - availabilityLocalStartTimes - cancellationCutoff - cancellationCutoffAmount - cancellationCutoffUnit - requiredContactFields - restrictions - units cancellable: type: boolean description: A boolean field indicating whether this booking can be cancelled. cancellation: type: - 'null' - object description: An object with information about why and when the booking was cancelled. This is `NULL` if the booking is not cancelled. required: - refund - reason - utcCancelledAt properties: refund: type: string description: Whether the booking was refunded as part of the cancellation. Possible values are `FULL`, `PARTIAL` or `NONE` reason: type: - 'null' - string description: A text value describing why the cancellation happened. utcCancelledAt: type: string example: '2021-10-27T23:38:43Z' description: An ISO8601 date time in UTC indicating when the booking was cancelled. freesale: type: boolean description: Whether the booking was made as freesale (without checking availability first). availabilityId: type: string description: The availability id that was used in the request. availability: type: object description: 'The availability object that was booked. ' required: - id - localDateTimeStart - localDateTimeEnd - allDay - openingHours properties: id: type: string example: '2021-10-27T00:00:00-04:00' description: The availability id that was used in the request. localDateTimeStart: type: string example: '2021-10-27T00:00:00-04:00' description: The `localDateTimeStart` value from the original availability object. localDateTimeEnd: type: string example: '2021-10-28T00:00:00-04:00' description: The `localDateTimeEnd` value from the original availability object. allDay: type: boolean description: A boolean value indicating whether the availability is all day. openingHours: type: array description: The opening hours from the original availability object. items: type: object x-examples: example-1: from: 08:00 to: '18:30' description: A list of opening hours that the product is open on this day. properties: from: type: string example: 08:00 description: When this product opens (HH:MM) to: type: string example: '16:00' description: When this product closes (HH:MM) required: - from - to examples: - from: 08:00 to: '16:00' contact: type: object x-examples: example-1: fullName: null firstName: null lastName: null emailAddress: null phoneNumber: null locales: [] postalCode: null country: null notes: null examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: null locales: - en postalCode: null country: null notes: null description: Contact details for the guests that will attend the tour/attraction. Contact schema can be applied to both the booking object (the main reservation) or the unit object (individual ticket holders - if the supplier requires this information) properties: fullName: type: - 'null' - string example: John Doe description: The full name of the booking holder or the ticket holder. Can also be retrieved as an alias for the concatenation of `firstName` and `lastName` firstName: type: - 'null' - string example: John description: The first name of the booking holder or the ticket holder. lastName: type: - 'null' - string example: Doe description: The last name of the booking holder or the ticket holder. emailAddress: type: - 'null' - string format: email description: The email address of the booking holder or the ticket holder. example: johndoe@email.com phoneNumber: type: - 'null' - string description: The phone number of the booking holder or the ticket holder. locales: type: array description: An array of locale values, equivalent to navigator.languages in a browsers environment. items: type: string example: en postalCode: type: - 'null' - string description: The PO Box of the booking holder or the ticket holder. country: type: - 'null' - string description: The country of the booking holder or the ticket holder. notes: type: - 'null' - string description: Optional notes for the booking. notes: type: - string - 'null' example: Optional notes for the booking deliveryMethods: type: array description: An array of delivery methods available for this booking. items: type: string title: DeliveryMethod x-stoplight: id: tdh9akr9neqhb enum: - VOUCHER - TICKET description: 'An array of delivery methods available for this booking. Possible values are: `VOUCHER` The voucher object is populated which is a single ticket for the whole booking. `TICKET` The ticket object is populated on each unit item which is a ticket for each individual person. If `booking.deliveryMethods` contains both `TICKET` and `VOUCHER` then both those values will be set.' examples: - VOUCHER voucher: oneOf: - type: object x-examples: example-1: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: '!1|El3f0wUmcnrEmviMcR9qwqC9hvfrcWc6cZcRcrcR|yrirfZfqHPj40mvhpw2XzX|q7FF77QqFD7fDhr9' - deliveryFormat: PDF_URL deliveryValue: https://api.ventrata.com/octo/pdf?booking=36d2d844-121d-453c-b514-de027caaf27f&ticket=72419a19-c58c-46a0-b316-13509de43909 examples: - redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: string properties: redemptionMethod: type: string title: RedemptionMethod x-stoplight: id: jrrh8rbyzfuzm enum: - DIGITAL - PRINT - MANIFEST description: 'How the voucher can be redeemed. Possible values are: `MANIFEST` The guest name will be written down and they just need to show up `DIGITAL` The tickets/voucher must be scanned but can be on mobile `PRINT` The tickets/voucher must be printed and presented on arrival' examples: - DIGITAL utcRedeemedAt: type: - 'null' - string description: The ISO8601 date in UTC indicating when the ticket was used at the attraction. deliveryOptions: type: array items: type: object properties: deliveryFormat: type: string title: DeliveryFormat x-stoplight: id: xo5qi6jemvvhc enum: - PDF_URL - QRCODE description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF.' example: QRCODE examples: - QRCODE deliveryValue: type: string description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF. ' required: - deliveryFormat - deliveryValue required: - redemptionMethod - utcRedeemedAt - deliveryOptions description: '' - type: 'null' unitItems: type: array description: An array of unit items that will be included in the booking. items: type: object x-examples: example-1: uuid: 97525082-2498-4e61-b259-bc48e27a96ae resellerReference: 102-256952-3-Adult-2 supplierReference: J9T7R6 unitId: unit_8080415c-890c-4b38-a5af-0934d73e94d3 properties: uuid: type: string example: 3b1bc2ee-3155-4738-9471-f49842a07327 description: The id of the unit, this will be unique to the option. resellerReference: type: - string - 'null' example: 4ec08a62-892c-48c1-a608-dc946531a33b description: A reference the reseller uses to identify the unit within all bookings. supplierReference: type: - string - 'null' example: K9T7R5 description: A reference the supplier uses to identify the unit within all bookings. unitId: type: string example: youth_f6446706-885a-437c-8461-efd6d7080910 unit: type: object x-examples: example-1: id: unit_c1709f42-297e-4f7e-bd6b-3e77d4622d8a internalName: Adult reference: null type: ADULT requiredContactFields: [] examples: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 properties: id: type: string description: This MUST be a unique identifier within the scope of the option. example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: type: string example: Adult(s) description: This should be a name to help with identifying the unit. It should NOT be shown to the customer. reference: type: - 'null' - string description: This is an internal reference identifier that the Supplier wishes to use. It MAY be non-unique. example: LR1-01-new type: type: string title: UnitType x-stoplight: id: 9womjjbg9rhr7 enum: - ADULT - YOUTH - CHILD - INFANT - FAMILY - SENIOR - STUDENT - MILITARY - OTHER examples: - ADULT description: This is the base unit type for this unit definition. A value of TRAVELLER MUST only be used in replacement of `ADULT`, `CHILD`, `INFANT`, `YOUTH`, `STUDENT`, or `SENIOR`. example: YOUTH requiredContactFields: type: array description: This is the array of the contact information PER ticket that the supplier expects. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minAge: 0 maxAge: 100 idRequired: false minQuantity: 1 maxQuantity: null paxCount: 4 accompaniedBy: [] description: unit restrictions examples: - minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 title: UnitRestrictions properties: minAge: type: integer example: 3 description: This is the minumum age this unit can be sold to maxAge: type: integer example: 17 description: This is the maximum age this unit can be sold to idRequired: type: boolean description: This is whether a form of identification will be required at redemption point (eg. student card) minQuantity: type: - integer - 'null' example: 2 description: This is if there is a minimum amount of units to be chosen for purchase (eg. 2) maxQuantity: type: - 'null' - integer example: 7 description: This is if there is a maximum amount of units to be chosen for purchase (eg. 7) paxCount: type: integer description: This is the amount of people each unit counts as (eg. family == 4pax) example: 1 accompaniedBy: type: array description: This is if the unit needs to be accompanied by another unit (eg. Infant with Adult) items: type: string example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 required: - minAge - maxAge - idRequired - minQuantity - maxQuantity - paxCount - accompaniedBy required: - id - internalName - type - requiredContactFields - restrictions description: '' status: type: string title: BookingStatus x-stoplight: id: 8igglzvoke69w enum: - ON_HOLD - CONFIRMED - EXPIRED - CANCELLED - REDEEMED - PENDING - REJECTED example: CONFIRMED description: 'The status of the booking, possible values are: `ON_HOLD` The booking is pending confirmation, this is the default value when you first create the booking. `EXPIRED` If the booking is not confirmed before the expiration hold expires, it goes into an expired state. `CONFIRMED` Once the confirmation call is made the booking is ready to be used. `CANCELLED` If the booking is cancelled. `PENDING` If the booking is pending outside availability confirmation. `REDEEMED` If the booking is already redeemed.' examples: - CONFIRMED utcRedeemedAt: type: - 'null' - string description: The ISO8601 date in UTC indicating when the ticket was used at the attraction. contact: type: object x-examples: example-1: fullName: null firstName: null lastName: null emailAddress: null phoneNumber: null locales: [] postalCode: null country: null notes: null examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: null locales: - en postalCode: null country: null notes: null description: Contact details for the guests that will attend the tour/attraction. Contact schema can be applied to both the booking object (the main reservation) or the unit object (individual ticket holders - if the supplier requires this information) properties: fullName: type: - 'null' - string example: John Doe description: The full name of the booking holder or the ticket holder. Can also be retrieved as an alias for the concatenation of `firstName` and `lastName` firstName: type: - 'null' - string example: John description: The first name of the booking holder or the ticket holder. lastName: type: - 'null' - string example: Doe description: The last name of the booking holder or the ticket holder. emailAddress: type: - 'null' - string format: email description: The email address of the booking holder or the ticket holder. example: johndoe@email.com phoneNumber: type: - 'null' - string description: The phone number of the booking holder or the ticket holder. locales: type: array description: An array of locale values, equivalent to navigator.languages in a browsers environment. items: type: string example: en postalCode: type: - 'null' - string description: The PO Box of the booking holder or the ticket holder. country: type: - 'null' - string description: The country of the booking holder or the ticket holder. notes: type: - 'null' - string description: Optional notes for the booking. ticket: oneOf: - type: object x-examples: example-1: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: '!1|El3f0wUmcnrEmviMcR9qwqC9hvfrcWc6cZcRcrcR|yrirfZfqHPj40mvhpw2XzX|q7FF77QqFD7fDhr9' - deliveryFormat: PDF_URL deliveryValue: https://api.ventrata.com/octo/pdf?booking=36d2d844-121d-453c-b514-de027caaf27f&ticket=72419a19-c58c-46a0-b316-13509de43909 examples: - redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: string properties: redemptionMethod: type: string title: RedemptionMethod x-stoplight: id: jrrh8rbyzfuzm enum: - DIGITAL - PRINT - MANIFEST description: 'How the voucher can be redeemed. Possible values are: `MANIFEST` The guest name will be written down and they just need to show up `DIGITAL` The tickets/voucher must be scanned but can be on mobile `PRINT` The tickets/voucher must be printed and presented on arrival' examples: - DIGITAL utcRedeemedAt: type: - 'null' - string description: The ISO8601 date in UTC indicating when the ticket was used at the attraction. deliveryOptions: type: array items: type: object properties: deliveryFormat: type: string title: DeliveryFormat x-stoplight: id: xo5qi6jemvvhc enum: - PDF_URL - QRCODE description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF.' example: QRCODE examples: - QRCODE deliveryValue: type: string description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF. ' required: - deliveryFormat - deliveryValue required: - redemptionMethod - utcRedeemedAt - deliveryOptions description: '' - type: 'null' required: - uuid - resellerReference - supplierReference - unitId - unit - status - utcRedeemedAt - contact description: '' examples: - uuid: 3b1bc2ee-3155-4738-9471-f49842a07327 resellerReference: 4ec08a62-892c-48c1-a608-dc946531a33b supplierReference: K9T7R5 unitId: youth_f6446706-885a-437c-8461-efd6d7080910 unit: id: string internalName: string reference: null type: ADULT requiredContactFields: - firstName restrictions: minAge: 18 maxAge: 99 idRequired: false minQuantity: 0 maxQuantity: null paxCount: 0 accompaniedBy: [] status: CONFIRMED utcRedeemedAt: null contact: fullName: John Doe firstName: John lastName: Doe emailAddress: null phoneNumber: null locales: - en postalCode: null country: null notes: null ticket: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: string required: - id - uuid - testMode - resellerReference - supplierReference - status - utcCreatedAt - utcUpdatedAt - utcExpiresAt - utcRedeemedAt - utcConfirmedAt - productId - product - optionId - option - cancellable - cancellation - freesale - availabilityId - availability - contact - notes - deliveryMethods - unitItems examples: CONFIRMED: value: id: 3ac5450f-8511-4386-9feb-17ce4f9e1f86 uuid: ec0ce0c2-03f0-4c64-bbc5-5e0f7d1e1c0a testMode: true resellerReference: null supplierReference: ALG6RQ status: CONFIRMED utcCreatedAt: '2022-05-25T11:03:22Z' utcUpdatedAt: '2022-05-25T11:03:31Z' utcExpiresAt: null utcRedeemedAt: null utcConfirmedAt: '2022-05-25T11:03:31Z' productId: '1' product: id: '1' internalName: PPU | OH reference: null locale: en timeZone: Europe/London allowFreesale: false instantConfirmation: true instantDelivery: true availabilityRequired: true availabilityType: OPENING_HOURS deliveryFormats: - PDF_URL - QRCODE deliveryMethods: - TICKET - VOUCHER redemptionMethod: DIGITAL options: - id: DEFAULT default: true internalName: DEFAULT reference: null availabilityLocalStartTimes: - 00:00 cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: null units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: null maxQuantity: null paxCount: 1 accompaniedBy: [] optionId: DEFAULT option: id: DEFAULT default: true internalName: DEFAULT reference: null availabilityLocalStartTimes: - 00:00 cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: null units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: null maxQuantity: null paxCount: 1 accompaniedBy: [] cancellable: true cancellation: null freesale: false availabilityId: '2022-04-30T00:00:00+01:00' availability: id: '2022-04-30T00:00:00+01:00' localDateTimeStart: '2022-04-30T00:00:00+01:00' localDateTimeEnd: '2022-05-01T00:00:00+01:00' allDay: true openingHours: - from: 09:00 to: '17:00' contact: fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: null locales: [] country: null notes: null notes: null deliveryMethods: - TICKET - VOUCHER voucher: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: PDF_URL deliveryValue: https://api.octomock.com/octo/pdf?booking=ec0ce0c2-03f0-4c64-bbc5-5e0f7d1e1c0a - deliveryFormat: QRCODE deliveryValue: ALG6RQ unitItems: - uuid: 25ec5429-d563-45f9-ba5b-85b03edbf65e resellerReference: null supplierReference: EO6Q0P unit: id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: null maxQuantity: null paxCount: 1 accompaniedBy: [] unitId: adult status: ON_HOLD utcRedeemedAt: null contact: fullName: null firstName: null lastName: null emailAddress: null phoneNumber: null locales: [] country: null notes: null ticket: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: PDF_URL deliveryValue: https://api.octomock.com/octo/pdf?booking=ec0ce0c2-03f0-4c64-bbc5-5e0f7d1e1c0a&ticket=25ec5429-d563-45f9-ba5b-85b03edbf65e - deliveryFormat: QRCODE deliveryValue: EO6Q0P '400': description: Example response content: application/json: schema: type: object properties: error: type: string errorMessage: type: string productId: type: string optionId: type: string unitId: type: string uuid: type: string required: - error - errorMessage examples: INVALID_PRODUCT_ID: value: error: INVALID_PRODUCT_ID errorMessage: The productId was missing or invalid productId: cc2a6d56-6efe-426f-99c9-6eb10e341565 INVALID_OPTION_ID: value: error: INVALID_OPTION_ID errorMessage: The optionId was missing or invalid optionId: 681fea0f-196e-45da-bec7-467bfacb1d87 INVALID_UNIT_ID: value: error: INVALID_UNIT_ID errorMessage: The unitId was missing or invalid unitId: senior INVALID_AVAILABILITY_ID: value: error: INVALID_AVAILABILITY_ID errorMessage: The availabilityId was missing or invalid availabilityId: '2022-03-12T00:00:00+00:00' INVALID_BOOKING_UUID: value: error: INVALID_BOOKING_UUID errorMessage: The uuid was already used, missing or invalid uuid: bbbb6227-54fc-4c32-9ed7-dc3eb99966ea UNPROCESSABLE_ENTITY: value: error: UNPROCESSABLE_ENTITY errorMessage: The request body is technically correct but cannot be processed for other reasons. e.g. you tried to cancel a booking after the cancellation cutoff had elapsed security: - Auth: [] description: This endpoint confirms the booking so it's ready to be used. parameters: - schema: type: string enum: - application/json in: header name: Content-Type description: Required field on all POST requests requestBody: content: application/json: schema: type: object properties: emailReceipt: type: boolean description: Whether you want OCTO Cloud to email the guest a copy of their receipt and tickets. (defaults to false) resellerReference: type: string description: Your reference for this booking. Also known as a Voucher Number. example: 4ec08a62-892c-48c1-a608-dc946531a33b contact: type: object description: Contact details for the main guest who will attend the tour/attraction. Contact schema can be applied to both the booking object (the main reservation) or the unit object (individual ticket holders - if the supplier requires this information). properties: fullName: type: string description: The full name of the booking holder. Can also be retrieved as an alias for the concatenation of firstName and lastName. example: John Doe firstName: type: string description: The first name of the booking holder. example: John lastName: type: string description: The last name of the booking holder. example: Doe emailAddress: type: string description: The email address of the booking holder. format: email example: johndoe@email.com phoneNumber: type: string description: The phone number of the booking holder. locales: type: array description: An array of locale values, equivalent to `navigator.languages` in a browsers environment. items: type: string example: '["en"]' postalCode: type: string description: The PO Box of the booking holder. country: type: string description: The country of the booking holder. notes: type: string description: Optional notes for the booking holder. unitItems: type: array description: An array of unit items that will be included in the booking. This allows you to provide contact details or a reseller reference for each unit item. Be careful to make sure you include ALL unit items that you also had in the original booking reservation request, if you provide more or less than in the booking reservation call this will change the number of unit items being purchased also. items: type: object properties: uuid: type: string description: A unique UUID to identify the unit, same as the booking uuid except per unit. unitId: type: string description: The unit item unit ID. resellerReference: type: string description: A reference the reseller uses to identify the unit within all bookings. contact: type: object description: Contact details for the main guest who will attend the tour/attraction. Contact schema can be applied to both the booking object (the main reservation) or the unit object (individual ticket holders - if the supplier requires this information). properties: fullName: type: string description: The full name of the ticket holder. Can also be retrieved as an alias for the concatenation of firstName and lastName. example: John Doe firstName: type: string description: The first name of the ticket holder. example: John lastName: type: string description: The last name of the ticket holder. example: Doe emailAddress: type: string description: The email address of the ticket holder. example: johndoe@gmail.com phoneNumber: type: string description: The phone number of the ticket holder. locales: type: array description: An array of locale values, equivalent to `navigator.languages` in a browsers environment. items: type: string example: '["en"]' postalCode: type: string description: The PO Box of the ticket holder. country: type: string description: The country of the ticket holder. notes: type: string description: Optional notes for the ticket holder. required: - unitId required: - contact examples: Confirmation: value: resellerReference: VOUCHER-0123 contact: fullName: Oliver Morgan emailAddress: ollym@me.com phoneNumber: '+447840739436' locales: - en-GB - en-US - en country: GB description: '' /bookings/{uuid}/cancel: post: summary: Open Connectivity for Tours, Activities, and Attractions Booking Cancellation tags: - Bookings operationId: delete-bookings-:uuid responses: '200': description: OK content: application/json: schema: type: object x-examples: example-1: id: 36d2d844-121d-453c-b514-de027caaf27f uuid: 3698539b-65c4-41e3-95b1-fa108fd024b2 testMode: false resellerReference: 102-256952-3 supplierReference: 300SK9 status: CONFIRMED utcCreatedAt: '2021-10-27T23:28:43Z' utcUpdatedAt: '2021-10-27T23:28:45Z' utcExpiresAt: null utcRedeemedAt: null utcConfirmedAt: '2021-10-27T23:28:45Z' productId: 5379ce46-0620-42ce-b65c-70d6fc1c9ac2 examples: [] description: '' title: '' properties: id: type: string example: bbbb6227-54fc-4c32-9ed7-dc3eb99966ea description: A unique ID / UUID generated by the supplier system to identify the booking. uuid: type: string format: uuid example: 559aed3d-6d5b-4fe0-bfca-99f5e7218a56 description: A UUID you can set when generating the booking to use as an idempotency key. testMode: type: boolean description: If `TRUE`, booking was created on test mode resellerReference: type: - string - 'null' description: The reference set by the Reseller. A mandatory field for resellers to be set in the booking confirmation request. supplierReference: type: - string - 'null' description: The Supplier's / booking platform reference. status: type: string title: BookingStatus x-stoplight: id: 8igglzvoke69w enum: - ON_HOLD - CONFIRMED - EXPIRED - CANCELLED - REDEEMED - PENDING - REJECTED example: CONFIRMED description: 'The status of the booking, possible values are: `ON_HOLD` The booking is pending confirmation, this is the default value when you first create the booking. `EXPIRED` If the booking is not confirmed before the expiration hold expires, it goes into an expired state. `CONFIRMED` Once the confirmation call is made the booking is ready to be used. `CANCELLED` If the booking is cancelled. `PENDING` If the booking is pending outside availability confirmation. `REDEEMED` If the booking is already redeemed.' examples: - CONFIRMED utcCreatedAt: type: string example: '2021-10-27T23:28:43Z' description: An ISO8601 date time in UTC when the booking was created. utcUpdatedAt: type: - string - 'null' example: '2021-10-27T23:28:43Z' description: An ISO8601 date time in UTC when the booking was updated. utcExpiresAt: type: - string - 'null' description: An ISO8601 date times in UTC for when this booking is due to expire if the status is `ON_HOLD`. example: '2021-10-27T23:58:43Z' utcRedeemedAt: type: - string - 'null' description: An ISO8601 date time in UTC at when the booking was redeemed. utcConfirmedAt: type: - string - 'null' example: '2021-10-27T23:28:43Z' description: An ISO8601 date time in UTC when the booking was confirmed. productId: type: string example: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854 description: The product ID that identifies the product in the booking system to make this reservation. product: type: object x-examples: example-1: id: 28ca088b-bc7b-4746-ab06-5971f1ed5a5e internalName: Edinburgh Hop-On Hop-Off Bus Tour reference: null locale: en timeZone: Europe/London allowFreesale: true instantConfirmation: true instantDelivery: true availabilityRequired: false examples: - id: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854 internalName: Amazon River Tour reference: AMZN locale: en-GB timeZone: Europe/London allowFreesale: true instantConfirmation: true instantDelivery: true availabilityRequired: true availabilityType: START_TIME deliveryFormats: - QRCODE deliveryMethods: - VOUCHER redemptionMethod: DIGITAL options: - id: DEFAULT default: true internalName: Private Morning Tour reference: VIP-MORN availabilityLocalStartTimes: - 09:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: - firstName restrictions: minUnits: 'null' maxUnits: 10 units: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 description: A bookable product listed by a supplier. properties: id: type: string example: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854 description: The id used for checking for availability and creating bookings for the product. This MUST be unique within the scope of the Supplier. internalName: type: string description: The name the supplier calls the product. example: Amazon River Tour reference: type: - 'null' - string description: An optional code this supplier might use to identify the product. example: AMZN locale: type: string example: en-GB description: A language code indicating what language this product content is in. This MUST be a valid BCP 47 RFC 5646 RFC 4647 language tag. timeZone: type: string example: Europe/London description: The IANA TimeZone name this product is located in. allowFreesale: type: boolean description: Whether a booking can be made for this product without having to query availability first. instantConfirmation: type: boolean description: Whether bookings will be immediately confirmed when a sale is made, otherwise the supplier will later either accept or reject the booking. When `instantConfirmation` is set to false one should expect created bookings to first get into a `PENDING` state. instantDelivery: type: boolean description: This indicates whether the Reseller can expect immediate delivery of the customer's tickets. If `false` then the Reseller MUST be able to delay delivery of the tickets to the customer. availabilityRequired: type: boolean description: Whether an `availabilityId` is required when creating a booking. Without this the booking will be open-dated and not have a specified travel date. availabilityType: type: string title: AvailabilityType x-stoplight: id: n70vwjh7kvmxk enum: - START_TIME - OPENING_HOURS description: 'What type of availability this product has, possible values are: `START_TIME` if there are fixed departure times which you must pick one. Typical for day tours or activities. `OPENING_HOURS` if you just select a date and can visit any time when the venue is open.' example: START_TIME examples: - START_TIME deliveryFormats: type: array description: 'An array of formats the API will deliver the tickets as. Possible values are: `QRCODE` A code to be presented as a QR CODE barcode `CODE128A` code to be presented as a CODE 128 barcode `PDF_URL` A URL to a PDF file which contains all the ticket details' items: type: string title: DeliveryFormat x-stoplight: id: xo5qi6jemvvhc enum: - PDF_URL - QRCODE description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF.' example: QRCODE examples: - QRCODE deliveryMethods: type: array description: 'How the formats described in `deliveryFormats` will be delivered in the booking response, possible values are: `TICKET`: Individually per unit in the order (i.e. single ticket for each person) `VOUCHER`: One ticket for the whole booking' items: type: string title: DeliveryMethod x-stoplight: id: tdh9akr9neqhb enum: - VOUCHER - TICKET description: 'An array of delivery methods available for this booking. Possible values are: `VOUCHER` The voucher object is populated which is a single ticket for the whole booking. `TICKET` The ticket object is populated on each unit item which is a ticket for each individual person. If `booking.deliveryMethods` contains both `TICKET` and `VOUCHER` then both those values will be set.' examples: - VOUCHER redemptionMethod: type: string title: RedemptionMethod x-stoplight: id: jrrh8rbyzfuzm enum: - DIGITAL - PRINT - MANIFEST description: 'How the voucher can be redeemed. Possible values are: `MANIFEST` The guest name will be written down and they just need to show up `DIGITAL` The tickets/voucher must be scanned but can be on mobile `PRINT` The tickets/voucher must be printed and presented on arrival' examples: - DIGITAL options: type: array description: An array of all options for this product. All products must have at least one option. items: type: object x-examples: example-1: id: DEFAULT default: true internalName: DEFAULT reference: null availabilityLocalStartTimes: - 00:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: [] examples: - id: DEFAULT default: true internalName: Private Morning Tour reference: VIP-MORN availabilityLocalStartTimes: - 09:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: - firstName restrictions: minUnits: 'null' maxUnits: 10 units: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 description: Product options are subdivisions of the original product that will affect price and / or duration. Within the OCTo spec, every product must contain an option. properties: id: type: string example: DEFAULT description: The id that identifies this option, it is only unique within the product. default: type: boolean description: '`TRUE` identifies the option as default, and should therefore rendered and selected first' internalName: type: string description: The name the supplier calls the option by. example: Private Morning Tour reference: type: - 'null' - string description: An optional code this supplier might use to identify the product. example: VIP-MORN availabilityLocalStartTimes: type: array description: This will be an array of all possible start times that can be returned during availability. For example an all day attraction may have a single value like `["00:00"]` whilst a tour with multiple departure times may have multiple:`["09:00", "14:00", "17:00"]`. items: type: string default: 00:00 example: 09:00 cancellationCutoff: type: string example: 1 hour description: This is how long before the tour the booking can be still be cancelled. cancellationCutoffAmount: type: integer example: 1 description: The numeric amount for the cutoff. cancellationCutoffUnit: type: string title: DurationUnit x-stoplight: id: etuhjhtharyrt enum: - hour - minute - day example: hour description: 'Time units used to determine duration. Three values are available: `hour`, `minute`, `day`.' examples: - hour requiredContactFields: type: array description: An array of the contact fields required to confirm a booking. These just apply to the lead traveller on the booking and not for every ticket. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minUnits: 0 maxUnits: 9 description: An object containing a fixed list of restrictions for booking the option. examples: - minUnits: null maxUnits: 10 properties: minUnits: type: - integer - 'null' example: 0 description: The minimum number of tickets that can be purchased in a single booking (null = 0). maxUnits: type: - integer - 'null' example: 10 description: The maximum number of tickets that can be purchased in a single booking (null = unlimited). required: - minUnits - maxUnits units: type: array description: The list of ticket types (units) available for sale. items: type: object x-examples: example-1: id: unit_c1709f42-297e-4f7e-bd6b-3e77d4622d8a internalName: Adult reference: null type: ADULT requiredContactFields: [] examples: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 properties: id: type: string description: This MUST be a unique identifier within the scope of the option. example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: type: string example: Adult(s) description: This should be a name to help with identifying the unit. It should NOT be shown to the customer. reference: type: - 'null' - string description: This is an internal reference identifier that the Supplier wishes to use. It MAY be non-unique. example: LR1-01-new type: type: string title: UnitType x-stoplight: id: 9womjjbg9rhr7 enum: - ADULT - YOUTH - CHILD - INFANT - FAMILY - SENIOR - STUDENT - MILITARY - OTHER examples: - ADULT description: This is the base unit type for this unit definition. A value of TRAVELLER MUST only be used in replacement of `ADULT`, `CHILD`, `INFANT`, `YOUTH`, `STUDENT`, or `SENIOR`. example: YOUTH requiredContactFields: type: array description: This is the array of the contact information PER ticket that the supplier expects. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minAge: 0 maxAge: 100 idRequired: false minQuantity: 1 maxQuantity: null paxCount: 4 accompaniedBy: [] description: unit restrictions examples: - minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 title: UnitRestrictions properties: minAge: type: integer example: 3 description: This is the minumum age this unit can be sold to maxAge: type: integer example: 17 description: This is the maximum age this unit can be sold to idRequired: type: boolean description: This is whether a form of identification will be required at redemption point (eg. student card) minQuantity: type: - integer - 'null' example: 2 description: This is if there is a minimum amount of units to be chosen for purchase (eg. 2) maxQuantity: type: - 'null' - integer example: 7 description: This is if there is a maximum amount of units to be chosen for purchase (eg. 7) paxCount: type: integer description: This is the amount of people each unit counts as (eg. family == 4pax) example: 1 accompaniedBy: type: array description: This is if the unit needs to be accompanied by another unit (eg. Infant with Adult) items: type: string example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 required: - minAge - maxAge - idRequired - minQuantity - maxQuantity - paxCount - accompaniedBy required: - id - internalName - type - requiredContactFields - restrictions description: '' required: - id - default - internalName - reference - availabilityLocalStartTimes - cancellationCutoff - cancellationCutoffAmount - cancellationCutoffUnit - requiredContactFields - restrictions - units required: - id - internalName - reference - locale - allowFreesale - instantConfirmation - instantDelivery - availabilityRequired - availabilityType - deliveryFormats - deliveryMethods - redemptionMethod - options optionId: type: string example: DEFAULT description: The product ID that identifies the product option in the booking system to make this reservation. option: type: object x-examples: example-1: id: DEFAULT default: true internalName: DEFAULT reference: null availabilityLocalStartTimes: - 00:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: [] examples: - id: DEFAULT default: true internalName: Private Morning Tour reference: VIP-MORN availabilityLocalStartTimes: - 09:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: - firstName restrictions: minUnits: 'null' maxUnits: 10 units: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 description: Product options are subdivisions of the original product that will affect price and / or duration. Within the OCTo spec, every product must contain an option. properties: id: type: string example: DEFAULT description: The id that identifies this option, it is only unique within the product. default: type: boolean description: '`TRUE` identifies the option as default, and should therefore rendered and selected first' internalName: type: string description: The name the supplier calls the option by. example: Private Morning Tour reference: type: - 'null' - string description: An optional code this supplier might use to identify the product. example: VIP-MORN availabilityLocalStartTimes: type: array description: This will be an array of all possible start times that can be returned during availability. For example an all day attraction may have a single value like `["00:00"]` whilst a tour with multiple departure times may have multiple:`["09:00", "14:00", "17:00"]`. items: type: string default: 00:00 example: 09:00 cancellationCutoff: type: string example: 1 hour description: This is how long before the tour the booking can be still be cancelled. cancellationCutoffAmount: type: integer example: 1 description: The numeric amount for the cutoff. cancellationCutoffUnit: type: string title: DurationUnit x-stoplight: id: etuhjhtharyrt enum: - hour - minute - day example: hour description: 'Time units used to determine duration. Three values are available: `hour`, `minute`, `day`.' examples: - hour requiredContactFields: type: array description: An array of the contact fields required to confirm a booking. These just apply to the lead traveller on the booking and not for every ticket. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minUnits: 0 maxUnits: 9 description: An object containing a fixed list of restrictions for booking the option. examples: - minUnits: null maxUnits: 10 properties: minUnits: type: - integer - 'null' example: 0 description: The minimum number of tickets that can be purchased in a single booking (null = 0). maxUnits: type: - integer - 'null' example: 10 description: The maximum number of tickets that can be purchased in a single booking (null = unlimited). required: - minUnits - maxUnits units: type: array description: The list of ticket types (units) available for sale. items: type: object x-examples: example-1: id: unit_c1709f42-297e-4f7e-bd6b-3e77d4622d8a internalName: Adult reference: null type: ADULT requiredContactFields: [] examples: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 properties: id: type: string description: This MUST be a unique identifier within the scope of the option. example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: type: string example: Adult(s) description: This should be a name to help with identifying the unit. It should NOT be shown to the customer. reference: type: - 'null' - string description: This is an internal reference identifier that the Supplier wishes to use. It MAY be non-unique. example: LR1-01-new type: type: string title: UnitType x-stoplight: id: 9womjjbg9rhr7 enum: - ADULT - YOUTH - CHILD - INFANT - FAMILY - SENIOR - STUDENT - MILITARY - OTHER examples: - ADULT description: This is the base unit type for this unit definition. A value of TRAVELLER MUST only be used in replacement of `ADULT`, `CHILD`, `INFANT`, `YOUTH`, `STUDENT`, or `SENIOR`. example: YOUTH requiredContactFields: type: array description: This is the array of the contact information PER ticket that the supplier expects. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minAge: 0 maxAge: 100 idRequired: false minQuantity: 1 maxQuantity: null paxCount: 4 accompaniedBy: [] description: unit restrictions examples: - minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 title: UnitRestrictions properties: minAge: type: integer example: 3 description: This is the minumum age this unit can be sold to maxAge: type: integer example: 17 description: This is the maximum age this unit can be sold to idRequired: type: boolean description: This is whether a form of identification will be required at redemption point (eg. student card) minQuantity: type: - integer - 'null' example: 2 description: This is if there is a minimum amount of units to be chosen for purchase (eg. 2) maxQuantity: type: - 'null' - integer example: 7 description: This is if there is a maximum amount of units to be chosen for purchase (eg. 7) paxCount: type: integer description: This is the amount of people each unit counts as (eg. family == 4pax) example: 1 accompaniedBy: type: array description: This is if the unit needs to be accompanied by another unit (eg. Infant with Adult) items: type: string example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 required: - minAge - maxAge - idRequired - minQuantity - maxQuantity - paxCount - accompaniedBy required: - id - internalName - type - requiredContactFields - restrictions description: '' required: - id - default - internalName - reference - availabilityLocalStartTimes - cancellationCutoff - cancellationCutoffAmount - cancellationCutoffUnit - requiredContactFields - restrictions - units cancellable: type: boolean description: A boolean field indicating whether this booking can be cancelled. cancellation: type: - 'null' - object description: An object with information about why and when the booking was cancelled. This is `NULL` if the booking is not cancelled. required: - refund - reason - utcCancelledAt properties: refund: type: string description: Whether the booking was refunded as part of the cancellation. Possible values are `FULL`, `PARTIAL` or `NONE` reason: type: - 'null' - string description: A text value describing why the cancellation happened. utcCancelledAt: type: string example: '2021-10-27T23:38:43Z' description: An ISO8601 date time in UTC indicating when the booking was cancelled. freesale: type: boolean description: Whether the booking was made as freesale (without checking availability first). availabilityId: type: string description: The availability id that was used in the request. availability: type: object description: 'The availability object that was booked. ' required: - id - localDateTimeStart - localDateTimeEnd - allDay - openingHours properties: id: type: string example: '2021-10-27T00:00:00-04:00' description: The availability id that was used in the request. localDateTimeStart: type: string example: '2021-10-27T00:00:00-04:00' description: The `localDateTimeStart` value from the original availability object. localDateTimeEnd: type: string example: '2021-10-28T00:00:00-04:00' description: The `localDateTimeEnd` value from the original availability object. allDay: type: boolean description: A boolean value indicating whether the availability is all day. openingHours: type: array description: The opening hours from the original availability object. items: type: object x-examples: example-1: from: 08:00 to: '18:30' description: A list of opening hours that the product is open on this day. properties: from: type: string example: 08:00 description: When this product opens (HH:MM) to: type: string example: '16:00' description: When this product closes (HH:MM) required: - from - to examples: - from: 08:00 to: '16:00' contact: type: object x-examples: example-1: fullName: null firstName: null lastName: null emailAddress: null phoneNumber: null locales: [] postalCode: null country: null notes: null examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: null locales: - en postalCode: null country: null notes: null description: Contact details for the guests that will attend the tour/attraction. Contact schema can be applied to both the booking object (the main reservation) or the unit object (individual ticket holders - if the supplier requires this information) properties: fullName: type: - 'null' - string example: John Doe description: The full name of the booking holder or the ticket holder. Can also be retrieved as an alias for the concatenation of `firstName` and `lastName` firstName: type: - 'null' - string example: John description: The first name of the booking holder or the ticket holder. lastName: type: - 'null' - string example: Doe description: The last name of the booking holder or the ticket holder. emailAddress: type: - 'null' - string format: email description: The email address of the booking holder or the ticket holder. example: johndoe@email.com phoneNumber: type: - 'null' - string description: The phone number of the booking holder or the ticket holder. locales: type: array description: An array of locale values, equivalent to navigator.languages in a browsers environment. items: type: string example: en postalCode: type: - 'null' - string description: The PO Box of the booking holder or the ticket holder. country: type: - 'null' - string description: The country of the booking holder or the ticket holder. notes: type: - 'null' - string description: Optional notes for the booking. notes: type: - string - 'null' example: Optional notes for the booking deliveryMethods: type: array description: An array of delivery methods available for this booking. items: type: string title: DeliveryMethod x-stoplight: id: tdh9akr9neqhb enum: - VOUCHER - TICKET description: 'An array of delivery methods available for this booking. Possible values are: `VOUCHER` The voucher object is populated which is a single ticket for the whole booking. `TICKET` The ticket object is populated on each unit item which is a ticket for each individual person. If `booking.deliveryMethods` contains both `TICKET` and `VOUCHER` then both those values will be set.' examples: - VOUCHER voucher: oneOf: - type: object x-examples: example-1: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: '!1|El3f0wUmcnrEmviMcR9qwqC9hvfrcWc6cZcRcrcR|yrirfZfqHPj40mvhpw2XzX|q7FF77QqFD7fDhr9' - deliveryFormat: PDF_URL deliveryValue: https://api.ventrata.com/octo/pdf?booking=36d2d844-121d-453c-b514-de027caaf27f&ticket=72419a19-c58c-46a0-b316-13509de43909 examples: - redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: string properties: redemptionMethod: type: string title: RedemptionMethod x-stoplight: id: jrrh8rbyzfuzm enum: - DIGITAL - PRINT - MANIFEST description: 'How the voucher can be redeemed. Possible values are: `MANIFEST` The guest name will be written down and they just need to show up `DIGITAL` The tickets/voucher must be scanned but can be on mobile `PRINT` The tickets/voucher must be printed and presented on arrival' examples: - DIGITAL utcRedeemedAt: type: - 'null' - string description: The ISO8601 date in UTC indicating when the ticket was used at the attraction. deliveryOptions: type: array items: type: object properties: deliveryFormat: type: string title: DeliveryFormat x-stoplight: id: xo5qi6jemvvhc enum: - PDF_URL - QRCODE description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF.' example: QRCODE examples: - QRCODE deliveryValue: type: string description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF. ' required: - deliveryFormat - deliveryValue required: - redemptionMethod - utcRedeemedAt - deliveryOptions description: '' - type: 'null' unitItems: type: array description: An array of unit items that will be included in the booking. items: type: object x-examples: example-1: uuid: 97525082-2498-4e61-b259-bc48e27a96ae resellerReference: 102-256952-3-Adult-2 supplierReference: J9T7R6 unitId: unit_8080415c-890c-4b38-a5af-0934d73e94d3 properties: uuid: type: string example: 3b1bc2ee-3155-4738-9471-f49842a07327 description: The id of the unit, this will be unique to the option. resellerReference: type: - string - 'null' example: 4ec08a62-892c-48c1-a608-dc946531a33b description: A reference the reseller uses to identify the unit within all bookings. supplierReference: type: - string - 'null' example: K9T7R5 description: A reference the supplier uses to identify the unit within all bookings. unitId: type: string example: youth_f6446706-885a-437c-8461-efd6d7080910 unit: type: object x-examples: example-1: id: unit_c1709f42-297e-4f7e-bd6b-3e77d4622d8a internalName: Adult reference: null type: ADULT requiredContactFields: [] examples: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 properties: id: type: string description: This MUST be a unique identifier within the scope of the option. example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: type: string example: Adult(s) description: This should be a name to help with identifying the unit. It should NOT be shown to the customer. reference: type: - 'null' - string description: This is an internal reference identifier that the Supplier wishes to use. It MAY be non-unique. example: LR1-01-new type: type: string title: UnitType x-stoplight: id: 9womjjbg9rhr7 enum: - ADULT - YOUTH - CHILD - INFANT - FAMILY - SENIOR - STUDENT - MILITARY - OTHER examples: - ADULT description: This is the base unit type for this unit definition. A value of TRAVELLER MUST only be used in replacement of `ADULT`, `CHILD`, `INFANT`, `YOUTH`, `STUDENT`, or `SENIOR`. example: YOUTH requiredContactFields: type: array description: This is the array of the contact information PER ticket that the supplier expects. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minAge: 0 maxAge: 100 idRequired: false minQuantity: 1 maxQuantity: null paxCount: 4 accompaniedBy: [] description: unit restrictions examples: - minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 title: UnitRestrictions properties: minAge: type: integer example: 3 description: This is the minumum age this unit can be sold to maxAge: type: integer example: 17 description: This is the maximum age this unit can be sold to idRequired: type: boolean description: This is whether a form of identification will be required at redemption point (eg. student card) minQuantity: type: - integer - 'null' example: 2 description: This is if there is a minimum amount of units to be chosen for purchase (eg. 2) maxQuantity: type: - 'null' - integer example: 7 description: This is if there is a maximum amount of units to be chosen for purchase (eg. 7) paxCount: type: integer description: This is the amount of people each unit counts as (eg. family == 4pax) example: 1 accompaniedBy: type: array description: This is if the unit needs to be accompanied by another unit (eg. Infant with Adult) items: type: string example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 required: - minAge - maxAge - idRequired - minQuantity - maxQuantity - paxCount - accompaniedBy required: - id - internalName - type - requiredContactFields - restrictions description: '' status: type: string title: BookingStatus x-stoplight: id: 8igglzvoke69w enum: - ON_HOLD - CONFIRMED - EXPIRED - CANCELLED - REDEEMED - PENDING - REJECTED example: CONFIRMED description: 'The status of the booking, possible values are: `ON_HOLD` The booking is pending confirmation, this is the default value when you first create the booking. `EXPIRED` If the booking is not confirmed before the expiration hold expires, it goes into an expired state. `CONFIRMED` Once the confirmation call is made the booking is ready to be used. `CANCELLED` If the booking is cancelled. `PENDING` If the booking is pending outside availability confirmation. `REDEEMED` If the booking is already redeemed.' examples: - CONFIRMED utcRedeemedAt: type: - 'null' - string description: The ISO8601 date in UTC indicating when the ticket was used at the attraction. contact: type: object x-examples: example-1: fullName: null firstName: null lastName: null emailAddress: null phoneNumber: null locales: [] postalCode: null country: null notes: null examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: null locales: - en postalCode: null country: null notes: null description: Contact details for the guests that will attend the tour/attraction. Contact schema can be applied to both the booking object (the main reservation) or the unit object (individual ticket holders - if the supplier requires this information) properties: fullName: type: - 'null' - string example: John Doe description: The full name of the booking holder or the ticket holder. Can also be retrieved as an alias for the concatenation of `firstName` and `lastName` firstName: type: - 'null' - string example: John description: The first name of the booking holder or the ticket holder. lastName: type: - 'null' - string example: Doe description: The last name of the booking holder or the ticket holder. emailAddress: type: - 'null' - string format: email description: The email address of the booking holder or the ticket holder. example: johndoe@email.com phoneNumber: type: - 'null' - string description: The phone number of the booking holder or the ticket holder. locales: type: array description: An array of locale values, equivalent to navigator.languages in a browsers environment. items: type: string example: en postalCode: type: - 'null' - string description: The PO Box of the booking holder or the ticket holder. country: type: - 'null' - string description: The country of the booking holder or the ticket holder. notes: type: - 'null' - string description: Optional notes for the booking. ticket: oneOf: - type: object x-examples: example-1: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: '!1|El3f0wUmcnrEmviMcR9qwqC9hvfrcWc6cZcRcrcR|yrirfZfqHPj40mvhpw2XzX|q7FF77QqFD7fDhr9' - deliveryFormat: PDF_URL deliveryValue: https://api.ventrata.com/octo/pdf?booking=36d2d844-121d-453c-b514-de027caaf27f&ticket=72419a19-c58c-46a0-b316-13509de43909 examples: - redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: string properties: redemptionMethod: type: string title: RedemptionMethod x-stoplight: id: jrrh8rbyzfuzm enum: - DIGITAL - PRINT - MANIFEST description: 'How the voucher can be redeemed. Possible values are: `MANIFEST` The guest name will be written down and they just need to show up `DIGITAL` The tickets/voucher must be scanned but can be on mobile `PRINT` The tickets/voucher must be printed and presented on arrival' examples: - DIGITAL utcRedeemedAt: type: - 'null' - string description: The ISO8601 date in UTC indicating when the ticket was used at the attraction. deliveryOptions: type: array items: type: object properties: deliveryFormat: type: string title: DeliveryFormat x-stoplight: id: xo5qi6jemvvhc enum: - PDF_URL - QRCODE description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF.' example: QRCODE examples: - QRCODE deliveryValue: type: string description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF. ' required: - deliveryFormat - deliveryValue required: - redemptionMethod - utcRedeemedAt - deliveryOptions description: '' - type: 'null' required: - uuid - resellerReference - supplierReference - unitId - unit - status - utcRedeemedAt - contact description: '' examples: - uuid: 3b1bc2ee-3155-4738-9471-f49842a07327 resellerReference: 4ec08a62-892c-48c1-a608-dc946531a33b supplierReference: K9T7R5 unitId: youth_f6446706-885a-437c-8461-efd6d7080910 unit: id: string internalName: string reference: null type: ADULT requiredContactFields: - firstName restrictions: minAge: 18 maxAge: 99 idRequired: false minQuantity: 0 maxQuantity: null paxCount: 0 accompaniedBy: [] status: CONFIRMED utcRedeemedAt: null contact: fullName: John Doe firstName: John lastName: Doe emailAddress: null phoneNumber: null locales: - en postalCode: null country: null notes: null ticket: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: string required: - id - uuid - testMode - resellerReference - supplierReference - status - utcCreatedAt - utcUpdatedAt - utcExpiresAt - utcRedeemedAt - utcConfirmedAt - productId - product - optionId - option - cancellable - cancellation - freesale - availabilityId - availability - contact - notes - deliveryMethods - unitItems examples: CANCELLED: value: id: 3ac5450f-8511-4386-9feb-17ce4f9e1f86 uuid: ec0ce0c2-03f0-4c64-bbc5-5e0f7d1e1c0a testMode: true resellerReference: null supplierReference: ALG6RQ status: CANCELLED utcCreatedAt: '2022-05-25T11:03:22Z' utcUpdatedAt: '2022-05-25T11:06:24Z' utcExpiresAt: null utcRedeemedAt: null utcConfirmedAt: null productId: '1' product: id: '1' internalName: PPU | OH reference: null locale: en timeZone: Europe/London allowFreesale: false instantConfirmation: true instantDelivery: true availabilityRequired: true availabilityType: OPENING_HOURS deliveryFormats: - PDF_URL - QRCODE deliveryMethods: - TICKET - VOUCHER redemptionMethod: DIGITAL options: - id: DEFAULT default: true internalName: DEFAULT reference: null availabilityLocalStartTimes: - 00:00 cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: null units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: null maxQuantity: null paxCount: 1 accompaniedBy: [] optionId: DEFAULT option: id: DEFAULT default: true internalName: DEFAULT reference: null availabilityLocalStartTimes: - 00:00 cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: null units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: null maxQuantity: null paxCount: 1 accompaniedBy: [] cancellable: false cancellation: refund: FULL reason: 'this product sucks ' utcCancelledAt: '2022-05-25T11:06:24Z' freesale: false availabilityId: '2022-04-30T00:00:00+01:00' availability: id: '2022-04-30T00:00:00+01:00' localDateTimeStart: '2022-04-30T00:00:00+01:00' localDateTimeEnd: '2022-05-01T00:00:00+01:00' allDay: true openingHours: - from: 09:00 to: '17:00' contact: fullName: null firstName: null lastName: null emailAddress: null phoneNumber: null locales: [] country: null notes: null notes: null deliveryMethods: - TICKET - VOUCHER voucher: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: [] unitItems: [] '400': description: Example response content: application/json: schema: type: object x-examples: example-1: error: INVALID_PRODUCT_ID errorMessage: The productId was missing or invalid uuid: string additionalProperties: false properties: error: type: string errorMessage: type: string uuid: type: string required: - error - errorMessage examples: INVALID_BOOKING_UUID: value: error: INVALID_BOOKING_UUID errorMessage: The uuid was already used, missing or invalid uuid: bbbb6227-54fc-4c32-9ed7-dc3eb99966ea UNPROCESSABLE_ENTITY: value: error: UNPROCESSABLE_ENTITY errorMessage: The request body is technically correct but cannot be processed for other reasons. e.g. you tried to cancel a booking after the cancellation cutoff had elapsed description: For cancelling bookings. You can only cancel a booking if `booking.cancellable` is `TRUE`, and is within the booking cancellation cut-off window. requestBody: content: application/json: schema: type: object properties: reason: type: string example: Customer Requested description: A text value describing why the cancellation happened. force: type: boolean examples: example-1: value: reason: Customer Requested description: '' parameters: - schema: type: string enum: - application/json in: header name: Content-Type description: Required field on all DELETE requests /bookings/{uuid}: parameters: - schema: type: string name: uuid in: path required: true description: The UUID of the booking get: summary: Open Connectivity for Tours, Activities, and Attractions Get Booking tags: - Bookings responses: '200': description: OK content: application/json: schema: type: object x-examples: example-1: id: 36d2d844-121d-453c-b514-de027caaf27f uuid: 3698539b-65c4-41e3-95b1-fa108fd024b2 testMode: false resellerReference: 102-256952-3 supplierReference: 300SK9 status: CONFIRMED utcCreatedAt: '2021-10-27T23:28:43Z' utcUpdatedAt: '2021-10-27T23:28:45Z' utcExpiresAt: null utcRedeemedAt: null utcConfirmedAt: '2021-10-27T23:28:45Z' productId: 5379ce46-0620-42ce-b65c-70d6fc1c9ac2 examples: [] description: '' title: '' properties: id: type: string example: bbbb6227-54fc-4c32-9ed7-dc3eb99966ea description: A unique ID / UUID generated by the supplier system to identify the booking. uuid: type: string format: uuid example: 559aed3d-6d5b-4fe0-bfca-99f5e7218a56 description: A UUID you can set when generating the booking to use as an idempotency key. testMode: type: boolean description: If `TRUE`, booking was created on test mode resellerReference: type: - string - 'null' description: The reference set by the Reseller. A mandatory field for resellers to be set in the booking confirmation request. supplierReference: type: - string - 'null' description: The Supplier's / booking platform reference. status: type: string title: BookingStatus x-stoplight: id: 8igglzvoke69w enum: - ON_HOLD - CONFIRMED - EXPIRED - CANCELLED - REDEEMED - PENDING - REJECTED example: CONFIRMED description: 'The status of the booking, possible values are: `ON_HOLD` The booking is pending confirmation, this is the default value when you first create the booking. `EXPIRED` If the booking is not confirmed before the expiration hold expires, it goes into an expired state. `CONFIRMED` Once the confirmation call is made the booking is ready to be used. `CANCELLED` If the booking is cancelled. `PENDING` If the booking is pending outside availability confirmation. `REDEEMED` If the booking is already redeemed.' examples: - CONFIRMED utcCreatedAt: type: string example: '2021-10-27T23:28:43Z' description: An ISO8601 date time in UTC when the booking was created. utcUpdatedAt: type: - string - 'null' example: '2021-10-27T23:28:43Z' description: An ISO8601 date time in UTC when the booking was updated. utcExpiresAt: type: - string - 'null' description: An ISO8601 date times in UTC for when this booking is due to expire if the status is `ON_HOLD`. example: '2021-10-27T23:58:43Z' utcRedeemedAt: type: - string - 'null' description: An ISO8601 date time in UTC at when the booking was redeemed. utcConfirmedAt: type: - string - 'null' example: '2021-10-27T23:28:43Z' description: An ISO8601 date time in UTC when the booking was confirmed. productId: type: string example: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854 description: The product ID that identifies the product in the booking system to make this reservation. product: type: object x-examples: example-1: id: 28ca088b-bc7b-4746-ab06-5971f1ed5a5e internalName: Edinburgh Hop-On Hop-Off Bus Tour reference: null locale: en timeZone: Europe/London allowFreesale: true instantConfirmation: true instantDelivery: true availabilityRequired: false examples: - id: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854 internalName: Amazon River Tour reference: AMZN locale: en-GB timeZone: Europe/London allowFreesale: true instantConfirmation: true instantDelivery: true availabilityRequired: true availabilityType: START_TIME deliveryFormats: - QRCODE deliveryMethods: - VOUCHER redemptionMethod: DIGITAL options: - id: DEFAULT default: true internalName: Private Morning Tour reference: VIP-MORN availabilityLocalStartTimes: - 09:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: - firstName restrictions: minUnits: 'null' maxUnits: 10 units: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 description: A bookable product listed by a supplier. properties: id: type: string example: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854 description: The id used for checking for availability and creating bookings for the product. This MUST be unique within the scope of the Supplier. internalName: type: string description: The name the supplier calls the product. example: Amazon River Tour reference: type: - 'null' - string description: An optional code this supplier might use to identify the product. example: AMZN locale: type: string example: en-GB description: A language code indicating what language this product content is in. This MUST be a valid BCP 47 RFC 5646 RFC 4647 language tag. timeZone: type: string example: Europe/London description: The IANA TimeZone name this product is located in. allowFreesale: type: boolean description: Whether a booking can be made for this product without having to query availability first. instantConfirmation: type: boolean description: Whether bookings will be immediately confirmed when a sale is made, otherwise the supplier will later either accept or reject the booking. When `instantConfirmation` is set to false one should expect created bookings to first get into a `PENDING` state. instantDelivery: type: boolean description: This indicates whether the Reseller can expect immediate delivery of the customer's tickets. If `false` then the Reseller MUST be able to delay delivery of the tickets to the customer. availabilityRequired: type: boolean description: Whether an `availabilityId` is required when creating a booking. Without this the booking will be open-dated and not have a specified travel date. availabilityType: type: string title: AvailabilityType x-stoplight: id: n70vwjh7kvmxk enum: - START_TIME - OPENING_HOURS description: 'What type of availability this product has, possible values are: `START_TIME` if there are fixed departure times which you must pick one. Typical for day tours or activities. `OPENING_HOURS` if you just select a date and can visit any time when the venue is open.' example: START_TIME examples: - START_TIME deliveryFormats: type: array description: 'An array of formats the API will deliver the tickets as. Possible values are: `QRCODE` A code to be presented as a QR CODE barcode `CODE128A` code to be presented as a CODE 128 barcode `PDF_URL` A URL to a PDF file which contains all the ticket details' items: type: string title: DeliveryFormat x-stoplight: id: xo5qi6jemvvhc enum: - PDF_URL - QRCODE description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF.' example: QRCODE examples: - QRCODE deliveryMethods: type: array description: 'How the formats described in `deliveryFormats` will be delivered in the booking response, possible values are: `TICKET`: Individually per unit in the order (i.e. single ticket for each person) `VOUCHER`: One ticket for the whole booking' items: type: string title: DeliveryMethod x-stoplight: id: tdh9akr9neqhb enum: - VOUCHER - TICKET description: 'An array of delivery methods available for this booking. Possible values are: `VOUCHER` The voucher object is populated which is a single ticket for the whole booking. `TICKET` The ticket object is populated on each unit item which is a ticket for each individual person. If `booking.deliveryMethods` contains both `TICKET` and `VOUCHER` then both those values will be set.' examples: - VOUCHER redemptionMethod: type: string title: RedemptionMethod x-stoplight: id: jrrh8rbyzfuzm enum: - DIGITAL - PRINT - MANIFEST description: 'How the voucher can be redeemed. Possible values are: `MANIFEST` The guest name will be written down and they just need to show up `DIGITAL` The tickets/voucher must be scanned but can be on mobile `PRINT` The tickets/voucher must be printed and presented on arrival' examples: - DIGITAL options: type: array description: An array of all options for this product. All products must have at least one option. items: type: object x-examples: example-1: id: DEFAULT default: true internalName: DEFAULT reference: null availabilityLocalStartTimes: - 00:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: [] examples: - id: DEFAULT default: true internalName: Private Morning Tour reference: VIP-MORN availabilityLocalStartTimes: - 09:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: - firstName restrictions: minUnits: 'null' maxUnits: 10 units: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 description: Product options are subdivisions of the original product that will affect price and / or duration. Within the OCTo spec, every product must contain an option. properties: id: type: string example: DEFAULT description: The id that identifies this option, it is only unique within the product. default: type: boolean description: '`TRUE` identifies the option as default, and should therefore rendered and selected first' internalName: type: string description: The name the supplier calls the option by. example: Private Morning Tour reference: type: - 'null' - string description: An optional code this supplier might use to identify the product. example: VIP-MORN availabilityLocalStartTimes: type: array description: This will be an array of all possible start times that can be returned during availability. For example an all day attraction may have a single value like `["00:00"]` whilst a tour with multiple departure times may have multiple:`["09:00", "14:00", "17:00"]`. items: type: string default: 00:00 example: 09:00 cancellationCutoff: type: string example: 1 hour description: This is how long before the tour the booking can be still be cancelled. cancellationCutoffAmount: type: integer example: 1 description: The numeric amount for the cutoff. cancellationCutoffUnit: type: string title: DurationUnit x-stoplight: id: etuhjhtharyrt enum: - hour - minute - day example: hour description: 'Time units used to determine duration. Three values are available: `hour`, `minute`, `day`.' examples: - hour requiredContactFields: type: array description: An array of the contact fields required to confirm a booking. These just apply to the lead traveller on the booking and not for every ticket. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minUnits: 0 maxUnits: 9 description: An object containing a fixed list of restrictions for booking the option. examples: - minUnits: null maxUnits: 10 properties: minUnits: type: - integer - 'null' example: 0 description: The minimum number of tickets that can be purchased in a single booking (null = 0). maxUnits: type: - integer - 'null' example: 10 description: The maximum number of tickets that can be purchased in a single booking (null = unlimited). required: - minUnits - maxUnits units: type: array description: The list of ticket types (units) available for sale. items: type: object x-examples: example-1: id: unit_c1709f42-297e-4f7e-bd6b-3e77d4622d8a internalName: Adult reference: null type: ADULT requiredContactFields: [] examples: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 properties: id: type: string description: This MUST be a unique identifier within the scope of the option. example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: type: string example: Adult(s) description: This should be a name to help with identifying the unit. It should NOT be shown to the customer. reference: type: - 'null' - string description: This is an internal reference identifier that the Supplier wishes to use. It MAY be non-unique. example: LR1-01-new type: type: string title: UnitType x-stoplight: id: 9womjjbg9rhr7 enum: - ADULT - YOUTH - CHILD - INFANT - FAMILY - SENIOR - STUDENT - MILITARY - OTHER examples: - ADULT description: This is the base unit type for this unit definition. A value of TRAVELLER MUST only be used in replacement of `ADULT`, `CHILD`, `INFANT`, `YOUTH`, `STUDENT`, or `SENIOR`. example: YOUTH requiredContactFields: type: array description: This is the array of the contact information PER ticket that the supplier expects. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minAge: 0 maxAge: 100 idRequired: false minQuantity: 1 maxQuantity: null paxCount: 4 accompaniedBy: [] description: unit restrictions examples: - minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 title: UnitRestrictions properties: minAge: type: integer example: 3 description: This is the minumum age this unit can be sold to maxAge: type: integer example: 17 description: This is the maximum age this unit can be sold to idRequired: type: boolean description: This is whether a form of identification will be required at redemption point (eg. student card) minQuantity: type: - integer - 'null' example: 2 description: This is if there is a minimum amount of units to be chosen for purchase (eg. 2) maxQuantity: type: - 'null' - integer example: 7 description: This is if there is a maximum amount of units to be chosen for purchase (eg. 7) paxCount: type: integer description: This is the amount of people each unit counts as (eg. family == 4pax) example: 1 accompaniedBy: type: array description: This is if the unit needs to be accompanied by another unit (eg. Infant with Adult) items: type: string example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 required: - minAge - maxAge - idRequired - minQuantity - maxQuantity - paxCount - accompaniedBy required: - id - internalName - type - requiredContactFields - restrictions description: '' required: - id - default - internalName - reference - availabilityLocalStartTimes - cancellationCutoff - cancellationCutoffAmount - cancellationCutoffUnit - requiredContactFields - restrictions - units required: - id - internalName - reference - locale - allowFreesale - instantConfirmation - instantDelivery - availabilityRequired - availabilityType - deliveryFormats - deliveryMethods - redemptionMethod - options optionId: type: string example: DEFAULT description: The product ID that identifies the product option in the booking system to make this reservation. option: type: object x-examples: example-1: id: DEFAULT default: true internalName: DEFAULT reference: null availabilityLocalStartTimes: - 00:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: [] examples: - id: DEFAULT default: true internalName: Private Morning Tour reference: VIP-MORN availabilityLocalStartTimes: - 09:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: - firstName restrictions: minUnits: 'null' maxUnits: 10 units: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 description: Product options are subdivisions of the original product that will affect price and / or duration. Within the OCTo spec, every product must contain an option. properties: id: type: string example: DEFAULT description: The id that identifies this option, it is only unique within the product. default: type: boolean description: '`TRUE` identifies the option as default, and should therefore rendered and selected first' internalName: type: string description: The name the supplier calls the option by. example: Private Morning Tour reference: type: - 'null' - string description: An optional code this supplier might use to identify the product. example: VIP-MORN availabilityLocalStartTimes: type: array description: This will be an array of all possible start times that can be returned during availability. For example an all day attraction may have a single value like `["00:00"]` whilst a tour with multiple departure times may have multiple:`["09:00", "14:00", "17:00"]`. items: type: string default: 00:00 example: 09:00 cancellationCutoff: type: string example: 1 hour description: This is how long before the tour the booking can be still be cancelled. cancellationCutoffAmount: type: integer example: 1 description: The numeric amount for the cutoff. cancellationCutoffUnit: type: string title: DurationUnit x-stoplight: id: etuhjhtharyrt enum: - hour - minute - day example: hour description: 'Time units used to determine duration. Three values are available: `hour`, `minute`, `day`.' examples: - hour requiredContactFields: type: array description: An array of the contact fields required to confirm a booking. These just apply to the lead traveller on the booking and not for every ticket. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minUnits: 0 maxUnits: 9 description: An object containing a fixed list of restrictions for booking the option. examples: - minUnits: null maxUnits: 10 properties: minUnits: type: - integer - 'null' example: 0 description: The minimum number of tickets that can be purchased in a single booking (null = 0). maxUnits: type: - integer - 'null' example: 10 description: The maximum number of tickets that can be purchased in a single booking (null = unlimited). required: - minUnits - maxUnits units: type: array description: The list of ticket types (units) available for sale. items: type: object x-examples: example-1: id: unit_c1709f42-297e-4f7e-bd6b-3e77d4622d8a internalName: Adult reference: null type: ADULT requiredContactFields: [] examples: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 properties: id: type: string description: This MUST be a unique identifier within the scope of the option. example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: type: string example: Adult(s) description: This should be a name to help with identifying the unit. It should NOT be shown to the customer. reference: type: - 'null' - string description: This is an internal reference identifier that the Supplier wishes to use. It MAY be non-unique. example: LR1-01-new type: type: string title: UnitType x-stoplight: id: 9womjjbg9rhr7 enum: - ADULT - YOUTH - CHILD - INFANT - FAMILY - SENIOR - STUDENT - MILITARY - OTHER examples: - ADULT description: This is the base unit type for this unit definition. A value of TRAVELLER MUST only be used in replacement of `ADULT`, `CHILD`, `INFANT`, `YOUTH`, `STUDENT`, or `SENIOR`. example: YOUTH requiredContactFields: type: array description: This is the array of the contact information PER ticket that the supplier expects. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minAge: 0 maxAge: 100 idRequired: false minQuantity: 1 maxQuantity: null paxCount: 4 accompaniedBy: [] description: unit restrictions examples: - minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 title: UnitRestrictions properties: minAge: type: integer example: 3 description: This is the minumum age this unit can be sold to maxAge: type: integer example: 17 description: This is the maximum age this unit can be sold to idRequired: type: boolean description: This is whether a form of identification will be required at redemption point (eg. student card) minQuantity: type: - integer - 'null' example: 2 description: This is if there is a minimum amount of units to be chosen for purchase (eg. 2) maxQuantity: type: - 'null' - integer example: 7 description: This is if there is a maximum amount of units to be chosen for purchase (eg. 7) paxCount: type: integer description: This is the amount of people each unit counts as (eg. family == 4pax) example: 1 accompaniedBy: type: array description: This is if the unit needs to be accompanied by another unit (eg. Infant with Adult) items: type: string example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 required: - minAge - maxAge - idRequired - minQuantity - maxQuantity - paxCount - accompaniedBy required: - id - internalName - type - requiredContactFields - restrictions description: '' required: - id - default - internalName - reference - availabilityLocalStartTimes - cancellationCutoff - cancellationCutoffAmount - cancellationCutoffUnit - requiredContactFields - restrictions - units cancellable: type: boolean description: A boolean field indicating whether this booking can be cancelled. cancellation: type: - 'null' - object description: An object with information about why and when the booking was cancelled. This is `NULL` if the booking is not cancelled. required: - refund - reason - utcCancelledAt properties: refund: type: string description: Whether the booking was refunded as part of the cancellation. Possible values are `FULL`, `PARTIAL` or `NONE` reason: type: - 'null' - string description: A text value describing why the cancellation happened. utcCancelledAt: type: string example: '2021-10-27T23:38:43Z' description: An ISO8601 date time in UTC indicating when the booking was cancelled. freesale: type: boolean description: Whether the booking was made as freesale (without checking availability first). availabilityId: type: string description: The availability id that was used in the request. availability: type: object description: 'The availability object that was booked. ' required: - id - localDateTimeStart - localDateTimeEnd - allDay - openingHours properties: id: type: string example: '2021-10-27T00:00:00-04:00' description: The availability id that was used in the request. localDateTimeStart: type: string example: '2021-10-27T00:00:00-04:00' description: The `localDateTimeStart` value from the original availability object. localDateTimeEnd: type: string example: '2021-10-28T00:00:00-04:00' description: The `localDateTimeEnd` value from the original availability object. allDay: type: boolean description: A boolean value indicating whether the availability is all day. openingHours: type: array description: The opening hours from the original availability object. items: type: object x-examples: example-1: from: 08:00 to: '18:30' description: A list of opening hours that the product is open on this day. properties: from: type: string example: 08:00 description: When this product opens (HH:MM) to: type: string example: '16:00' description: When this product closes (HH:MM) required: - from - to examples: - from: 08:00 to: '16:00' contact: type: object x-examples: example-1: fullName: null firstName: null lastName: null emailAddress: null phoneNumber: null locales: [] postalCode: null country: null notes: null examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: null locales: - en postalCode: null country: null notes: null description: Contact details for the guests that will attend the tour/attraction. Contact schema can be applied to both the booking object (the main reservation) or the unit object (individual ticket holders - if the supplier requires this information) properties: fullName: type: - 'null' - string example: John Doe description: The full name of the booking holder or the ticket holder. Can also be retrieved as an alias for the concatenation of `firstName` and `lastName` firstName: type: - 'null' - string example: John description: The first name of the booking holder or the ticket holder. lastName: type: - 'null' - string example: Doe description: The last name of the booking holder or the ticket holder. emailAddress: type: - 'null' - string format: email description: The email address of the booking holder or the ticket holder. example: johndoe@email.com phoneNumber: type: - 'null' - string description: The phone number of the booking holder or the ticket holder. locales: type: array description: An array of locale values, equivalent to navigator.languages in a browsers environment. items: type: string example: en postalCode: type: - 'null' - string description: The PO Box of the booking holder or the ticket holder. country: type: - 'null' - string description: The country of the booking holder or the ticket holder. notes: type: - 'null' - string description: Optional notes for the booking. notes: type: - string - 'null' example: Optional notes for the booking deliveryMethods: type: array description: An array of delivery methods available for this booking. items: type: string title: DeliveryMethod x-stoplight: id: tdh9akr9neqhb enum: - VOUCHER - TICKET description: 'An array of delivery methods available for this booking. Possible values are: `VOUCHER` The voucher object is populated which is a single ticket for the whole booking. `TICKET` The ticket object is populated on each unit item which is a ticket for each individual person. If `booking.deliveryMethods` contains both `TICKET` and `VOUCHER` then both those values will be set.' examples: - VOUCHER voucher: oneOf: - type: object x-examples: example-1: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: '!1|El3f0wUmcnrEmviMcR9qwqC9hvfrcWc6cZcRcrcR|yrirfZfqHPj40mvhpw2XzX|q7FF77QqFD7fDhr9' - deliveryFormat: PDF_URL deliveryValue: https://api.ventrata.com/octo/pdf?booking=36d2d844-121d-453c-b514-de027caaf27f&ticket=72419a19-c58c-46a0-b316-13509de43909 examples: - redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: string properties: redemptionMethod: type: string title: RedemptionMethod x-stoplight: id: jrrh8rbyzfuzm enum: - DIGITAL - PRINT - MANIFEST description: 'How the voucher can be redeemed. Possible values are: `MANIFEST` The guest name will be written down and they just need to show up `DIGITAL` The tickets/voucher must be scanned but can be on mobile `PRINT` The tickets/voucher must be printed and presented on arrival' examples: - DIGITAL utcRedeemedAt: type: - 'null' - string description: The ISO8601 date in UTC indicating when the ticket was used at the attraction. deliveryOptions: type: array items: type: object properties: deliveryFormat: type: string title: DeliveryFormat x-stoplight: id: xo5qi6jemvvhc enum: - PDF_URL - QRCODE description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF.' example: QRCODE examples: - QRCODE deliveryValue: type: string description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF. ' required: - deliveryFormat - deliveryValue required: - redemptionMethod - utcRedeemedAt - deliveryOptions description: '' - type: 'null' unitItems: type: array description: An array of unit items that will be included in the booking. items: type: object x-examples: example-1: uuid: 97525082-2498-4e61-b259-bc48e27a96ae resellerReference: 102-256952-3-Adult-2 supplierReference: J9T7R6 unitId: unit_8080415c-890c-4b38-a5af-0934d73e94d3 properties: uuid: type: string example: 3b1bc2ee-3155-4738-9471-f49842a07327 description: The id of the unit, this will be unique to the option. resellerReference: type: - string - 'null' example: 4ec08a62-892c-48c1-a608-dc946531a33b description: A reference the reseller uses to identify the unit within all bookings. supplierReference: type: - string - 'null' example: K9T7R5 description: A reference the supplier uses to identify the unit within all bookings. unitId: type: string example: youth_f6446706-885a-437c-8461-efd6d7080910 unit: type: object x-examples: example-1: id: unit_c1709f42-297e-4f7e-bd6b-3e77d4622d8a internalName: Adult reference: null type: ADULT requiredContactFields: [] examples: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 properties: id: type: string description: This MUST be a unique identifier within the scope of the option. example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: type: string example: Adult(s) description: This should be a name to help with identifying the unit. It should NOT be shown to the customer. reference: type: - 'null' - string description: This is an internal reference identifier that the Supplier wishes to use. It MAY be non-unique. example: LR1-01-new type: type: string title: UnitType x-stoplight: id: 9womjjbg9rhr7 enum: - ADULT - YOUTH - CHILD - INFANT - FAMILY - SENIOR - STUDENT - MILITARY - OTHER examples: - ADULT description: This is the base unit type for this unit definition. A value of TRAVELLER MUST only be used in replacement of `ADULT`, `CHILD`, `INFANT`, `YOUTH`, `STUDENT`, or `SENIOR`. example: YOUTH requiredContactFields: type: array description: This is the array of the contact information PER ticket that the supplier expects. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minAge: 0 maxAge: 100 idRequired: false minQuantity: 1 maxQuantity: null paxCount: 4 accompaniedBy: [] description: unit restrictions examples: - minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 title: UnitRestrictions properties: minAge: type: integer example: 3 description: This is the minumum age this unit can be sold to maxAge: type: integer example: 17 description: This is the maximum age this unit can be sold to idRequired: type: boolean description: This is whether a form of identification will be required at redemption point (eg. student card) minQuantity: type: - integer - 'null' example: 2 description: This is if there is a minimum amount of units to be chosen for purchase (eg. 2) maxQuantity: type: - 'null' - integer example: 7 description: This is if there is a maximum amount of units to be chosen for purchase (eg. 7) paxCount: type: integer description: This is the amount of people each unit counts as (eg. family == 4pax) example: 1 accompaniedBy: type: array description: This is if the unit needs to be accompanied by another unit (eg. Infant with Adult) items: type: string example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 required: - minAge - maxAge - idRequired - minQuantity - maxQuantity - paxCount - accompaniedBy required: - id - internalName - type - requiredContactFields - restrictions description: '' status: type: string title: BookingStatus x-stoplight: id: 8igglzvoke69w enum: - ON_HOLD - CONFIRMED - EXPIRED - CANCELLED - REDEEMED - PENDING - REJECTED example: CONFIRMED description: 'The status of the booking, possible values are: `ON_HOLD` The booking is pending confirmation, this is the default value when you first create the booking. `EXPIRED` If the booking is not confirmed before the expiration hold expires, it goes into an expired state. `CONFIRMED` Once the confirmation call is made the booking is ready to be used. `CANCELLED` If the booking is cancelled. `PENDING` If the booking is pending outside availability confirmation. `REDEEMED` If the booking is already redeemed.' examples: - CONFIRMED utcRedeemedAt: type: - 'null' - string description: The ISO8601 date in UTC indicating when the ticket was used at the attraction. contact: type: object x-examples: example-1: fullName: null firstName: null lastName: null emailAddress: null phoneNumber: null locales: [] postalCode: null country: null notes: null examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: null locales: - en postalCode: null country: null notes: null description: Contact details for the guests that will attend the tour/attraction. Contact schema can be applied to both the booking object (the main reservation) or the unit object (individual ticket holders - if the supplier requires this information) properties: fullName: type: - 'null' - string example: John Doe description: The full name of the booking holder or the ticket holder. Can also be retrieved as an alias for the concatenation of `firstName` and `lastName` firstName: type: - 'null' - string example: John description: The first name of the booking holder or the ticket holder. lastName: type: - 'null' - string example: Doe description: The last name of the booking holder or the ticket holder. emailAddress: type: - 'null' - string format: email description: The email address of the booking holder or the ticket holder. example: johndoe@email.com phoneNumber: type: - 'null' - string description: The phone number of the booking holder or the ticket holder. locales: type: array description: An array of locale values, equivalent to navigator.languages in a browsers environment. items: type: string example: en postalCode: type: - 'null' - string description: The PO Box of the booking holder or the ticket holder. country: type: - 'null' - string description: The country of the booking holder or the ticket holder. notes: type: - 'null' - string description: Optional notes for the booking. ticket: oneOf: - type: object x-examples: example-1: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: '!1|El3f0wUmcnrEmviMcR9qwqC9hvfrcWc6cZcRcrcR|yrirfZfqHPj40mvhpw2XzX|q7FF77QqFD7fDhr9' - deliveryFormat: PDF_URL deliveryValue: https://api.ventrata.com/octo/pdf?booking=36d2d844-121d-453c-b514-de027caaf27f&ticket=72419a19-c58c-46a0-b316-13509de43909 examples: - redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: string properties: redemptionMethod: type: string title: RedemptionMethod x-stoplight: id: jrrh8rbyzfuzm enum: - DIGITAL - PRINT - MANIFEST description: 'How the voucher can be redeemed. Possible values are: `MANIFEST` The guest name will be written down and they just need to show up `DIGITAL` The tickets/voucher must be scanned but can be on mobile `PRINT` The tickets/voucher must be printed and presented on arrival' examples: - DIGITAL utcRedeemedAt: type: - 'null' - string description: The ISO8601 date in UTC indicating when the ticket was used at the attraction. deliveryOptions: type: array items: type: object properties: deliveryFormat: type: string title: DeliveryFormat x-stoplight: id: xo5qi6jemvvhc enum: - PDF_URL - QRCODE description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF.' example: QRCODE examples: - QRCODE deliveryValue: type: string description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF. ' required: - deliveryFormat - deliveryValue required: - redemptionMethod - utcRedeemedAt - deliveryOptions description: '' - type: 'null' required: - uuid - resellerReference - supplierReference - unitId - unit - status - utcRedeemedAt - contact description: '' examples: - uuid: 3b1bc2ee-3155-4738-9471-f49842a07327 resellerReference: 4ec08a62-892c-48c1-a608-dc946531a33b supplierReference: K9T7R5 unitId: youth_f6446706-885a-437c-8461-efd6d7080910 unit: id: string internalName: string reference: null type: ADULT requiredContactFields: - firstName restrictions: minAge: 18 maxAge: 99 idRequired: false minQuantity: 0 maxQuantity: null paxCount: 0 accompaniedBy: [] status: CONFIRMED utcRedeemedAt: null contact: fullName: John Doe firstName: John lastName: Doe emailAddress: null phoneNumber: null locales: - en postalCode: null country: null notes: null ticket: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: string required: - id - uuid - testMode - resellerReference - supplierReference - status - utcCreatedAt - utcUpdatedAt - utcExpiresAt - utcRedeemedAt - utcConfirmedAt - productId - product - optionId - option - cancellable - cancellation - freesale - availabilityId - availability - contact - notes - deliveryMethods - unitItems examples: example-1: value: id: 3ac5450f-8511-4386-9feb-17ce4f9e1f86 uuid: ec0ce0c2-03f0-4c64-bbc5-5e0f7d1e1c0a testMode: true resellerReference: null supplierReference: ALG6RQ status: CONFIRMED utcCreatedAt: '2022-05-25T11:03:22Z' utcUpdatedAt: '2022-05-25T11:03:31Z' utcExpiresAt: null utcRedeemedAt: null utcConfirmedAt: '2022-05-25T11:03:31Z' productId: '1' product: id: '1' internalName: PPU | OH reference: null locale: en timeZone: Europe/London allowFreesale: false instantConfirmation: true instantDelivery: true availabilityRequired: true availabilityType: OPENING_HOURS deliveryFormats: - PDF_URL - QRCODE deliveryMethods: - TICKET - VOUCHER redemptionMethod: DIGITAL options: - id: DEFAULT default: true internalName: DEFAULT reference: null availabilityLocalStartTimes: - 00:00 cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: null units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: null maxQuantity: null paxCount: 1 accompaniedBy: [] optionId: DEFAULT option: id: DEFAULT default: true internalName: DEFAULT reference: null availabilityLocalStartTimes: - 00:00 cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: null units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: null maxQuantity: null paxCount: 1 accompaniedBy: [] cancellable: true cancellation: null freesale: false availabilityId: '2022-04-30T00:00:00+01:00' availability: id: '2022-04-30T00:00:00+01:00' localDateTimeStart: '2022-04-30T00:00:00+01:00' localDateTimeEnd: '2022-05-01T00:00:00+01:00' allDay: true openingHours: - from: 09:00 to: '17:00' contact: fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: null locales: [] country: null notes: null notes: null deliveryMethods: - TICKET - VOUCHER voucher: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: PDF_URL deliveryValue: https://api.octomock.com/octo/pdf?booking=ec0ce0c2-03f0-4c64-bbc5-5e0f7d1e1c0a - deliveryFormat: QRCODE deliveryValue: ALG6RQ unitItems: - uuid: 25ec5429-d563-45f9-ba5b-85b03edbf65e resellerReference: null supplierReference: EO6Q0P unit: id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: null maxQuantity: null paxCount: 1 accompaniedBy: [] unitId: adult status: ON_HOLD utcRedeemedAt: null contact: fullName: null firstName: null lastName: null emailAddress: null phoneNumber: null locales: [] country: null notes: null ticket: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: PDF_URL deliveryValue: https://api.octomock.com/octo/pdf?booking=ec0ce0c2-03f0-4c64-bbc5-5e0f7d1e1c0a&ticket=25ec5429-d563-45f9-ba5b-85b03edbf65e - deliveryFormat: QRCODE deliveryValue: EO6Q0P '400': description: Example response content: application/json: schema: properties: id: type: string examples: INVALID_BOOKING_UUID: value: error: INVALID_BOOKING_UUID errorMessage: The uuid was already used, missing or invalid uuid: bbbb6227-54fc-4c32-9ed7-dc3eb99966ea operationId: get-bookings-:uuid description: Fetch the status of an existing booking. patch: summary: Open Connectivity for Tours, Activities, and Attractions Booking Update tags: - Bookings operationId: patch-bookings-:uuid responses: '200': description: OK content: application/json: schema: type: object x-examples: example-1: id: 36d2d844-121d-453c-b514-de027caaf27f uuid: 3698539b-65c4-41e3-95b1-fa108fd024b2 testMode: false resellerReference: 102-256952-3 supplierReference: 300SK9 status: CONFIRMED utcCreatedAt: '2021-10-27T23:28:43Z' utcUpdatedAt: '2021-10-27T23:28:45Z' utcExpiresAt: null utcRedeemedAt: null utcConfirmedAt: '2021-10-27T23:28:45Z' productId: 5379ce46-0620-42ce-b65c-70d6fc1c9ac2 examples: [] description: '' title: '' properties: id: type: string example: bbbb6227-54fc-4c32-9ed7-dc3eb99966ea description: A unique ID / UUID generated by the supplier system to identify the booking. uuid: type: string format: uuid example: 559aed3d-6d5b-4fe0-bfca-99f5e7218a56 description: A UUID you can set when generating the booking to use as an idempotency key. testMode: type: boolean description: If `TRUE`, booking was created on test mode resellerReference: type: - string - 'null' description: The reference set by the Reseller. A mandatory field for resellers to be set in the booking confirmation request. supplierReference: type: - string - 'null' description: The Supplier's / booking platform reference. status: type: string title: BookingStatus x-stoplight: id: 8igglzvoke69w enum: - ON_HOLD - CONFIRMED - EXPIRED - CANCELLED - REDEEMED - PENDING - REJECTED example: CONFIRMED description: 'The status of the booking, possible values are: `ON_HOLD` The booking is pending confirmation, this is the default value when you first create the booking. `EXPIRED` If the booking is not confirmed before the expiration hold expires, it goes into an expired state. `CONFIRMED` Once the confirmation call is made the booking is ready to be used. `CANCELLED` If the booking is cancelled. `PENDING` If the booking is pending outside availability confirmation. `REDEEMED` If the booking is already redeemed.' examples: - CONFIRMED utcCreatedAt: type: string example: '2021-10-27T23:28:43Z' description: An ISO8601 date time in UTC when the booking was created. utcUpdatedAt: type: - string - 'null' example: '2021-10-27T23:28:43Z' description: An ISO8601 date time in UTC when the booking was updated. utcExpiresAt: type: - string - 'null' description: An ISO8601 date times in UTC for when this booking is due to expire if the status is `ON_HOLD`. example: '2021-10-27T23:58:43Z' utcRedeemedAt: type: - string - 'null' description: An ISO8601 date time in UTC at when the booking was redeemed. utcConfirmedAt: type: - string - 'null' example: '2021-10-27T23:28:43Z' description: An ISO8601 date time in UTC when the booking was confirmed. productId: type: string example: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854 description: The product ID that identifies the product in the booking system to make this reservation. product: type: object x-examples: example-1: id: 28ca088b-bc7b-4746-ab06-5971f1ed5a5e internalName: Edinburgh Hop-On Hop-Off Bus Tour reference: null locale: en timeZone: Europe/London allowFreesale: true instantConfirmation: true instantDelivery: true availabilityRequired: false examples: - id: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854 internalName: Amazon River Tour reference: AMZN locale: en-GB timeZone: Europe/London allowFreesale: true instantConfirmation: true instantDelivery: true availabilityRequired: true availabilityType: START_TIME deliveryFormats: - QRCODE deliveryMethods: - VOUCHER redemptionMethod: DIGITAL options: - id: DEFAULT default: true internalName: Private Morning Tour reference: VIP-MORN availabilityLocalStartTimes: - 09:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: - firstName restrictions: minUnits: 'null' maxUnits: 10 units: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 description: A bookable product listed by a supplier. properties: id: type: string example: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854 description: The id used for checking for availability and creating bookings for the product. This MUST be unique within the scope of the Supplier. internalName: type: string description: The name the supplier calls the product. example: Amazon River Tour reference: type: - 'null' - string description: An optional code this supplier might use to identify the product. example: AMZN locale: type: string example: en-GB description: A language code indicating what language this product content is in. This MUST be a valid BCP 47 RFC 5646 RFC 4647 language tag. timeZone: type: string example: Europe/London description: The IANA TimeZone name this product is located in. allowFreesale: type: boolean description: Whether a booking can be made for this product without having to query availability first. instantConfirmation: type: boolean description: Whether bookings will be immediately confirmed when a sale is made, otherwise the supplier will later either accept or reject the booking. When `instantConfirmation` is set to false one should expect created bookings to first get into a `PENDING` state. instantDelivery: type: boolean description: This indicates whether the Reseller can expect immediate delivery of the customer's tickets. If `false` then the Reseller MUST be able to delay delivery of the tickets to the customer. availabilityRequired: type: boolean description: Whether an `availabilityId` is required when creating a booking. Without this the booking will be open-dated and not have a specified travel date. availabilityType: type: string title: AvailabilityType x-stoplight: id: n70vwjh7kvmxk enum: - START_TIME - OPENING_HOURS description: 'What type of availability this product has, possible values are: `START_TIME` if there are fixed departure times which you must pick one. Typical for day tours or activities. `OPENING_HOURS` if you just select a date and can visit any time when the venue is open.' example: START_TIME examples: - START_TIME deliveryFormats: type: array description: 'An array of formats the API will deliver the tickets as. Possible values are: `QRCODE` A code to be presented as a QR CODE barcode `CODE128A` code to be presented as a CODE 128 barcode `PDF_URL` A URL to a PDF file which contains all the ticket details' items: type: string title: DeliveryFormat x-stoplight: id: xo5qi6jemvvhc enum: - PDF_URL - QRCODE description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF.' example: QRCODE examples: - QRCODE deliveryMethods: type: array description: 'How the formats described in `deliveryFormats` will be delivered in the booking response, possible values are: `TICKET`: Individually per unit in the order (i.e. single ticket for each person) `VOUCHER`: One ticket for the whole booking' items: type: string title: DeliveryMethod x-stoplight: id: tdh9akr9neqhb enum: - VOUCHER - TICKET description: 'An array of delivery methods available for this booking. Possible values are: `VOUCHER` The voucher object is populated which is a single ticket for the whole booking. `TICKET` The ticket object is populated on each unit item which is a ticket for each individual person. If `booking.deliveryMethods` contains both `TICKET` and `VOUCHER` then both those values will be set.' examples: - VOUCHER redemptionMethod: type: string title: RedemptionMethod x-stoplight: id: jrrh8rbyzfuzm enum: - DIGITAL - PRINT - MANIFEST description: 'How the voucher can be redeemed. Possible values are: `MANIFEST` The guest name will be written down and they just need to show up `DIGITAL` The tickets/voucher must be scanned but can be on mobile `PRINT` The tickets/voucher must be printed and presented on arrival' examples: - DIGITAL options: type: array description: An array of all options for this product. All products must have at least one option. items: type: object x-examples: example-1: id: DEFAULT default: true internalName: DEFAULT reference: null availabilityLocalStartTimes: - 00:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: [] examples: - id: DEFAULT default: true internalName: Private Morning Tour reference: VIP-MORN availabilityLocalStartTimes: - 09:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: - firstName restrictions: minUnits: 'null' maxUnits: 10 units: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 description: Product options are subdivisions of the original product that will affect price and / or duration. Within the OCTo spec, every product must contain an option. properties: id: type: string example: DEFAULT description: The id that identifies this option, it is only unique within the product. default: type: boolean description: '`TRUE` identifies the option as default, and should therefore rendered and selected first' internalName: type: string description: The name the supplier calls the option by. example: Private Morning Tour reference: type: - 'null' - string description: An optional code this supplier might use to identify the product. example: VIP-MORN availabilityLocalStartTimes: type: array description: This will be an array of all possible start times that can be returned during availability. For example an all day attraction may have a single value like `["00:00"]` whilst a tour with multiple departure times may have multiple:`["09:00", "14:00", "17:00"]`. items: type: string default: 00:00 example: 09:00 cancellationCutoff: type: string example: 1 hour description: This is how long before the tour the booking can be still be cancelled. cancellationCutoffAmount: type: integer example: 1 description: The numeric amount for the cutoff. cancellationCutoffUnit: type: string title: DurationUnit x-stoplight: id: etuhjhtharyrt enum: - hour - minute - day example: hour description: 'Time units used to determine duration. Three values are available: `hour`, `minute`, `day`.' examples: - hour requiredContactFields: type: array description: An array of the contact fields required to confirm a booking. These just apply to the lead traveller on the booking and not for every ticket. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minUnits: 0 maxUnits: 9 description: An object containing a fixed list of restrictions for booking the option. examples: - minUnits: null maxUnits: 10 properties: minUnits: type: - integer - 'null' example: 0 description: The minimum number of tickets that can be purchased in a single booking (null = 0). maxUnits: type: - integer - 'null' example: 10 description: The maximum number of tickets that can be purchased in a single booking (null = unlimited). required: - minUnits - maxUnits units: type: array description: The list of ticket types (units) available for sale. items: type: object x-examples: example-1: id: unit_c1709f42-297e-4f7e-bd6b-3e77d4622d8a internalName: Adult reference: null type: ADULT requiredContactFields: [] examples: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 properties: id: type: string description: This MUST be a unique identifier within the scope of the option. example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: type: string example: Adult(s) description: This should be a name to help with identifying the unit. It should NOT be shown to the customer. reference: type: - 'null' - string description: This is an internal reference identifier that the Supplier wishes to use. It MAY be non-unique. example: LR1-01-new type: type: string title: UnitType x-stoplight: id: 9womjjbg9rhr7 enum: - ADULT - YOUTH - CHILD - INFANT - FAMILY - SENIOR - STUDENT - MILITARY - OTHER examples: - ADULT description: This is the base unit type for this unit definition. A value of TRAVELLER MUST only be used in replacement of `ADULT`, `CHILD`, `INFANT`, `YOUTH`, `STUDENT`, or `SENIOR`. example: YOUTH requiredContactFields: type: array description: This is the array of the contact information PER ticket that the supplier expects. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minAge: 0 maxAge: 100 idRequired: false minQuantity: 1 maxQuantity: null paxCount: 4 accompaniedBy: [] description: unit restrictions examples: - minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 title: UnitRestrictions properties: minAge: type: integer example: 3 description: This is the minumum age this unit can be sold to maxAge: type: integer example: 17 description: This is the maximum age this unit can be sold to idRequired: type: boolean description: This is whether a form of identification will be required at redemption point (eg. student card) minQuantity: type: - integer - 'null' example: 2 description: This is if there is a minimum amount of units to be chosen for purchase (eg. 2) maxQuantity: type: - 'null' - integer example: 7 description: This is if there is a maximum amount of units to be chosen for purchase (eg. 7) paxCount: type: integer description: This is the amount of people each unit counts as (eg. family == 4pax) example: 1 accompaniedBy: type: array description: This is if the unit needs to be accompanied by another unit (eg. Infant with Adult) items: type: string example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 required: - minAge - maxAge - idRequired - minQuantity - maxQuantity - paxCount - accompaniedBy required: - id - internalName - type - requiredContactFields - restrictions description: '' required: - id - default - internalName - reference - availabilityLocalStartTimes - cancellationCutoff - cancellationCutoffAmount - cancellationCutoffUnit - requiredContactFields - restrictions - units required: - id - internalName - reference - locale - allowFreesale - instantConfirmation - instantDelivery - availabilityRequired - availabilityType - deliveryFormats - deliveryMethods - redemptionMethod - options optionId: type: string example: DEFAULT description: The product ID that identifies the product option in the booking system to make this reservation. option: type: object x-examples: example-1: id: DEFAULT default: true internalName: DEFAULT reference: null availabilityLocalStartTimes: - 00:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: [] examples: - id: DEFAULT default: true internalName: Private Morning Tour reference: VIP-MORN availabilityLocalStartTimes: - 09:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: - firstName restrictions: minUnits: 'null' maxUnits: 10 units: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 description: Product options are subdivisions of the original product that will affect price and / or duration. Within the OCTo spec, every product must contain an option. properties: id: type: string example: DEFAULT description: The id that identifies this option, it is only unique within the product. default: type: boolean description: '`TRUE` identifies the option as default, and should therefore rendered and selected first' internalName: type: string description: The name the supplier calls the option by. example: Private Morning Tour reference: type: - 'null' - string description: An optional code this supplier might use to identify the product. example: VIP-MORN availabilityLocalStartTimes: type: array description: This will be an array of all possible start times that can be returned during availability. For example an all day attraction may have a single value like `["00:00"]` whilst a tour with multiple departure times may have multiple:`["09:00", "14:00", "17:00"]`. items: type: string default: 00:00 example: 09:00 cancellationCutoff: type: string example: 1 hour description: This is how long before the tour the booking can be still be cancelled. cancellationCutoffAmount: type: integer example: 1 description: The numeric amount for the cutoff. cancellationCutoffUnit: type: string title: DurationUnit x-stoplight: id: etuhjhtharyrt enum: - hour - minute - day example: hour description: 'Time units used to determine duration. Three values are available: `hour`, `minute`, `day`.' examples: - hour requiredContactFields: type: array description: An array of the contact fields required to confirm a booking. These just apply to the lead traveller on the booking and not for every ticket. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minUnits: 0 maxUnits: 9 description: An object containing a fixed list of restrictions for booking the option. examples: - minUnits: null maxUnits: 10 properties: minUnits: type: - integer - 'null' example: 0 description: The minimum number of tickets that can be purchased in a single booking (null = 0). maxUnits: type: - integer - 'null' example: 10 description: The maximum number of tickets that can be purchased in a single booking (null = unlimited). required: - minUnits - maxUnits units: type: array description: The list of ticket types (units) available for sale. items: type: object x-examples: example-1: id: unit_c1709f42-297e-4f7e-bd6b-3e77d4622d8a internalName: Adult reference: null type: ADULT requiredContactFields: [] examples: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 properties: id: type: string description: This MUST be a unique identifier within the scope of the option. example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: type: string example: Adult(s) description: This should be a name to help with identifying the unit. It should NOT be shown to the customer. reference: type: - 'null' - string description: This is an internal reference identifier that the Supplier wishes to use. It MAY be non-unique. example: LR1-01-new type: type: string title: UnitType x-stoplight: id: 9womjjbg9rhr7 enum: - ADULT - YOUTH - CHILD - INFANT - FAMILY - SENIOR - STUDENT - MILITARY - OTHER examples: - ADULT description: This is the base unit type for this unit definition. A value of TRAVELLER MUST only be used in replacement of `ADULT`, `CHILD`, `INFANT`, `YOUTH`, `STUDENT`, or `SENIOR`. example: YOUTH requiredContactFields: type: array description: This is the array of the contact information PER ticket that the supplier expects. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minAge: 0 maxAge: 100 idRequired: false minQuantity: 1 maxQuantity: null paxCount: 4 accompaniedBy: [] description: unit restrictions examples: - minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 title: UnitRestrictions properties: minAge: type: integer example: 3 description: This is the minumum age this unit can be sold to maxAge: type: integer example: 17 description: This is the maximum age this unit can be sold to idRequired: type: boolean description: This is whether a form of identification will be required at redemption point (eg. student card) minQuantity: type: - integer - 'null' example: 2 description: This is if there is a minimum amount of units to be chosen for purchase (eg. 2) maxQuantity: type: - 'null' - integer example: 7 description: This is if there is a maximum amount of units to be chosen for purchase (eg. 7) paxCount: type: integer description: This is the amount of people each unit counts as (eg. family == 4pax) example: 1 accompaniedBy: type: array description: This is if the unit needs to be accompanied by another unit (eg. Infant with Adult) items: type: string example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 required: - minAge - maxAge - idRequired - minQuantity - maxQuantity - paxCount - accompaniedBy required: - id - internalName - type - requiredContactFields - restrictions description: '' required: - id - default - internalName - reference - availabilityLocalStartTimes - cancellationCutoff - cancellationCutoffAmount - cancellationCutoffUnit - requiredContactFields - restrictions - units cancellable: type: boolean description: A boolean field indicating whether this booking can be cancelled. cancellation: type: - 'null' - object description: An object with information about why and when the booking was cancelled. This is `NULL` if the booking is not cancelled. required: - refund - reason - utcCancelledAt properties: refund: type: string description: Whether the booking was refunded as part of the cancellation. Possible values are `FULL`, `PARTIAL` or `NONE` reason: type: - 'null' - string description: A text value describing why the cancellation happened. utcCancelledAt: type: string example: '2021-10-27T23:38:43Z' description: An ISO8601 date time in UTC indicating when the booking was cancelled. freesale: type: boolean description: Whether the booking was made as freesale (without checking availability first). availabilityId: type: string description: The availability id that was used in the request. availability: type: object description: 'The availability object that was booked. ' required: - id - localDateTimeStart - localDateTimeEnd - allDay - openingHours properties: id: type: string example: '2021-10-27T00:00:00-04:00' description: The availability id that was used in the request. localDateTimeStart: type: string example: '2021-10-27T00:00:00-04:00' description: The `localDateTimeStart` value from the original availability object. localDateTimeEnd: type: string example: '2021-10-28T00:00:00-04:00' description: The `localDateTimeEnd` value from the original availability object. allDay: type: boolean description: A boolean value indicating whether the availability is all day. openingHours: type: array description: The opening hours from the original availability object. items: type: object x-examples: example-1: from: 08:00 to: '18:30' description: A list of opening hours that the product is open on this day. properties: from: type: string example: 08:00 description: When this product opens (HH:MM) to: type: string example: '16:00' description: When this product closes (HH:MM) required: - from - to examples: - from: 08:00 to: '16:00' contact: type: object x-examples: example-1: fullName: null firstName: null lastName: null emailAddress: null phoneNumber: null locales: [] postalCode: null country: null notes: null examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: null locales: - en postalCode: null country: null notes: null description: Contact details for the guests that will attend the tour/attraction. Contact schema can be applied to both the booking object (the main reservation) or the unit object (individual ticket holders - if the supplier requires this information) properties: fullName: type: - 'null' - string example: John Doe description: The full name of the booking holder or the ticket holder. Can also be retrieved as an alias for the concatenation of `firstName` and `lastName` firstName: type: - 'null' - string example: John description: The first name of the booking holder or the ticket holder. lastName: type: - 'null' - string example: Doe description: The last name of the booking holder or the ticket holder. emailAddress: type: - 'null' - string format: email description: The email address of the booking holder or the ticket holder. example: johndoe@email.com phoneNumber: type: - 'null' - string description: The phone number of the booking holder or the ticket holder. locales: type: array description: An array of locale values, equivalent to navigator.languages in a browsers environment. items: type: string example: en postalCode: type: - 'null' - string description: The PO Box of the booking holder or the ticket holder. country: type: - 'null' - string description: The country of the booking holder or the ticket holder. notes: type: - 'null' - string description: Optional notes for the booking. notes: type: - string - 'null' example: Optional notes for the booking deliveryMethods: type: array description: An array of delivery methods available for this booking. items: type: string title: DeliveryMethod x-stoplight: id: tdh9akr9neqhb enum: - VOUCHER - TICKET description: 'An array of delivery methods available for this booking. Possible values are: `VOUCHER` The voucher object is populated which is a single ticket for the whole booking. `TICKET` The ticket object is populated on each unit item which is a ticket for each individual person. If `booking.deliveryMethods` contains both `TICKET` and `VOUCHER` then both those values will be set.' examples: - VOUCHER voucher: oneOf: - type: object x-examples: example-1: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: '!1|El3f0wUmcnrEmviMcR9qwqC9hvfrcWc6cZcRcrcR|yrirfZfqHPj40mvhpw2XzX|q7FF77QqFD7fDhr9' - deliveryFormat: PDF_URL deliveryValue: https://api.ventrata.com/octo/pdf?booking=36d2d844-121d-453c-b514-de027caaf27f&ticket=72419a19-c58c-46a0-b316-13509de43909 examples: - redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: string properties: redemptionMethod: type: string title: RedemptionMethod x-stoplight: id: jrrh8rbyzfuzm enum: - DIGITAL - PRINT - MANIFEST description: 'How the voucher can be redeemed. Possible values are: `MANIFEST` The guest name will be written down and they just need to show up `DIGITAL` The tickets/voucher must be scanned but can be on mobile `PRINT` The tickets/voucher must be printed and presented on arrival' examples: - DIGITAL utcRedeemedAt: type: - 'null' - string description: The ISO8601 date in UTC indicating when the ticket was used at the attraction. deliveryOptions: type: array items: type: object properties: deliveryFormat: type: string title: DeliveryFormat x-stoplight: id: xo5qi6jemvvhc enum: - PDF_URL - QRCODE description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF.' example: QRCODE examples: - QRCODE deliveryValue: type: string description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF. ' required: - deliveryFormat - deliveryValue required: - redemptionMethod - utcRedeemedAt - deliveryOptions description: '' - type: 'null' unitItems: type: array description: An array of unit items that will be included in the booking. items: type: object x-examples: example-1: uuid: 97525082-2498-4e61-b259-bc48e27a96ae resellerReference: 102-256952-3-Adult-2 supplierReference: J9T7R6 unitId: unit_8080415c-890c-4b38-a5af-0934d73e94d3 properties: uuid: type: string example: 3b1bc2ee-3155-4738-9471-f49842a07327 description: The id of the unit, this will be unique to the option. resellerReference: type: - string - 'null' example: 4ec08a62-892c-48c1-a608-dc946531a33b description: A reference the reseller uses to identify the unit within all bookings. supplierReference: type: - string - 'null' example: K9T7R5 description: A reference the supplier uses to identify the unit within all bookings. unitId: type: string example: youth_f6446706-885a-437c-8461-efd6d7080910 unit: type: object x-examples: example-1: id: unit_c1709f42-297e-4f7e-bd6b-3e77d4622d8a internalName: Adult reference: null type: ADULT requiredContactFields: [] examples: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 properties: id: type: string description: This MUST be a unique identifier within the scope of the option. example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: type: string example: Adult(s) description: This should be a name to help with identifying the unit. It should NOT be shown to the customer. reference: type: - 'null' - string description: This is an internal reference identifier that the Supplier wishes to use. It MAY be non-unique. example: LR1-01-new type: type: string title: UnitType x-stoplight: id: 9womjjbg9rhr7 enum: - ADULT - YOUTH - CHILD - INFANT - FAMILY - SENIOR - STUDENT - MILITARY - OTHER examples: - ADULT description: This is the base unit type for this unit definition. A value of TRAVELLER MUST only be used in replacement of `ADULT`, `CHILD`, `INFANT`, `YOUTH`, `STUDENT`, or `SENIOR`. example: YOUTH requiredContactFields: type: array description: This is the array of the contact information PER ticket that the supplier expects. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minAge: 0 maxAge: 100 idRequired: false minQuantity: 1 maxQuantity: null paxCount: 4 accompaniedBy: [] description: unit restrictions examples: - minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 title: UnitRestrictions properties: minAge: type: integer example: 3 description: This is the minumum age this unit can be sold to maxAge: type: integer example: 17 description: This is the maximum age this unit can be sold to idRequired: type: boolean description: This is whether a form of identification will be required at redemption point (eg. student card) minQuantity: type: - integer - 'null' example: 2 description: This is if there is a minimum amount of units to be chosen for purchase (eg. 2) maxQuantity: type: - 'null' - integer example: 7 description: This is if there is a maximum amount of units to be chosen for purchase (eg. 7) paxCount: type: integer description: This is the amount of people each unit counts as (eg. family == 4pax) example: 1 accompaniedBy: type: array description: This is if the unit needs to be accompanied by another unit (eg. Infant with Adult) items: type: string example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 required: - minAge - maxAge - idRequired - minQuantity - maxQuantity - paxCount - accompaniedBy required: - id - internalName - type - requiredContactFields - restrictions description: '' status: type: string title: BookingStatus x-stoplight: id: 8igglzvoke69w enum: - ON_HOLD - CONFIRMED - EXPIRED - CANCELLED - REDEEMED - PENDING - REJECTED example: CONFIRMED description: 'The status of the booking, possible values are: `ON_HOLD` The booking is pending confirmation, this is the default value when you first create the booking. `EXPIRED` If the booking is not confirmed before the expiration hold expires, it goes into an expired state. `CONFIRMED` Once the confirmation call is made the booking is ready to be used. `CANCELLED` If the booking is cancelled. `PENDING` If the booking is pending outside availability confirmation. `REDEEMED` If the booking is already redeemed.' examples: - CONFIRMED utcRedeemedAt: type: - 'null' - string description: The ISO8601 date in UTC indicating when the ticket was used at the attraction. contact: type: object x-examples: example-1: fullName: null firstName: null lastName: null emailAddress: null phoneNumber: null locales: [] postalCode: null country: null notes: null examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: null locales: - en postalCode: null country: null notes: null description: Contact details for the guests that will attend the tour/attraction. Contact schema can be applied to both the booking object (the main reservation) or the unit object (individual ticket holders - if the supplier requires this information) properties: fullName: type: - 'null' - string example: John Doe description: The full name of the booking holder or the ticket holder. Can also be retrieved as an alias for the concatenation of `firstName` and `lastName` firstName: type: - 'null' - string example: John description: The first name of the booking holder or the ticket holder. lastName: type: - 'null' - string example: Doe description: The last name of the booking holder or the ticket holder. emailAddress: type: - 'null' - string format: email description: The email address of the booking holder or the ticket holder. example: johndoe@email.com phoneNumber: type: - 'null' - string description: The phone number of the booking holder or the ticket holder. locales: type: array description: An array of locale values, equivalent to navigator.languages in a browsers environment. items: type: string example: en postalCode: type: - 'null' - string description: The PO Box of the booking holder or the ticket holder. country: type: - 'null' - string description: The country of the booking holder or the ticket holder. notes: type: - 'null' - string description: Optional notes for the booking. ticket: oneOf: - type: object x-examples: example-1: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: '!1|El3f0wUmcnrEmviMcR9qwqC9hvfrcWc6cZcRcrcR|yrirfZfqHPj40mvhpw2XzX|q7FF77QqFD7fDhr9' - deliveryFormat: PDF_URL deliveryValue: https://api.ventrata.com/octo/pdf?booking=36d2d844-121d-453c-b514-de027caaf27f&ticket=72419a19-c58c-46a0-b316-13509de43909 examples: - redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: string properties: redemptionMethod: type: string title: RedemptionMethod x-stoplight: id: jrrh8rbyzfuzm enum: - DIGITAL - PRINT - MANIFEST description: 'How the voucher can be redeemed. Possible values are: `MANIFEST` The guest name will be written down and they just need to show up `DIGITAL` The tickets/voucher must be scanned but can be on mobile `PRINT` The tickets/voucher must be printed and presented on arrival' examples: - DIGITAL utcRedeemedAt: type: - 'null' - string description: The ISO8601 date in UTC indicating when the ticket was used at the attraction. deliveryOptions: type: array items: type: object properties: deliveryFormat: type: string title: DeliveryFormat x-stoplight: id: xo5qi6jemvvhc enum: - PDF_URL - QRCODE description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF.' example: QRCODE examples: - QRCODE deliveryValue: type: string description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF. ' required: - deliveryFormat - deliveryValue required: - redemptionMethod - utcRedeemedAt - deliveryOptions description: '' - type: 'null' required: - uuid - resellerReference - supplierReference - unitId - unit - status - utcRedeemedAt - contact description: '' examples: - uuid: 3b1bc2ee-3155-4738-9471-f49842a07327 resellerReference: 4ec08a62-892c-48c1-a608-dc946531a33b supplierReference: K9T7R5 unitId: youth_f6446706-885a-437c-8461-efd6d7080910 unit: id: string internalName: string reference: null type: ADULT requiredContactFields: - firstName restrictions: minAge: 18 maxAge: 99 idRequired: false minQuantity: 0 maxQuantity: null paxCount: 0 accompaniedBy: [] status: CONFIRMED utcRedeemedAt: null contact: fullName: John Doe firstName: John lastName: Doe emailAddress: null phoneNumber: null locales: - en postalCode: null country: null notes: null ticket: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: string required: - id - uuid - testMode - resellerReference - supplierReference - status - utcCreatedAt - utcUpdatedAt - utcExpiresAt - utcRedeemedAt - utcConfirmedAt - productId - product - optionId - option - cancellable - cancellation - freesale - availabilityId - availability - contact - notes - deliveryMethods - unitItems examples: example-1: value: id: 3ef65048-5ffe-474f-8a5c-fb35a9faa6ed uuid: 814d2566-2c71-4e6a-aaa9-59b9bf26cc0d testMode: true resellerReference: null supplierReference: RNSRSM status: CONFIRMED utcCreatedAt: '2022-05-25T11:07:05Z' utcUpdatedAt: '2022-05-25T11:09:32Z' utcExpiresAt: null utcRedeemedAt: null utcConfirmedAt: '2022-05-25T11:09:32Z' productId: '1' product: id: '1' internalName: PPU | OH reference: null locale: en timeZone: Europe/London allowFreesale: false instantConfirmation: true instantDelivery: true availabilityRequired: true availabilityType: OPENING_HOURS deliveryFormats: - PDF_URL - QRCODE deliveryMethods: - TICKET - VOUCHER redemptionMethod: DIGITAL options: - id: DEFAULT default: true internalName: DEFAULT reference: null availabilityLocalStartTimes: - 00:00 cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: null units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: null maxQuantity: null paxCount: 1 accompaniedBy: [] optionId: DEFAULT option: id: DEFAULT default: true internalName: DEFAULT reference: null availabilityLocalStartTimes: - 00:00 cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: null units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: null maxQuantity: null paxCount: 1 accompaniedBy: [] cancellable: true cancellation: null freesale: false availabilityId: '2022-04-30T00:00:00+01:00' availability: id: '2022-04-30T00:00:00+01:00' localDateTimeStart: '2022-04-30T00:00:00+01:00' localDateTimeEnd: '2022-05-01T00:00:00+01:00' allDay: true openingHours: - from: 09:00 to: '17:00' contact: fullName: test firstName: null lastName: null emailAddress: test@test.test phoneNumber: null locales: [] country: null notes: null notes: null deliveryMethods: - TICKET - VOUCHER voucher: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: PDF_URL deliveryValue: https://api.octomock.com/octo/pdf?booking=814d2566-2c71-4e6a-aaa9-59b9bf26cc0d - deliveryFormat: QRCODE deliveryValue: RNSRSM unitItems: - uuid: a204e6de-7909-4bf2-b7a8-2884189534bc resellerReference: null supplierReference: 1LTYVC unit: id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: null maxQuantity: null paxCount: 1 accompaniedBy: [] unitId: adult status: ON_HOLD utcRedeemedAt: null contact: fullName: null firstName: null lastName: null emailAddress: null phoneNumber: null locales: [] country: null notes: null ticket: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: PDF_URL deliveryValue: https://api.octomock.com/octo/pdf?booking=814d2566-2c71-4e6a-aaa9-59b9bf26cc0d&ticket=a204e6de-7909-4bf2-b7a8-2884189534bc - deliveryFormat: QRCODE deliveryValue: 1LTYVC - uuid: 9116e598-6713-4cb5-8ba4-e5b839f7a5d5 resellerReference: null supplierReference: A89VR8 unit: id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: null maxQuantity: null paxCount: 1 accompaniedBy: [] unitId: adult status: ON_HOLD utcRedeemedAt: null contact: fullName: null firstName: null lastName: null emailAddress: null phoneNumber: null locales: [] country: null notes: null ticket: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: PDF_URL deliveryValue: https://api.octomock.com/octo/pdf?booking=814d2566-2c71-4e6a-aaa9-59b9bf26cc0d&ticket=9116e598-6713-4cb5-8ba4-e5b839f7a5d5 - deliveryFormat: QRCODE deliveryValue: A89VR8 '400': description: Example response content: application/json: schema: type: object properties: error: type: string errorMessage: type: string productId: type: string optionId: type: string unitId: type: string uuid: type: string required: - error - errorMessage examples: INVALID_PRODUCT_ID: value: error: INVALID_PRODUCT_ID errorMessage: The productId was missing or invalid productId: cc2a6d56-6efe-426f-99c9-6eb10e341565 INVALID_OPTION_ID: value: error: INVALID_OPTION_ID errorMessage: The optionId was missing or invalid optionId: 681fea0f-196e-45da-bec7-467bfacb1d87 INVALID_UNIT_ID: value: error: INVALID_UNIT_ID errorMessage: The unitId was missing or invalid unitId: senior INVALID_AVAILABILITY_ID: value: error: INVALID_AVAILABILITY_ID errorMessage: The availabilityId was missing or invalid availabilityId: '2022-03-12T00:00:00+00:00' INVALID_BOOKING_UUID: value: error: INVALID_BOOKING_UUID errorMessage: The uuid was already used, missing or invalid uuid: bbbb6227-54fc-4c32-9ed7-dc3eb99966ea UNPROCESSABLE_ENTITY: value: error: UNPROCESSABLE_ENTITY errorMessage: The request body is technically correct but cannot be processed for other reasons. e.g. you tried to cancel a booking after the cancellation cutoff had elapsed requestBody: content: application/json: schema: type: object properties: resellerReference: type: string description: Your reference for this booking. Also known as a Voucher Number. example: ec08a62-892c-48c1-a608-dc946531a33b productId: type: string description: The product ID. example: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854 optionId: type: string description: The option id. example: DEFAULT availabilityId: type: string description: The availability ID for the selected timeslot. expirationMinutes: type: string description: How many minutes to reserve the availability, otherwise defaults to the supplier default amount. notes: type: string description: Optional notes for the booking. emailReceipt: type: boolean description: Whether you want OCTO Cloud to email the guest a copy of their receipt and tickets. (defaults to false). unitItems: type: array description: An array of unit items in the booking. To retain or modify existing unit items, you must include the unit item with the associated uuid, otherwise that unit item will be removed. items: type: object properties: uuid: type: string description: A unique UUID to identify the unit item. unitId: type: string description: The unit item unit ID. resellerReference: type: string description: A reference the reseller uses to identify the unit within all bookings. contact: type: object properties: fullName: type: string description: The full name of the ticket holder. Can also be retrieved as an alias for the concatenation of firstName and lastName. example: John Doe firstName: type: string description: The first name of the ticket holder. example: John lastName: type: string description: The last name of the ticket holder. example: Doe emailAddress: type: string description: The email address of the ticket holder. format: email example: johndoe@gmail.com phoneNumber: type: string description: The phone number of the ticket holder. locales: type: array description: An array of locale values, equivalent to `navigator.languages` in a browsers environment. items: type: string example: '["en"]' postalCode: type: string description: The PO Box of the ticket holder. country: type: string description: The country of the ticket holder. notes: type: string description: Optional notes for the ticket holder. required: - unitId contact: type: object properties: fullName: type: string description: The full name of the booking holder. Can also be retrieved as an alias for the concatenation of firstName and lastName. example: John Doe firstName: type: string description: The first name of the booking holder. example: John lastName: type: string description: The last name of the booking holder. example: Doe emailAddress: type: string description: The email address of the booking holder. format: email example: johndoe@gmail.com phoneNumber: type: string description: The phone number of the booking holder. locales: type: array description: An array of locale values, equivalent to `navigator.languages` in a browsers environment. items: type: string example: '["en"]' postalCode: type: string description: The PO Box of the booking holder. country: type: string description: The country of the booking holder. notes: type: string description: Optional notes for the booking holder. examples: {} parameters: - schema: type: string enum: - application/json in: header name: Content-Type description: Required field on all PATCH requests description: Updates a booking before and after it has been confirmed as long as it hasn''t been redeemed or within the cancellation cutoff window. To know if the booking can be updated check the booking''s `cancellable` field. If the booking can be cancelled, it can also be updated. It''s generally preferred to update a booking rather than cancelling it and rebooking. /bookings/{uuid}/extend: parameters: - schema: type: string name: uuid in: path required: true description: The UUID of the booking post: summary: Open Connectivity for Tours, Activities, and Attractions Extend Reservation tags: - Bookings operationId: post-bookings-uuid-extend responses: '200': description: OK content: application/json: schema: type: object x-examples: example-1: id: 36d2d844-121d-453c-b514-de027caaf27f uuid: 3698539b-65c4-41e3-95b1-fa108fd024b2 testMode: false resellerReference: 102-256952-3 supplierReference: 300SK9 status: CONFIRMED utcCreatedAt: '2021-10-27T23:28:43Z' utcUpdatedAt: '2021-10-27T23:28:45Z' utcExpiresAt: null utcRedeemedAt: null utcConfirmedAt: '2021-10-27T23:28:45Z' productId: 5379ce46-0620-42ce-b65c-70d6fc1c9ac2 examples: [] description: '' title: '' properties: id: type: string example: bbbb6227-54fc-4c32-9ed7-dc3eb99966ea description: A unique ID / UUID generated by the supplier system to identify the booking. uuid: type: string format: uuid example: 559aed3d-6d5b-4fe0-bfca-99f5e7218a56 description: A UUID you can set when generating the booking to use as an idempotency key. testMode: type: boolean description: If `TRUE`, booking was created on test mode resellerReference: type: - string - 'null' description: The reference set by the Reseller. A mandatory field for resellers to be set in the booking confirmation request. supplierReference: type: - string - 'null' description: The Supplier's / booking platform reference. status: type: string title: BookingStatus x-stoplight: id: 8igglzvoke69w enum: - ON_HOLD - CONFIRMED - EXPIRED - CANCELLED - REDEEMED - PENDING - REJECTED example: CONFIRMED description: 'The status of the booking, possible values are: `ON_HOLD` The booking is pending confirmation, this is the default value when you first create the booking. `EXPIRED` If the booking is not confirmed before the expiration hold expires, it goes into an expired state. `CONFIRMED` Once the confirmation call is made the booking is ready to be used. `CANCELLED` If the booking is cancelled. `PENDING` If the booking is pending outside availability confirmation. `REDEEMED` If the booking is already redeemed.' examples: - CONFIRMED utcCreatedAt: type: string example: '2021-10-27T23:28:43Z' description: An ISO8601 date time in UTC when the booking was created. utcUpdatedAt: type: - string - 'null' example: '2021-10-27T23:28:43Z' description: An ISO8601 date time in UTC when the booking was updated. utcExpiresAt: type: - string - 'null' description: An ISO8601 date times in UTC for when this booking is due to expire if the status is `ON_HOLD`. example: '2021-10-27T23:58:43Z' utcRedeemedAt: type: - string - 'null' description: An ISO8601 date time in UTC at when the booking was redeemed. utcConfirmedAt: type: - string - 'null' example: '2021-10-27T23:28:43Z' description: An ISO8601 date time in UTC when the booking was confirmed. productId: type: string example: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854 description: The product ID that identifies the product in the booking system to make this reservation. product: type: object x-examples: example-1: id: 28ca088b-bc7b-4746-ab06-5971f1ed5a5e internalName: Edinburgh Hop-On Hop-Off Bus Tour reference: null locale: en timeZone: Europe/London allowFreesale: true instantConfirmation: true instantDelivery: true availabilityRequired: false examples: - id: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854 internalName: Amazon River Tour reference: AMZN locale: en-GB timeZone: Europe/London allowFreesale: true instantConfirmation: true instantDelivery: true availabilityRequired: true availabilityType: START_TIME deliveryFormats: - QRCODE deliveryMethods: - VOUCHER redemptionMethod: DIGITAL options: - id: DEFAULT default: true internalName: Private Morning Tour reference: VIP-MORN availabilityLocalStartTimes: - 09:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: - firstName restrictions: minUnits: 'null' maxUnits: 10 units: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 description: A bookable product listed by a supplier. properties: id: type: string example: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854 description: The id used for checking for availability and creating bookings for the product. This MUST be unique within the scope of the Supplier. internalName: type: string description: The name the supplier calls the product. example: Amazon River Tour reference: type: - 'null' - string description: An optional code this supplier might use to identify the product. example: AMZN locale: type: string example: en-GB description: A language code indicating what language this product content is in. This MUST be a valid BCP 47 RFC 5646 RFC 4647 language tag. timeZone: type: string example: Europe/London description: The IANA TimeZone name this product is located in. allowFreesale: type: boolean description: Whether a booking can be made for this product without having to query availability first. instantConfirmation: type: boolean description: Whether bookings will be immediately confirmed when a sale is made, otherwise the supplier will later either accept or reject the booking. When `instantConfirmation` is set to false one should expect created bookings to first get into a `PENDING` state. instantDelivery: type: boolean description: This indicates whether the Reseller can expect immediate delivery of the customer's tickets. If `false` then the Reseller MUST be able to delay delivery of the tickets to the customer. availabilityRequired: type: boolean description: Whether an `availabilityId` is required when creating a booking. Without this the booking will be open-dated and not have a specified travel date. availabilityType: type: string title: AvailabilityType x-stoplight: id: n70vwjh7kvmxk enum: - START_TIME - OPENING_HOURS description: 'What type of availability this product has, possible values are: `START_TIME` if there are fixed departure times which you must pick one. Typical for day tours or activities. `OPENING_HOURS` if you just select a date and can visit any time when the venue is open.' example: START_TIME examples: - START_TIME deliveryFormats: type: array description: 'An array of formats the API will deliver the tickets as. Possible values are: `QRCODE` A code to be presented as a QR CODE barcode `CODE128A` code to be presented as a CODE 128 barcode `PDF_URL` A URL to a PDF file which contains all the ticket details' items: type: string title: DeliveryFormat x-stoplight: id: xo5qi6jemvvhc enum: - PDF_URL - QRCODE description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF.' example: QRCODE examples: - QRCODE deliveryMethods: type: array description: 'How the formats described in `deliveryFormats` will be delivered in the booking response, possible values are: `TICKET`: Individually per unit in the order (i.e. single ticket for each person) `VOUCHER`: One ticket for the whole booking' items: type: string title: DeliveryMethod x-stoplight: id: tdh9akr9neqhb enum: - VOUCHER - TICKET description: 'An array of delivery methods available for this booking. Possible values are: `VOUCHER` The voucher object is populated which is a single ticket for the whole booking. `TICKET` The ticket object is populated on each unit item which is a ticket for each individual person. If `booking.deliveryMethods` contains both `TICKET` and `VOUCHER` then both those values will be set.' examples: - VOUCHER redemptionMethod: type: string title: RedemptionMethod x-stoplight: id: jrrh8rbyzfuzm enum: - DIGITAL - PRINT - MANIFEST description: 'How the voucher can be redeemed. Possible values are: `MANIFEST` The guest name will be written down and they just need to show up `DIGITAL` The tickets/voucher must be scanned but can be on mobile `PRINT` The tickets/voucher must be printed and presented on arrival' examples: - DIGITAL options: type: array description: An array of all options for this product. All products must have at least one option. items: type: object x-examples: example-1: id: DEFAULT default: true internalName: DEFAULT reference: null availabilityLocalStartTimes: - 00:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: [] examples: - id: DEFAULT default: true internalName: Private Morning Tour reference: VIP-MORN availabilityLocalStartTimes: - 09:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: - firstName restrictions: minUnits: 'null' maxUnits: 10 units: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 description: Product options are subdivisions of the original product that will affect price and / or duration. Within the OCTo spec, every product must contain an option. properties: id: type: string example: DEFAULT description: The id that identifies this option, it is only unique within the product. default: type: boolean description: '`TRUE` identifies the option as default, and should therefore rendered and selected first' internalName: type: string description: The name the supplier calls the option by. example: Private Morning Tour reference: type: - 'null' - string description: An optional code this supplier might use to identify the product. example: VIP-MORN availabilityLocalStartTimes: type: array description: This will be an array of all possible start times that can be returned during availability. For example an all day attraction may have a single value like `["00:00"]` whilst a tour with multiple departure times may have multiple:`["09:00", "14:00", "17:00"]`. items: type: string default: 00:00 example: 09:00 cancellationCutoff: type: string example: 1 hour description: This is how long before the tour the booking can be still be cancelled. cancellationCutoffAmount: type: integer example: 1 description: The numeric amount for the cutoff. cancellationCutoffUnit: type: string title: DurationUnit x-stoplight: id: etuhjhtharyrt enum: - hour - minute - day example: hour description: 'Time units used to determine duration. Three values are available: `hour`, `minute`, `day`.' examples: - hour requiredContactFields: type: array description: An array of the contact fields required to confirm a booking. These just apply to the lead traveller on the booking and not for every ticket. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minUnits: 0 maxUnits: 9 description: An object containing a fixed list of restrictions for booking the option. examples: - minUnits: null maxUnits: 10 properties: minUnits: type: - integer - 'null' example: 0 description: The minimum number of tickets that can be purchased in a single booking (null = 0). maxUnits: type: - integer - 'null' example: 10 description: The maximum number of tickets that can be purchased in a single booking (null = unlimited). required: - minUnits - maxUnits units: type: array description: The list of ticket types (units) available for sale. items: type: object x-examples: example-1: id: unit_c1709f42-297e-4f7e-bd6b-3e77d4622d8a internalName: Adult reference: null type: ADULT requiredContactFields: [] examples: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 properties: id: type: string description: This MUST be a unique identifier within the scope of the option. example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: type: string example: Adult(s) description: This should be a name to help with identifying the unit. It should NOT be shown to the customer. reference: type: - 'null' - string description: This is an internal reference identifier that the Supplier wishes to use. It MAY be non-unique. example: LR1-01-new type: type: string title: UnitType x-stoplight: id: 9womjjbg9rhr7 enum: - ADULT - YOUTH - CHILD - INFANT - FAMILY - SENIOR - STUDENT - MILITARY - OTHER examples: - ADULT description: This is the base unit type for this unit definition. A value of TRAVELLER MUST only be used in replacement of `ADULT`, `CHILD`, `INFANT`, `YOUTH`, `STUDENT`, or `SENIOR`. example: YOUTH requiredContactFields: type: array description: This is the array of the contact information PER ticket that the supplier expects. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minAge: 0 maxAge: 100 idRequired: false minQuantity: 1 maxQuantity: null paxCount: 4 accompaniedBy: [] description: unit restrictions examples: - minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 title: UnitRestrictions properties: minAge: type: integer example: 3 description: This is the minumum age this unit can be sold to maxAge: type: integer example: 17 description: This is the maximum age this unit can be sold to idRequired: type: boolean description: This is whether a form of identification will be required at redemption point (eg. student card) minQuantity: type: - integer - 'null' example: 2 description: This is if there is a minimum amount of units to be chosen for purchase (eg. 2) maxQuantity: type: - 'null' - integer example: 7 description: This is if there is a maximum amount of units to be chosen for purchase (eg. 7) paxCount: type: integer description: This is the amount of people each unit counts as (eg. family == 4pax) example: 1 accompaniedBy: type: array description: This is if the unit needs to be accompanied by another unit (eg. Infant with Adult) items: type: string example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 required: - minAge - maxAge - idRequired - minQuantity - maxQuantity - paxCount - accompaniedBy required: - id - internalName - type - requiredContactFields - restrictions description: '' required: - id - default - internalName - reference - availabilityLocalStartTimes - cancellationCutoff - cancellationCutoffAmount - cancellationCutoffUnit - requiredContactFields - restrictions - units required: - id - internalName - reference - locale - allowFreesale - instantConfirmation - instantDelivery - availabilityRequired - availabilityType - deliveryFormats - deliveryMethods - redemptionMethod - options optionId: type: string example: DEFAULT description: The product ID that identifies the product option in the booking system to make this reservation. option: type: object x-examples: example-1: id: DEFAULT default: true internalName: DEFAULT reference: null availabilityLocalStartTimes: - 00:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: [] examples: - id: DEFAULT default: true internalName: Private Morning Tour reference: VIP-MORN availabilityLocalStartTimes: - 09:00 cancellationCutoff: 1 hour cancellationCutoffAmount: 1 cancellationCutoffUnit: hour requiredContactFields: - firstName restrictions: minUnits: 'null' maxUnits: 10 units: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 description: Product options are subdivisions of the original product that will affect price and / or duration. Within the OCTo spec, every product must contain an option. properties: id: type: string example: DEFAULT description: The id that identifies this option, it is only unique within the product. default: type: boolean description: '`TRUE` identifies the option as default, and should therefore rendered and selected first' internalName: type: string description: The name the supplier calls the option by. example: Private Morning Tour reference: type: - 'null' - string description: An optional code this supplier might use to identify the product. example: VIP-MORN availabilityLocalStartTimes: type: array description: This will be an array of all possible start times that can be returned during availability. For example an all day attraction may have a single value like `["00:00"]` whilst a tour with multiple departure times may have multiple:`["09:00", "14:00", "17:00"]`. items: type: string default: 00:00 example: 09:00 cancellationCutoff: type: string example: 1 hour description: This is how long before the tour the booking can be still be cancelled. cancellationCutoffAmount: type: integer example: 1 description: The numeric amount for the cutoff. cancellationCutoffUnit: type: string title: DurationUnit x-stoplight: id: etuhjhtharyrt enum: - hour - minute - day example: hour description: 'Time units used to determine duration. Three values are available: `hour`, `minute`, `day`.' examples: - hour requiredContactFields: type: array description: An array of the contact fields required to confirm a booking. These just apply to the lead traveller on the booking and not for every ticket. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minUnits: 0 maxUnits: 9 description: An object containing a fixed list of restrictions for booking the option. examples: - minUnits: null maxUnits: 10 properties: minUnits: type: - integer - 'null' example: 0 description: The minimum number of tickets that can be purchased in a single booking (null = 0). maxUnits: type: - integer - 'null' example: 10 description: The maximum number of tickets that can be purchased in a single booking (null = unlimited). required: - minUnits - maxUnits units: type: array description: The list of ticket types (units) available for sale. items: type: object x-examples: example-1: id: unit_c1709f42-297e-4f7e-bd6b-3e77d4622d8a internalName: Adult reference: null type: ADULT requiredContactFields: [] examples: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 properties: id: type: string description: This MUST be a unique identifier within the scope of the option. example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: type: string example: Adult(s) description: This should be a name to help with identifying the unit. It should NOT be shown to the customer. reference: type: - 'null' - string description: This is an internal reference identifier that the Supplier wishes to use. It MAY be non-unique. example: LR1-01-new type: type: string title: UnitType x-stoplight: id: 9womjjbg9rhr7 enum: - ADULT - YOUTH - CHILD - INFANT - FAMILY - SENIOR - STUDENT - MILITARY - OTHER examples: - ADULT description: This is the base unit type for this unit definition. A value of TRAVELLER MUST only be used in replacement of `ADULT`, `CHILD`, `INFANT`, `YOUTH`, `STUDENT`, or `SENIOR`. example: YOUTH requiredContactFields: type: array description: This is the array of the contact information PER ticket that the supplier expects. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minAge: 0 maxAge: 100 idRequired: false minQuantity: 1 maxQuantity: null paxCount: 4 accompaniedBy: [] description: unit restrictions examples: - minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 title: UnitRestrictions properties: minAge: type: integer example: 3 description: This is the minumum age this unit can be sold to maxAge: type: integer example: 17 description: This is the maximum age this unit can be sold to idRequired: type: boolean description: This is whether a form of identification will be required at redemption point (eg. student card) minQuantity: type: - integer - 'null' example: 2 description: This is if there is a minimum amount of units to be chosen for purchase (eg. 2) maxQuantity: type: - 'null' - integer example: 7 description: This is if there is a maximum amount of units to be chosen for purchase (eg. 7) paxCount: type: integer description: This is the amount of people each unit counts as (eg. family == 4pax) example: 1 accompaniedBy: type: array description: This is if the unit needs to be accompanied by another unit (eg. Infant with Adult) items: type: string example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 required: - minAge - maxAge - idRequired - minQuantity - maxQuantity - paxCount - accompaniedBy required: - id - internalName - type - requiredContactFields - restrictions description: '' required: - id - default - internalName - reference - availabilityLocalStartTimes - cancellationCutoff - cancellationCutoffAmount - cancellationCutoffUnit - requiredContactFields - restrictions - units cancellable: type: boolean description: A boolean field indicating whether this booking can be cancelled. cancellation: type: - 'null' - object description: An object with information about why and when the booking was cancelled. This is `NULL` if the booking is not cancelled. required: - refund - reason - utcCancelledAt properties: refund: type: string description: Whether the booking was refunded as part of the cancellation. Possible values are `FULL`, `PARTIAL` or `NONE` reason: type: - 'null' - string description: A text value describing why the cancellation happened. utcCancelledAt: type: string example: '2021-10-27T23:38:43Z' description: An ISO8601 date time in UTC indicating when the booking was cancelled. freesale: type: boolean description: Whether the booking was made as freesale (without checking availability first). availabilityId: type: string description: The availability id that was used in the request. availability: type: object description: 'The availability object that was booked. ' required: - id - localDateTimeStart - localDateTimeEnd - allDay - openingHours properties: id: type: string example: '2021-10-27T00:00:00-04:00' description: The availability id that was used in the request. localDateTimeStart: type: string example: '2021-10-27T00:00:00-04:00' description: The `localDateTimeStart` value from the original availability object. localDateTimeEnd: type: string example: '2021-10-28T00:00:00-04:00' description: The `localDateTimeEnd` value from the original availability object. allDay: type: boolean description: A boolean value indicating whether the availability is all day. openingHours: type: array description: The opening hours from the original availability object. items: type: object x-examples: example-1: from: 08:00 to: '18:30' description: A list of opening hours that the product is open on this day. properties: from: type: string example: 08:00 description: When this product opens (HH:MM) to: type: string example: '16:00' description: When this product closes (HH:MM) required: - from - to examples: - from: 08:00 to: '16:00' contact: type: object x-examples: example-1: fullName: null firstName: null lastName: null emailAddress: null phoneNumber: null locales: [] postalCode: null country: null notes: null examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: null locales: - en postalCode: null country: null notes: null description: Contact details for the guests that will attend the tour/attraction. Contact schema can be applied to both the booking object (the main reservation) or the unit object (individual ticket holders - if the supplier requires this information) properties: fullName: type: - 'null' - string example: John Doe description: The full name of the booking holder or the ticket holder. Can also be retrieved as an alias for the concatenation of `firstName` and `lastName` firstName: type: - 'null' - string example: John description: The first name of the booking holder or the ticket holder. lastName: type: - 'null' - string example: Doe description: The last name of the booking holder or the ticket holder. emailAddress: type: - 'null' - string format: email description: The email address of the booking holder or the ticket holder. example: johndoe@email.com phoneNumber: type: - 'null' - string description: The phone number of the booking holder or the ticket holder. locales: type: array description: An array of locale values, equivalent to navigator.languages in a browsers environment. items: type: string example: en postalCode: type: - 'null' - string description: The PO Box of the booking holder or the ticket holder. country: type: - 'null' - string description: The country of the booking holder or the ticket holder. notes: type: - 'null' - string description: Optional notes for the booking. notes: type: - string - 'null' example: Optional notes for the booking deliveryMethods: type: array description: An array of delivery methods available for this booking. items: type: string title: DeliveryMethod x-stoplight: id: tdh9akr9neqhb enum: - VOUCHER - TICKET description: 'An array of delivery methods available for this booking. Possible values are: `VOUCHER` The voucher object is populated which is a single ticket for the whole booking. `TICKET` The ticket object is populated on each unit item which is a ticket for each individual person. If `booking.deliveryMethods` contains both `TICKET` and `VOUCHER` then both those values will be set.' examples: - VOUCHER voucher: oneOf: - type: object x-examples: example-1: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: '!1|El3f0wUmcnrEmviMcR9qwqC9hvfrcWc6cZcRcrcR|yrirfZfqHPj40mvhpw2XzX|q7FF77QqFD7fDhr9' - deliveryFormat: PDF_URL deliveryValue: https://api.ventrata.com/octo/pdf?booking=36d2d844-121d-453c-b514-de027caaf27f&ticket=72419a19-c58c-46a0-b316-13509de43909 examples: - redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: string properties: redemptionMethod: type: string title: RedemptionMethod x-stoplight: id: jrrh8rbyzfuzm enum: - DIGITAL - PRINT - MANIFEST description: 'How the voucher can be redeemed. Possible values are: `MANIFEST` The guest name will be written down and they just need to show up `DIGITAL` The tickets/voucher must be scanned but can be on mobile `PRINT` The tickets/voucher must be printed and presented on arrival' examples: - DIGITAL utcRedeemedAt: type: - 'null' - string description: The ISO8601 date in UTC indicating when the ticket was used at the attraction. deliveryOptions: type: array items: type: object properties: deliveryFormat: type: string title: DeliveryFormat x-stoplight: id: xo5qi6jemvvhc enum: - PDF_URL - QRCODE description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF.' example: QRCODE examples: - QRCODE deliveryValue: type: string description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF. ' required: - deliveryFormat - deliveryValue required: - redemptionMethod - utcRedeemedAt - deliveryOptions description: '' - type: 'null' unitItems: type: array description: An array of unit items that will be included in the booking. items: type: object x-examples: example-1: uuid: 97525082-2498-4e61-b259-bc48e27a96ae resellerReference: 102-256952-3-Adult-2 supplierReference: J9T7R6 unitId: unit_8080415c-890c-4b38-a5af-0934d73e94d3 properties: uuid: type: string example: 3b1bc2ee-3155-4738-9471-f49842a07327 description: The id of the unit, this will be unique to the option. resellerReference: type: - string - 'null' example: 4ec08a62-892c-48c1-a608-dc946531a33b description: A reference the reseller uses to identify the unit within all bookings. supplierReference: type: - string - 'null' example: K9T7R5 description: A reference the supplier uses to identify the unit within all bookings. unitId: type: string example: youth_f6446706-885a-437c-8461-efd6d7080910 unit: type: object x-examples: example-1: id: unit_c1709f42-297e-4f7e-bd6b-3e77d4622d8a internalName: Adult reference: null type: ADULT requiredContactFields: [] examples: - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: Adult(s) reference: LR1-01-new type: YOUTH requiredContactFields: - firstName restrictions: minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 properties: id: type: string description: This MUST be a unique identifier within the scope of the option. example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 internalName: type: string example: Adult(s) description: This should be a name to help with identifying the unit. It should NOT be shown to the customer. reference: type: - 'null' - string description: This is an internal reference identifier that the Supplier wishes to use. It MAY be non-unique. example: LR1-01-new type: type: string title: UnitType x-stoplight: id: 9womjjbg9rhr7 enum: - ADULT - YOUTH - CHILD - INFANT - FAMILY - SENIOR - STUDENT - MILITARY - OTHER examples: - ADULT description: This is the base unit type for this unit definition. A value of TRAVELLER MUST only be used in replacement of `ADULT`, `CHILD`, `INFANT`, `YOUTH`, `STUDENT`, or `SENIOR`. example: YOUTH requiredContactFields: type: array description: This is the array of the contact information PER ticket that the supplier expects. items: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' restrictions: type: object x-examples: example-1: minAge: 0 maxAge: 100 idRequired: false minQuantity: 1 maxQuantity: null paxCount: 4 accompaniedBy: [] description: unit restrictions examples: - minAge: 3 maxAge: 17 idRequired: true minQuantity: 2 maxQuantity: 7 paxCount: 1 accompaniedBy: - adult_697e3ce8-1860-4cbf-80ad-95857df1f640 title: UnitRestrictions properties: minAge: type: integer example: 3 description: This is the minumum age this unit can be sold to maxAge: type: integer example: 17 description: This is the maximum age this unit can be sold to idRequired: type: boolean description: This is whether a form of identification will be required at redemption point (eg. student card) minQuantity: type: - integer - 'null' example: 2 description: This is if there is a minimum amount of units to be chosen for purchase (eg. 2) maxQuantity: type: - 'null' - integer example: 7 description: This is if there is a maximum amount of units to be chosen for purchase (eg. 7) paxCount: type: integer description: This is the amount of people each unit counts as (eg. family == 4pax) example: 1 accompaniedBy: type: array description: This is if the unit needs to be accompanied by another unit (eg. Infant with Adult) items: type: string example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640 required: - minAge - maxAge - idRequired - minQuantity - maxQuantity - paxCount - accompaniedBy required: - id - internalName - type - requiredContactFields - restrictions description: '' status: type: string title: BookingStatus x-stoplight: id: 8igglzvoke69w enum: - ON_HOLD - CONFIRMED - EXPIRED - CANCELLED - REDEEMED - PENDING - REJECTED example: CONFIRMED description: 'The status of the booking, possible values are: `ON_HOLD` The booking is pending confirmation, this is the default value when you first create the booking. `EXPIRED` If the booking is not confirmed before the expiration hold expires, it goes into an expired state. `CONFIRMED` Once the confirmation call is made the booking is ready to be used. `CANCELLED` If the booking is cancelled. `PENDING` If the booking is pending outside availability confirmation. `REDEEMED` If the booking is already redeemed.' examples: - CONFIRMED utcRedeemedAt: type: - 'null' - string description: The ISO8601 date in UTC indicating when the ticket was used at the attraction. contact: type: object x-examples: example-1: fullName: null firstName: null lastName: null emailAddress: null phoneNumber: null locales: [] postalCode: null country: null notes: null examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: null locales: - en postalCode: null country: null notes: null description: Contact details for the guests that will attend the tour/attraction. Contact schema can be applied to both the booking object (the main reservation) or the unit object (individual ticket holders - if the supplier requires this information) properties: fullName: type: - 'null' - string example: John Doe description: The full name of the booking holder or the ticket holder. Can also be retrieved as an alias for the concatenation of `firstName` and `lastName` firstName: type: - 'null' - string example: John description: The first name of the booking holder or the ticket holder. lastName: type: - 'null' - string example: Doe description: The last name of the booking holder or the ticket holder. emailAddress: type: - 'null' - string format: email description: The email address of the booking holder or the ticket holder. example: johndoe@email.com phoneNumber: type: - 'null' - string description: The phone number of the booking holder or the ticket holder. locales: type: array description: An array of locale values, equivalent to navigator.languages in a browsers environment. items: type: string example: en postalCode: type: - 'null' - string description: The PO Box of the booking holder or the ticket holder. country: type: - 'null' - string description: The country of the booking holder or the ticket holder. notes: type: - 'null' - string description: Optional notes for the booking. ticket: oneOf: - type: object x-examples: example-1: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: '!1|El3f0wUmcnrEmviMcR9qwqC9hvfrcWc6cZcRcrcR|yrirfZfqHPj40mvhpw2XzX|q7FF77QqFD7fDhr9' - deliveryFormat: PDF_URL deliveryValue: https://api.ventrata.com/octo/pdf?booking=36d2d844-121d-453c-b514-de027caaf27f&ticket=72419a19-c58c-46a0-b316-13509de43909 examples: - redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: string properties: redemptionMethod: type: string title: RedemptionMethod x-stoplight: id: jrrh8rbyzfuzm enum: - DIGITAL - PRINT - MANIFEST description: 'How the voucher can be redeemed. Possible values are: `MANIFEST` The guest name will be written down and they just need to show up `DIGITAL` The tickets/voucher must be scanned but can be on mobile `PRINT` The tickets/voucher must be printed and presented on arrival' examples: - DIGITAL utcRedeemedAt: type: - 'null' - string description: The ISO8601 date in UTC indicating when the ticket was used at the attraction. deliveryOptions: type: array items: type: object properties: deliveryFormat: type: string title: DeliveryFormat x-stoplight: id: xo5qi6jemvvhc enum: - PDF_URL - QRCODE description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF.' example: QRCODE examples: - QRCODE deliveryValue: type: string description: 'The format for the delivery option possible values are: `QRCODE` You should generate the QR Code yourself on a ticket. `PDF_URL` Where you use the generated tickets as a PDF. ' required: - deliveryFormat - deliveryValue required: - redemptionMethod - utcRedeemedAt - deliveryOptions description: '' - type: 'null' required: - uuid - resellerReference - supplierReference - unitId - unit - status - utcRedeemedAt - contact description: '' examples: - uuid: 3b1bc2ee-3155-4738-9471-f49842a07327 resellerReference: 4ec08a62-892c-48c1-a608-dc946531a33b supplierReference: K9T7R5 unitId: youth_f6446706-885a-437c-8461-efd6d7080910 unit: id: string internalName: string reference: null type: ADULT requiredContactFields: - firstName restrictions: minAge: 18 maxAge: 99 idRequired: false minQuantity: 0 maxQuantity: null paxCount: 0 accompaniedBy: [] status: CONFIRMED utcRedeemedAt: null contact: fullName: John Doe firstName: John lastName: Doe emailAddress: null phoneNumber: null locales: - en postalCode: null country: null notes: null ticket: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: - deliveryFormat: QRCODE deliveryValue: string required: - id - uuid - testMode - resellerReference - supplierReference - status - utcCreatedAt - utcUpdatedAt - utcExpiresAt - utcRedeemedAt - utcConfirmedAt - productId - product - optionId - option - cancellable - cancellation - freesale - availabilityId - availability - contact - notes - deliveryMethods - unitItems examples: example-1: value: id: 602a9fdf-5c79-4984-9474-7e14da9b6027 uuid: a88b4b8d-9c3b-4a09-ba27-323b43af57e4 testMode: true resellerReference: null supplierReference: XOPSUT status: ON_HOLD utcCreatedAt: '2022-05-25T10:34:22Z' utcUpdatedAt: '2022-05-25T10:34:22Z' utcExpiresAt: '2022-05-25T11:04:22Z' utcRedeemedAt: null utcConfirmedAt: null productId: '1' product: id: '1' internalName: PPU | OH reference: null locale: en timeZone: Europe/London allowFreesale: false instantConfirmation: true instantDelivery: true availabilityRequired: true availabilityType: OPENING_HOURS deliveryFormats: - PDF_URL - QRCODE deliveryMethods: - TICKET - VOUCHER redemptionMethod: DIGITAL options: - id: DEFAULT default: true internalName: DEFAULT reference: null availabilityLocalStartTimes: - 00:00 cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: null units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: null maxQuantity: null paxCount: 1 accompaniedBy: [] optionId: DEFAULT option: id: DEFAULT default: true internalName: DEFAULT reference: null availabilityLocalStartTimes: - 00:00 cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: null units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: null maxQuantity: null paxCount: 1 accompaniedBy: [] cancellable: true cancellation: null freesale: false availabilityId: '2022-04-30T00:00:00+01:00' availability: id: '2022-04-30T00:00:00+01:00' localDateTimeStart: '2022-04-30T00:00:00+01:00' localDateTimeEnd: '2022-05-01T00:00:00+01:00' allDay: true openingHours: - from: 09:00 to: '17:00' contact: fullName: null firstName: null lastName: null emailAddress: null phoneNumber: null locales: [] country: null notes: null notes: null deliveryMethods: - TICKET - VOUCHER voucher: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: [] unitItems: - uuid: 6cbd2582-1345-4d8d-8223-ad004beebc1a resellerReference: null supplierReference: CBIYWQ unit: id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: null maxQuantity: null paxCount: 1 accompaniedBy: [] unitId: adult status: ON_HOLD utcRedeemedAt: null contact: fullName: null firstName: null lastName: null emailAddress: null phoneNumber: null locales: [] country: null notes: null ticket: redemptionMethod: DIGITAL utcRedeemedAt: null deliveryOptions: [] '400': description: Example response content: application/json: schema: type: object additionalProperties: false properties: error: type: string errorMessage: type: string uuid: type: string required: - error - errorMessage examples: INVALID_BOOKING_UUID: value: error: INVALID_BOOKING_UUID errorMessage: The uuid was already used, missing or invalid uuid: bbbb6227-54fc-4c32-9ed7-dc3eb99966ea UNPROCESSABLE_ENTITY: value: error: UNPROCESSABLE_ENTITY errorMessage: The request body is technically correct but cannot be processed for other reasons. e.g. you tried to cancel a booking after the cancellation cutoff had elapsed security: - Auth: [] requestBody: content: application/json: schema: type: object properties: expirationMinutes: type: integer example: 15 examples: example-1: value: expirationMinutes: 0 parameters: - schema: type: string enum: - application/json in: header name: Content-Type description: Required field on all POST requests description: Use this endpoint to hold the availability for a booking longer if the status is `ON_HOLD`. components: securitySchemes: Auth: type: http scheme: bearer externalDocs: url: https://docs.octo.travel/ description: OCTO Developer Hub