Content (v1.3)

v1.3

The Content object provides structured, localized, customer-facing data that can be attached to Suppliers, Products, Rates, and individual price tiers. It is designed for display in your UI and separates rich marketing content from the core transactional fields.

v1.2 partners: Content is a v1.3-only capability. Your existing integration is unaffected. You can adopt it at any time by switching to the /v1.3/ base path.

Requesting Content

Content is not returned by default. To include it, add content=true to any singular GET endpoint:

Examples
Copy

Content is not available on list endpoints (e.g., GET /suppliers or GET /suppliers/{id}/products). Always use the singular endpoint when you need content data.

Filtering by Language

Add the locale= parameter to return only text in specific languages. Accepts a comma-separated list of BCP 47 language tags:

Example
Copy

If locale= is omitted, all available language variants are returned.

Priority Rule

When content is present in a response, its values must take priority over the equivalent standard entity fields for display purposes.

The name / internalName, title, and description fields on the main entities - Supplier, Product, Rate, and Rate Prices - are treated as standard fields, not content fields.

Suppliers who do not implement content capability may continue using these fields.

If a Supplier does use content, then they can use the content.name, content.title, and content.description fields to provide additional languages, alternative formats, or to override the values on the main entities.

Fall back to the standard fields only when a specific content field is absent or empty. Never display both side by side - content is the authoritative source for customer-facing text when present.

LocalizedTextSet

Content fields use the LocalizedTextSet pattern to support multi-lingual and multi-format content.

FieldFormatDescription
textstringThe content string
formatenumThe content format. Allowed values: plaintext, html, markdown
localestringThis MUST be a valid BCP 47 RFC 5646 RFC 4647 language tag

LocalizedText

Represents a single text entry in a specific language and format. If a supplier provides this object, all its internal fields (text, format, and locale) are mandatory.

LocalizedTextSet

A collection of LocalizedText objects. While a set can contain multiple entries to accommodate various locales and formats, each locale + format combination must be unique within a single LocalizedTextSet. The system will reject duplicate combinations from the Supplier side.

Example
Copy

Content Object Field

FieldTypeDescriptionNotes
idstringUnique identifier for this content object. Used to reference and manage content independently of the parent entity.Required to be populated by the Supplier if content is provided.
nameLocalizedTextSetName the Supplier uses for internal identificationOptional for the Supplier to populate.
titleLocalizedTextSetCustomer-facing name, intended for display in UIs or marketing.Optional for the Supplier to populate.
subtitleLocalizedTextSetBrief tagline or descriptive phrase that complements the title and highlights key details.Optional for the Supplier to populate.
descriptionLocalizedTextSetFull long-form description. This content is intended for display in full detail pages and should help users understand what makes the Supplier/Product/Rate unique.Optional for the Supplier to populate.
shortDescriptionLocalizedTextSetBrief teaser text. Intended for quick display in listings, search results, or previews to attract user interest.Optional for the Supplier to populate.
categoriesLocalizedTextSetList of tags or labels that classify the content by type or theme. Useful for search, filtering, and categorization in UI and APIs.Optional for the Supplier to populate.
durationDurationDefines how long the product or experience takes. Useful for setting customer expectations and supporting filters.Optional for the Supplier to populate.
features[]Features[]Captures structured highlights, inclusions, exclusions, and policy-related aspects of the experience. Each item is categorized using a predefined type enum for clarity and filtering, defining how that information should be interpreted and displayed.Optional for the Supplier to populate.
faqs[]Faqs[]Represents a frequently asked question and its answer, intended to inform customers about common concerns or clarifications.Optional for the Supplier to populate.
media[]Media[]Images, videos, and external media links. Intended to enhance the customer experience by showcasing visual or multimedia content relevant to the activity or location. Public accessibility is required from the Supplier.Optional for the Supplier to populate.
ratings[]Ratings[]A list of rating sets from various sources. Useful for showing aggregated scores from review platforms.Optional for the Supplier to populate.
reviews[]Reviews[]User-generated reviews, feedback, and testimonials.Optional for the Supplier to populate.
metadataMetadataAdditional system-level metadata related to this content, such as timestamps or internal bookkeeping fields.Optional for the Supplier to populate.

Categories

Help classify and organize content into easily searchable and filterable themes. They provide semantic tags that describe the type of experience, audience, or context - making it easier for resellers and end users to discover relevant content.

The current beta-categories extension key is a supplemental extension for grouping related products (e.g., MUSICAL, PLAY, COMEDY, SPORTS). New content categories will not be mapped into beta-categories. Suppliers can continue using them for now, but they will be deprecated in the future, and categories must then be provided through the categories array of objects in the content.

Example
Copy

Duration

Defines how long the product or experience takes. Combines a numeric length, a time unit, and an optional localized description for display. Useful for setting customer expectations and supporting filters like "half-day", "multi-day", etc.

