Open Connectivity for Tours, Activities, and Attractions Products API

The Products API from Open Connectivity for Tours, Activities, and Attractions — 2 operation(s) for products.

OpenAPI Specification

octo-products-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Open Connectivity for Tours, Activities, and Attractions OCTO API Specification Availability Products API
  version: '1.0'
  contact:
    email: sayhello@octo.travel
    url: https://www.octo.travel/contact
    name: OCTO Standards NP Inc
  description: "OCTO (Open Connectivity for Tours, Activities, and Attractions) is an open standard API specification for the in-destination experiences sector of the travel industry. The standard defines agreed-upon schemas, endpoints, and capabilities commonly needed when connecting platforms, resellers, OTAs, and other technologies in tours, activities, and attractions. \n\nOCTO is open source. Available to anyone who wants to use it. You do not need to be a member to use this specification in your business."
servers:
- url: https://api.example.com/octo
tags:
- name: Products
  externalDocs:
    description: Docs
    url: https://docs.octo.travel/octo-core/products
paths:
  /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: null
                      locale: en
                      timeZone: Europe/London
                      allowFreesale: true
                      instantConfirmation: true
                      instantDelivery: true
                      availabilityRequired: false
                  examples:
                  - id: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854
                    internalName: Amazon River Tour
                    reference: AMZN
                    locale: en-GB
                    timeZone: Europe/London
                    allowFreesale: true
                    instantConfirmation: true
                    instantDelivery: true
                    availabilityRequired: true
                    availabilityType: START_TIME
                    deliveryFormats:
                    - QRCODE
                    deliveryMethods:
                    - VOUCHER
                    redemptionMethod: DIGITAL
                    options:
                    - id: DEFAULT
                      default: true
                      internalName: Private Morning Tour
                      reference: VIP-MORN
                      availabilityLocalStartTimes:
                      - 09:00
                      cancellationCutoff: 1 hour
                      cancellationCutoffAmount: 1
                      cancellationCutoffUnit: hour
                      requiredContactFields:
                      - firstName
                      restrictions:
                        minUnits: 'null'
                        maxUnits: 10
                      units:
                      - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640
                        internalName: Adult(s)
                        reference: LR1-01-new
                        type: YOUTH
                        requiredContactFields:
                        - firstName
                        restrictions:
                          minAge: 3
                          maxAge: 17
                          idRequired: true
                          minQuantity: 2
                          maxQuantity: 7
                          paxCount: 1
                          accompaniedBy:
                          - adult_697e3ce8-1860-4cbf-80ad-95857df1f640
                  description: A bookable product listed by a supplier.
                  properties:
                    id:
                      type: string
                      example: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854
                      description: The id used for checking for availability and creating bookings for the product. This MUST be unique within the scope of the Supplier.
                    internalName:
                      type: string
                      description: The name the supplier calls the product.
                      example: Amazon River Tour
                    reference:
                      type:
                      - 'null'
                      - string
                      description: An optional code this supplier might use to identify the product.
                      example: AMZN
                    locale:
                      type: string
                      example: en-GB
                      description: A language code indicating what language this product content is in. This MUST be a valid BCP 47 RFC 5646 RFC 4647 language tag.
                    timeZone:
                      type: string
                      example: Europe/London
                      description: The IANA TimeZone name this product is located in.
                    allowFreesale:
                      type: boolean
                      description: Whether a booking can be made for this product without having to query availability first.
                    instantConfirmation:
                      type: boolean
                      description: Whether bookings will be immediately confirmed when a sale is made, otherwise the supplier will later either accept or reject the booking. When `instantConfirmation` is set to false one should expect created bookings to first get into a `PENDING` state.
                    instantDelivery:
                      type: boolean
                      description: This indicates whether the Reseller can expect immediate delivery of the customer's tickets. If `false` then the Reseller MUST be able to delay delivery of the tickets to the customer.
                    availabilityRequired:
                      type: boolean
                      description: Whether an `availabilityId` is required when creating a booking. Without this the booking will be open-dated and not have a specified travel date.
                    availabilityType:
                      type: string
                      title: AvailabilityType
                      x-stoplight:
                        id: n70vwjh7kvmxk
                      enum:
                      - START_TIME
                      - OPENING_HOURS
                      description: 'What type of availability this product has, possible values are:

                        `START_TIME` if there are fixed departure times which you must pick one. Typical for day tours or activities.

                        `OPENING_HOURS` if you just select a date and can visit any time when the venue is open.'
                      example: START_TIME
                      examples:
                      - START_TIME
                    deliveryFormats:
                      type: array
                      description: 'An array of formats the API will deliver the tickets as. Possible values are:

                        `QRCODE` A code to be presented as a QR CODE barcode

                        `CODE128A` code to be presented as a CODE 128 barcode

                        `PDF_URL` A URL to a PDF file which contains all the ticket details'
                      items:
                        type: string
                        title: DeliveryFormat
                        x-stoplight:
                          id: xo5qi6jemvvhc
                        enum:
                        - PDF_URL
                        - QRCODE
                        description: 'The format for the delivery option possible values are:

                          `QRCODE` You should generate the QR Code yourself on a ticket.

                          `PDF_URL` Where you use the generated tickets as a PDF.'
                        example: QRCODE
                        examples:
                        - QRCODE
                    deliveryMethods:
                      type: array
                      description: 'How the formats described in `deliveryFormats` will be delivered in the booking response, possible values are:

                        `TICKET`: Individually per unit in the order (i.e. single ticket for each person)

                        `VOUCHER`: One ticket for the whole booking'
                      items:
                        type: string
                        title: DeliveryMethod
                        x-stoplight:
                          id: tdh9akr9neqhb
                        enum:
                        - VOUCHER
                        - TICKET
                        description: 'An array of delivery methods available for this booking. Possible values are:

                          `VOUCHER` The voucher object is populated which is a single ticket for the whole booking.

                          `TICKET` The ticket object is populated on each unit item which is a ticket for each individual person.

                          If `booking.deliveryMethods` contains both `TICKET` and `VOUCHER` then both those values will be set.'
                        examples:
                        - VOUCHER
                    redemptionMethod:
                      type: string
                      title: RedemptionMethod
                      x-stoplight:
                        id: jrrh8rbyzfuzm
                      enum:
                      - DIGITAL
                      - PRINT
                      - MANIFEST
                      description: 'How the voucher can be redeemed. Possible values are:

                        `MANIFEST` The guest name will be written down and they just need to show up

                        `DIGITAL` The tickets/voucher must be scanned but can be on mobile

                        `PRINT` The tickets/voucher must be printed and presented on arrival'
                      examples:
                      - DIGITAL
                    options:
                      type: array
                      description: An array of all options for this product. All products must have at least one option.
                      items:
                        type: object
                        x-examples:
                          example-1:
                            id: DEFAULT
                            default: true
                            internalName: DEFAULT
                            reference: null
                            availabilityLocalStartTimes:
                            - 00:00
                            cancellationCutoff: 1 hour
                            cancellationCutoffAmount: 1
                            cancellationCutoffUnit: hour
                            requiredContactFields: []
                        examples:
                        - id: DEFAULT
                          default: true
                          internalName: Private Morning Tour
                          reference: VIP-MORN
                          availabilityLocalStartTimes:
                          - 09:00
                          cancellationCutoff: 1 hour
                          cancellationCutoffAmount: 1
                          cancellationCutoffUnit: hour
                          requiredContactFields:
                          - firstName
                          restrictions:
                            minUnits: 'null'
                            maxUnits: 10
                          units:
                          - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640
                            internalName: Adult(s)
                            reference: LR1-01-new
                            type: YOUTH
                            requiredContactFields:
                            - firstName
                            restrictions:
                              minAge: 3
                              maxAge: 17
                              idRequired: true
                              minQuantity: 2
                              maxQuantity: 7
                              paxCount: 1
                              accompaniedBy:
                              - adult_697e3ce8-1860-4cbf-80ad-95857df1f640
                        description: Product options are subdivisions of the original product that will affect price and / or duration. Within the OCTo spec, every product must contain an option.
                        properties:
                          id:
                            type: string
                            example: DEFAULT
                            description: The id that identifies this option, it is only unique within the product.
                          default:
                            type: boolean
                            description: '`TRUE` identifies the option as default, and should therefore rendered and selected first'
                          internalName:
                            type: string
                            description: The name the supplier calls the option by.
                            example: Private Morning Tour
                          reference:
                            type:
                            - 'null'
                            - string
                            description: An optional code this supplier might use to identify the product.
                            example: VIP-MORN
                          availabilityLocalStartTimes:
                            type: array
                            description: This will be an array of all possible start times that can be returned during availability. For example an all day attraction may have a single value like `["00:00"]` whilst a tour with multiple departure times may have multiple:`["09:00", "14:00", "17:00"]`.
                            items:
                              type: string
                              default: 00:00
                              example: 09:00
                          cancellationCutoff:
                            type: string
                            example: 1 hour
                            description: This is how long before the tour the booking can be still be cancelled.
                          cancellationCutoffAmount:
                            type: integer
                            example: 1
                            description: The numeric amount for the cutoff.
                          cancellationCutoffUnit:
                            type: string
                            title: DurationUnit
                            x-stoplight:
                              id: etuhjhtharyrt
                            enum:
                            - hour
                            - minute
                            - day
                            example: hour
                            description: 'Time units used to determine duration. Three values are available: `hour`, `minute`, `day`.'
                            examples:
                            - hour
                          requiredContactFields:
                            type: array
                            description: An array of the contact fields required to confirm a booking. These just apply to the lead traveller on the booking and not for every ticket.
                            items:
                              type: string
                              title: ContactField
                              x-stoplight:
                                id: 5qud985l1i6ih
                              enum:
                              - firstName
                              - lastName
                              - emailAddress
                              - phoneNumber
                              - country
                              - notes
                              - locales
                              examples:
                              - firstName
                              description: ''
                          restrictions:
                            type: object
                            x-examples:
                              example-1:
                                minUnits: 0
                                maxUnits: 9
                            description: An object containing a fixed list of restrictions for booking the option.
                            examples:
                            - minUnits: null
                              maxUnits: 10
                            properties:
                              minUnits:
                                type:
                                - integer
                                - 'null'
                                example: 0
                                description: The minimum number of tickets that can be purchased in a single booking (null = 0).
                              maxUnits:
                                type:
                                - integer
                                - 'null'
                                example: 10
                                description: The maximum number of tickets that can be purchased in a single booking (null = unlimited).
                            required:
                            - minUnits
                            - maxUnits
                          units:
                            type: array
                            description: The list of ticket types (units) available for sale.
                            items:
                              type: object
                              x-examples:
                                example-1:
                                  id: unit_c1709f42-297e-4f7e-bd6b-3e77d4622d8a
                                  internalName: Adult
                                  reference: null
                                  type: ADULT
                                  requiredContactFields: []
                              examples:
                              - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640
                                internalName: Adult(s)
                                reference: LR1-01-new
                                type: YOUTH
                                requiredContactFields:
                                - firstName
                                restrictions:
                                  minAge: 3
                                  maxAge: 17
                                  idRequired: true
                                  minQuantity: 2
                                  maxQuantity: 7
                                  paxCount: 1
                                  accompaniedBy:
                                  - adult_697e3ce8-1860-4cbf-80ad-95857df1f640
                              properties:
                                id:
                                  type: string
                                  description: This MUST be a unique identifier within the scope of the option.
                                  example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640
                                internalName:
                                  type: string
                                  example: Adult(s)
                                  description: This should be a name to help with identifying the unit. It should NOT be shown to the customer.
                                reference:
                                  type:
                                  - 'null'
                                  - string
                                  description: This is an internal reference identifier that the Supplier wishes to use. It MAY be non-unique.
                                  example: LR1-01-new
                                type:
                                  type: string
                                  title: UnitType
                                  x-stoplight:
                                    id: 9womjjbg9rhr7
                                  enum:
                                  - ADULT
                                  - YOUTH
                                  - CHILD
                                  - INFANT
                                  - FAMILY
                                  - SENIOR
                                  - STUDENT
                                  - MILITARY
                                  - OTHER
                                  examples:
                                  - ADULT
                                  description: This is the base unit type for this unit definition. A value of TRAVELLER MUST only be used in replacement of `ADULT`, `CHILD`, `INFANT`, `YOUTH`, `STUDENT`, or `SENIOR`.
                                  example: YOUTH
                                requiredContactFields:
                                  type: array
                                  description: This is the array of the contact information PER ticket that the supplier expects.
                                  items:
                                    type: string
                                    title: ContactField
                                    x-stoplight:
                                      id: 5qud985l1i6ih
                                    enum:
                                    - firstName
                                    - lastName
                                    - emailAddress
                                    - phoneNumber
                                    - country
                                    - notes
                                    - locales
                                    examples:
                                    - firstName
                                    description: ''
                                restrictions:
                                  type: object
                                  x-examples:
                                    example-1:
                                      minAge: 0
                                      maxAge: 100
                                      idRequired: false
                                      minQuantity: 1
                                      maxQuantity: null
                                      paxCount: 4
                                      accompaniedBy: []
                                  description: unit restrictions
                                  examples:
                                  - minAge: 3
                                    maxAge: 17
                                    idRequired: true
                                    minQuantity: 2
                                    maxQuantity: 7
                                    paxCount: 1
                                    accompaniedBy:
                                    - adult_697e3ce8-1860-4cbf-80ad-95857df1f640
                                  title: UnitRestrictions
                                  properties:
                                    minAge:
                                      type: integer
                                      example: 3
                                      description: This is the minumum age this unit can be sold to
                                    maxAge:
                                      type: integer
                                      example: 17
                                      description: This is the maximum age this unit can be sold to
                                    idRequired:
                                      type: boolean
                                      description: This is whether a form of identification will be required at redemption point (eg. student card)
                                    minQuantity:
                                      type:
                                      - integer
                                      - 'null'
                                      example: 2
                                      description: This is if there is a minimum amount of units to be chosen for purchase (eg. 2)
                                    maxQuantity:
                                      type:
                                      - 'null'
                                      - integer
                                      example: 7
                                      description: This is if there is a maximum amount of units to be chosen for purchase (eg. 7)
                                    paxCount:
                                      type: integer
                                      description: This is the amount of people each unit counts as (eg. family == 4pax)
                                      example: 1
                                    accompaniedBy:
                                      type: array
                                      description: This is if the unit needs to be accompanied by another unit (eg. Infant with Adult)
                                      items:
                                        type: string
                                        example: adult_697e3ce8-1860-4cbf-80ad-95857df1f640
                                  required:
                                  - minAge
                                  - maxAge
                                  - idRequired
                                  - minQuantity
                                  - maxQuantity
                                  - paxCount
                                  - accompaniedBy
                              required:
                              - id
                              - internalName
                              - type
                              - requiredContactFields
                              - restrictions
                              description: ''
                        required:
                        - id
                        - default
                        - internalName
                        - reference
                        - availabilityLocalStartTimes
                        - cancellationCutoff
                        - cancellationCutoffAmount
                        - cancellationCutoffUnit
                        - requiredContactFields
                        - restrictions
                        - units
                  required:
                  - id
                  - internalName
                  - reference
                  - locale
                  - allowFreesale
                  - instantConfirmation
                  - instantDelivery
                  - availabilityRequired
                  - availabilityType
                  - deliveryFormats
                  - deliveryMethods
                  - redemptionMethod
                  - options
      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: null
                    locale: en
                    timeZone: Europe/London
                    allowFreesale: true
                    instantConfirmation: true
                    instantDelivery: true
                    availabilityRequired: false
                examples:
                - id: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854
                  internalName: Amazon River Tour
                  reference: AMZN
                  locale: en-GB
                  timeZone: Europe/London
                  allowFreesale: true
                  instantConfirmation: true
                  instantDelivery: true
                  availabilityRequired: true
                  availabilityType: START_TIME
                  deliveryFormats:
                  - QRCODE
                  deliveryMethods:
                  - VOUCHER
                  redemptionMethod: DIGITAL
                  options:
                  - id: DEFAULT
                    default: true
                    internalName: Private Morning Tour
                    reference: VIP-MORN
                    availabilityLocalStartTimes:
                    - 09:00
                    cancellationCutoff: 1 hour
                    cancellationCutoffAmount: 1
                    cancellationCutoffUnit: hour
                    requiredContactFields:
                    - firstName
                    restrictions:
                      minUnits: 'null'
                      maxUnits: 10
                    units:
                    - id: adult_697e3ce8-1860-4cbf-80ad-95857df1f640
                      internalName: Adult(s)
                      reference: LR1-01-new
                      type: YOUTH
                      requiredContactFields:
                      - firstName
                      restrictions:
                        minAge: 3
                        maxAge: 17
                        idRequired: true
                        minQuantity: 2
                        maxQuantity: 7
                        paxCount: 1
                        accompaniedBy:
                        - adult_697e3ce8-1860-4cbf-80ad-95857df1f640
                description: A bookable product listed by a supplier.
                properties:
                  id:
                    type: string
                    example: 6b903d44-dc24-4ca4-ae71-6bde6c4f4854
                    description: The id used for checking for availability and creating bookings for the product. This MUST be unique within the scope of the Supplier.
                  internalName:
                    type: string
                    description: The name the supplier calls the product.
                    example: Amazon River Tour
                  reference:
                    type:
                    - 'null'
                    - string
                    description: An optional code this supplier might use to identify the product.
                    example: AMZN
                  locale:
                    type: string
                    example: en-GB
                    description: A language code indicating what language this product content is in. This MUST be a valid BCP 47 RFC 5646 RFC 4647 language tag.
                  timeZone:
                    type: string
                    example: Europe/London
                    description: The IANA TimeZone name this product is located in.
                  allowFreesale:
                    type: boolean
                    description: Whether a booking can be made for this product without having to query availability first.
                  instantConfirmation:
                    type: boolean
                    description: Whether bookings will be immediately confirmed when a sale is made, otherwise the supplier will later either accept or reject the booking. When `instantConfirmation` is set to false one should expect created bookings to first get into a `PENDING` state.
                  instantDelivery:
                    type: boolean
                    description: This indicates whether the Reseller can expect immediate delivery of the customer's tickets. If `false` then the Reseller MUST be able to delay delivery of the tickets to the customer.
                  availabilityRequired:
                    type: boolean
                    description: Whether an `availabilityId` is required when creating a booking. Without this the booking will be open-dated and not have a specified travel date.
                  availabilityType:
                    type: string
                    title: AvailabilityType
                    x-stoplight:
                      id: n70vwjh7kvmxk
                    enum:
                    - START_TIME
                    - OPENING_HOURS
                    description: 'What type of availability this product has, possible values are:

                      `START_TIME` if there are fixed departure times which you must pick one. Typical for day tours or activities.

                      `OPENING_HOURS` if you just select a date and can visit any time when the venue is open.'
                    example: START_TIME
                    examples:
      

# --- truncated at 32 KB (50 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/octo/refs/heads/main/openapi/octo-products-api-openapi.yml