openapi: 3.1.0 info: title: Open Connectivity for Tours, Activities, and Attractions OCTO API Specification 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. OCTO 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 paths: /supplier: get: summary: Open Connectivity for Tours, Activities, and Attractions Get Supplier tags: - Supplier responses: '200': description: OK content: application/json: schema: type: object x-examples: example-1: id: 697e3ce8-1860-4cbf-80ad-95857df1f640 name: Edin Explore endpoint: https://api.ventrata.com/api-octo contact: website: email: support@ventrata.com telephone: address: Marble Arch, London, W1H 7EJ, United Kingdom examples: - id: 48b4d2e9-cd8b-4ac2-a5ee-4217bf2622c2 name: John Doe's company endpoint: http://example.com contact: website: email: john.doe@email.com telephone: address: properties: id: type: string example: 697e3ce8-1860-4cbf-80ad-95857df1f640 description: Unique identifier used in the platform to represent the supplier. name: type: string description: Name the supplier uses to identify itsel. Usually what the end customer will know the supplier as. example: Edin Explore endpoint: type: string format: uri description: This is the base URL that will be prepended to ALL other paths. The value SHOULD NOT contain a trailing `/`. example: https://api.my-booking-platform.com/v1 contact: type: object required: - website - email - telephone - address properties: website: type: - 'null' - string format: uri description: This SHOULD be the website of the Supplier that is separate from the Booking Platform but MAY be a unique destination within the Booking Platform about the Supplier. example: https://acme-tours.co.fake email: type: - 'null' - string format: email description: The email support contact for the Supplier. example: info@edinexplore.com telephone: type: - 'null' - string description: The phone support contact for the Supplier. example: +1 888-555-1212 address: type: - 'null' - string description: The (snail) mail address support contact for the Supplier. example: 123 Fake St. Springfield, USA required: - id - name - endpoint - contact description: Returns the supplier and associated contact details. /products: get: summary: Open Connectivity for Tours, Activities, and Attractions Get Products tags: - Products responses: '200': description: OK content: application/json: schema: type: array items: type: object x-examples: example-1: id: 28ca088b-bc7b-4746-ab06-5971f1ed5a5e internalName: Edinburgh Hop-On Hop-Off Bus Tour reference: 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: 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: 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: 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: 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 description: Fetch the list of products. /products/{id}: get: summary: Open Connectivity for Tours, Activities, and Attractions Get Product tags: - Products parameters: - schema: type: string name: id in: path required: true description: The product id responses: '200': description: OK content: application/json: schema: type: object x-examples: example-1: id: 28ca088b-bc7b-4746-ab06-5971f1ed5a5e internalName: Edinburgh Hop-On Hop-Off Bus Tour reference: 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: 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: 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: 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: 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 description: Fetch the product for the given id. /availability/calendar: post: summary: Open Connectivity for Tours, Activities, and Attractions Availability Calendar tags: - Availability responses: '200': description: OK content: application/json: schema: type: array items: type: object x-examples: example-1: localDate: '2022-05-12' available: false status: CLOSED vacancies: 0 capacity: openingHours: - from: '08:00' to: '18:30' examples: - localDate: '2022-05-12' available: true status: AVAILABLE vacancies: 10 capacity: 10 openingHours: - from: '08:00' to: '16:00' description: Schema for the `/avalibility/calendar` endpoint. For querying general open slots per day on a large range of days versus availability per departure time. properties: localDate: type: string example: '2022-05-12' description: A single date to query. Must be ISO 8601 compliant date. format: date available: type: boolean description: Whether there is availability for this date / slot. status: type: string title: AvailabilityStatus x-stoplight: id: tmiby64nsmjy8 enum: - AVAILABLE - FREESALE - SOLD_OUT - LIMITED - CLOSED description: |- The status of that date. Possible values are: `AVAILABLE` This availability is available for sale `FREESALE` This availability has no capacity and is available. `SOLD_OUT` There are no more spots available for this date / slot. `LIMITED` This availability is available but has less than 50% capacity left. `CLOSED` Availability is closed for this day / slot. example: AVAILABLE examples: - AVAILABLE vacancies: type: - integer - 'null' example: 10 description: This SHOULD NOT be returned when status is `FREESALE`. This SHOULD be a shared pool for all Unit types in the Option. If availability is tracked per-Unit then this value MUST be equal to the available quantity for the Unit that has the most remaining. capacity: type: - integer - 'null' example: 10 description: The total capacity on this day. openingHours: type: array 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' required: - localDate - available - status - vacancies - capacity - openingHours examples: START_TIMES: value: - localDate: '2022-06-14' available: true status: AVAILABLE vacancies: 20 capacity: 20 openingHours: [] - localDate: '2022-06-15' available: true status: AVAILABLE vacancies: 10 capacity: 10 openingHours: [] - localDate: '2022-06-16' available: true status: AVAILABLE vacancies: 10 capacity: 10 openingHours: [] OPENING_HOURS: value: - localDate: '2022-06-14' available: true status: FREESALE vacancies: capacity: openingHours: - from: '09:00' to: '17:00' - localDate: '2022-06-15' available: true status: FREESALE vacancies: capacity: openingHours: - from: '09:00' to: '17:00' - localDate: '2022-06-16' available: true status: FREESALE vacancies: capacity: openingHours: - from: '09:00' to: '17:00' '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 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 BAD_REQUEST: value: error: BAD_REQUEST errorMessage: cannot request more than 1 year of availability requestBody: content: application/json: schema: type: object properties: productId: type: string example: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854 description: The product id. optionId: type: string example: DEFAULT description: The option id. localDateStart: type: string example: '2022-05-23' description: Start date to query for (YYYY-MM-DD). localDateEnd: type: string example: '2022-05-29' description: End date to query for (YYYY-MM-DD). units: type: array description: A list of units. items: type: object properties: id: type: string description: The unit id. quantity: type: integer description: The quantity of the unit. required: - id - quantity required: - productId - optionId - localDateStart - localDateEnd examples: Date Range: value: productId: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854 optionId: DEFAULT localDateStart: '2022-06-14' localDateEnd: '2022-06-16' WITH UNITS: value: productId: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854 optionId: DEFAULT localDateStart: '2022-06-14' localDateEnd: '2022-06-16' units: - id: adult quantity: 2 - id: child quantity: 1 description: |- This endpoint is highly optimised and will return a single object per day. It's designed to be queried for large date ranges and the result is used to populate an availability calendar. When the end user selects an open date you can call on `/availability` endpoint to get the `availabilityId` to create the booking. /availability: post: summary: Open Connectivity for Tours, Activities, and Attractions Availability Check tags: - Availability responses: '200': description: OK content: application/json: schema: type: array items: type: object x-examples: example-1: id: '2022-05-23T00:00:00+01:00' localDateTimeStart: '2022-05-23T00:00:00+01:00' localDateTimeEnd: '2022-05-24T00:00:00+01:00' allDay: true available: true status: FREESALE vacancies: capacity: maxUnits: 9 utcCutoffAt: '2022-05-22T23:00:00Z' openingHours: - from: '08:00' to: '18:30' examples: - id: '2022-06-30T00:00:00+01:00' localDateTimeStart: '2022-06-30T00:00:00+01:00' localDateTimeEnd: '2022-07-01T00:00:00+01:00' allDay: true available: true status: FREESALE vacancies: capacity: maxUnits: utcCutoffAt: '2022-06-29T22:00:00Z' openingHours: - from: '09:00' to: '17:00' - id: '2022-06-30T12:00:00+01:00' localDateTimeStart: '2022-06-30T12:00:00+01:00' localDateTimeEnd: '2022-06-30T14:00:00+01:00' allDay: false available: true status: AVAILABLE vacancies: 10 capacity: 10 maxUnits: utcCutoffAt: '2022-06-30T10:00:00Z' openingHours: [] title: '' description: Schema for the `/avalibility/calendar` endpoint. It's designed to be queried for large date ranges and the result is used to populate an availability calendar. properties: id: type: string example: '2022-05-23T00:00:00+01:00' description: The availability id, you''ll need this when booking. MUST be a unique identifier within the scope of an option. localDateTimeStart: type: string example: '2022-05-23T00:00:00+01:00' description: The start time for this availability. This will be in the local time zone of the product. Must be an `ISO 8601` compliant date and time. format: date-time localDateTimeEnd: type: string example: '2022-05-24T00:00:00+01:00' description: The end time for this availability. This will be in the local time zone of the product. Must be an `ISO 8601` compliant date and time. format: date-time allDay: type: boolean description: A boolean field indicating whether this is an all day availability and not a fixed departure time. If this value is true then there will be no other availability object on the same day. available: type: boolean description: Whether there is availability for this date / slot. status: type: string title: AvailabilityStatus x-stoplight: id: tmiby64nsmjy8 enum: - AVAILABLE - FREESALE - SOLD_OUT - LIMITED - CLOSED description: |- The status of that date. Possible values are: `AVAILABLE` This availability is available for sale `FREESALE` This availability has no capacity and is available. `SOLD_OUT` There are no more spots available for this date / slot. `LIMITED` This availability is available but has less than 50% capacity left. `CLOSED` Availability is closed for this day / slot. example: AVAILABLE examples: - AVAILABLE vacancies: type: - integer - 'null' example: 10 description: This SHOULD NOT be returned when status is `FREESALE`. This SHOULD be a shared pool for all Unit types in the Option. If availability is tracked per-Unit then this value MUST be equal to the available quantity for the Unit that has the most remaining. capacity: type: - integer - 'null' example: 10 description: The total capacity on this day. maxUnits: type: - integer - 'null' example: 10 description: Maximum number of units that can be sold within one booking on this day / slot. utcCutoffAt: type: string example: '2022-05-22T23:00:00Z' description: 'The time by which the booking must be confirmed at ' openingHours: type: array 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' required: - id - localDateTimeStart - localDateTimeEnd - allDay - available - status - vacancies - capacity - maxUnits - utcCutoffAt - openingHours examples: OPENING_HOURS: value: - id: '2022-06-30T00:00:00+01:00' localDateTimeStart: '2022-06-30T00:00:00+01:00' localDateTimeEnd: '2022-07-01T00:00:00+01:00' allDay: true available: true status: FREESALE vacancies: capacity: maxUnits: utcCutoffAt: '2022-06-29T22:00:00Z' openingHours: - from: '09:00' to: '17:00' START_TIMES: value: - id: '2022-06-30T12:00:00+01:00' localDateTimeStart: '2022-06-30T12:00:00+01:00' localDateTimeEnd: '2022-06-30T14:00:00+01:00' allDay: false available: true status: AVAILABLE vacancies: 10 capacity: 10 maxUnits: utcCutoffAt: '2022-06-30T10:00:00Z' openingHours: [] - id: '2022-06-30T14:00:00+01:00' localDateTimeStart: '2022-06-30T14:00:00+01:00' localDateTimeEnd: '2022-06-30T16:00:00+01:00' allDay: false available: true status: AVAILABLE vacancies: 10 capacity: 10 maxUnits: utcCutoffAt: '2022-06-30T12:00:00Z' openingHours: [] '400': description: Example response content: application/json: schema: type: object additionalProperties: false properties: error: type: string errorMessage: type: string productId: type: string optionId: 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 BAD_REQUEST: value: error: BAD_REQUEST errorMessage: either localDate, localDateStart/localDateEnd or availabilityIds is required requestBody: content: application/json: schema: type: object properties: productId: type: string example: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854 description: The product id. optionId: type: string example: DEFAULT description: The option id. localDateStart: type: string example: '2022-05-23' format: date description: Start date to query for (YYYY-MM-DD). Required if `localDateEnd` is set. localDateEnd: type: string format: date example: '2022-05-29' description: End date to query for (YYYY-MM-DD). Required if `localDateStart` is set. availabilityIds: type: array example: - '2022-05-23T00:00:00+01:00' description: Filter the results by the given ids. items: type: string units: type: array description: A list of units. items: type: object properties: id: type: string description: The unit id. quantity: type: integer description: The quantity of the unit. required: - id - quantity required: - productId - optionId examples: Date Range: value: productId: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854 optionId: DEFAULT localDateStart: '2022-05-23' localDateEnd: '2022-05-29' Availability IDs: value: productId: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854 optionId: DEFAULT availabilityIds: - '2022-05-23T00:00:00+01:00' With Units: value: productId: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854 optionId: DEFAULT localDateStart: '2022-05-23' localDateEnd: '2022-05-29' units: - id: adult quantity: 2 - id: child quantity: 1 description: |- This endpoint is slightly slower as it will return an object for each individual departure time (or day). You have to perform this step to retrieve an `availabilityId` in order to confirm a sale, so if you just want to use this endpoint and skip the calendar endpoint then that's perfectly ok. You must pass in one of the following combinations of parameters for this endpoint: - `localDate` - `localeDateStart` and `localDateEnd` - `availabilityIds` /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: utcRedeemedAt: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: firstName: lastName: emailAddress: phoneNumber: locales: [] postalCode: country: notes: examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: locales: - en postalCode: country: notes: 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: 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: 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: 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: 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: firstName: lastName: emailAddress: phoneNumber: locales: [] postalCode: country: notes: examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: locales: - en postalCode: country: notes: 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: 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: 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: type: ADULT requiredContactFields: - firstName restrictions: minAge: 18 maxAge: 99 idRequired: false minQuantity: 0 maxQuantity: paxCount: 0 accompaniedBy: [] status: CONFIRMED utcRedeemedAt: contact: fullName: John Doe firstName: John lastName: Doe emailAddress: phoneNumber: locales: - en postalCode: country: notes: ticket: redemptionMethod: DIGITAL utcRedeemedAt: 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: supplierReference: XOPSUT status: ON_HOLD utcCreatedAt: '2022-05-25T10:34:22Z' utcUpdatedAt: '2022-05-25T10:34:22Z' utcExpiresAt: '2022-05-25T11:04:22Z' utcRedeemedAt: utcConfirmedAt: productId: '1' product: id: '1' internalName: PPU | OH reference: 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: availabilityLocalStartTimes: - '00:00' cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] optionId: DEFAULT option: id: DEFAULT default: true internalName: DEFAULT reference: availabilityLocalStartTimes: - '00:00' cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] cancellable: true cancellation: 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: firstName: lastName: emailAddress: phoneNumber: locales: [] country: notes: notes: deliveryMethods: - TICKET - VOUCHER voucher: redemptionMethod: DIGITAL utcRedeemedAt: deliveryOptions: [] unitItems: - uuid: 6cbd2582-1345-4d8d-8223-ad004beebc1a resellerReference: supplierReference: CBIYWQ unit: id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] unitId: adult status: ON_HOLD utcRedeemedAt: contact: fullName: firstName: lastName: emailAddress: phoneNumber: locales: [] country: notes: ticket: redemptionMethod: DIGITAL utcRedeemedAt: 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: utcRedeemedAt: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: firstName: lastName: emailAddress: phoneNumber: locales: [] postalCode: country: notes: examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: locales: - en postalCode: country: notes: 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: 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: 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: 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: 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: firstName: lastName: emailAddress: phoneNumber: locales: [] postalCode: country: notes: examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: locales: - en postalCode: country: notes: 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: 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: 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: type: ADULT requiredContactFields: - firstName restrictions: minAge: 18 maxAge: 99 idRequired: false minQuantity: 0 maxQuantity: paxCount: 0 accompaniedBy: [] status: CONFIRMED utcRedeemedAt: contact: fullName: John Doe firstName: John lastName: Doe emailAddress: phoneNumber: locales: - en postalCode: country: notes: ticket: redemptionMethod: DIGITAL utcRedeemedAt: 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: supplierReference: RNSRSM status: CONFIRMED utcCreatedAt: '2022-05-25T11:07:05Z' utcUpdatedAt: '2022-05-25T11:09:32Z' utcExpiresAt: utcRedeemedAt: utcConfirmedAt: '2022-05-25T11:09:32Z' productId: '1' product: id: '1' internalName: PPU | OH reference: 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: availabilityLocalStartTimes: - '00:00' cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] optionId: DEFAULT option: id: DEFAULT default: true internalName: DEFAULT reference: availabilityLocalStartTimes: - '00:00' cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] cancellable: true cancellation: 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: emailAddress: john.doe@email.com phoneNumber: locales: [] country: notes: notes: deliveryMethods: - TICKET - VOUCHER voucher: redemptionMethod: DIGITAL utcRedeemedAt: 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: supplierReference: 1LTYVC unit: id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] unitId: adult status: ON_HOLD utcRedeemedAt: contact: fullName: firstName: lastName: emailAddress: phoneNumber: locales: [] country: notes: ticket: redemptionMethod: DIGITAL utcRedeemedAt: 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: supplierReference: A89VR8 unit: id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] unitId: adult status: ON_HOLD utcRedeemedAt: contact: fullName: firstName: lastName: emailAddress: phoneNumber: locales: [] country: notes: ticket: redemptionMethod: DIGITAL utcRedeemedAt: 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: 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: utcRedeemedAt: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: firstName: lastName: emailAddress: phoneNumber: locales: [] postalCode: country: notes: examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: locales: - en postalCode: country: notes: 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: 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: 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: 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: 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: firstName: lastName: emailAddress: phoneNumber: locales: [] postalCode: country: notes: examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: locales: - en postalCode: country: notes: 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: 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: 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: type: ADULT requiredContactFields: - firstName restrictions: minAge: 18 maxAge: 99 idRequired: false minQuantity: 0 maxQuantity: paxCount: 0 accompaniedBy: [] status: CONFIRMED utcRedeemedAt: contact: fullName: John Doe firstName: John lastName: Doe emailAddress: phoneNumber: locales: - en postalCode: country: notes: ticket: redemptionMethod: DIGITAL utcRedeemedAt: 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: supplierReference: ALG6RQ status: CONFIRMED utcCreatedAt: '2022-05-25T11:03:22Z' utcUpdatedAt: '2022-05-25T11:03:31Z' utcExpiresAt: utcRedeemedAt: utcConfirmedAt: '2022-05-25T11:03:31Z' productId: '1' product: id: '1' internalName: PPU | OH reference: 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: availabilityLocalStartTimes: - '00:00' cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] optionId: DEFAULT option: id: DEFAULT default: true internalName: DEFAULT reference: availabilityLocalStartTimes: - '00:00' cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] cancellable: true cancellation: 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: locales: [] country: notes: notes: deliveryMethods: - TICKET - VOUCHER voucher: redemptionMethod: DIGITAL utcRedeemedAt: 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: supplierReference: EO6Q0P unit: id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] unitId: adult status: ON_HOLD utcRedeemedAt: contact: fullName: firstName: lastName: emailAddress: phoneNumber: locales: [] country: notes: ticket: redemptionMethod: DIGITAL utcRedeemedAt: 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: '' parameters: - schema: type: string name: uuid in: path required: true description: The UUID of the booking /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: utcRedeemedAt: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: firstName: lastName: emailAddress: phoneNumber: locales: [] postalCode: country: notes: examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: locales: - en postalCode: country: notes: 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: 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: 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: 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: 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: firstName: lastName: emailAddress: phoneNumber: locales: [] postalCode: country: notes: examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: locales: - en postalCode: country: notes: 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: 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: 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: type: ADULT requiredContactFields: - firstName restrictions: minAge: 18 maxAge: 99 idRequired: false minQuantity: 0 maxQuantity: paxCount: 0 accompaniedBy: [] status: CONFIRMED utcRedeemedAt: contact: fullName: John Doe firstName: John lastName: Doe emailAddress: phoneNumber: locales: - en postalCode: country: notes: ticket: redemptionMethod: DIGITAL utcRedeemedAt: 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: supplierReference: ALG6RQ status: CANCELLED utcCreatedAt: '2022-05-25T11:03:22Z' utcUpdatedAt: '2022-05-25T11:06:24Z' utcExpiresAt: utcRedeemedAt: utcConfirmedAt: productId: '1' product: id: '1' internalName: PPU | OH reference: 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: availabilityLocalStartTimes: - '00:00' cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] optionId: DEFAULT option: id: DEFAULT default: true internalName: DEFAULT reference: availabilityLocalStartTimes: - '00:00' cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: 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: firstName: lastName: emailAddress: phoneNumber: locales: [] country: notes: notes: deliveryMethods: - TICKET - VOUCHER voucher: redemptionMethod: DIGITAL utcRedeemedAt: 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}: 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: utcRedeemedAt: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: firstName: lastName: emailAddress: phoneNumber: locales: [] postalCode: country: notes: examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: locales: - en postalCode: country: notes: 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: 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: 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: 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: 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: firstName: lastName: emailAddress: phoneNumber: locales: [] postalCode: country: notes: examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: locales: - en postalCode: country: notes: 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: 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: 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: type: ADULT requiredContactFields: - firstName restrictions: minAge: 18 maxAge: 99 idRequired: false minQuantity: 0 maxQuantity: paxCount: 0 accompaniedBy: [] status: CONFIRMED utcRedeemedAt: contact: fullName: John Doe firstName: John lastName: Doe emailAddress: phoneNumber: locales: - en postalCode: country: notes: ticket: redemptionMethod: DIGITAL utcRedeemedAt: 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: supplierReference: ALG6RQ status: CONFIRMED utcCreatedAt: '2022-05-25T11:03:22Z' utcUpdatedAt: '2022-05-25T11:03:31Z' utcExpiresAt: utcRedeemedAt: utcConfirmedAt: '2022-05-25T11:03:31Z' productId: '1' product: id: '1' internalName: PPU | OH reference: 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: availabilityLocalStartTimes: - '00:00' cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] optionId: DEFAULT option: id: DEFAULT default: true internalName: DEFAULT reference: availabilityLocalStartTimes: - '00:00' cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] cancellable: true cancellation: 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: locales: [] country: notes: notes: deliveryMethods: - TICKET - VOUCHER voucher: redemptionMethod: DIGITAL utcRedeemedAt: 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: supplierReference: EO6Q0P unit: id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] unitId: adult status: ON_HOLD utcRedeemedAt: contact: fullName: firstName: lastName: emailAddress: phoneNumber: locales: [] country: notes: ticket: redemptionMethod: DIGITAL utcRedeemedAt: 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: utcRedeemedAt: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: firstName: lastName: emailAddress: phoneNumber: locales: [] postalCode: country: notes: examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: locales: - en postalCode: country: notes: 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: 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: 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: 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: 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: firstName: lastName: emailAddress: phoneNumber: locales: [] postalCode: country: notes: examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: locales: - en postalCode: country: notes: 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: 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: 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: type: ADULT requiredContactFields: - firstName restrictions: minAge: 18 maxAge: 99 idRequired: false minQuantity: 0 maxQuantity: paxCount: 0 accompaniedBy: [] status: CONFIRMED utcRedeemedAt: contact: fullName: John Doe firstName: John lastName: Doe emailAddress: phoneNumber: locales: - en postalCode: country: notes: ticket: redemptionMethod: DIGITAL utcRedeemedAt: 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: supplierReference: RNSRSM status: CONFIRMED utcCreatedAt: '2022-05-25T11:07:05Z' utcUpdatedAt: '2022-05-25T11:09:32Z' utcExpiresAt: utcRedeemedAt: utcConfirmedAt: '2022-05-25T11:09:32Z' productId: '1' product: id: '1' internalName: PPU | OH reference: 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: availabilityLocalStartTimes: - '00:00' cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] optionId: DEFAULT option: id: DEFAULT default: true internalName: DEFAULT reference: availabilityLocalStartTimes: - '00:00' cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] cancellable: true cancellation: 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: lastName: emailAddress: test@test.test phoneNumber: locales: [] country: notes: notes: deliveryMethods: - TICKET - VOUCHER voucher: redemptionMethod: DIGITAL utcRedeemedAt: 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: supplierReference: 1LTYVC unit: id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] unitId: adult status: ON_HOLD utcRedeemedAt: contact: fullName: firstName: lastName: emailAddress: phoneNumber: locales: [] country: notes: ticket: redemptionMethod: DIGITAL utcRedeemedAt: 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: supplierReference: A89VR8 unit: id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] unitId: adult status: ON_HOLD utcRedeemedAt: contact: fullName: firstName: lastName: emailAddress: phoneNumber: locales: [] country: notes: ticket: redemptionMethod: DIGITAL utcRedeemedAt: 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. parameters: - schema: type: string name: uuid in: path required: true description: The UUID of the booking /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: utcRedeemedAt: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: firstName: lastName: emailAddress: phoneNumber: locales: [] postalCode: country: notes: examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: locales: - en postalCode: country: notes: 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: 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: 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: 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: 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: firstName: lastName: emailAddress: phoneNumber: locales: [] postalCode: country: notes: examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: locales: - en postalCode: country: notes: 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: 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: 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: type: ADULT requiredContactFields: - firstName restrictions: minAge: 18 maxAge: 99 idRequired: false minQuantity: 0 maxQuantity: paxCount: 0 accompaniedBy: [] status: CONFIRMED utcRedeemedAt: contact: fullName: John Doe firstName: John lastName: Doe emailAddress: phoneNumber: locales: - en postalCode: country: notes: ticket: redemptionMethod: DIGITAL utcRedeemedAt: 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: supplierReference: XOPSUT status: ON_HOLD utcCreatedAt: '2022-05-25T10:34:22Z' utcUpdatedAt: '2022-05-25T10:34:22Z' utcExpiresAt: '2022-05-25T11:04:22Z' utcRedeemedAt: utcConfirmedAt: productId: '1' product: id: '1' internalName: PPU | OH reference: 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: availabilityLocalStartTimes: - '00:00' cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] optionId: DEFAULT option: id: DEFAULT default: true internalName: DEFAULT reference: availabilityLocalStartTimes: - '00:00' cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] cancellable: true cancellation: 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: firstName: lastName: emailAddress: phoneNumber: locales: [] country: notes: notes: deliveryMethods: - TICKET - VOUCHER voucher: redemptionMethod: DIGITAL utcRedeemedAt: deliveryOptions: [] unitItems: - uuid: 6cbd2582-1345-4d8d-8223-ad004beebc1a resellerReference: supplierReference: CBIYWQ unit: id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] unitId: adult status: ON_HOLD utcRedeemedAt: contact: fullName: firstName: lastName: emailAddress: phoneNumber: locales: [] country: notes: ticket: redemptionMethod: DIGITAL utcRedeemedAt: 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: schemas: Product: type: object x-examples: example-1: id: 28ca088b-bc7b-4746-ab06-5971f1ed5a5e internalName: Edinburgh Hop-On Hop-Off Bus Tour reference: 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: 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: 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: 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: 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 Unit: type: object x-examples: example-1: id: unit_c1709f42-297e-4f7e-bd6b-3e77d4622d8a internalName: Adult reference: 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: 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: '' UnitRestrictions: type: object x-examples: example-1: minAge: 0 maxAge: 100 idRequired: false minQuantity: 1 maxQuantity: 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 ContactField: type: string title: ContactField x-stoplight: id: 5qud985l1i6ih enum: - firstName - lastName - emailAddress - phoneNumber - country - notes - locales examples: - firstName description: '' UnitType: 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 OptionRestrictions: 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: 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 Option: type: object x-examples: example-1: id: DEFAULT default: true internalName: DEFAULT reference: 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: 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: 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: 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 DeliveryMethod: 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 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 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 DurationUnit: 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 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 Supplier: type: object x-examples: example-1: id: 697e3ce8-1860-4cbf-80ad-95857df1f640 name: Edin Explore endpoint: https://api.ventrata.com/api-octo contact: website: email: support@ventrata.com telephone: address: Marble Arch, London, W1H 7EJ, United Kingdom examples: - id: 48b4d2e9-cd8b-4ac2-a5ee-4217bf2622c2 name: John Doe's company endpoint: http://example.com contact: website: email: john.doe@email.com telephone: address: properties: id: type: string example: 697e3ce8-1860-4cbf-80ad-95857df1f640 description: Unique identifier used in the platform to represent the supplier. name: type: string description: Name the supplier uses to identify itsel. Usually what the end customer will know the supplier as. example: Edin Explore endpoint: type: string format: uri description: This is the base URL that will be prepended to ALL other paths. The value SHOULD NOT contain a trailing `/`. example: https://api.my-booking-platform.com/v1 contact: type: object required: - website - email - telephone - address properties: website: type: - 'null' - string format: uri description: This SHOULD be the website of the Supplier that is separate from the Booking Platform but MAY be a unique destination within the Booking Platform about the Supplier. example: https://acme-tours.co.fake email: type: - 'null' - string format: email description: The email support contact for the Supplier. example: info@edinexplore.com telephone: type: - 'null' - string description: The phone support contact for the Supplier. example: +1 888-555-1212 address: type: - 'null' - string description: The (snail) mail address support contact for the Supplier. example: 123 Fake St. Springfield, USA required: - id - name - endpoint - contact Availability: type: object x-examples: example-1: id: '2022-05-23T00:00:00+01:00' localDateTimeStart: '2022-05-23T00:00:00+01:00' localDateTimeEnd: '2022-05-24T00:00:00+01:00' allDay: true available: true status: FREESALE vacancies: capacity: maxUnits: 9 utcCutoffAt: '2022-05-22T23:00:00Z' openingHours: - from: '08:00' to: '18:30' examples: - id: '2022-06-30T00:00:00+01:00' localDateTimeStart: '2022-06-30T00:00:00+01:00' localDateTimeEnd: '2022-07-01T00:00:00+01:00' allDay: true available: true status: FREESALE vacancies: capacity: maxUnits: utcCutoffAt: '2022-06-29T22:00:00Z' openingHours: - from: '09:00' to: '17:00' - id: '2022-06-30T12:00:00+01:00' localDateTimeStart: '2022-06-30T12:00:00+01:00' localDateTimeEnd: '2022-06-30T14:00:00+01:00' allDay: false available: true status: AVAILABLE vacancies: 10 capacity: 10 maxUnits: utcCutoffAt: '2022-06-30T10:00:00Z' openingHours: [] title: '' description: Schema for the `/avalibility/calendar` endpoint. It's designed to be queried for large date ranges and the result is used to populate an availability calendar. properties: id: type: string example: '2022-05-23T00:00:00+01:00' description: The availability id, you''ll need this when booking. MUST be a unique identifier within the scope of an option. localDateTimeStart: type: string example: '2022-05-23T00:00:00+01:00' description: The start time for this availability. This will be in the local time zone of the product. Must be an `ISO 8601` compliant date and time. format: date-time localDateTimeEnd: type: string example: '2022-05-24T00:00:00+01:00' description: The end time for this availability. This will be in the local time zone of the product. Must be an `ISO 8601` compliant date and time. format: date-time allDay: type: boolean description: A boolean field indicating whether this is an all day availability and not a fixed departure time. If this value is true then there will be no other availability object on the same day. available: type: boolean description: Whether there is availability for this date / slot. status: type: string title: AvailabilityStatus x-stoplight: id: tmiby64nsmjy8 enum: - AVAILABLE - FREESALE - SOLD_OUT - LIMITED - CLOSED description: |- The status of that date. Possible values are: `AVAILABLE` This availability is available for sale `FREESALE` This availability has no capacity and is available. `SOLD_OUT` There are no more spots available for this date / slot. `LIMITED` This availability is available but has less than 50% capacity left. `CLOSED` Availability is closed for this day / slot. example: AVAILABLE examples: - AVAILABLE vacancies: type: - integer - 'null' example: 10 description: This SHOULD NOT be returned when status is `FREESALE`. This SHOULD be a shared pool for all Unit types in the Option. If availability is tracked per-Unit then this value MUST be equal to the available quantity for the Unit that has the most remaining. capacity: type: - integer - 'null' example: 10 description: The total capacity on this day. maxUnits: type: - integer - 'null' example: 10 description: Maximum number of units that can be sold within one booking on this day / slot. utcCutoffAt: type: string example: '2022-05-22T23:00:00Z' description: 'The time by which the booking must be confirmed at ' openingHours: type: array 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' required: - id - localDateTimeStart - localDateTimeEnd - allDay - available - status - vacancies - capacity - maxUnits - utcCutoffAt - openingHours AvailabilityStatus: type: string title: AvailabilityStatus x-stoplight: id: tmiby64nsmjy8 enum: - AVAILABLE - FREESALE - SOLD_OUT - LIMITED - CLOSED description: |- The status of that date. Possible values are: `AVAILABLE` This availability is available for sale `FREESALE` This availability has no capacity and is available. `SOLD_OUT` There are no more spots available for this date / slot. `LIMITED` This availability is available but has less than 50% capacity left. `CLOSED` Availability is closed for this day / slot. example: AVAILABLE examples: - AVAILABLE AvailabilityCalendar: type: object x-examples: example-1: localDate: '2022-05-12' available: false status: CLOSED vacancies: 0 capacity: openingHours: - from: '08:00' to: '18:30' examples: - localDate: '2022-05-12' available: true status: AVAILABLE vacancies: 10 capacity: 10 openingHours: - from: '08:00' to: '16:00' description: Schema for the `/avalibility/calendar` endpoint. For querying general open slots per day on a large range of days versus availability per departure time. properties: localDate: type: string example: '2022-05-12' description: A single date to query. Must be ISO 8601 compliant date. format: date available: type: boolean description: Whether there is availability for this date / slot. status: type: string title: AvailabilityStatus x-stoplight: id: tmiby64nsmjy8 enum: - AVAILABLE - FREESALE - SOLD_OUT - LIMITED - CLOSED description: |- The status of that date. Possible values are: `AVAILABLE` This availability is available for sale `FREESALE` This availability has no capacity and is available. `SOLD_OUT` There are no more spots available for this date / slot. `LIMITED` This availability is available but has less than 50% capacity left. `CLOSED` Availability is closed for this day / slot. example: AVAILABLE examples: - AVAILABLE vacancies: type: - integer - 'null' example: 10 description: This SHOULD NOT be returned when status is `FREESALE`. This SHOULD be a shared pool for all Unit types in the Option. If availability is tracked per-Unit then this value MUST be equal to the available quantity for the Unit that has the most remaining. capacity: type: - integer - 'null' example: 10 description: The total capacity on this day. openingHours: type: array 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' required: - localDate - available - status - vacancies - capacity - openingHours OpeningHours: 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' BookingStatus: 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 UnitItem: 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: 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: 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: firstName: lastName: emailAddress: phoneNumber: locales: [] postalCode: country: notes: examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: locales: - en postalCode: country: notes: 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: 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: 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: type: ADULT requiredContactFields: - firstName restrictions: minAge: 18 maxAge: 99 idRequired: false minQuantity: 0 maxQuantity: paxCount: 0 accompaniedBy: [] status: CONFIRMED utcRedeemedAt: contact: fullName: John Doe firstName: John lastName: Doe emailAddress: phoneNumber: locales: - en postalCode: country: notes: ticket: redemptionMethod: DIGITAL utcRedeemedAt: deliveryOptions: - deliveryFormat: QRCODE deliveryValue: string Ticket: type: object x-examples: example-1: redemptionMethod: DIGITAL utcRedeemedAt: 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: 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: '' Contact: type: object x-examples: example-1: fullName: firstName: lastName: emailAddress: phoneNumber: locales: [] postalCode: country: notes: examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: locales: - en postalCode: country: notes: 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. Booking: 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: utcRedeemedAt: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: firstName: lastName: emailAddress: phoneNumber: locales: [] postalCode: country: notes: examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: locales: - en postalCode: country: notes: 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: 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: 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: 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: 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: firstName: lastName: emailAddress: phoneNumber: locales: [] postalCode: country: notes: examples: - fullName: John Doe firstName: John lastName: Doe emailAddress: johndoe@email.com phoneNumber: locales: - en postalCode: country: notes: 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: 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: 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: type: ADULT requiredContactFields: - firstName restrictions: minAge: 18 maxAge: 99 idRequired: false minQuantity: 0 maxQuantity: paxCount: 0 accompaniedBy: [] status: CONFIRMED utcRedeemedAt: contact: fullName: John Doe firstName: John lastName: Doe emailAddress: phoneNumber: locales: - en postalCode: country: notes: ticket: redemptionMethod: DIGITAL utcRedeemedAt: 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: AvailabilityOpeningHours: value: - id: '2022-06-30T00:00:00+01:00' localDateTimeStart: '2022-06-30T00:00:00+01:00' localDateTimeEnd: '2022-07-01T00:00:00+01:00' allDay: true available: true status: FREESALE vacancies: capacity: maxUnits: utcCutoffAt: '2022-06-29T22:00:00Z' openingHours: - from: '09:00' to: '17:00' AvailabilityStartTimes: value: - id: '2022-06-30T12:00:00+01:00' localDateTimeStart: '2022-06-30T12:00:00+01:00' localDateTimeEnd: '2022-06-30T14:00:00+01:00' allDay: false available: true status: AVAILABLE vacancies: 10 capacity: 10 maxUnits: utcCutoffAt: '2022-06-30T10:00:00Z' openingHours: [] - id: '2022-06-30T14:00:00+01:00' localDateTimeStart: '2022-06-30T14:00:00+01:00' localDateTimeEnd: '2022-06-30T16:00:00+01:00' allDay: false available: true status: AVAILABLE vacancies: 10 capacity: 10 maxUnits: utcCutoffAt: '2022-06-30T12:00:00Z' openingHours: [] AvailabilityCalendarOpeningHours: value: - localDate: '2022-06-14' available: true status: FREESALE vacancies: capacity: openingHours: - from: '09:00' to: '17:00' - localDate: '2022-06-15' available: true status: FREESALE vacancies: capacity: openingHours: - from: '09:00' to: '17:00' - localDate: '2022-06-16' available: true status: FREESALE vacancies: capacity: openingHours: - from: '09:00' to: '17:00' AvailabilityCalendarStartTimes: value: - localDate: '2022-06-14' available: true status: AVAILABLE vacancies: 20 capacity: 20 openingHours: [] - localDate: '2022-06-15' available: true status: AVAILABLE vacancies: 10 capacity: 10 openingHours: [] - localDate: '2022-06-16' available: true status: AVAILABLE vacancies: 10 capacity: 10 openingHours: [] ErrorInvalidProductID: value: error: INVALID_PRODUCT_ID errorMessage: The productId was missing or invalid productId: cc2a6d56-6efe-426f-99c9-6eb10e341565 ErrorInvalidOptionID: value: error: INVALID_OPTION_ID errorMessage: The optionId was missing or invalid optionId: 681fea0f-196e-45da-bec7-467bfacb1d87 ErrorInvalidUnitID: value: error: INVALID_UNIT_ID errorMessage: The unitId was missing or invalid unitId: senior ErrorInvalidAvailabilityID: value: error: INVALID_AVAILABILITY_ID errorMessage: The availabilityId was missing or invalid availabilityId: '2022-03-12T00:00:00+00:00' ErrorForbidden: value: error: FORBIDDEN errorMessage: You sent an API Key that was invalid or has been revoked by the backend system. Or you're trying to access an endpoint/resource that you do not have access to ErrorInternalServerError: value: error: INTERNAL_SERVER_ERROR errorMessage: There was an un-recoverable error, please try again ErrorUnprocessableEntity: 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 ErrorUnauthorized: value: error: UNAUTHORIZED errorMessage: You didn't send the API Key in the Authorization header to an endpoint that requires authentication ErrorInvalidBookingUUID: value: error: INVALID_BOOKING_UUID errorMessage: The uuid was already used, missing or invalid uuid: bbbb6227-54fc-4c32-9ed7-dc3eb99966ea BookingOnHold: value: id: 602a9fdf-5c79-4984-9474-7e14da9b6027 uuid: a88b4b8d-9c3b-4a09-ba27-323b43af57e4 testMode: true resellerReference: supplierReference: XOPSUT status: ON_HOLD utcCreatedAt: '2022-05-25T10:34:22Z' utcUpdatedAt: '2022-05-25T10:34:22Z' utcExpiresAt: '2022-05-25T11:04:22Z' utcRedeemedAt: utcConfirmedAt: productId: '1' product: id: '1' internalName: PPU | OH reference: 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: availabilityLocalStartTimes: - '00:00' cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] optionId: DEFAULT option: id: DEFAULT default: true internalName: DEFAULT reference: availabilityLocalStartTimes: - '00:00' cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] cancellable: true cancellation: 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: firstName: lastName: emailAddress: phoneNumber: locales: [] country: notes: notes: deliveryMethods: - TICKET - VOUCHER voucher: redemptionMethod: DIGITAL utcRedeemedAt: deliveryOptions: [] unitItems: - uuid: 6cbd2582-1345-4d8d-8223-ad004beebc1a resellerReference: supplierReference: CBIYWQ unit: id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] unitId: adult status: ON_HOLD utcRedeemedAt: contact: fullName: firstName: lastName: emailAddress: phoneNumber: locales: [] country: notes: ticket: redemptionMethod: DIGITAL utcRedeemedAt: deliveryOptions: [] BookingConfirmed: value: id: 3ac5450f-8511-4386-9feb-17ce4f9e1f86 uuid: ec0ce0c2-03f0-4c64-bbc5-5e0f7d1e1c0a testMode: true resellerReference: supplierReference: ALG6RQ status: CONFIRMED utcCreatedAt: '2022-05-25T11:03:22Z' utcUpdatedAt: '2022-05-25T11:03:31Z' utcExpiresAt: utcRedeemedAt: utcConfirmedAt: '2022-05-25T11:03:31Z' productId: '1' product: id: '1' internalName: PPU | OH reference: 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: availabilityLocalStartTimes: - '00:00' cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] optionId: DEFAULT option: id: DEFAULT default: true internalName: DEFAULT reference: availabilityLocalStartTimes: - '00:00' cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] cancellable: true cancellation: 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: locales: [] country: notes: notes: deliveryMethods: - TICKET - VOUCHER voucher: redemptionMethod: DIGITAL utcRedeemedAt: 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: supplierReference: EO6Q0P unit: id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] unitId: adult status: ON_HOLD utcRedeemedAt: contact: fullName: firstName: lastName: emailAddress: phoneNumber: locales: [] country: notes: ticket: redemptionMethod: DIGITAL utcRedeemedAt: 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 BookingCancelled: value: id: 3ac5450f-8511-4386-9feb-17ce4f9e1f86 uuid: ec0ce0c2-03f0-4c64-bbc5-5e0f7d1e1c0a testMode: true resellerReference: supplierReference: ALG6RQ status: CANCELLED utcCreatedAt: '2022-05-25T11:03:22Z' utcUpdatedAt: '2022-05-25T11:06:24Z' utcExpiresAt: utcRedeemedAt: utcConfirmedAt: productId: '1' product: id: '1' internalName: PPU | OH reference: 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: availabilityLocalStartTimes: - '00:00' cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] optionId: DEFAULT option: id: DEFAULT default: true internalName: DEFAULT reference: availabilityLocalStartTimes: - '00:00' cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: 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: firstName: lastName: emailAddress: phoneNumber: locales: [] country: notes: notes: deliveryMethods: - TICKET - VOUCHER voucher: redemptionMethod: DIGITAL utcRedeemedAt: deliveryOptions: [] unitItems: [] BookingUpdated: value: id: 3ef65048-5ffe-474f-8a5c-fb35a9faa6ed uuid: 814d2566-2c71-4e6a-aaa9-59b9bf26cc0d testMode: true resellerReference: supplierReference: RNSRSM status: CONFIRMED utcCreatedAt: '2022-05-25T11:07:05Z' utcUpdatedAt: '2022-05-25T11:09:32Z' utcExpiresAt: utcRedeemedAt: utcConfirmedAt: '2022-05-25T11:09:32Z' productId: '1' product: id: '1' internalName: PPU | OH reference: 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: availabilityLocalStartTimes: - '00:00' cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] optionId: DEFAULT option: id: DEFAULT default: true internalName: DEFAULT reference: availabilityLocalStartTimes: - '00:00' cancellationCutoff: 0 hours cancellationCutoffAmount: 0 cancellationCutoffUnit: hour requiredContactFields: [] restrictions: minUnits: 0 maxUnits: units: - id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] cancellable: true cancellation: 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: lastName: emailAddress: test@test.test phoneNumber: locales: [] country: notes: notes: deliveryMethods: - TICKET - VOUCHER voucher: redemptionMethod: DIGITAL utcRedeemedAt: 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: supplierReference: 1LTYVC unit: id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] unitId: adult status: ON_HOLD utcRedeemedAt: contact: fullName: firstName: lastName: emailAddress: phoneNumber: locales: [] country: notes: ticket: redemptionMethod: DIGITAL utcRedeemedAt: 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: supplierReference: A89VR8 unit: id: adult internalName: adult reference: adult type: ADULT requiredContactFields: [] restrictions: minAge: 18 maxAge: 100 idRequired: false minQuantity: maxQuantity: paxCount: 1 accompaniedBy: [] unitId: adult status: ON_HOLD utcRedeemedAt: contact: fullName: firstName: lastName: emailAddress: phoneNumber: locales: [] country: notes: ticket: redemptionMethod: DIGITAL utcRedeemedAt: 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 responses: GetSupplierError: description: Example response content: application/json: schema: type: object additionalProperties: false properties: error: type: string errorMessage: type: string required: - error - errorMessage examples: Bad Request: value: error: BAD_REQUEST errorMessage: invalid supplier id GetProductError: description: Example response content: application/json: schema: type: object additionalProperties: false properties: error: type: string example: INVALID_PRODUCT_ID errorMessage: type: string example: The productId was missing or invalid productId: type: string example: 7c3eb026-3d36-4981-9c56-28d8a52a54dd examples: Invalid Product ID: value: error: INVALID_PRODUCT_ID errorMessage: The productId was missing or invalid productId: cc2a6d56-6efe-426f-99c9-6eb10e341565 AvailabilityCheckError: description: Example response content: application/json: schema: type: object additionalProperties: false properties: error: type: string errorMessage: type: string productId: type: string optionId: 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 BAD_REQUEST: value: error: BAD_REQUEST errorMessage: either localDate, localDateStart/localDateEnd or availabilityIds is required AvailabilityCalendarError: 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 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 BAD_REQUEST: value: error: BAD_REQUEST errorMessage: cannot request more than 1 year of availability BookingCreateError: 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 BookingListError: 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 BookingCancelError: 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 BookingConfirmError: 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 BookingGetError: 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 BookingExtendError: 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 securitySchemes: Auth: type: http scheme: bearer requestBodies: BookingCancellation: 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: '' ExtendReservation: content: application/json: schema: type: object properties: expirationMinutes: type: integer example: 15 examples: example-1: value: expirationMinutes: 0 BookingUpdate: 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: {} BookingReservation: 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: '' BookingConfirmation: 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: '' security: externalDocs: url: https://docs.octo.travel/ description: OCTO Developer Hub tags: - name: Availability externalDocs: url: https://docs.octo.travel/octo-core/availability description: Docs - externalDocs: description: Docs url: https://docs.octo.travel/octo-core/bookings name: Bookings - name: Products externalDocs: description: Docs url: https://docs.octo.travel/octo-core/products - name: Supplier externalDocs: url: https://docs.octo.travel/octo-core/supplier description: Docs