FieldTypeDescriptionNotes
lengthnumberNumeric duration value expressed in the specified unit. Can include decimal values (e.g., "1.5 for 1 hour 30 minutes")Required to be populated by the Supplier if duration is provided.
flexiblebooleanIf true, the duration is an estimate (e.g., "approx 3 hours"). If false, the duration is fixed (e.g., a _"45-minute show_").Optional for the Supplier to populate.
unitstring (enum) [ minutes, hours, days, weeks ]Unit of time used to interpret the duration length. Note: The API does not validate the combination of length + unit. Any value submitted will be accepted and displayed as-is, even if it results in unusual or non-standard durations (e.g., "_0.37"_ days or `"````1.87 minutes"```).Required to be populated by the Supplier if duration is provided.
descriptionLocalizedTextSetCustomer-facing, localized explanation of the duration, such as _"Approximately 2.5 hours including breaks"_.Optional for the Supplier to populate.
Example
Copy

FAQs

Stores Frequently Asked Questions and Answers relevant to the Supplier, Product, Option/Rate, or Unit/Rate Price. This helps anticipate common customer concerns and reduces friction during booking or usage.

If an FAQ is provided, the Supplier must populate both question and answer. Additionally, for a given locale, the Supplier must ensure the question and its corresponding answer use the same locale and format values.

FieldTypeDescriptionNotes
questionLocalizedTextSetThe customer-facing question.Required to be populated by the Supplier if faqs is provided.
answerLocalizedTextSetThe clear and concise answer to the corresponding question.Required to be populated by the Supplier if faqs is provided.
Example
Copy

Features

Captures structured highlights, inclusions, exclusions, and policy-related aspects of the experience. Each item is categorized using a predefined type enum for clarity and filtering, defining how that information should be interpreted and displayed.

We currently allow duplicate feature types within the features array. This means you may include multiple entries with the same type (e.g., more than one HIGHLIGHT).

FieldTypeDescriptionNotes
typestring (enum)Classification of the feature.Required to be populated by the Supplier if feature is provided.
descriptionLocalizedTextSetA localized explanation or label for the feature, to be displayed to end users in their preferred language.Required to be populated by the Supplier if feature is provided.

Feature Types

TypeDescriptionExample
INCLUSIONWhat is included in the experience, entitlements, services, or perks."Mobile app access for all participants"
EXCLUSIONWhat is not included, or costs that may apply additionally."Food and drinks not included in the ticket price"
HIGHLIGHTA key selling point, unique aspect, or experience standout. Usually shown as a badge or bullet in UI."Explore famous landmarks in a gamified scavenger hunt"
PREBOOKING_INFORMATIONInformation users should know before booking. Includes eligibility, requirements, limitations."Players must have a smartphone with internet access"
PREARRIVAL_INFORMATIONWhat users need to know or prepare before arriving at the location."Arrive 10 minutes early to check in and download the app"
REDEMPTION_INSTRUCTIONSteps required to begin or redeem the experience. Useful for self-guided, ticketed, or app-based activities."Start your quest by launching the app at the designated starting point"
ACCESSIBILITY_INFORMATIONNotes about accessibility features or limitations. e.g., mobility, hearing, or visual support.Thi__s tour is wheelchair accessible and includes step-free routes"
ADDITIONAL_INFORMATIONOther useful details not covered by another category. Typically supplementary or nice-to-know content."We recommend wearing comfortable walking shoes"
BOOKING_TERMS_AND_CONDITIONSRules or terms related to ticket validity, age restrictions, or group limits."Ticket valid for 7 days from purchase"
CANCELLATION_TERMS_AND_CONDITIONSPolicy about refunds or cancellations, including cut-off times."Full refund available up to 24 hours before start time"
TERMS_AND_CONDITIONSGeneral or overarching legal agreements, user obligations, and liability waivers governing the entire experience."By purchasing a ticket, participants agree to our standard liability waiver"
RESTRICTION_REQUIREMENTStrict physical, health, or legal mandates that participants must meet to join the experience."Participants must be at least 12 years old and over 120cm tall"
SAFETY_INFORMATIONGuidelines, hazards, or health advisories to ensure participant well-being during the activity."Not recommended for pregnant travelers or those with serious medical conditions"
PRIVATEIndicates whether the option or experience is private or shared with other public participants."This is a private tour, meaning your group will have a dedicated guide"
COMMENTARYDescribes narrative elements, guides, or storytelling that may be part of the experience."Includes audio narration at key landmarks, voiced by a local historian"
OTHERCatch-all for any uncategorized or partner-specific feature content."Includes souvenir digital photo upon completion"
Example
Copy

Media

Provides images, videos, logos, or other rich media assets that represent the Supplier, Product, Option/Rate, or Unit/Rate Price. Media helps enhance visual storytelling and improve user engagement. Public accessibility is required from the Supplier.

FieldTypeDescriptionNotes
urlstringDirect link to the media asset (image, video, etc.).

Required to be populated by the Supplier if media is provided.

Public accessibility is required from the Supplier. The url is validated for correct HTTP/HTTPS format, but Travel Curious does not check if the resource is public or reachable.

^https?:\/\/(?:[\w-]+\.)+[\w-]+(?::\d+)?(?:\/[^\s])?(?:\?[^\s])?$

