Content (In Review)
Adds extra content fields to OCTO Core object schemas on select endpoints to provide detailed descriptive information about supplier, products, options, units, booking, etc.
Updated: Apr 23, 2025
This new proposed capability is currently undergoing Member and Public review.
We'd love to hear your feedback on this draft! Use the #content-capability-development channel on OCTO Slack.
To use this capability, add content
to your Octo-Capabilities
header.
This capability extends the Supplier, Product, Option, Unit, Availability, and Booking schemas to add additional descriptive content that can be used to populate product listings as well as for various other use cases that require this information.
Localization
Since suppliers and their systems may offer content in different languages, this content capability supports localization through:
the
Accept-Language
request headerthe
Content-Language
response headerand the
Available-Languages
response header
This allows clients to request and receive content in their preferred languages, and understand what language options are available for a product.
Request Headers
The reseller system can include language preferences in the API call to the supplier system to request content in a specific language. The Accept-Language
header communicates which languages are preferred and in what order. This header is optional—if omitted or empty, the supplier system will fall back to their default language:
Accept-Language
Optional
en-US
, en-GB
, fr-CA;q=0.8
, fr;q=0.7
Response Headers
The supplier system response may include headers that indicate the language of the returned content and the set of available language options. These help reseller systems interpret the response and determine if additional requests are needed for other languages. When the content
capability is used, both Content-Language
and Available-Languages
headers must be present in the response:
Content-Language
Required
en-GB
Available-Languages
Required
Lists all languages in which the content is available. Not a standard HTTP header, but widely used in APIs for localization awareness. Helps determine language options without making extra requests. Must follow BCP 47 standards.
en-GB
, es-ES
, de-DE
Example Headers with Localization:
Request
Response
Additional Content Fields
The content
capability enriches standard OCTO Core objects with additional, language-specific content such as titles, descriptions, and other localized attributes.
When the capability content
is included in the Octo-Capabilities
header of a request to any OCTO Core endpoint, and if the supplier system supports this capability, the following objects may include additional fields:
Supplier
Product
Option
Unit
Availability
Booking
These enrichments are dynamically included in the response based on language preferences provided in the request (via Accept-Language
) and the available translations on the supplier side.
Each object’s additional fields will be detailed in the following sections below:
Supplier
These fields provide localized, customer-facing information and rich media assets. They are returned only when:
The supplier supports the
content
capabilityThe request includes the header:
Octo-Capabilities: content
Enriched Fields (from content
Capability)
content
Capability)shortDescription
string | null
A brief, customer-facing summary of the supplier’s business. Can be localized. May be null
if not available.
media
array of objects
A list of associated media objects such as logos, promotional images, or videos. Each object contains metadata to support display and attribution.
media[]
Object Fields
type
string (enum)
Format of the media. Supported types include: image/jpeg
, image/png
, image/webp
, image/svg+xml
, video/mp4
, video/avi
, external/youtube
, external/vimeo
, external/other
, application/pdf
.
rel
string (enum)
Defines the relationship of the media to the supplier. Values: LOGO
, COVER
, GALLERY
.
src
string (uri)
The URL of the media file. Must be stable and publicly accessible.
title
string | null
Title or label of the media file. Useful for organizational or display purposes.
caption
string | null
A customer-facing caption that provides additional context or information about the media.
copyright
string | null
Copyright or usage restrictions, such as attribution or licensing notes. Can be null
if no restrictions apply.
Example: Supplier Object with content
Capability Fields:
content
Capability Fields:Product
They enhance the product with localized titles, descriptions, rich media, features, FAQs, category labels, durations, commentary, and location data to help resellers provide a complete, customer-facing product view.
These fields are returned when:
The supplier supports the
content
capabilityThe request includes the header:
Octo-Capabilities: content
Enriched Fields (from content
Capability)
content
Capability)title
string
Public, customer-facing name of the product.
shortDescription
string | null
Brief marketing summary.
description
string | null
Long-form product narrative.
features[]
array
List of structured features grouped by type.
features[].shortDescription
string | null
Short label for the feature.
features[].type
string (enum)
One of: INCLUSION
, EXCLUSION
, HIGHLIGHT
, PREBOOKING_INFORMATION
, PREARRIVAL_INFORMATION
, REDEMPTION_INSTRUCTION
, ACCESSIBILITY_INFORMATION
, ADDITIONAL_INFORMATION
, BOOKING_TERM
, CANCELLATION_TERM
.
faqs[]
array
Frequently asked questions.
faqs[].question
string
The question text.
faqs[].answer
string
The corresponding answer.
media[]
array
List of media assets (images, PDFs, videos, etc.).
media[].src
string (uri)
URL of the media file.
media[].type
string (enum)
One of: image/jpeg
, image/png
, image/webp
, image/svg+xml
, video/mp4
, video/avi
, external/youtube
, external/vimeo
, external/other
, application/pdf
.
media[].rel
string (enum)
One of: LOGO
, COVER
, GALLERY
.
media[].title
string | null
Title of the media.
media[].caption
string | null
Customer-facing caption.
media[].copyright
string | null
Copyright or license information.
locations[]
array
List of places associated with the product.
locations[].title
string | null
Name of the location.
locations[].shortDescription
string | null
Short description of the location.
locations[].types[]
array
One or more of: START
, ITINERARY_ITEM
, POINT_OF_INTEREST
, ADMISSION_INCLUDED
, END
, REDEMPTION
.
locations[].minutesTo
integer | null
Minutes to reach this location from the previous. Required for ITINERARY_ITEM
or END
.
locations[].minutesAt
integer | null
Minutes spent at this location. Required for ITINERARY_ITEM
or END
.
locations[].place
object
Detailed geographic and address information.
place.latitude
float
Latitude in decimal degrees.
place.longitude
float
Longitude in decimal degrees.
place.postalAddress
object
Postal address object.
postalAddress.streetAddress
string | null
Street line.
postalAddress.addressLocality
string | null
City.
postalAddress.addressRegion
string | null
Region or state.
postalAddress.postalCode
string | null
ZIP or postal code.
postalAddress.addressCountry
string | null (ISO 3166-1 alpha-2)
Two-letter country code.
postalAddress.postOfficeBoxNumber
string | null
PO box if available.
place.identifiers[]
array
Third-party platform identifiers.
identifiers.<identifierType>
string
Source platform (e.g., googlePlaceId
).
identifiers.<identifierValue>
string
ID value from the source.
place.sameAs[]
array
URLs for social or external location pages.
categoryLabels[]
array
Tags such as skip-the-line
, wheelchair-accessible
.
durationMinutesFrom
integer
Minimum or exact duration in minutes.
durationMinutesTo
integer | null
Maximum duration if flexible; null if fixed.
commentary[]
array
Commentary formats and languages.
commentary[].format
string (enum)
One of: IN_PERSON
, RECORDED_AUDIO
, WRITTEN
, OTHER
.
commentary[].language
string (IETF BCP 47 tag)
Language code (e.g., en-GB
, fr-FR
).
defaultCurrency
string (ISO 4217 alpha code)
Default currency of the product. Returned with octo/pricing
capability.
availableCurrencies
array
List of supported currencies. Returned with octo/pricing
capability.
pricingPer
array (enum: UNIT, BOOKING)
Defines whether pricing is per unit or per booking. Returned with octo/pricing
capability.
Example: Product Object with content
and pricing
Capabilities
content
and pricing
CapabilitiesOption
The following fields are added to the OCTO Core Option object when the content
capability is supported and requested.
⚠️ Content Field Reuse Across Levels
Certain
content
fields such asfeatures
,faqs
,media
,locations
,categoryLabels
, andcommentary
are intentionally repeated across the Product and Option levels.Implementer supplier systems must return these fields only at the most appropriate level (product or option) depending on the relevance of the content.
Reseller systems are expected to concatenate or display these fields according to their presentation logic, combining product-level and option-level data where suitable.
Enriched Fields (from content
Capability)
content
Capability)title
string
Public, customer-facing name of the option.
shortDescription
string | null
A brief summary of the option. May be null.
description
string | null
A detailed description of the option, highlighting experience-specific details.
features[]
array (feature object)
Customer-facing feature details specific to this option.
features[].shortDescription
string | null
Short summary of a feature (e.g., "Fast Track entry included").
features[].type
string (enum)
One of: INCLUSION, EXCLUSION, HIGHLIGHT, PREBOOKING_INFORMATION, PREARRIVAL_INFORMATION, REDEMPTION_INSTRUCTION, ACCESSIBILITY_INFORMATION, ADDITIONAL_INFORMATION, BOOKING_TERM, CANCELLATION_TERM.
faqs[]
array (faq object)
Option-specific questions and answers to clarify expectations.
faqs[].question
string
The question text.
faqs[].answer
string
Answer text providing clarity or support.
media[]
array (media object)
Images or videos specific to the option, if applicable.
media[].src
string (uri)
Stable, publicly accessible URL pointing to the media file.
media[].type
string (enum: image/jpeg, image/png, video/mp4, video/avi, external/youtube, external/vimeo)
Format of the media.
media[].rel
string (enum: LOGO, COVER, GALLERY)
The relation of this media to the option (branding, cover, gallery).
media[].title
string | null
Optional title or identifier.
media[].caption
string | null
Caption shown alongside the media asset, if any.
media[].copyright
string | null
Copyright notice or license info, if required.
Unit
The following fields are added to the OCTO Core Unit object when the content
capability is supported and requested:
Enriched Fields (from content
Capability)
content
Capability)title
string
Customer-facing name of the unit (e.g., "Adult", "Student").
shortDescription
string | null
Brief summary describing the unit's eligibility or characteristics.
features[]
array (feature object)
Features specific to this unit, such as inclusions, exclusions, or safety notes.
features[].shortDescription
string
A short, clear label describing the unit-specific feature.
features[].type
string (enum: INCLUSION, EXCLUSION, HIGHLIGHT, MUST_KNOW, SAFETY_INFORMATION, REDEMPTION_INSTRUCTIONS, ADDITIONAL_INFORMATION)
Categorizes the feature for display and filtering.
Availability
The following fields are added to the OCTO Core Availability object when the content
capability is supported and requested.
title
string | null
Public-facing name for the availability slot. Can be null when not applicable.
shortDescription
string | null
A brief summary description of the availability window or conditions.
Last updated
Was this helpful?