typestring (enum)The media file type.Required to be populated by the Supplier if media is provided.
relationshipstring (enum)Describes how the media relates to the object. Examples: "logo" (Supplier branding), "cover" (hero image for product), "gallery" (set of supplementary visuals). Helps clients render or prioritize media appropriately.Required to be populated by the Supplier if media is provided.
titleLocalizedTextSetLocalized title for the media asset, useful for accessibility or alt text.Optional for the Supplier to populate.
captionLocalizedTextSetLocalized caption displayed alongside the media (e.g., "View from the summit at sunrise").Optional for the Supplier to populate.
copyrightLocalizedTextSetLocalized copyright information (e.g., "© 2025 Adventure Co.").Optional for the Supplier to populate.
creditsLocalizedTextSetLocalized attribution for creators or sources (e.g., "Photo by John Smith").Optional for the Supplier to populate.
metadataLocalizedTextSetOptional localized metadata, tags, or notes about the media. Useful for additional display context or search indexing.Optional for the Supplier to populate.

Media Types

TypeDescription
image/jpegJPEG image
image/pngPNG image
image/webpWebP image
image/svg+xmlSVG vector image
video/mp4MP4 hosted video
video/aviAVI hosted video
external/youtubeYouTube embedded URL video
external/vimeoVimeo embedded video
external/otherOther hosted or embedded video
application/pdfPDF document

Media Relationships

RelationshipsDescription
LOGOBrand mark for the Supplier - typically used in headers and search results
COVERHero or banner image - used as the primary visual for detail pages
GALLERYSupplementary images - intended for display in a secondary position, often as part of a browsable image carousel or collection, to offer more context than the COVER image alone.
OTHERUncategorized media - a general-purpose type for miscellaneous attachments like instructional diagrams, technical charts, or other supporting documents.
Example
Copy

Ratings

Aggregates review scores from sources like Google, TripAdvisor, Yelp, etc. This provides social proof, helping users quickly evaluate the quality and reliability of the experience.

Rating Aggregate

FieldTypeDescriptionNotes
sourceLocalizedTextSetLocalized name of the review platform or source (e.g., _"TripAdvisor"_, _"Google Reviews"_).Required to be populated by the Supplier if ratings is provided.
averageRatingThe average rating value (e.g., 1-5).Required to be populated by the Supplier if ratings is provided.
countintegerTotal number of ratings that contributed to the average. Must be non-negative values (integer ≥ 0).Required to be populated by the Supplier if ratings is provided.
lastUpdatedstring($date-time)Timestamp of the last time the rating data was refreshed. Format: ISO 8601 (e.g., "2025-06-25T10:00:00Z").Optional for the Supplier to populate.

Rating

FieldTypeDescriptionNotes
valuenumberRating value.Required to be populated by the Supplier if rating is provided.
minintegerMinimum possible rating.Required to be populated by the Supplier if rating is provided.
maxintegerMaximum possible rating.Required to be populated by the Supplier if rating is provided.
Example
Copy

Reviews

Captures written customer testimonials or feedback. These reviews reflect real user sentiment and provide qualitative insights for potential buyers.

FieldTypeDescriptionNotes
reviewerNameLocalizedTextSetLocalized display name or alias of the reviewer (e.g., _"Alice T."_, _"Traveler from Berlin"_). Used for presentation only; not required for anonymous reviews.Optional for the Supplier to populate.
titleLocalizedTextSetLocalized title or headline of the review (e.g., _"Amazing experience!"_). Useful for summarizing experience sentiment.Optional for the Supplier to populate.
contentLocalizedTextSetLocalized full review content describing the customer’s experience.Required to be populated by the Supplier if review is provided.
sourceLocalizedTextSetLocalized name of the review platform or source (e.g., _"TripAdvisor"_, _"Google Reviews"_).Optional for the Supplier to populate.
ratingRatingAggregates review scoresOptional for the Supplier to populate.
createdAtstring($date-time)Timestamp of when the review was created. Useful for sorting and freshness. Format: ISO 8601 (e.g., "2025-06-25T14:20:00Z").Optional for the Supplier to populate.
verifiedbooleanIndicates whether the review is from a verified booking or customer. Helps establish credibility and trust.Optional for the Supplier to populate.
Example
Copy

Metadata

Additional system-level metadata related to this content, such as timestamps or internal bookkeeping fields.

Use lastUpdated to determine whether a cached Content object needs to be refreshed.

FieldTypeDescriptionNotes
lastUpdatedstring($date-time)Timestamp indicating when the record was last updated.Optional for the Supplier to populate.
Example
Copy

Content by Entity

Not all fields are populated at every level. Content is enrichment data, not guaranteed data. Always check for the presence of each field before rendering it.

The sections below are just examples of what each entity can typically carry.

Supplier

Typical content fields: name, title, description, media (logo and gallery), ratings, reviews, faqs .

Example response (abbreviated):

Example
Copy

Product

Typical content fields: All fields - name, title, subtitle, description, shortDescription, categories, duration, features, faqs, media, ratings, reviews

Example
Copy

Rate

Typical content fields:

Example
Copy

RatePrice / TravelerType

Typical content fields: name, description

Example
Copy
VariableType to search · ESC to discard
GlossaryType to search · ESC to discard
InsertType to search · ESC to discard
No matches